OSDN Git Service

PR c++/27804
[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   tree context;
11461   int was_abstract = DECL_ABSTRACT (decl);
11462
11463   /* Make sure we have the actual abstract inline, not a clone.  */
11464   decl = DECL_ORIGIN (decl);
11465
11466   old_die = lookup_decl_die (decl);
11467   if (old_die && get_AT (old_die, DW_AT_inline))
11468     /* We've already generated the abstract instance.  */
11469     return;
11470
11471   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11472      we don't get confused by DECL_ABSTRACT.  */
11473   if (debug_info_level > DINFO_LEVEL_TERSE)
11474     {
11475       context = decl_class_context (decl);
11476       if (context)
11477         gen_type_die_for_member
11478           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11479     }
11480
11481   /* Pretend we've just finished compiling this function.  */
11482   save_fn = current_function_decl;
11483   current_function_decl = decl;
11484
11485   set_decl_abstract_flags (decl, 1);
11486   dwarf2out_decl (decl);
11487   if (! was_abstract)
11488     set_decl_abstract_flags (decl, 0);
11489
11490   current_function_decl = save_fn;
11491 }
11492
11493 /* Helper function of premark_used_types() which gets called through
11494    htab_traverse_resize().
11495
11496    Marks the DIE of a given type in *SLOT as perennial, so it never gets
11497    marked as unused by prune_unused_types.  */
11498 static int
11499 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
11500 {
11501   tree type;
11502   dw_die_ref die;
11503
11504   type = *slot;
11505   die = lookup_type_die (type);
11506   if (die != NULL)
11507     die->die_perennial_p = 1;
11508   return 1;
11509 }
11510
11511 /* Mark all members of used_types_hash as perennial.  */
11512 static void
11513 premark_used_types (void)
11514 {
11515   if (cfun && cfun->used_types_hash)
11516     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
11517 }
11518
11519 /* Generate a DIE to represent a declared function (either file-scope or
11520    block-local).  */
11521
11522 static void
11523 gen_subprogram_die (tree decl, dw_die_ref context_die)
11524 {
11525   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11526   tree origin = decl_ultimate_origin (decl);
11527   dw_die_ref subr_die;
11528   tree fn_arg_types;
11529   tree outer_scope;
11530   dw_die_ref old_die = lookup_decl_die (decl);
11531   int declaration = (current_function_decl != decl
11532                      || class_or_namespace_scope_p (context_die));
11533
11534   premark_used_types();
11535
11536   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11537      started to generate the abstract instance of an inline, decided to output
11538      its containing class, and proceeded to emit the declaration of the inline
11539      from the member list for the class.  If so, DECLARATION takes priority;
11540      we'll get back to the abstract instance when done with the class.  */
11541
11542   /* The class-scope declaration DIE must be the primary DIE.  */
11543   if (origin && declaration && class_or_namespace_scope_p (context_die))
11544     {
11545       origin = NULL;
11546       gcc_assert (!old_die);
11547     }
11548
11549   /* Now that the C++ front end lazily declares artificial member fns, we
11550      might need to retrofit the declaration into its class.  */
11551   if (!declaration && !origin && !old_die
11552       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
11553       && !class_or_namespace_scope_p (context_die)
11554       && debug_info_level > DINFO_LEVEL_TERSE)
11555     old_die = force_decl_die (decl);
11556
11557   if (origin != NULL)
11558     {
11559       gcc_assert (!declaration || local_scope_p (context_die));
11560
11561       /* Fixup die_parent for the abstract instance of a nested
11562          inline function.  */
11563       if (old_die && old_die->die_parent == NULL)
11564         add_child_die (context_die, old_die);
11565
11566       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11567       add_abstract_origin_attribute (subr_die, origin);
11568     }
11569   else if (old_die)
11570     {
11571       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11572       unsigned file_index = lookup_filename (s.file);
11573
11574       if (!get_AT_flag (old_die, DW_AT_declaration)
11575           /* We can have a normal definition following an inline one in the
11576              case of redefinition of GNU C extern inlines.
11577              It seems reasonable to use AT_specification in this case.  */
11578           && !get_AT (old_die, DW_AT_inline))
11579         {
11580           /* Detect and ignore this case, where we are trying to output
11581              something we have already output.  */
11582           return;
11583         }
11584
11585       /* If the definition comes from the same place as the declaration,
11586          maybe use the old DIE.  We always want the DIE for this function
11587          that has the *_pc attributes to be under comp_unit_die so the
11588          debugger can find it.  We also need to do this for abstract
11589          instances of inlines, since the spec requires the out-of-line copy
11590          to have the same parent.  For local class methods, this doesn't
11591          apply; we just use the old DIE.  */
11592       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11593           && (DECL_ARTIFICIAL (decl)
11594               || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
11595                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
11596                       == (unsigned) s.line))))
11597         {
11598           subr_die = old_die;
11599
11600           /* Clear out the declaration attribute and the formal parameters.
11601              Do not remove all children, because it is possible that this
11602              declaration die was forced using force_decl_die(). In such
11603              cases die that forced declaration die (e.g. TAG_imported_module)
11604              is one of the children that we do not want to remove.  */
11605           remove_AT (subr_die, DW_AT_declaration);
11606           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11607         }
11608       else
11609         {
11610           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11611           add_AT_specification (subr_die, old_die);
11612           if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11613             add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
11614           if (get_AT_unsigned (old_die, DW_AT_decl_line)
11615               != (unsigned) s.line)
11616             add_AT_unsigned
11617               (subr_die, DW_AT_decl_line, s.line);
11618         }
11619     }
11620   else
11621     {
11622       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11623
11624       if (TREE_PUBLIC (decl))
11625         add_AT_flag (subr_die, DW_AT_external, 1);
11626
11627       add_name_and_src_coords_attributes (subr_die, decl);
11628       if (debug_info_level > DINFO_LEVEL_TERSE)
11629         {
11630           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11631           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11632                               0, 0, context_die);
11633         }
11634
11635       add_pure_or_virtual_attribute (subr_die, decl);
11636       if (DECL_ARTIFICIAL (decl))
11637         add_AT_flag (subr_die, DW_AT_artificial, 1);
11638
11639       if (TREE_PROTECTED (decl))
11640         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11641       else if (TREE_PRIVATE (decl))
11642         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11643     }
11644
11645   if (declaration)
11646     {
11647       if (!old_die || !get_AT (old_die, DW_AT_inline))
11648         {
11649           add_AT_flag (subr_die, DW_AT_declaration, 1);
11650
11651           /* The first time we see a member function, it is in the context of
11652              the class to which it belongs.  We make sure of this by emitting
11653              the class first.  The next time is the definition, which is
11654              handled above.  The two may come from the same source text.
11655
11656              Note that force_decl_die() forces function declaration die. It is
11657              later reused to represent definition.  */
11658           equate_decl_number_to_die (decl, subr_die);
11659         }
11660     }
11661   else if (DECL_ABSTRACT (decl))
11662     {
11663       if (DECL_DECLARED_INLINE_P (decl))
11664         {
11665           if (cgraph_function_possibly_inlined_p (decl))
11666             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11667           else
11668             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11669         }
11670       else
11671         {
11672           if (cgraph_function_possibly_inlined_p (decl))
11673             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11674           else
11675             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11676         }
11677
11678       equate_decl_number_to_die (decl, subr_die);
11679     }
11680   else if (!DECL_EXTERNAL (decl))
11681     {
11682       HOST_WIDE_INT cfa_fb_offset;
11683
11684       if (!old_die || !get_AT (old_die, DW_AT_inline))
11685         equate_decl_number_to_die (decl, subr_die);
11686
11687       if (!flag_reorder_blocks_and_partition)
11688         {
11689           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11690                                        current_function_funcdef_no);
11691           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11692           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11693                                        current_function_funcdef_no);
11694           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11695           
11696           add_pubname (decl, subr_die);
11697           add_arange (decl, subr_die);
11698         }
11699       else
11700         {  /* Do nothing for now; maybe need to duplicate die, one for
11701               hot section and ond for cold section, then use the hot/cold
11702               section begin/end labels to generate the aranges...  */
11703           /*
11704             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
11705             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
11706             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
11707             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
11708
11709             add_pubname (decl, subr_die);
11710             add_arange (decl, subr_die);
11711             add_arange (decl, subr_die);
11712            */
11713         }
11714
11715 #ifdef MIPS_DEBUGGING_INFO
11716       /* Add a reference to the FDE for this routine.  */
11717       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11718 #endif
11719
11720       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
11721
11722       /* We define the "frame base" as the function's CFA.  This is more
11723          convenient for several reasons: (1) It's stable across the prologue
11724          and epilogue, which makes it better than just a frame pointer,
11725          (2) With dwarf3, there exists a one-byte encoding that allows us
11726          to reference the .debug_frame data by proxy, but failing that,
11727          (3) We can at least reuse the code inspection and interpretation
11728          code that determines the CFA position at various points in the
11729          function.  */
11730       /* ??? Use some command-line or configury switch to enable the use
11731          of dwarf3 DW_OP_call_frame_cfa.  At present there are no dwarf
11732          consumers that understand it; fall back to "pure" dwarf2 and
11733          convert the CFA data into a location list.  */
11734       {
11735         dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
11736         if (list->dw_loc_next)
11737           add_AT_loc_list (subr_die, DW_AT_frame_base, list);
11738         else
11739           add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
11740       }
11741
11742       /* Compute a displacement from the "steady-state frame pointer" to
11743          the CFA.  The former is what all stack slots and argument slots
11744          will reference in the rtl; the later is what we've told the 
11745          debugger about.  We'll need to adjust all frame_base references
11746          by this displacement.  */
11747       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
11748
11749       if (cfun->static_chain_decl)
11750         add_AT_location_description (subr_die, DW_AT_static_link,
11751                  loc_descriptor_from_tree (cfun->static_chain_decl));
11752     }
11753
11754   /* Now output descriptions of the arguments for this function. This gets
11755      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11756      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11757      `...' at the end of the formal parameter list.  In order to find out if
11758      there was a trailing ellipsis or not, we must instead look at the type
11759      associated with the FUNCTION_DECL.  This will be a node of type
11760      FUNCTION_TYPE. If the chain of type nodes hanging off of this
11761      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11762      an ellipsis at the end.  */
11763
11764   /* In the case where we are describing a mere function declaration, all we
11765      need to do here (and all we *can* do here) is to describe the *types* of
11766      its formal parameters.  */
11767   if (debug_info_level <= DINFO_LEVEL_TERSE)
11768     ;
11769   else if (declaration)
11770     gen_formal_types_die (decl, subr_die);
11771   else
11772     {
11773       /* Generate DIEs to represent all known formal parameters.  */
11774       tree arg_decls = DECL_ARGUMENTS (decl);
11775       tree parm;
11776
11777       /* When generating DIEs, generate the unspecified_parameters DIE
11778          instead if we come across the arg "__builtin_va_alist" */
11779       for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11780         if (TREE_CODE (parm) == PARM_DECL)
11781           {
11782             if (DECL_NAME (parm)
11783                 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11784                             "__builtin_va_alist"))
11785               gen_unspecified_parameters_die (parm, subr_die);
11786             else
11787               gen_decl_die (parm, subr_die);
11788           }
11789
11790       /* Decide whether we need an unspecified_parameters DIE at the end.
11791          There are 2 more cases to do this for: 1) the ansi ... declaration -
11792          this is detectable when the end of the arg list is not a
11793          void_type_node 2) an unprototyped function declaration (not a
11794          definition).  This just means that we have no info about the
11795          parameters at all.  */
11796       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11797       if (fn_arg_types != NULL)
11798         {
11799           /* This is the prototyped case, check for....  */
11800           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11801             gen_unspecified_parameters_die (decl, subr_die);
11802         }
11803       else if (DECL_INITIAL (decl) == NULL_TREE)
11804         gen_unspecified_parameters_die (decl, subr_die);
11805     }
11806
11807   /* Output Dwarf info for all of the stuff within the body of the function
11808      (if it has one - it may be just a declaration).  */
11809   outer_scope = DECL_INITIAL (decl);
11810
11811   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11812      a function.  This BLOCK actually represents the outermost binding contour
11813      for the function, i.e. the contour in which the function's formal
11814      parameters and labels get declared. Curiously, it appears that the front
11815      end doesn't actually put the PARM_DECL nodes for the current function onto
11816      the BLOCK_VARS list for this outer scope, but are strung off of the
11817      DECL_ARGUMENTS list for the function instead.
11818
11819      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11820      the LABEL_DECL nodes for the function however, and we output DWARF info
11821      for those in decls_for_scope.  Just within the `outer_scope' there will be
11822      a BLOCK node representing the function's outermost pair of curly braces,
11823      and any blocks used for the base and member initializers of a C++
11824      constructor function.  */
11825   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11826     {
11827       /* Emit a DW_TAG_variable DIE for a named return value.  */
11828       if (DECL_NAME (DECL_RESULT (decl)))
11829         gen_decl_die (DECL_RESULT (decl), subr_die);
11830
11831       current_function_has_inlines = 0;
11832       decls_for_scope (outer_scope, subr_die, 0);
11833
11834 #if 0 && defined (MIPS_DEBUGGING_INFO)
11835       if (current_function_has_inlines)
11836         {
11837           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11838           if (! comp_unit_has_inlines)
11839             {
11840               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11841               comp_unit_has_inlines = 1;
11842             }
11843         }
11844 #endif
11845     }
11846   /* Add the calling convention attribute if requested.  */
11847   add_calling_convention_attribute (subr_die, TREE_TYPE (decl));
11848
11849 }
11850
11851 /* Generate a DIE to represent a declared data object.  */
11852
11853 static void
11854 gen_variable_die (tree decl, dw_die_ref context_die)
11855 {
11856   tree origin = decl_ultimate_origin (decl);
11857   dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
11858
11859   dw_die_ref old_die = lookup_decl_die (decl);
11860   int declaration = (DECL_EXTERNAL (decl)
11861                      /* If DECL is COMDAT and has not actually been
11862                         emitted, we cannot take its address; there
11863                         might end up being no definition anywhere in
11864                         the program.  For example, consider the C++
11865                         test case:
11866
11867                           template <class T>
11868                           struct S { static const int i = 7; };
11869
11870                           template <class T>
11871                           const int S<T>::i;
11872
11873                           int f() { return S<int>::i; }
11874                           
11875                         Here, S<int>::i is not DECL_EXTERNAL, but no
11876                         definition is required, so the compiler will
11877                         not emit a definition.  */  
11878                      || (TREE_CODE (decl) == VAR_DECL
11879                          && DECL_COMDAT (decl) && !TREE_ASM_WRITTEN (decl))
11880                      || class_or_namespace_scope_p (context_die));
11881
11882   if (origin != NULL)
11883     add_abstract_origin_attribute (var_die, origin);
11884
11885   /* Loop unrolling can create multiple blocks that refer to the same
11886      static variable, so we must test for the DW_AT_declaration flag.
11887
11888      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
11889      copy decls and set the DECL_ABSTRACT flag on them instead of
11890      sharing them.
11891
11892      ??? Duplicated blocks have been rewritten to use .debug_ranges.
11893
11894      ??? The declare_in_namespace support causes us to get two DIEs for one
11895      variable, both of which are declarations.  We want to avoid considering
11896      one to be a specification, so we must test that this DIE is not a
11897      declaration.  */
11898   else if (old_die && TREE_STATIC (decl) && ! declaration
11899            && get_AT_flag (old_die, DW_AT_declaration) == 1)
11900     {
11901       /* This is a definition of a C++ class level static.  */
11902       add_AT_specification (var_die, old_die);
11903       if (DECL_NAME (decl))
11904         {
11905           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11906           unsigned file_index = lookup_filename (s.file);
11907
11908           if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11909             add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
11910
11911           if (get_AT_unsigned (old_die, DW_AT_decl_line)
11912               != (unsigned) s.line)
11913
11914             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
11915         }
11916     }
11917   else
11918     {
11919       add_name_and_src_coords_attributes (var_die, decl);
11920       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
11921                           TREE_THIS_VOLATILE (decl), context_die);
11922
11923       if (TREE_PUBLIC (decl))
11924         add_AT_flag (var_die, DW_AT_external, 1);
11925
11926       if (DECL_ARTIFICIAL (decl))
11927         add_AT_flag (var_die, DW_AT_artificial, 1);
11928
11929       if (TREE_PROTECTED (decl))
11930         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
11931       else if (TREE_PRIVATE (decl))
11932         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
11933     }
11934
11935   if (declaration)
11936     add_AT_flag (var_die, DW_AT_declaration, 1);
11937
11938   if (DECL_ABSTRACT (decl) || declaration)
11939     equate_decl_number_to_die (decl, var_die);
11940
11941   if (! declaration && ! DECL_ABSTRACT (decl))
11942     {
11943       add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
11944       add_pubname (decl, var_die);
11945     }
11946   else
11947     tree_add_const_value_attribute (var_die, decl);
11948 }
11949
11950 /* Generate a DIE to represent a label identifier.  */
11951
11952 static void
11953 gen_label_die (tree decl, dw_die_ref context_die)
11954 {
11955   tree origin = decl_ultimate_origin (decl);
11956   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
11957   rtx insn;
11958   char label[MAX_ARTIFICIAL_LABEL_BYTES];
11959
11960   if (origin != NULL)
11961     add_abstract_origin_attribute (lbl_die, origin);
11962   else
11963     add_name_and_src_coords_attributes (lbl_die, decl);
11964
11965   if (DECL_ABSTRACT (decl))
11966     equate_decl_number_to_die (decl, lbl_die);
11967   else
11968     {
11969       insn = DECL_RTL_IF_SET (decl);
11970
11971       /* Deleted labels are programmer specified labels which have been
11972          eliminated because of various optimizations.  We still emit them
11973          here so that it is possible to put breakpoints on them.  */
11974       if (insn
11975           && (LABEL_P (insn)
11976               || ((NOTE_P (insn)
11977                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
11978         {
11979           /* When optimization is enabled (via -O) some parts of the compiler
11980              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11981              represent source-level labels which were explicitly declared by
11982              the user.  This really shouldn't be happening though, so catch
11983              it if it ever does happen.  */
11984           gcc_assert (!INSN_DELETED_P (insn));
11985
11986           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
11987           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
11988         }
11989     }
11990 }
11991
11992 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
11993    attributes to the DIE for a block STMT, to describe where the inlined
11994    function was called from.  This is similar to add_src_coords_attributes.  */
11995
11996 static inline void
11997 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
11998 {
11999   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
12000   unsigned file_index = lookup_filename (s.file);
12001
12002   add_AT_unsigned (die, DW_AT_call_file, file_index);
12003   add_AT_unsigned (die, DW_AT_call_line, s.line);
12004 }
12005
12006 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
12007    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
12008
12009 static inline void
12010 add_high_low_attributes (tree stmt, dw_die_ref die)
12011 {
12012   char label[MAX_ARTIFICIAL_LABEL_BYTES];
12013
12014   if (BLOCK_FRAGMENT_CHAIN (stmt))
12015     {
12016       tree chain;
12017
12018       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
12019
12020       chain = BLOCK_FRAGMENT_CHAIN (stmt);
12021       do
12022         {
12023           add_ranges (chain);
12024           chain = BLOCK_FRAGMENT_CHAIN (chain);
12025         }
12026       while (chain);
12027       add_ranges (NULL);
12028     }
12029   else
12030     {
12031       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
12032                                    BLOCK_NUMBER (stmt));
12033       add_AT_lbl_id (die, DW_AT_low_pc, label);
12034       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
12035                                    BLOCK_NUMBER (stmt));
12036       add_AT_lbl_id (die, DW_AT_high_pc, label);
12037     }
12038 }
12039
12040 /* Generate a DIE for a lexical block.  */
12041
12042 static void
12043 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
12044 {
12045   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
12046
12047   if (! BLOCK_ABSTRACT (stmt))
12048     add_high_low_attributes (stmt, stmt_die);
12049
12050   decls_for_scope (stmt, stmt_die, depth);
12051 }
12052
12053 /* Generate a DIE for an inlined subprogram.  */
12054
12055 static void
12056 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
12057 {
12058   tree decl = block_ultimate_origin (stmt);
12059
12060   /* Emit info for the abstract instance first, if we haven't yet.  We
12061      must emit this even if the block is abstract, otherwise when we
12062      emit the block below (or elsewhere), we may end up trying to emit
12063      a die whose origin die hasn't been emitted, and crashing.  */
12064   dwarf2out_abstract_function (decl);
12065
12066   if (! BLOCK_ABSTRACT (stmt))
12067     {
12068       dw_die_ref subr_die
12069         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
12070
12071       add_abstract_origin_attribute (subr_die, decl);
12072       add_high_low_attributes (stmt, subr_die);
12073       add_call_src_coords_attributes (stmt, subr_die);
12074
12075       decls_for_scope (stmt, subr_die, depth);
12076       current_function_has_inlines = 1;
12077     }
12078   else
12079     /* We may get here if we're the outer block of function A that was
12080        inlined into function B that was inlined into function C.  When
12081        generating debugging info for C, dwarf2out_abstract_function(B)
12082        would mark all inlined blocks as abstract, including this one.
12083        So, we wouldn't (and shouldn't) expect labels to be generated
12084        for this one.  Instead, just emit debugging info for
12085        declarations within the block.  This is particularly important
12086        in the case of initializers of arguments passed from B to us:
12087        if they're statement expressions containing declarations, we
12088        wouldn't generate dies for their abstract variables, and then,
12089        when generating dies for the real variables, we'd die (pun
12090        intended :-)  */
12091     gen_lexical_block_die (stmt, context_die, depth);
12092 }
12093
12094 /* Generate a DIE for a field in a record, or structure.  */
12095
12096 static void
12097 gen_field_die (tree decl, dw_die_ref context_die)
12098 {
12099   dw_die_ref decl_die;
12100
12101   if (TREE_TYPE (decl) == error_mark_node)
12102     return;
12103
12104   decl_die = new_die (DW_TAG_member, context_die, decl);
12105   add_name_and_src_coords_attributes (decl_die, decl);
12106   add_type_attribute (decl_die, member_declared_type (decl),
12107                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
12108                       context_die);
12109
12110   if (DECL_BIT_FIELD_TYPE (decl))
12111     {
12112       add_byte_size_attribute (decl_die, decl);
12113       add_bit_size_attribute (decl_die, decl);
12114       add_bit_offset_attribute (decl_die, decl);
12115     }
12116
12117   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
12118     add_data_member_location_attribute (decl_die, decl);
12119
12120   if (DECL_ARTIFICIAL (decl))
12121     add_AT_flag (decl_die, DW_AT_artificial, 1);
12122
12123   if (TREE_PROTECTED (decl))
12124     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
12125   else if (TREE_PRIVATE (decl))
12126     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
12127
12128   /* Equate decl number to die, so that we can look up this decl later on.  */
12129   equate_decl_number_to_die (decl, decl_die);
12130 }
12131
12132 #if 0
12133 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12134    Use modified_type_die instead.
12135    We keep this code here just in case these types of DIEs may be needed to
12136    represent certain things in other languages (e.g. Pascal) someday.  */
12137
12138 static void
12139 gen_pointer_type_die (tree type, dw_die_ref context_die)
12140 {
12141   dw_die_ref ptr_die
12142     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
12143
12144   equate_type_number_to_die (type, ptr_die);
12145   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12146   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12147 }
12148
12149 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12150    Use modified_type_die instead.
12151    We keep this code here just in case these types of DIEs may be needed to
12152    represent certain things in other languages (e.g. Pascal) someday.  */
12153
12154 static void
12155 gen_reference_type_die (tree type, dw_die_ref context_die)
12156 {
12157   dw_die_ref ref_die
12158     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
12159
12160   equate_type_number_to_die (type, ref_die);
12161   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
12162   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12163 }
12164 #endif
12165
12166 /* Generate a DIE for a pointer to a member type.  */
12167
12168 static void
12169 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
12170 {
12171   dw_die_ref ptr_die
12172     = new_die (DW_TAG_ptr_to_member_type,
12173                scope_die_for (type, context_die), type);
12174
12175   equate_type_number_to_die (type, ptr_die);
12176   add_AT_die_ref (ptr_die, DW_AT_containing_type,
12177                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
12178   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12179 }
12180
12181 /* Generate the DIE for the compilation unit.  */
12182
12183 static dw_die_ref
12184 gen_compile_unit_die (const char *filename)
12185 {
12186   dw_die_ref die;
12187   char producer[250];
12188   const char *language_string = lang_hooks.name;
12189   int language;
12190
12191   die = new_die (DW_TAG_compile_unit, NULL, NULL);
12192
12193   if (filename)
12194     {
12195       add_name_attribute (die, filename);
12196       /* Don't add cwd for <built-in>.  */
12197       if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
12198         add_comp_dir_attribute (die);
12199     }
12200
12201   sprintf (producer, "%s %s", language_string, version_string);
12202
12203 #ifdef MIPS_DEBUGGING_INFO
12204   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
12205      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
12206      not appear in the producer string, the debugger reaches the conclusion
12207      that the object file is stripped and has no debugging information.
12208      To get the MIPS/SGI debugger to believe that there is debugging
12209      information in the object file, we add a -g to the producer string.  */
12210   if (debug_info_level > DINFO_LEVEL_TERSE)
12211     strcat (producer, " -g");
12212 #endif
12213
12214   add_AT_string (die, DW_AT_producer, producer);
12215
12216   if (strcmp (language_string, "GNU C++") == 0)
12217     language = DW_LANG_C_plus_plus;
12218   else if (strcmp (language_string, "GNU Ada") == 0)
12219     language = DW_LANG_Ada95;
12220   else if (strcmp (language_string, "GNU F77") == 0)
12221     language = DW_LANG_Fortran77;
12222   else if (strcmp (language_string, "GNU F95") == 0)
12223     language = DW_LANG_Fortran95;
12224   else if (strcmp (language_string, "GNU Pascal") == 0)
12225     language = DW_LANG_Pascal83;
12226   else if (strcmp (language_string, "GNU Java") == 0)
12227     language = DW_LANG_Java;
12228   else if (strcmp (language_string, "GNU Objective-C") == 0)
12229     language = DW_LANG_ObjC;
12230   else if (strcmp (language_string, "GNU Objective-C++") == 0)
12231     language = DW_LANG_ObjC_plus_plus;
12232   else
12233     language = DW_LANG_C89;
12234
12235   add_AT_unsigned (die, DW_AT_language, language);
12236   return die;
12237 }
12238
12239 /* Generate the DIE for a base class.  */
12240
12241 static void
12242 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
12243 {
12244   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
12245
12246   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
12247   add_data_member_location_attribute (die, binfo);
12248
12249   if (BINFO_VIRTUAL_P (binfo))
12250     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12251
12252   if (access == access_public_node)
12253     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
12254   else if (access == access_protected_node)
12255     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
12256 }
12257
12258 /* Generate a DIE for a class member.  */
12259
12260 static void
12261 gen_member_die (tree type, dw_die_ref context_die)
12262 {
12263   tree member;
12264   tree binfo = TYPE_BINFO (type);
12265   dw_die_ref child;
12266
12267   /* If this is not an incomplete type, output descriptions of each of its
12268      members. Note that as we output the DIEs necessary to represent the
12269      members of this record or union type, we will also be trying to output
12270      DIEs to represent the *types* of those members. However the `type'
12271      function (above) will specifically avoid generating type DIEs for member
12272      types *within* the list of member DIEs for this (containing) type except
12273      for those types (of members) which are explicitly marked as also being
12274      members of this (containing) type themselves.  The g++ front- end can
12275      force any given type to be treated as a member of some other (containing)
12276      type by setting the TYPE_CONTEXT of the given (member) type to point to
12277      the TREE node representing the appropriate (containing) type.  */
12278
12279   /* First output info about the base classes.  */
12280   if (binfo)
12281     {
12282       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
12283       int i;
12284       tree base;
12285
12286       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
12287         gen_inheritance_die (base,
12288                              (accesses ? VEC_index (tree, accesses, i)
12289                               : access_public_node), context_die);
12290     }
12291
12292   /* Now output info about the data members and type members.  */
12293   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
12294     {
12295       /* If we thought we were generating minimal debug info for TYPE
12296          and then changed our minds, some of the member declarations
12297          may have already been defined.  Don't define them again, but
12298          do put them in the right order.  */
12299
12300       child = lookup_decl_die (member);
12301       if (child)
12302         splice_child_die (context_die, child);
12303       else
12304         gen_decl_die (member, context_die);
12305     }
12306
12307   /* Now output info about the function members (if any).  */
12308   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
12309     {
12310       /* Don't include clones in the member list.  */
12311       if (DECL_ABSTRACT_ORIGIN (member))
12312         continue;
12313
12314       child = lookup_decl_die (member);
12315       if (child)
12316         splice_child_die (context_die, child);
12317       else
12318         gen_decl_die (member, context_die);
12319     }
12320 }
12321
12322 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
12323    is set, we pretend that the type was never defined, so we only get the
12324    member DIEs needed by later specification DIEs.  */
12325
12326 static void
12327 gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
12328 {
12329   dw_die_ref type_die = lookup_type_die (type);
12330   dw_die_ref scope_die = 0;
12331   int nested = 0;
12332   int complete = (TYPE_SIZE (type)
12333                   && (! TYPE_STUB_DECL (type)
12334                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
12335   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
12336
12337   if (type_die && ! complete)
12338     return;
12339
12340   if (TYPE_CONTEXT (type) != NULL_TREE
12341       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12342           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
12343     nested = 1;
12344
12345   scope_die = scope_die_for (type, context_die);
12346
12347   if (! type_die || (nested && scope_die == comp_unit_die))
12348     /* First occurrence of type or toplevel definition of nested class.  */
12349     {
12350       dw_die_ref old_die = type_die;
12351
12352       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
12353                           ? DW_TAG_structure_type : DW_TAG_union_type,
12354                           scope_die, type);
12355       equate_type_number_to_die (type, type_die);
12356       if (old_die)
12357         add_AT_specification (type_die, old_die);
12358       else
12359         add_name_attribute (type_die, type_tag (type));
12360     }
12361   else
12362     remove_AT (type_die, DW_AT_declaration);
12363
12364   /* If this type has been completed, then give it a byte_size attribute and
12365      then give a list of members.  */
12366   if (complete && !ns_decl)
12367     {
12368       /* Prevent infinite recursion in cases where the type of some member of
12369          this type is expressed in terms of this type itself.  */
12370       TREE_ASM_WRITTEN (type) = 1;
12371       add_byte_size_attribute (type_die, type);
12372       if (TYPE_STUB_DECL (type) != NULL_TREE)
12373         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
12374
12375       /* If the first reference to this type was as the return type of an
12376          inline function, then it may not have a parent.  Fix this now.  */
12377       if (type_die->die_parent == NULL)
12378         add_child_die (scope_die, type_die);
12379
12380       push_decl_scope (type);
12381       gen_member_die (type, type_die);
12382       pop_decl_scope ();
12383
12384       /* GNU extension: Record what type our vtable lives in.  */
12385       if (TYPE_VFIELD (type))
12386         {
12387           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
12388
12389           gen_type_die (vtype, context_die);
12390           add_AT_die_ref (type_die, DW_AT_containing_type,
12391                           lookup_type_die (vtype));
12392         }
12393     }
12394   else
12395     {
12396       add_AT_flag (type_die, DW_AT_declaration, 1);
12397
12398       /* We don't need to do this for function-local types.  */
12399       if (TYPE_STUB_DECL (type)
12400           && ! decl_function_context (TYPE_STUB_DECL (type)))
12401         VEC_safe_push (tree, gc, incomplete_types, type);
12402     }
12403 }
12404
12405 /* Generate a DIE for a subroutine _type_.  */
12406
12407 static void
12408 gen_subroutine_type_die (tree type, dw_die_ref context_die)
12409 {
12410   tree return_type = TREE_TYPE (type);
12411   dw_die_ref subr_die
12412     = new_die (DW_TAG_subroutine_type,
12413                scope_die_for (type, context_die), type);
12414
12415   equate_type_number_to_die (type, subr_die);
12416   add_prototyped_attribute (subr_die, type);
12417   add_type_attribute (subr_die, return_type, 0, 0, context_die);
12418   gen_formal_types_die (type, subr_die);
12419 }
12420
12421 /* Generate a DIE for a type definition.  */
12422
12423 static void
12424 gen_typedef_die (tree decl, dw_die_ref context_die)
12425 {
12426   dw_die_ref type_die;
12427   tree origin;
12428
12429   if (TREE_ASM_WRITTEN (decl))
12430     return;
12431
12432   TREE_ASM_WRITTEN (decl) = 1;
12433   type_die = new_die (DW_TAG_typedef, context_die, decl);
12434   origin = decl_ultimate_origin (decl);
12435   if (origin != NULL)
12436     add_abstract_origin_attribute (type_die, origin);
12437   else
12438     {
12439       tree type;
12440
12441       add_name_and_src_coords_attributes (type_die, decl);
12442       if (DECL_ORIGINAL_TYPE (decl))
12443         {
12444           type = DECL_ORIGINAL_TYPE (decl);
12445
12446           gcc_assert (type != TREE_TYPE (decl));
12447           equate_type_number_to_die (TREE_TYPE (decl), type_die);
12448         }
12449       else
12450         type = TREE_TYPE (decl);
12451
12452       add_type_attribute (type_die, type, TREE_READONLY (decl),
12453                           TREE_THIS_VOLATILE (decl), context_die);
12454     }
12455
12456   if (DECL_ABSTRACT (decl))
12457     equate_decl_number_to_die (decl, type_die);
12458 }
12459
12460 /* Generate a type description DIE.  */
12461
12462 static void
12463 gen_type_die (tree type, dw_die_ref context_die)
12464 {
12465   int need_pop;
12466
12467   if (type == NULL_TREE || type == error_mark_node)
12468     return;
12469
12470   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12471       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
12472     {
12473       if (TREE_ASM_WRITTEN (type))
12474         return;
12475
12476       /* Prevent broken recursion; we can't hand off to the same type.  */
12477       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
12478
12479       TREE_ASM_WRITTEN (type) = 1;
12480       gen_decl_die (TYPE_NAME (type), context_die);
12481       return;
12482     }
12483
12484   /* We are going to output a DIE to represent the unqualified version
12485      of this type (i.e. without any const or volatile qualifiers) so
12486      get the main variant (i.e. the unqualified version) of this type
12487      now.  (Vectors are special because the debugging info is in the
12488      cloned type itself).  */
12489   if (TREE_CODE (type) != VECTOR_TYPE)
12490     type = type_main_variant (type);
12491
12492   if (TREE_ASM_WRITTEN (type))
12493     return;
12494
12495   switch (TREE_CODE (type))
12496     {
12497     case ERROR_MARK:
12498       break;
12499
12500     case POINTER_TYPE:
12501     case REFERENCE_TYPE:
12502       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
12503          ensures that the gen_type_die recursion will terminate even if the
12504          type is recursive.  Recursive types are possible in Ada.  */
12505       /* ??? We could perhaps do this for all types before the switch
12506          statement.  */
12507       TREE_ASM_WRITTEN (type) = 1;
12508
12509       /* For these types, all that is required is that we output a DIE (or a
12510          set of DIEs) to represent the "basis" type.  */
12511       gen_type_die (TREE_TYPE (type), context_die);
12512       break;
12513
12514     case OFFSET_TYPE:
12515       /* This code is used for C++ pointer-to-data-member types.
12516          Output a description of the relevant class type.  */
12517       gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
12518
12519       /* Output a description of the type of the object pointed to.  */
12520       gen_type_die (TREE_TYPE (type), context_die);
12521
12522       /* Now output a DIE to represent this pointer-to-data-member type
12523          itself.  */
12524       gen_ptr_to_mbr_type_die (type, context_die);
12525       break;
12526
12527     case FUNCTION_TYPE:
12528       /* Force out return type (in case it wasn't forced out already).  */
12529       gen_type_die (TREE_TYPE (type), context_die);
12530       gen_subroutine_type_die (type, context_die);
12531       break;
12532
12533     case METHOD_TYPE:
12534       /* Force out return type (in case it wasn't forced out already).  */
12535       gen_type_die (TREE_TYPE (type), context_die);
12536       gen_subroutine_type_die (type, context_die);
12537       break;
12538
12539     case ARRAY_TYPE:
12540       gen_array_type_die (type, context_die);
12541       break;
12542
12543     case VECTOR_TYPE:
12544       gen_array_type_die (type, context_die);
12545       break;
12546
12547     case ENUMERAL_TYPE:
12548     case RECORD_TYPE:
12549     case UNION_TYPE:
12550     case QUAL_UNION_TYPE:
12551       /* If this is a nested type whose containing class hasn't been written
12552          out yet, writing it out will cover this one, too.  This does not apply
12553          to instantiations of member class templates; they need to be added to
12554          the containing class as they are generated.  FIXME: This hurts the
12555          idea of combining type decls from multiple TUs, since we can't predict
12556          what set of template instantiations we'll get.  */
12557       if (TYPE_CONTEXT (type)
12558           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12559           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12560         {
12561           gen_type_die (TYPE_CONTEXT (type), context_die);
12562
12563           if (TREE_ASM_WRITTEN (type))
12564             return;
12565
12566           /* If that failed, attach ourselves to the stub.  */
12567           push_decl_scope (TYPE_CONTEXT (type));
12568           context_die = lookup_type_die (TYPE_CONTEXT (type));
12569           need_pop = 1;
12570         }
12571       else
12572         {
12573           declare_in_namespace (type, context_die);
12574           need_pop = 0;
12575         }
12576
12577       if (TREE_CODE (type) == ENUMERAL_TYPE)
12578         gen_enumeration_type_die (type, context_die);
12579       else
12580         gen_struct_or_union_type_die (type, context_die);
12581
12582       if (need_pop)
12583         pop_decl_scope ();
12584
12585       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12586          it up if it is ever completed.  gen_*_type_die will set it for us
12587          when appropriate.  */
12588       return;
12589
12590     case VOID_TYPE:
12591     case INTEGER_TYPE:
12592     case REAL_TYPE:
12593     case COMPLEX_TYPE:
12594     case BOOLEAN_TYPE:
12595       /* No DIEs needed for fundamental types.  */
12596       break;
12597
12598     case LANG_TYPE:
12599       /* No Dwarf representation currently defined.  */
12600       break;
12601
12602     default:
12603       gcc_unreachable ();
12604     }
12605
12606   TREE_ASM_WRITTEN (type) = 1;
12607 }
12608
12609 /* Generate a DIE for a tagged type instantiation.  */
12610
12611 static void
12612 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12613 {
12614   if (type == NULL_TREE || type == error_mark_node)
12615     return;
12616
12617   /* We are going to output a DIE to represent the unqualified version of
12618      this type (i.e. without any const or volatile qualifiers) so make sure
12619      that we have the main variant (i.e. the unqualified version) of this
12620      type now.  */
12621   gcc_assert (type == type_main_variant (type));
12622
12623   /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12624      an instance of an unresolved type.  */
12625
12626   switch (TREE_CODE (type))
12627     {
12628     case ERROR_MARK:
12629       break;
12630
12631     case ENUMERAL_TYPE:
12632       gen_inlined_enumeration_type_die (type, context_die);
12633       break;
12634
12635     case RECORD_TYPE:
12636       gen_inlined_structure_type_die (type, context_die);
12637       break;
12638
12639     case UNION_TYPE:
12640     case QUAL_UNION_TYPE:
12641       gen_inlined_union_type_die (type, context_die);
12642       break;
12643
12644     default:
12645       gcc_unreachable ();
12646     }
12647 }
12648
12649 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12650    things which are local to the given block.  */
12651
12652 static void
12653 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12654 {
12655   int must_output_die = 0;
12656   tree origin;
12657   tree decl;
12658   enum tree_code origin_code;
12659
12660   /* Ignore blocks that are NULL.  */
12661   if (stmt == NULL_TREE)
12662     return;
12663
12664   /* If the block is one fragment of a non-contiguous block, do not
12665      process the variables, since they will have been done by the
12666      origin block.  Do process subblocks.  */
12667   if (BLOCK_FRAGMENT_ORIGIN (stmt))
12668     {
12669       tree sub;
12670
12671       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12672         gen_block_die (sub, context_die, depth + 1);
12673
12674       return;
12675     }
12676
12677   /* Determine the "ultimate origin" of this block.  This block may be an
12678      inlined instance of an inlined instance of inline function, so we have
12679      to trace all of the way back through the origin chain to find out what
12680      sort of node actually served as the original seed for the creation of
12681      the current block.  */
12682   origin = block_ultimate_origin (stmt);
12683   origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12684
12685   /* Determine if we need to output any Dwarf DIEs at all to represent this
12686      block.  */
12687   if (origin_code == FUNCTION_DECL)
12688     /* The outer scopes for inlinings *must* always be represented.  We
12689        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
12690     must_output_die = 1;
12691   else
12692     {
12693       /* In the case where the current block represents an inlining of the
12694          "body block" of an inline function, we must *NOT* output any DIE for
12695          this block because we have already output a DIE to represent the whole
12696          inlined function scope and the "body block" of any function doesn't
12697          really represent a different scope according to ANSI C rules.  So we
12698          check here to make sure that this block does not represent a "body
12699          block inlining" before trying to set the MUST_OUTPUT_DIE flag.  */
12700       if (! is_body_block (origin ? origin : stmt))
12701         {
12702           /* Determine if this block directly contains any "significant"
12703              local declarations which we will need to output DIEs for.  */
12704           if (debug_info_level > DINFO_LEVEL_TERSE)
12705             /* We are not in terse mode so *any* local declaration counts
12706                as being a "significant" one.  */
12707             must_output_die = (BLOCK_VARS (stmt) != NULL 
12708                                && (TREE_USED (stmt) 
12709                                    || TREE_ASM_WRITTEN (stmt)
12710                                    || BLOCK_ABSTRACT (stmt)));
12711           else
12712             /* We are in terse mode, so only local (nested) function
12713                definitions count as "significant" local declarations.  */
12714             for (decl = BLOCK_VARS (stmt);
12715                  decl != NULL; decl = TREE_CHAIN (decl))
12716               if (TREE_CODE (decl) == FUNCTION_DECL
12717                   && DECL_INITIAL (decl))
12718                 {
12719                   must_output_die = 1;
12720                   break;
12721                 }
12722         }
12723     }
12724
12725   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12726      DIE for any block which contains no significant local declarations at
12727      all.  Rather, in such cases we just call `decls_for_scope' so that any
12728      needed Dwarf info for any sub-blocks will get properly generated. Note
12729      that in terse mode, our definition of what constitutes a "significant"
12730      local declaration gets restricted to include only inlined function
12731      instances and local (nested) function definitions.  */
12732   if (must_output_die)
12733     {
12734       if (origin_code == FUNCTION_DECL)
12735         gen_inlined_subroutine_die (stmt, context_die, depth);
12736       else
12737         gen_lexical_block_die (stmt, context_die, depth);
12738     }
12739   else
12740     decls_for_scope (stmt, context_die, depth);
12741 }
12742
12743 /* Generate all of the decls declared within a given scope and (recursively)
12744    all of its sub-blocks.  */
12745
12746 static void
12747 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12748 {
12749   tree decl;
12750   tree subblocks;
12751
12752   /* Ignore NULL blocks.  */
12753   if (stmt == NULL_TREE)
12754     return;
12755
12756   if (TREE_USED (stmt))
12757     {
12758       /* Output the DIEs to represent all of the data objects and typedefs
12759          declared directly within this block but not within any nested
12760          sub-blocks.  Also, nested function and tag DIEs have been
12761          generated with a parent of NULL; fix that up now.  */
12762       for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12763         {
12764           dw_die_ref die;
12765           
12766           if (TREE_CODE (decl) == FUNCTION_DECL)
12767             die = lookup_decl_die (decl);
12768           else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12769             die = lookup_type_die (TREE_TYPE (decl));
12770           else
12771             die = NULL;
12772           
12773           if (die != NULL && die->die_parent == NULL)
12774             add_child_die (context_die, die);
12775           /* Do not produce debug information for static variables since
12776              these might be optimized out.  We are called for these later
12777              in cgraph_varpool_analyze_pending_decls. */
12778           if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
12779             ;
12780           else
12781             gen_decl_die (decl, context_die);
12782         }
12783     }
12784
12785   /* If we're at -g1, we're not interested in subblocks.  */
12786   if (debug_info_level <= DINFO_LEVEL_TERSE)
12787     return;
12788
12789   /* Output the DIEs to represent all sub-blocks (and the items declared
12790      therein) of this block.  */
12791   for (subblocks = BLOCK_SUBBLOCKS (stmt);
12792        subblocks != NULL;
12793        subblocks = BLOCK_CHAIN (subblocks))
12794     gen_block_die (subblocks, context_die, depth + 1);
12795 }
12796
12797 /* Is this a typedef we can avoid emitting?  */
12798
12799 static inline int
12800 is_redundant_typedef (tree decl)
12801 {
12802   if (TYPE_DECL_IS_STUB (decl))
12803     return 1;
12804
12805   if (DECL_ARTIFICIAL (decl)
12806       && DECL_CONTEXT (decl)
12807       && is_tagged_type (DECL_CONTEXT (decl))
12808       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12809       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12810     /* Also ignore the artificial member typedef for the class name.  */
12811     return 1;
12812
12813   return 0;
12814 }
12815
12816 /* Returns the DIE for decl.  A DIE will always be returned.  */
12817
12818 static dw_die_ref
12819 force_decl_die (tree decl)
12820 {
12821   dw_die_ref decl_die;
12822   unsigned saved_external_flag;
12823   tree save_fn = NULL_TREE;
12824   decl_die = lookup_decl_die (decl);
12825   if (!decl_die)
12826     {
12827       dw_die_ref context_die;
12828       tree decl_context = DECL_CONTEXT (decl);
12829       if (decl_context)
12830         {
12831           /* Find die that represents this context.  */
12832           if (TYPE_P (decl_context))
12833             context_die = force_type_die (decl_context);
12834           else
12835             context_die = force_decl_die (decl_context);
12836         }
12837       else
12838         context_die = comp_unit_die;
12839
12840       decl_die = lookup_decl_die (decl);
12841       if (decl_die)
12842         return decl_die;
12843
12844       switch (TREE_CODE (decl))
12845         {
12846         case FUNCTION_DECL:
12847           /* Clear current_function_decl, so that gen_subprogram_die thinks
12848              that this is a declaration. At this point, we just want to force
12849              declaration die.  */
12850           save_fn = current_function_decl;
12851           current_function_decl = NULL_TREE;
12852           gen_subprogram_die (decl, context_die);
12853           current_function_decl = save_fn;
12854           break;
12855
12856         case VAR_DECL:
12857           /* Set external flag to force declaration die. Restore it after
12858            gen_decl_die() call.  */
12859           saved_external_flag = DECL_EXTERNAL (decl);
12860           DECL_EXTERNAL (decl) = 1;
12861           gen_decl_die (decl, context_die);
12862           DECL_EXTERNAL (decl) = saved_external_flag;
12863           break;
12864
12865         case NAMESPACE_DECL:
12866           dwarf2out_decl (decl);
12867           break;
12868
12869         default:
12870           gcc_unreachable ();
12871         }
12872
12873       /* We should be able to find the DIE now.  */
12874       if (!decl_die)
12875         decl_die = lookup_decl_die (decl);
12876       gcc_assert (decl_die);
12877     }
12878
12879   return decl_die;
12880 }
12881
12882 /* Returns the DIE for TYPE.  A DIE is always returned.  */
12883
12884 static dw_die_ref
12885 force_type_die (tree type)
12886 {
12887   dw_die_ref type_die;
12888
12889   type_die = lookup_type_die (type);
12890   if (!type_die)
12891     {
12892       dw_die_ref context_die;
12893       if (TYPE_CONTEXT (type))
12894         {
12895           if (TYPE_P (TYPE_CONTEXT (type)))
12896             context_die = force_type_die (TYPE_CONTEXT (type));
12897           else
12898             context_die = force_decl_die (TYPE_CONTEXT (type));
12899         }
12900       else
12901         context_die = comp_unit_die;
12902
12903       type_die = lookup_type_die (type);
12904       if (type_die)
12905         return type_die;
12906       gen_type_die (type, context_die);
12907       type_die = lookup_type_die (type);
12908       gcc_assert (type_die);
12909     }
12910   return type_die;
12911 }
12912
12913 /* Force out any required namespaces to be able to output DECL,
12914    and return the new context_die for it, if it's changed.  */
12915
12916 static dw_die_ref
12917 setup_namespace_context (tree thing, dw_die_ref context_die)
12918 {
12919   tree context = (DECL_P (thing)
12920                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
12921   if (context && TREE_CODE (context) == NAMESPACE_DECL)
12922     /* Force out the namespace.  */
12923     context_die = force_decl_die (context);
12924
12925   return context_die;
12926 }
12927
12928 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
12929    type) within its namespace, if appropriate.
12930
12931    For compatibility with older debuggers, namespace DIEs only contain
12932    declarations; all definitions are emitted at CU scope.  */
12933
12934 static void
12935 declare_in_namespace (tree thing, dw_die_ref context_die)
12936 {
12937   dw_die_ref ns_context;
12938
12939   if (debug_info_level <= DINFO_LEVEL_TERSE)
12940     return;
12941
12942   /* If this decl is from an inlined function, then don't try to emit it in its
12943      namespace, as we will get confused.  It would have already been emitted
12944      when the abstract instance of the inline function was emitted anyways.  */
12945   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
12946     return;
12947
12948   ns_context = setup_namespace_context (thing, context_die);
12949
12950   if (ns_context != context_die)
12951     {
12952       if (DECL_P (thing))
12953         gen_decl_die (thing, ns_context);
12954       else
12955         gen_type_die (thing, ns_context);
12956     }
12957 }
12958
12959 /* Generate a DIE for a namespace or namespace alias.  */
12960
12961 static void
12962 gen_namespace_die (tree decl)
12963 {
12964   dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
12965
12966   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
12967      they are an alias of.  */
12968   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
12969     {
12970       /* Output a real namespace.  */
12971       dw_die_ref namespace_die
12972         = new_die (DW_TAG_namespace, context_die, decl);
12973       add_name_and_src_coords_attributes (namespace_die, decl);
12974       equate_decl_number_to_die (decl, namespace_die);
12975     }
12976   else
12977     {
12978       /* Output a namespace alias.  */
12979
12980       /* Force out the namespace we are an alias of, if necessary.  */
12981       dw_die_ref origin_die
12982         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
12983
12984       /* Now create the namespace alias DIE.  */
12985       dw_die_ref namespace_die
12986         = new_die (DW_TAG_imported_declaration, context_die, decl);
12987       add_name_and_src_coords_attributes (namespace_die, decl);
12988       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
12989       equate_decl_number_to_die (decl, namespace_die);
12990     }
12991 }
12992
12993 /* Generate Dwarf debug information for a decl described by DECL.  */
12994
12995 static void
12996 gen_decl_die (tree decl, dw_die_ref context_die)
12997 {
12998   tree origin;
12999
13000   if (DECL_P (decl) && DECL_IGNORED_P (decl))
13001     return;
13002
13003   switch (TREE_CODE (decl))
13004     {
13005     case ERROR_MARK:
13006       break;
13007
13008     case CONST_DECL:
13009       /* The individual enumerators of an enum type get output when we output
13010          the Dwarf representation of the relevant enum type itself.  */
13011       break;
13012
13013     case FUNCTION_DECL:
13014       /* Don't output any DIEs to represent mere function declarations,
13015          unless they are class members or explicit block externs.  */
13016       if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
13017           && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
13018         break;
13019
13020 #if 0
13021       /* FIXME */
13022       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
13023          on local redeclarations of global functions.  That seems broken.  */
13024       if (current_function_decl != decl)
13025         /* This is only a declaration.  */;
13026 #endif
13027
13028       /* If we're emitting a clone, emit info for the abstract instance.  */
13029       if (DECL_ORIGIN (decl) != decl)
13030         dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
13031
13032       /* If we're emitting an out-of-line copy of an inline function,
13033          emit info for the abstract instance and set up to refer to it.  */
13034       else if (cgraph_function_possibly_inlined_p (decl)
13035                && ! DECL_ABSTRACT (decl)
13036                && ! class_or_namespace_scope_p (context_die)
13037                /* dwarf2out_abstract_function won't emit a die if this is just
13038                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
13039                   that case, because that works only if we have a die.  */
13040                && DECL_INITIAL (decl) != NULL_TREE)
13041         {
13042           dwarf2out_abstract_function (decl);
13043           set_decl_origin_self (decl);
13044         }
13045
13046       /* Otherwise we're emitting the primary DIE for this decl.  */
13047       else if (debug_info_level > DINFO_LEVEL_TERSE)
13048         {
13049           /* Before we describe the FUNCTION_DECL itself, make sure that we
13050              have described its return type.  */
13051           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13052
13053           /* And its virtual context.  */
13054           if (DECL_VINDEX (decl) != NULL_TREE)
13055             gen_type_die (DECL_CONTEXT (decl), context_die);
13056
13057           /* And its containing type.  */
13058           origin = decl_class_context (decl);
13059           if (origin != NULL_TREE)
13060             gen_type_die_for_member (origin, decl, context_die);
13061
13062           /* And its containing namespace.  */
13063           declare_in_namespace (decl, context_die);
13064         }
13065
13066       /* Now output a DIE to represent the function itself.  */
13067       gen_subprogram_die (decl, context_die);
13068       break;
13069
13070     case TYPE_DECL:
13071       /* If we are in terse mode, don't generate any DIEs to represent any
13072          actual typedefs.  */
13073       if (debug_info_level <= DINFO_LEVEL_TERSE)
13074         break;
13075
13076       /* In the special case of a TYPE_DECL node representing the declaration
13077          of some type tag, if the given TYPE_DECL is marked as having been
13078          instantiated from some other (original) TYPE_DECL node (e.g. one which
13079          was generated within the original definition of an inline function) we
13080          have to generate a special (abbreviated) DW_TAG_structure_type,
13081          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  */
13082       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
13083         {
13084           gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
13085           break;
13086         }
13087
13088       if (is_redundant_typedef (decl))
13089         gen_type_die (TREE_TYPE (decl), context_die);
13090       else
13091         /* Output a DIE to represent the typedef itself.  */
13092         gen_typedef_die (decl, context_die);
13093       break;
13094
13095     case LABEL_DECL:
13096       if (debug_info_level >= DINFO_LEVEL_NORMAL)
13097         gen_label_die (decl, context_die);
13098       break;
13099
13100     case VAR_DECL:
13101     case RESULT_DECL:
13102       /* If we are in terse mode, don't generate any DIEs to represent any
13103          variable declarations or definitions.  */
13104       if (debug_info_level <= DINFO_LEVEL_TERSE)
13105         break;
13106
13107       /* Output any DIEs that are needed to specify the type of this data
13108          object.  */
13109       gen_type_die (TREE_TYPE (decl), context_die);
13110
13111       /* And its containing type.  */
13112       origin = decl_class_context (decl);
13113       if (origin != NULL_TREE)
13114         gen_type_die_for_member (origin, decl, context_die);
13115
13116       /* And its containing namespace.  */
13117       declare_in_namespace (decl, context_die);
13118
13119       /* Now output the DIE to represent the data object itself.  This gets
13120          complicated because of the possibility that the VAR_DECL really
13121          represents an inlined instance of a formal parameter for an inline
13122          function.  */
13123       origin = decl_ultimate_origin (decl);
13124       if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
13125         gen_formal_parameter_die (decl, context_die);
13126       else
13127         gen_variable_die (decl, context_die);
13128       break;
13129
13130     case FIELD_DECL:
13131       /* Ignore the nameless fields that are used to skip bits but handle C++
13132          anonymous unions and structs.  */
13133       if (DECL_NAME (decl) != NULL_TREE
13134           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
13135           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
13136         {
13137           gen_type_die (member_declared_type (decl), context_die);
13138           gen_field_die (decl, context_die);
13139         }
13140       break;
13141
13142     case PARM_DECL:
13143       gen_type_die (TREE_TYPE (decl), context_die);
13144       gen_formal_parameter_die (decl, context_die);
13145       break;
13146
13147     case NAMESPACE_DECL:
13148       gen_namespace_die (decl);
13149       break;
13150
13151     default:
13152       /* Probably some frontend-internal decl.  Assume we don't care.  */
13153       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
13154       break;
13155     }
13156 }
13157 \f
13158 /* Output debug information for global decl DECL.  Called from toplev.c after
13159    compilation proper has finished.  */
13160
13161 static void
13162 dwarf2out_global_decl (tree decl)
13163 {
13164   /* Output DWARF2 information for file-scope tentative data object
13165      declarations, file-scope (extern) function declarations (which had no
13166      corresponding body) and file-scope tagged type declarations and
13167      definitions which have not yet been forced out.  */
13168   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
13169     dwarf2out_decl (decl);
13170 }
13171
13172 /* Output debug information for type decl DECL.  Called from toplev.c
13173    and from language front ends (to record built-in types).  */
13174 static void
13175 dwarf2out_type_decl (tree decl, int local)
13176 {
13177   if (!local)
13178     dwarf2out_decl (decl);
13179 }
13180
13181 /* Output debug information for imported module or decl.  */
13182
13183 static void
13184 dwarf2out_imported_module_or_decl (tree decl, tree context)
13185 {
13186   dw_die_ref imported_die, at_import_die;
13187   dw_die_ref scope_die;
13188   unsigned file_index;
13189   expanded_location xloc;
13190
13191   if (debug_info_level <= DINFO_LEVEL_TERSE)
13192     return;
13193
13194   gcc_assert (decl);
13195
13196   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
13197      We need decl DIE for reference and scope die. First, get DIE for the decl
13198      itself.  */
13199
13200   /* Get the scope die for decl context. Use comp_unit_die for global module
13201      or decl. If die is not found for non globals, force new die.  */
13202   if (!context)
13203     scope_die = comp_unit_die;
13204   else if (TYPE_P (context))
13205     scope_die = force_type_die (context);
13206   else
13207     scope_die = force_decl_die (context);
13208
13209   /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE.  */
13210   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
13211     at_import_die = force_type_die (TREE_TYPE (decl));
13212   else
13213     {
13214       at_import_die = lookup_decl_die (decl);
13215       if (!at_import_die)
13216         {
13217           /* If we're trying to avoid duplicate debug info, we may not have
13218              emitted the member decl for this field.  Emit it now.  */
13219           if (TREE_CODE (decl) == FIELD_DECL)
13220             {
13221               tree type = DECL_CONTEXT (decl);
13222               dw_die_ref type_context_die;
13223
13224               if (TYPE_CONTEXT (type))
13225                 if (TYPE_P (TYPE_CONTEXT (type)))
13226                   type_context_die = force_type_die (TYPE_CONTEXT (type));
13227               else
13228                 type_context_die = force_decl_die (TYPE_CONTEXT (type));
13229               else
13230                 type_context_die = comp_unit_die;
13231               gen_type_die_for_member (type, decl, type_context_die);
13232             }
13233           at_import_die = force_decl_die (decl);
13234         }
13235     }
13236
13237   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
13238   if (TREE_CODE (decl) == NAMESPACE_DECL)
13239     imported_die = new_die (DW_TAG_imported_module, scope_die, context);
13240   else
13241     imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
13242
13243   xloc = expand_location (input_location);
13244   file_index = lookup_filename (xloc.file);
13245   add_AT_unsigned (imported_die, DW_AT_decl_file, file_index);
13246   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
13247   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
13248 }
13249
13250 /* Write the debugging output for DECL.  */
13251
13252 void
13253 dwarf2out_decl (tree decl)
13254 {
13255   dw_die_ref context_die = comp_unit_die;
13256
13257   switch (TREE_CODE (decl))
13258     {
13259     case ERROR_MARK:
13260       return;
13261
13262     case FUNCTION_DECL:
13263       /* What we would really like to do here is to filter out all mere
13264          file-scope declarations of file-scope functions which are never
13265          referenced later within this translation unit (and keep all of ones
13266          that *are* referenced later on) but we aren't clairvoyant, so we have
13267          no idea which functions will be referenced in the future (i.e. later
13268          on within the current translation unit). So here we just ignore all
13269          file-scope function declarations which are not also definitions.  If
13270          and when the debugger needs to know something about these functions,
13271          it will have to hunt around and find the DWARF information associated
13272          with the definition of the function.
13273
13274          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
13275          nodes represent definitions and which ones represent mere
13276          declarations.  We have to check DECL_INITIAL instead. That's because
13277          the C front-end supports some weird semantics for "extern inline"
13278          function definitions.  These can get inlined within the current
13279          translation unit (and thus, we need to generate Dwarf info for their
13280          abstract instances so that the Dwarf info for the concrete inlined
13281          instances can have something to refer to) but the compiler never
13282          generates any out-of-lines instances of such things (despite the fact
13283          that they *are* definitions).
13284
13285          The important point is that the C front-end marks these "extern
13286          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
13287          them anyway. Note that the C++ front-end also plays some similar games
13288          for inline function definitions appearing within include files which
13289          also contain `#pragma interface' pragmas.  */
13290       if (DECL_INITIAL (decl) == NULL_TREE)
13291         return;
13292
13293       /* If we're a nested function, initially use a parent of NULL; if we're
13294          a plain function, this will be fixed up in decls_for_scope.  If
13295          we're a method, it will be ignored, since we already have a DIE.  */
13296       if (decl_function_context (decl)
13297           /* But if we're in terse mode, we don't care about scope.  */
13298           && debug_info_level > DINFO_LEVEL_TERSE)
13299         context_die = NULL;
13300       break;
13301
13302     case VAR_DECL:
13303       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
13304          declaration and if the declaration was never even referenced from
13305          within this entire compilation unit.  We suppress these DIEs in
13306          order to save space in the .debug section (by eliminating entries
13307          which are probably useless).  Note that we must not suppress
13308          block-local extern declarations (whether used or not) because that
13309          would screw-up the debugger's name lookup mechanism and cause it to
13310          miss things which really ought to be in scope at a given point.  */
13311       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
13312         return;
13313
13314       /* For local statics lookup proper context die.  */
13315       if (TREE_STATIC (decl) && decl_function_context (decl))
13316         context_die = lookup_decl_die (DECL_CONTEXT (decl));
13317
13318       /* If we are in terse mode, don't generate any DIEs to represent any
13319          variable declarations or definitions.  */
13320       if (debug_info_level <= DINFO_LEVEL_TERSE)
13321         return;
13322       break;
13323
13324     case NAMESPACE_DECL:
13325       if (debug_info_level <= DINFO_LEVEL_TERSE)
13326         return;
13327       if (lookup_decl_die (decl) != NULL)
13328         return;
13329       break;
13330
13331     case TYPE_DECL:
13332       /* Don't emit stubs for types unless they are needed by other DIEs.  */
13333       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
13334         return;
13335
13336       /* Don't bother trying to generate any DIEs to represent any of the
13337          normal built-in types for the language we are compiling.  */
13338       if (DECL_IS_BUILTIN (decl))
13339         {
13340           /* OK, we need to generate one for `bool' so GDB knows what type
13341              comparisons have.  */
13342           if (is_cxx ()
13343               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
13344               && ! DECL_IGNORED_P (decl))
13345             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
13346
13347           return;
13348         }
13349
13350       /* If we are in terse mode, don't generate any DIEs for types.  */
13351       if (debug_info_level <= DINFO_LEVEL_TERSE)
13352         return;
13353
13354       /* If we're a function-scope tag, initially use a parent of NULL;
13355          this will be fixed up in decls_for_scope.  */
13356       if (decl_function_context (decl))
13357         context_die = NULL;
13358
13359       break;
13360
13361     default:
13362       return;
13363     }
13364
13365   gen_decl_die (decl, context_die);
13366 }
13367
13368 /* Output a marker (i.e. a label) for the beginning of the generated code for
13369    a lexical block.  */
13370
13371 static void
13372 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
13373                        unsigned int blocknum)
13374 {
13375   switch_to_section (current_function_section ());
13376   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
13377 }
13378
13379 /* Output a marker (i.e. a label) for the end of the generated code for a
13380    lexical block.  */
13381
13382 static void
13383 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
13384 {
13385   switch_to_section (current_function_section ());
13386   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
13387 }
13388
13389 /* Returns nonzero if it is appropriate not to emit any debugging
13390    information for BLOCK, because it doesn't contain any instructions.
13391
13392    Don't allow this for blocks with nested functions or local classes
13393    as we would end up with orphans, and in the presence of scheduling
13394    we may end up calling them anyway.  */
13395
13396 static bool
13397 dwarf2out_ignore_block (tree block)
13398 {
13399   tree decl;
13400
13401   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
13402     if (TREE_CODE (decl) == FUNCTION_DECL
13403         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
13404       return 0;
13405
13406   return 1;
13407 }
13408
13409 /* Lookup FILE_NAME (in the list of filenames that we know about here in
13410    dwarf2out.c) and return its "index".  The index of each (known) filename is
13411    just a unique number which is associated with only that one filename.  We
13412    need such numbers for the sake of generating labels (in the .debug_sfnames
13413    section) and references to those files numbers (in the .debug_srcinfo
13414    and.debug_macinfo sections).  If the filename given as an argument is not
13415    found in our current list, add it to the list and assign it the next
13416    available unique index number.  In order to speed up searches, we remember
13417    the index of the filename was looked up last.  This handles the majority of
13418    all searches.  */
13419
13420 static unsigned
13421 lookup_filename (const char *file_name)
13422 {
13423   size_t i, n;
13424   char *save_file_name;
13425
13426   /* Check to see if the file name that was searched on the previous
13427      call matches this file name.  If so, return the index.  */
13428   if (file_table_last_lookup_index != 0)
13429     {
13430       const char *last
13431         = VARRAY_CHAR_PTR (file_table, file_table_last_lookup_index);
13432       if (strcmp (file_name, last) == 0)
13433         return file_table_last_lookup_index;
13434     }
13435
13436   /* Didn't match the previous lookup, search the table.  */
13437   n = VARRAY_ACTIVE_SIZE (file_table);
13438   for (i = 1; i < n; i++)
13439     if (strcmp (file_name, VARRAY_CHAR_PTR (file_table, i)) == 0)
13440       {
13441         file_table_last_lookup_index = i;
13442         return i;
13443       }
13444
13445   /* Add the new entry to the end of the filename table.  */
13446   file_table_last_lookup_index = n;
13447   save_file_name = (char *) ggc_strdup (file_name);
13448   VARRAY_PUSH_CHAR_PTR (file_table, save_file_name);
13449   VARRAY_PUSH_UINT (file_table_emitted, 0);
13450
13451   /* If the assembler is emitting the file table, and we aren't eliminating
13452      unused debug types, then we must emit .file here.  If we are eliminating
13453      unused debug types, then this will be done by the maybe_emit_file call in
13454      prune_unused_types_walk_attribs.  */
13455
13456   if (DWARF2_ASM_LINE_DEBUG_INFO && ! flag_eliminate_unused_debug_types)
13457     return maybe_emit_file (i);
13458
13459   return i;
13460 }
13461
13462 /* If the assembler will construct the file table, then translate the compiler
13463    internal file table number into the assembler file table number, and emit
13464    a .file directive if we haven't already emitted one yet.  The file table
13465    numbers are different because we prune debug info for unused variables and
13466    types, which may include filenames.  */
13467
13468 static int
13469 maybe_emit_file (int fileno)
13470 {
13471   if (DWARF2_ASM_LINE_DEBUG_INFO && fileno > 0)
13472     {
13473       if (!VARRAY_UINT (file_table_emitted, fileno))
13474         {
13475           VARRAY_UINT (file_table_emitted, fileno) = ++emitcount;
13476           fprintf (asm_out_file, "\t.file %u ",
13477                    VARRAY_UINT (file_table_emitted, fileno));
13478           output_quoted_string (asm_out_file,
13479                                 VARRAY_CHAR_PTR (file_table, fileno));
13480           fputc ('\n', asm_out_file);
13481         }
13482       return VARRAY_UINT (file_table_emitted, fileno);
13483     }
13484   else
13485     return fileno;
13486 }
13487
13488 /* Initialize the compiler internal file table.  */
13489
13490 static void
13491 init_file_table (void)
13492 {
13493   /* Allocate the initial hunk of the file_table.  */
13494   VARRAY_CHAR_PTR_INIT (file_table, 64, "file_table");
13495   VARRAY_UINT_INIT (file_table_emitted, 64, "file_table_emitted");
13496
13497   /* Skip the first entry - file numbers begin at 1.  */
13498   VARRAY_PUSH_CHAR_PTR (file_table, NULL);
13499   VARRAY_PUSH_UINT (file_table_emitted, 0);
13500   file_table_last_lookup_index = 0;
13501 }
13502
13503 /* Called by the final INSN scan whenever we see a var location.  We
13504    use it to drop labels in the right places, and throw the location in
13505    our lookup table.  */
13506
13507 static void
13508 dwarf2out_var_location (rtx loc_note)
13509 {
13510   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
13511   struct var_loc_node *newloc;
13512   rtx prev_insn;
13513   static rtx last_insn;
13514   static const char *last_label;
13515   tree decl;
13516
13517   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
13518     return;
13519   prev_insn = PREV_INSN (loc_note);
13520
13521   newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
13522   /* If the insn we processed last time is the previous insn
13523      and it is also a var location note, use the label we emitted
13524      last time.  */
13525   if (last_insn != NULL_RTX
13526       && last_insn == prev_insn
13527       && NOTE_P (prev_insn)
13528       && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
13529     {
13530       newloc->label = last_label;
13531     }
13532   else
13533     {
13534       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
13535       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
13536       loclabel_num++;
13537       newloc->label = ggc_strdup (loclabel);
13538     }
13539   newloc->var_loc_note = loc_note;
13540   newloc->next = NULL;
13541
13542   if (cfun && in_cold_section_p)
13543     newloc->section_label = cfun->cold_section_label;
13544   else
13545     newloc->section_label = text_section_label;
13546
13547   last_insn = loc_note;
13548   last_label = newloc->label;
13549   decl = NOTE_VAR_LOCATION_DECL (loc_note);
13550   if (DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl) 
13551       && DECL_P (DECL_DEBUG_EXPR (decl)))
13552     decl = DECL_DEBUG_EXPR (decl); 
13553   add_var_loc_to_decl (decl, newloc);
13554 }
13555
13556 /* We need to reset the locations at the beginning of each
13557    function. We can't do this in the end_function hook, because the
13558    declarations that use the locations won't have been output when
13559    that hook is called.  Also compute have_multiple_function_sections here.  */
13560
13561 static void
13562 dwarf2out_begin_function (tree fun)
13563 {
13564   htab_empty (decl_loc_table);
13565   
13566   if (function_section (fun) != text_section)
13567     have_multiple_function_sections = true;
13568 }
13569
13570 /* Output a label to mark the beginning of a source code line entry
13571    and record information relating to this source line, in
13572    'line_info_table' for later output of the .debug_line section.  */
13573
13574 static void
13575 dwarf2out_source_line (unsigned int line, const char *filename)
13576 {
13577   if (debug_info_level >= DINFO_LEVEL_NORMAL
13578       && line != 0)
13579     {
13580       switch_to_section (current_function_section ());
13581
13582       /* If requested, emit something human-readable.  */
13583       if (flag_debug_asm)
13584         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
13585                  filename, line);
13586
13587       if (DWARF2_ASM_LINE_DEBUG_INFO)
13588         {
13589           unsigned file_num = lookup_filename (filename);
13590
13591           file_num = maybe_emit_file (file_num);
13592
13593           /* Emit the .loc directive understood by GNU as.  */
13594           fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
13595
13596           /* Indicate that line number info exists.  */
13597           line_info_table_in_use++;
13598         }
13599       else if (function_section (current_function_decl) != text_section)
13600         {
13601           dw_separate_line_info_ref line_info;
13602           targetm.asm_out.internal_label (asm_out_file, SEPARATE_LINE_CODE_LABEL,
13603                                      separate_line_info_table_in_use);
13604
13605           /* Expand the line info table if necessary.  */
13606           if (separate_line_info_table_in_use
13607               == separate_line_info_table_allocated)
13608             {
13609               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13610               separate_line_info_table
13611                 = ggc_realloc (separate_line_info_table,
13612                                separate_line_info_table_allocated
13613                                * sizeof (dw_separate_line_info_entry));
13614               memset (separate_line_info_table
13615                        + separate_line_info_table_in_use,
13616                       0,
13617                       (LINE_INFO_TABLE_INCREMENT
13618                        * sizeof (dw_separate_line_info_entry)));
13619             }
13620
13621           /* Add the new entry at the end of the line_info_table.  */
13622           line_info
13623             = &separate_line_info_table[separate_line_info_table_in_use++];
13624           line_info->dw_file_num = lookup_filename (filename);
13625           line_info->dw_line_num = line;
13626           line_info->function = current_function_funcdef_no;
13627         }
13628       else
13629         {
13630           dw_line_info_ref line_info;
13631
13632           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
13633                                      line_info_table_in_use);
13634
13635           /* Expand the line info table if necessary.  */
13636           if (line_info_table_in_use == line_info_table_allocated)
13637             {
13638               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13639               line_info_table
13640                 = ggc_realloc (line_info_table,
13641                                (line_info_table_allocated
13642                                 * sizeof (dw_line_info_entry)));
13643               memset (line_info_table + line_info_table_in_use, 0,
13644                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
13645             }
13646
13647           /* Add the new entry at the end of the line_info_table.  */
13648           line_info = &line_info_table[line_info_table_in_use++];
13649           line_info->dw_file_num = lookup_filename (filename);
13650           line_info->dw_line_num = line;
13651         }
13652     }
13653 }
13654
13655 /* Record the beginning of a new source file.  */
13656
13657 static void
13658 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
13659 {
13660   if (flag_eliminate_dwarf2_dups)
13661     {
13662       /* Record the beginning of the file for break_out_includes.  */
13663       dw_die_ref bincl_die;
13664
13665       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
13666       add_AT_string (bincl_die, DW_AT_name, filename);
13667     }
13668
13669   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13670     {
13671       int fileno;
13672
13673       switch_to_section (debug_macinfo_section);
13674       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
13675       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
13676                                    lineno);
13677
13678       fileno = maybe_emit_file (lookup_filename (filename));
13679       dw2_asm_output_data_uleb128 (fileno, "Filename we just started");
13680     }
13681 }
13682
13683 /* Record the end of a source file.  */
13684
13685 static void
13686 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
13687 {
13688   if (flag_eliminate_dwarf2_dups)
13689     /* Record the end of the file for break_out_includes.  */
13690     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
13691
13692   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13693     {
13694       switch_to_section (debug_macinfo_section);
13695       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13696     }
13697 }
13698
13699 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
13700    the tail part of the directive line, i.e. the part which is past the
13701    initial whitespace, #, whitespace, directive-name, whitespace part.  */
13702
13703 static void
13704 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13705                   const char *buffer ATTRIBUTE_UNUSED)
13706 {
13707   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13708     {
13709       switch_to_section (debug_macinfo_section);
13710       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13711       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13712       dw2_asm_output_nstring (buffer, -1, "The macro");
13713     }
13714 }
13715
13716 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
13717    the tail part of the directive line, i.e. the part which is past the
13718    initial whitespace, #, whitespace, directive-name, whitespace part.  */
13719
13720 static void
13721 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13722                  const char *buffer ATTRIBUTE_UNUSED)
13723 {
13724   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13725     {
13726       switch_to_section (debug_macinfo_section);
13727       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13728       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13729       dw2_asm_output_nstring (buffer, -1, "The macro");
13730     }
13731 }
13732
13733 /* Set up for Dwarf output at the start of compilation.  */
13734
13735 static void
13736 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13737 {
13738   init_file_table ();
13739
13740   /* Allocate the decl_die_table.  */
13741   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13742                                     decl_die_table_eq, NULL);
13743
13744   /* Allocate the decl_loc_table.  */
13745   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13746                                     decl_loc_table_eq, NULL);
13747
13748   /* Allocate the initial hunk of the decl_scope_table.  */
13749   decl_scope_table = VEC_alloc (tree, gc, 256);
13750
13751   /* Allocate the initial hunk of the abbrev_die_table.  */
13752   abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13753                                         * sizeof (dw_die_ref));
13754   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13755   /* Zero-th entry is allocated, but unused.  */
13756   abbrev_die_table_in_use = 1;
13757
13758   /* Allocate the initial hunk of the line_info_table.  */
13759   line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13760                                        * sizeof (dw_line_info_entry));
13761   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13762
13763   /* Zero-th entry is allocated, but unused.  */
13764   line_info_table_in_use = 1;
13765
13766   /* Generate the initial DIE for the .debug section.  Note that the (string)
13767      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13768      will (typically) be a relative pathname and that this pathname should be
13769      taken as being relative to the directory from which the compiler was
13770      invoked when the given (base) source file was compiled.  We will fill
13771      in this value in dwarf2out_finish.  */
13772   comp_unit_die = gen_compile_unit_die (NULL);
13773
13774   incomplete_types = VEC_alloc (tree, gc, 64);
13775
13776   used_rtx_array = VEC_alloc (rtx, gc, 32);
13777
13778   debug_info_section = get_section (DEBUG_INFO_SECTION,
13779                                     SECTION_DEBUG, NULL);
13780   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
13781                                       SECTION_DEBUG, NULL);
13782   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
13783                                        SECTION_DEBUG, NULL);
13784   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
13785                                        SECTION_DEBUG, NULL);
13786   debug_line_section = get_section (DEBUG_LINE_SECTION,
13787                                     SECTION_DEBUG, NULL);
13788   debug_loc_section = get_section (DEBUG_LOC_SECTION,
13789                                    SECTION_DEBUG, NULL);
13790   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
13791                                         SECTION_DEBUG, NULL);
13792   debug_str_section = get_section (DEBUG_STR_SECTION,
13793                                    DEBUG_STR_SECTION_FLAGS, NULL);
13794   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
13795                                       SECTION_DEBUG, NULL);
13796   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
13797                                      SECTION_DEBUG, NULL);
13798
13799   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13800   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13801                                DEBUG_ABBREV_SECTION_LABEL, 0);
13802   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13803   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label, 
13804                                COLD_TEXT_SECTION_LABEL, 0);
13805   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
13806
13807   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13808                                DEBUG_INFO_SECTION_LABEL, 0);
13809   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13810                                DEBUG_LINE_SECTION_LABEL, 0);
13811   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13812                                DEBUG_RANGES_SECTION_LABEL, 0);
13813   switch_to_section (debug_abbrev_section);
13814   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13815   switch_to_section (debug_info_section);
13816   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13817   switch_to_section (debug_line_section);
13818   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13819
13820   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13821     {
13822       switch_to_section (debug_macinfo_section);
13823       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13824                                    DEBUG_MACINFO_SECTION_LABEL, 0);
13825       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13826     }
13827
13828   switch_to_section (text_section);
13829   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13830   if (flag_reorder_blocks_and_partition)
13831     {
13832       switch_to_section (unlikely_text_section ());
13833       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
13834     }
13835 }
13836
13837 /* A helper function for dwarf2out_finish called through
13838    ht_forall.  Emit one queued .debug_str string.  */
13839
13840 static int
13841 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13842 {
13843   struct indirect_string_node *node = (struct indirect_string_node *) *h;
13844
13845   if (node->form == DW_FORM_strp)
13846     {
13847       switch_to_section (debug_str_section);
13848       ASM_OUTPUT_LABEL (asm_out_file, node->label);
13849       assemble_string (node->str, strlen (node->str) + 1);
13850     }
13851
13852   return 1;
13853 }
13854
13855 #if ENABLE_ASSERT_CHECKING
13856 /* Verify that all marks are clear.  */
13857
13858 static void
13859 verify_marks_clear (dw_die_ref die)
13860 {
13861   dw_die_ref c;
13862   
13863   gcc_assert (! die->die_mark);
13864   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
13865 }
13866 #endif /* ENABLE_ASSERT_CHECKING */
13867
13868 /* Clear the marks for a die and its children.
13869    Be cool if the mark isn't set.  */
13870
13871 static void
13872 prune_unmark_dies (dw_die_ref die)
13873 {
13874   dw_die_ref c;
13875   
13876   if (die->die_mark)
13877     die->die_mark = 0;
13878   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
13879 }
13880
13881 /* Given DIE that we're marking as used, find any other dies
13882    it references as attributes and mark them as used.  */
13883
13884 static void
13885 prune_unused_types_walk_attribs (dw_die_ref die)
13886 {
13887   dw_attr_ref a;
13888   unsigned ix;
13889
13890   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
13891     {
13892       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
13893         {
13894           /* A reference to another DIE.
13895              Make sure that it will get emitted.  */
13896           prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
13897         }
13898       else if (a->dw_attr == DW_AT_decl_file || a->dw_attr == DW_AT_call_file)
13899         {
13900           /* A reference to a file.  Make sure the file name is emitted.  */
13901           a->dw_attr_val.v.val_unsigned =
13902             maybe_emit_file (a->dw_attr_val.v.val_unsigned);
13903         }
13904       /* Set the string's refcount to 0 so that prune_unused_types_mark
13905          accounts properly for it.  */
13906       if (AT_class (a) == dw_val_class_str)
13907         a->dw_attr_val.v.val_str->refcount = 0;
13908     }
13909 }
13910
13911
13912 /* Mark DIE as being used.  If DOKIDS is true, then walk down
13913    to DIE's children.  */
13914
13915 static void
13916 prune_unused_types_mark (dw_die_ref die, int dokids)
13917 {
13918   dw_die_ref c;
13919
13920   if (die->die_mark == 0)
13921     {
13922       /* We haven't done this node yet.  Mark it as used.  */
13923       die->die_mark = 1;
13924
13925       /* We also have to mark its parents as used.
13926          (But we don't want to mark our parents' kids due to this.)  */
13927       if (die->die_parent)
13928         prune_unused_types_mark (die->die_parent, 0);
13929
13930       /* Mark any referenced nodes.  */
13931       prune_unused_types_walk_attribs (die);
13932
13933       /* If this node is a specification,
13934          also mark the definition, if it exists.  */
13935       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
13936         prune_unused_types_mark (die->die_definition, 1);
13937     }
13938
13939   if (dokids && die->die_mark != 2)
13940     {
13941       /* We need to walk the children, but haven't done so yet.
13942          Remember that we've walked the kids.  */
13943       die->die_mark = 2;
13944
13945       /* If this is an array type, we need to make sure our
13946          kids get marked, even if they're types.  */
13947       if (die->die_tag == DW_TAG_array_type)
13948         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
13949       else
13950         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
13951     }
13952 }
13953
13954
13955 /* Walk the tree DIE and mark types that we actually use.  */
13956
13957 static void
13958 prune_unused_types_walk (dw_die_ref die)
13959 {
13960   dw_die_ref c;
13961
13962   /* Don't do anything if this node is already marked.  */
13963   if (die->die_mark)
13964     return;
13965
13966   switch (die->die_tag) {
13967   case DW_TAG_const_type:
13968   case DW_TAG_packed_type:
13969   case DW_TAG_pointer_type:
13970   case DW_TAG_reference_type:
13971   case DW_TAG_volatile_type:
13972   case DW_TAG_typedef:
13973   case DW_TAG_array_type:
13974   case DW_TAG_structure_type:
13975   case DW_TAG_union_type:
13976   case DW_TAG_class_type:
13977   case DW_TAG_friend:
13978   case DW_TAG_variant_part:
13979   case DW_TAG_enumeration_type:
13980   case DW_TAG_subroutine_type:
13981   case DW_TAG_string_type:
13982   case DW_TAG_set_type:
13983   case DW_TAG_subrange_type:
13984   case DW_TAG_ptr_to_member_type:
13985   case DW_TAG_file_type:
13986     if (die->die_perennial_p)
13987       break;
13988
13989     /* It's a type node --- don't mark it.  */
13990     return;
13991
13992   default:
13993     /* Mark everything else.  */
13994     break;
13995   }
13996
13997   die->die_mark = 1;
13998
13999   /* Now, mark any dies referenced from here.  */
14000   prune_unused_types_walk_attribs (die);
14001
14002   /* Mark children.  */
14003   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
14004 }
14005
14006 /* Increment the string counts on strings referred to from DIE's
14007    attributes.  */
14008
14009 static void
14010 prune_unused_types_update_strings (dw_die_ref die)
14011 {
14012   dw_attr_ref a;
14013   unsigned ix;
14014
14015   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
14016     if (AT_class (a) == dw_val_class_str)
14017       {
14018         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
14019         s->refcount++;
14020         /* Avoid unnecessarily putting strings that are used less than
14021            twice in the hash table.  */
14022         if (s->refcount
14023             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
14024           {
14025             void ** slot;
14026             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
14027                                              htab_hash_string (s->str),
14028                                              INSERT);
14029             gcc_assert (*slot == NULL);
14030             *slot = s;
14031           }
14032       }
14033 }
14034
14035 /* Remove from the tree DIE any dies that aren't marked.  */
14036
14037 static void
14038 prune_unused_types_prune (dw_die_ref die)
14039 {
14040   dw_die_ref c;
14041
14042   gcc_assert (die->die_mark);
14043
14044   if (! die->die_child)
14045     return;
14046   
14047   c = die->die_child;
14048   do {
14049     dw_die_ref prev = c;
14050     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
14051       if (c == die->die_child)
14052         {
14053           /* No marked children between 'prev' and the end of the list.  */
14054           if (prev == c)
14055             /* No marked children at all.  */
14056             die->die_child = NULL;
14057           else
14058             {
14059               prev->die_sib = c->die_sib;
14060               die->die_child = prev;
14061             }
14062           return;
14063         }
14064
14065     if (c != prev->die_sib)
14066       prev->die_sib = c;
14067     prune_unused_types_update_strings (c);
14068     prune_unused_types_prune (c);
14069   } while (c != die->die_child);
14070 }
14071
14072
14073 /* Remove dies representing declarations that we never use.  */
14074
14075 static void
14076 prune_unused_types (void)
14077 {
14078   unsigned int i;
14079   limbo_die_node *node;
14080
14081 #if ENABLE_ASSERT_CHECKING
14082   /* All the marks should already be clear.  */
14083   verify_marks_clear (comp_unit_die);
14084   for (node = limbo_die_list; node; node = node->next)
14085     verify_marks_clear (node->die);
14086 #endif /* ENABLE_ASSERT_CHECKING */
14087
14088   /* Set the mark on nodes that are actually used.  */
14089   prune_unused_types_walk (comp_unit_die);
14090   for (node = limbo_die_list; node; node = node->next)
14091     prune_unused_types_walk (node->die);
14092
14093   /* Also set the mark on nodes referenced from the
14094      pubname_table or arange_table.  */
14095   for (i = 0; i < pubname_table_in_use; i++)
14096     prune_unused_types_mark (pubname_table[i].die, 1);
14097   for (i = 0; i < arange_table_in_use; i++)
14098     prune_unused_types_mark (arange_table[i], 1);
14099
14100   /* Get rid of nodes that aren't marked; and update the string counts.  */
14101   if (debug_str_hash)
14102     htab_empty (debug_str_hash);
14103   prune_unused_types_prune (comp_unit_die);
14104   for (node = limbo_die_list; node; node = node->next)
14105     prune_unused_types_prune (node->die);
14106
14107   /* Leave the marks clear.  */
14108   prune_unmark_dies (comp_unit_die);
14109   for (node = limbo_die_list; node; node = node->next)
14110     prune_unmark_dies (node->die);
14111 }
14112
14113 /* Output stuff that dwarf requires at the end of every file,
14114    and generate the DWARF-2 debugging info.  */
14115
14116 static void
14117 dwarf2out_finish (const char *filename)
14118 {
14119   limbo_die_node *node, *next_node;
14120   dw_die_ref die = 0;
14121
14122   /* Add the name for the main input file now.  We delayed this from
14123      dwarf2out_init to avoid complications with PCH.  */
14124   add_name_attribute (comp_unit_die, filename);
14125   if (filename[0] != DIR_SEPARATOR)
14126     add_comp_dir_attribute (comp_unit_die);
14127   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
14128     {
14129       size_t i;
14130       for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
14131         if (VARRAY_CHAR_PTR (file_table, i)[0] != DIR_SEPARATOR
14132             /* Don't add cwd for <built-in>.  */
14133             && VARRAY_CHAR_PTR (file_table, i)[0] != '<')
14134           {
14135             add_comp_dir_attribute (comp_unit_die);
14136             break;
14137           }
14138     }
14139
14140   /* Traverse the limbo die list, and add parent/child links.  The only
14141      dies without parents that should be here are concrete instances of
14142      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
14143      For concrete instances, we can get the parent die from the abstract
14144      instance.  */
14145   for (node = limbo_die_list; node; node = next_node)
14146     {
14147       next_node = node->next;
14148       die = node->die;
14149
14150       if (die->die_parent == NULL)
14151         {
14152           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
14153
14154           if (origin)
14155             add_child_die (origin->die_parent, die);
14156           else if (die == comp_unit_die)
14157             ;
14158           else if (errorcount > 0 || sorrycount > 0)
14159             /* It's OK to be confused by errors in the input.  */
14160             add_child_die (comp_unit_die, die);
14161           else
14162             {
14163               /* In certain situations, the lexical block containing a
14164                  nested function can be optimized away, which results
14165                  in the nested function die being orphaned.  Likewise
14166                  with the return type of that nested function.  Force
14167                  this to be a child of the containing function.
14168
14169                  It may happen that even the containing function got fully
14170                  inlined and optimized out.  In that case we are lost and
14171                  assign the empty child.  This should not be big issue as
14172                  the function is likely unreachable too.  */
14173               tree context = NULL_TREE;
14174
14175               gcc_assert (node->created_for);
14176
14177               if (DECL_P (node->created_for))
14178                 context = DECL_CONTEXT (node->created_for);
14179               else if (TYPE_P (node->created_for))
14180                 context = TYPE_CONTEXT (node->created_for);
14181
14182               gcc_assert (context && TREE_CODE (context) == FUNCTION_DECL);
14183
14184               origin = lookup_decl_die (context);
14185               if (origin)
14186                 add_child_die (origin, die);
14187               else
14188                 add_child_die (comp_unit_die, die);
14189             }
14190         }
14191     }
14192
14193   limbo_die_list = NULL;
14194
14195   /* Walk through the list of incomplete types again, trying once more to
14196      emit full debugging info for them.  */
14197   retry_incomplete_types ();
14198
14199   if (flag_eliminate_unused_debug_types)
14200     prune_unused_types ();
14201
14202   /* Generate separate CUs for each of the include files we've seen.
14203      They will go into limbo_die_list.  */
14204   if (flag_eliminate_dwarf2_dups)
14205     break_out_includes (comp_unit_die);
14206
14207   /* Traverse the DIE's and add add sibling attributes to those DIE's
14208      that have children.  */
14209   add_sibling_attributes (comp_unit_die);
14210   for (node = limbo_die_list; node; node = node->next)
14211     add_sibling_attributes (node->die);
14212
14213   /* Output a terminator label for the .text section.  */
14214   switch_to_section (text_section);
14215   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
14216   if (flag_reorder_blocks_and_partition)
14217     {
14218       switch_to_section (unlikely_text_section ());
14219       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
14220     }
14221
14222   /* Output the source line correspondence table.  We must do this
14223      even if there is no line information.  Otherwise, on an empty
14224      translation unit, we will generate a present, but empty,
14225      .debug_info section.  IRIX 6.5 `nm' will then complain when
14226      examining the file.  */
14227   if (! DWARF2_ASM_LINE_DEBUG_INFO)
14228     {
14229       switch_to_section (debug_line_section);
14230       output_line_info ();
14231     }
14232
14233   /* We can only use the low/high_pc attributes if all of the code was
14234      in .text.  */
14235   if (!have_multiple_function_sections)
14236     {
14237       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
14238       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
14239     }
14240
14241   /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
14242      "base address".  Use zero so that these addresses become absolute.  */
14243   else if (have_location_lists || ranges_table_in_use)
14244     add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
14245
14246   /* Output location list section if necessary.  */
14247   if (have_location_lists)
14248     {
14249       /* Output the location lists info.  */
14250       switch_to_section (debug_loc_section);
14251       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
14252                                    DEBUG_LOC_SECTION_LABEL, 0);
14253       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
14254       output_location_lists (die);
14255     }
14256
14257   if (debug_info_level >= DINFO_LEVEL_NORMAL)
14258     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
14259                     debug_line_section_label);
14260
14261   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14262     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
14263
14264   /* Output all of the compilation units.  We put the main one last so that
14265      the offsets are available to output_pubnames.  */
14266   for (node = limbo_die_list; node; node = node->next)
14267     output_comp_unit (node->die, 0);
14268
14269   output_comp_unit (comp_unit_die, 0);
14270
14271   /* Output the abbreviation table.  */
14272   switch_to_section (debug_abbrev_section);
14273   output_abbrev_section ();
14274
14275   /* Output public names table if necessary.  */
14276   if (pubname_table_in_use)
14277     {
14278       switch_to_section (debug_pubnames_section);
14279       output_pubnames ();
14280     }
14281
14282   /* Output the address range information.  We only put functions in the arange
14283      table, so don't write it out if we don't have any.  */
14284   if (fde_table_in_use)
14285     {
14286       switch_to_section (debug_aranges_section);
14287       output_aranges ();
14288     }
14289
14290   /* Output ranges section if necessary.  */
14291   if (ranges_table_in_use)
14292     {
14293       switch_to_section (debug_ranges_section);
14294       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
14295       output_ranges ();
14296     }
14297
14298   /* Have to end the macro section.  */
14299   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14300     {
14301       switch_to_section (debug_macinfo_section);
14302       dw2_asm_output_data (1, 0, "End compilation unit");
14303     }
14304
14305   /* If we emitted any DW_FORM_strp form attribute, output the string
14306      table too.  */
14307   if (debug_str_hash)
14308     htab_traverse (debug_str_hash, output_indirect_string, NULL);
14309 }
14310 #else
14311
14312 /* This should never be used, but its address is needed for comparisons.  */
14313 const struct gcc_debug_hooks dwarf2_debug_hooks;
14314
14315 #endif /* DWARF2_DEBUGGING_INFO */
14316
14317 #include "gt-dwarf2out.h"