OSDN Git Service

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