OSDN Git Service

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