OSDN Git Service

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