OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [dwarf2out.c] - Blame information for rev 294

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* Output Dwarf2 format symbol table information from GCC.
2
   Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3
   2003, 2004, 2005, 2006, 2007 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 3, 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 COPYING3.  If not see
22
<http://www.gnu.org/licenses/>.  */
23
 
24
/* TODO: Emit .debug_line header even when there are no functions, since
25
           the file numbers are used by .debug_info.  Alternately, leave
26
           out locations for types and decls.
27
         Avoid talking about ctors and op= for PODs.
28
         Factor out common prologue sequences into multiple CIEs.  */
29
 
30
/* The first part of this file deals with the DWARF 2 frame unwind
31
   information, which is also used by the GCC efficient exception handling
32
   mechanism.  The second part, controlled only by an #ifdef
33
   DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
34
   information.  */
35
 
36
#include "config.h"
37
#include "system.h"
38
#include "coretypes.h"
39
#include "tm.h"
40
#include "tree.h"
41
#include "version.h"
42
#include "flags.h"
43
#include "real.h"
44
#include "rtl.h"
45
#include "hard-reg-set.h"
46
#include "regs.h"
47
#include "insn-config.h"
48
#include "reload.h"
49
#include "function.h"
50
#include "output.h"
51
#include "expr.h"
52
#include "libfuncs.h"
53
#include "except.h"
54
#include "dwarf2.h"
55
#include "dwarf2out.h"
56
#include "dwarf2asm.h"
57
#include "toplev.h"
58
#include "varray.h"
59
#include "ggc.h"
60
#include "md5.h"
61
#include "tm_p.h"
62
#include "diagnostic.h"
63
#include "debug.h"
64
#include "target.h"
65
#include "langhooks.h"
66
#include "hashtab.h"
67
#include "cgraph.h"
68
#include "input.h"
69
 
70
#ifdef DWARF2_DEBUGGING_INFO
71
static void dwarf2out_source_line (unsigned int, const char *);
72
#endif
73
 
74
/* DWARF2 Abbreviation Glossary:
75
   CFA = Canonical Frame Address
76
           a fixed address on the stack which identifies a call frame.
77
           We define it to be the value of SP just before the call insn.
78
           The CFA register and offset, which may change during the course
79
           of the function, are used to calculate its value at runtime.
80
   CFI = Call Frame Instruction
81
           an instruction for the DWARF2 abstract machine
82
   CIE = Common Information Entry
83
           information describing information common to one or more FDEs
84
   DIE = Debugging Information Entry
85
   FDE = Frame Description Entry
86
           information describing the stack call frame, in particular,
87
           how to restore registers
88
 
89
   DW_CFA_... = DWARF2 CFA call frame instruction
90
   DW_TAG_... = DWARF2 DIE tag */
91
 
92
#ifndef DWARF2_FRAME_INFO
93
# ifdef DWARF2_DEBUGGING_INFO
94
#  define DWARF2_FRAME_INFO \
95
  (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
96
# else
97
#  define DWARF2_FRAME_INFO 0
98
# endif
99
#endif
100
 
101
/* Map register numbers held in the call frame info that gcc has
102
   collected using DWARF_FRAME_REGNUM to those that should be output in
103
   .debug_frame and .eh_frame.  */
104
#ifndef DWARF2_FRAME_REG_OUT
105
#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
106
#endif
107
 
108
/* Decide whether we want to emit frame unwind information for the current
109
   translation unit.  */
110
 
111
int
112
dwarf2out_do_frame (void)
113
{
114
  /* We want to emit correct CFA location expressions or lists, so we
115
     have to return true if we're going to output debug info, even if
116
     we're not going to output frame or unwind info.  */
117
  return (write_symbols == DWARF2_DEBUG
118
          || write_symbols == VMS_AND_DWARF2_DEBUG
119
          || DWARF2_FRAME_INFO
120
#ifdef DWARF2_UNWIND_INFO
121
          || (DWARF2_UNWIND_INFO
122
              && (flag_unwind_tables
123
                  || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
124
#endif
125
          );
126
}
127
 
128
/* The size of the target's pointer type.  */
129
#ifndef PTR_SIZE
130
#define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
131
#endif
132
 
133
/* Array of RTXes referenced by the debugging information, which therefore
134
   must be kept around forever.  */
135
static GTY(()) VEC(rtx,gc) *used_rtx_array;
136
 
137
/* A pointer to the base of a list of incomplete types which might be
138
   completed at some later time.  incomplete_types_list needs to be a
139
   VEC(tree,gc) because we want to tell the garbage collector about
140
   it.  */
141
static GTY(()) VEC(tree,gc) *incomplete_types;
142
 
143
/* A pointer to the base of a table of references to declaration
144
   scopes.  This table is a display which tracks the nesting
145
   of declaration scopes at the current scope and containing
146
   scopes.  This table is used to find the proper place to
147
   define type declaration DIE's.  */
148
static GTY(()) VEC(tree,gc) *decl_scope_table;
149
 
150
/* Pointers to various DWARF2 sections.  */
151
static GTY(()) section *debug_info_section;
152
static GTY(()) section *debug_abbrev_section;
153
static GTY(()) section *debug_aranges_section;
154
static GTY(()) section *debug_macinfo_section;
155
static GTY(()) section *debug_line_section;
156
static GTY(()) section *debug_loc_section;
157
static GTY(()) section *debug_pubnames_section;
158
static GTY(()) section *debug_str_section;
159
static GTY(()) section *debug_ranges_section;
160
static GTY(()) section *debug_frame_section;
161
 
162
/* How to start an assembler comment.  */
163
#ifndef ASM_COMMENT_START
164
#define ASM_COMMENT_START ";#"
165
#endif
166
 
167
typedef struct dw_cfi_struct *dw_cfi_ref;
168
typedef struct dw_fde_struct *dw_fde_ref;
169
typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
170
 
171
/* Call frames are described using a sequence of Call Frame
172
   Information instructions.  The register number, offset
173
   and address fields are provided as possible operands;
174
   their use is selected by the opcode field.  */
175
 
176
enum dw_cfi_oprnd_type {
177
  dw_cfi_oprnd_unused,
178
  dw_cfi_oprnd_reg_num,
179
  dw_cfi_oprnd_offset,
180
  dw_cfi_oprnd_addr,
181
  dw_cfi_oprnd_loc
182
};
183
 
184
typedef union dw_cfi_oprnd_struct GTY(())
185
{
186
  unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
187
  HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
188
  const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
189
  struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
190
}
191
dw_cfi_oprnd;
192
 
193
typedef struct dw_cfi_struct GTY(())
194
{
195
  dw_cfi_ref dw_cfi_next;
196
  enum dwarf_call_frame_info dw_cfi_opc;
197
  dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
198
    dw_cfi_oprnd1;
199
  dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
200
    dw_cfi_oprnd2;
201
}
202
dw_cfi_node;
203
 
204
/* This is how we define the location of the CFA. We use to handle it
205
   as REG + OFFSET all the time,  but now it can be more complex.
206
   It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
207
   Instead of passing around REG and OFFSET, we pass a copy
208
   of this structure.  */
209
typedef struct cfa_loc GTY(())
210
{
211
  HOST_WIDE_INT offset;
212
  HOST_WIDE_INT base_offset;
213
  unsigned int reg;
214
  int indirect;            /* 1 if CFA is accessed via a dereference.  */
215
} dw_cfa_location;
216
 
217
/* All call frame descriptions (FDE's) in the GCC generated DWARF
218
   refer to a single Common Information Entry (CIE), defined at
219
   the beginning of the .debug_frame section.  This use of a single
220
   CIE obviates the need to keep track of multiple CIE's
221
   in the DWARF generation routines below.  */
222
 
223
typedef struct dw_fde_struct GTY(())
224
{
225
  tree decl;
226
  const char *dw_fde_begin;
227
  const char *dw_fde_current_label;
228
  const char *dw_fde_end;
229
  const char *dw_fde_hot_section_label;
230
  const char *dw_fde_hot_section_end_label;
231
  const char *dw_fde_unlikely_section_label;
232
  const char *dw_fde_unlikely_section_end_label;
233
  bool dw_fde_switched_sections;
234
  dw_cfi_ref dw_fde_cfi;
235
  unsigned funcdef_number;
236
  unsigned all_throwers_are_sibcalls : 1;
237
  unsigned nothrow : 1;
238
  unsigned uses_eh_lsda : 1;
239
}
240
dw_fde_node;
241
 
242
/* Maximum size (in bytes) of an artificially generated label.  */
243
#define MAX_ARTIFICIAL_LABEL_BYTES      30
244
 
245
/* The size of addresses as they appear in the Dwarf 2 data.
246
   Some architectures use word addresses to refer to code locations,
247
   but Dwarf 2 info always uses byte addresses.  On such machines,
248
   Dwarf 2 addresses need to be larger than the architecture's
249
   pointers.  */
250
#ifndef DWARF2_ADDR_SIZE
251
#define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
252
#endif
253
 
254
/* The size in bytes of a DWARF field indicating an offset or length
255
   relative to a debug info section, specified to be 4 bytes in the
256
   DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
257
   as PTR_SIZE.  */
258
 
259
#ifndef DWARF_OFFSET_SIZE
260
#define DWARF_OFFSET_SIZE 4
261
#endif
262
 
263
/* According to the (draft) DWARF 3 specification, the initial length
264
   should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
265
   bytes are 0xffffffff, followed by the length stored in the next 8
266
   bytes.
267
 
268
   However, the SGI/MIPS ABI uses an initial length which is equal to
269
   DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
270
 
271
#ifndef DWARF_INITIAL_LENGTH_SIZE
272
#define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
273
#endif
274
 
275
#define DWARF_VERSION 2
276
 
277
/* Round SIZE up to the nearest BOUNDARY.  */
278
#define DWARF_ROUND(SIZE,BOUNDARY) \
279
  ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
280
 
281
/* Offsets recorded in opcodes are a multiple of this alignment factor.  */
282
#ifndef DWARF_CIE_DATA_ALIGNMENT
283
#ifdef STACK_GROWS_DOWNWARD
284
#define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
285
#else
286
#define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
287
#endif
288
#endif
289
 
290
/* CIE identifier.  */
291
#if HOST_BITS_PER_WIDE_INT >= 64
292
#define DWARF_CIE_ID \
293
  (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
294
#else
295
#define DWARF_CIE_ID DW_CIE_ID
296
#endif
297
 
298
/* A pointer to the base of a table that contains frame description
299
   information for each routine.  */
300
static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
301
 
302
/* Number of elements currently allocated for fde_table.  */
303
static GTY(()) unsigned fde_table_allocated;
304
 
305
/* Number of elements in fde_table currently in use.  */
306
static GTY(()) unsigned fde_table_in_use;
307
 
308
/* Size (in elements) of increments by which we may expand the
309
   fde_table.  */
310
#define FDE_TABLE_INCREMENT 256
311
 
312
/* A list of call frame insns for the CIE.  */
313
static GTY(()) dw_cfi_ref cie_cfi_head;
314
 
315
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
316
/* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
317
   attribute that accelerates the lookup of the FDE associated
318
   with the subprogram.  This variable holds the table index of the FDE
319
   associated with the current function (body) definition.  */
320
static unsigned current_funcdef_fde;
321
#endif
322
 
323
struct indirect_string_node GTY(())
324
{
325
  const char *str;
326
  unsigned int refcount;
327
  unsigned int form;
328
  char *label;
329
};
330
 
331
static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
332
 
333
static GTY(()) int dw2_string_counter;
334
static GTY(()) unsigned long dwarf2out_cfi_label_num;
335
 
336
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
337
 
338
/* Forward declarations for functions defined in this file.  */
339
 
340
static char *stripattributes (const char *);
341
static const char *dwarf_cfi_name (unsigned);
342
static dw_cfi_ref new_cfi (void);
343
static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
344
static void add_fde_cfi (const char *, dw_cfi_ref);
345
static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
346
static void lookup_cfa (dw_cfa_location *);
347
static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
348
static void initial_return_save (rtx);
349
static HOST_WIDE_INT stack_adjust_offset (rtx);
350
static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
351
static void output_call_frame_info (int);
352
static void dwarf2out_stack_adjust (rtx, bool);
353
static void flush_queued_reg_saves (void);
354
static bool clobbers_queued_reg_save (rtx);
355
static void dwarf2out_frame_debug_expr (rtx, const char *);
356
 
357
/* Support for complex CFA locations.  */
358
static void output_cfa_loc (dw_cfi_ref);
359
static void get_cfa_from_loc_descr (dw_cfa_location *,
360
                                    struct dw_loc_descr_struct *);
361
static struct dw_loc_descr_struct *build_cfa_loc
362
  (dw_cfa_location *, HOST_WIDE_INT);
363
static void def_cfa_1 (const char *, dw_cfa_location *);
364
 
365
/* How to start an assembler comment.  */
366
#ifndef ASM_COMMENT_START
367
#define ASM_COMMENT_START ";#"
368
#endif
369
 
370
/* Data and reference forms for relocatable data.  */
371
#define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
372
#define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
373
 
374
#ifndef DEBUG_FRAME_SECTION
375
#define DEBUG_FRAME_SECTION     ".debug_frame"
376
#endif
377
 
378
#ifndef FUNC_BEGIN_LABEL
379
#define FUNC_BEGIN_LABEL        "LFB"
380
#endif
381
 
382
#ifndef FUNC_END_LABEL
383
#define FUNC_END_LABEL          "LFE"
384
#endif
385
 
386
#ifndef FRAME_BEGIN_LABEL
387
#define FRAME_BEGIN_LABEL       "Lframe"
388
#endif
389
#define CIE_AFTER_SIZE_LABEL    "LSCIE"
390
#define CIE_END_LABEL           "LECIE"
391
#define FDE_LABEL               "LSFDE"
392
#define FDE_AFTER_SIZE_LABEL    "LASFDE"
393
#define FDE_END_LABEL           "LEFDE"
394
#define LINE_NUMBER_BEGIN_LABEL "LSLT"
395
#define LINE_NUMBER_END_LABEL   "LELT"
396
#define LN_PROLOG_AS_LABEL      "LASLTP"
397
#define LN_PROLOG_END_LABEL     "LELTP"
398
#define DIE_LABEL_PREFIX        "DW"
399
 
400
/* The DWARF 2 CFA column which tracks the return address.  Normally this
401
   is the column for PC, or the first column after all of the hard
402
   registers.  */
403
#ifndef DWARF_FRAME_RETURN_COLUMN
404
#ifdef PC_REGNUM
405
#define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
406
#else
407
#define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
408
#endif
409
#endif
410
 
411
/* The mapping from gcc register number to DWARF 2 CFA column number.  By
412
   default, we just provide columns for all registers.  */
413
#ifndef DWARF_FRAME_REGNUM
414
#define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
415
#endif
416
 
417
/* Hook used by __throw.  */
418
 
419
rtx
420
expand_builtin_dwarf_sp_column (void)
421
{
422
  unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
423
  return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
424
}
425
 
426
/* Return a pointer to a copy of the section string name S with all
427
   attributes stripped off, and an asterisk prepended (for assemble_name).  */
428
 
429
static inline char *
430
stripattributes (const char *s)
431
{
432
  char *stripped = XNEWVEC (char, strlen (s) + 2);
433
  char *p = stripped;
434
 
435
  *p++ = '*';
436
 
437
  while (*s && *s != ',')
438
    *p++ = *s++;
439
 
440
  *p = '\0';
441
  return stripped;
442
}
443
 
444
/* Generate code to initialize the register size table.  */
445
 
446
void
447
expand_builtin_init_dwarf_reg_sizes (tree address)
448
{
449
  unsigned int i;
450
  enum machine_mode mode = TYPE_MODE (char_type_node);
451
  rtx addr = expand_normal (address);
452
  rtx mem = gen_rtx_MEM (BLKmode, addr);
453
  bool wrote_return_column = false;
454
 
455
  for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
456
    {
457
      int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
458
 
459
      if (rnum < DWARF_FRAME_REGISTERS)
460
        {
461
          HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
462
          enum machine_mode save_mode = reg_raw_mode[i];
463
          HOST_WIDE_INT size;
464
 
465
          if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
466
            save_mode = choose_hard_reg_mode (i, 1, true);
467
          if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
468
            {
469
              if (save_mode == VOIDmode)
470
                continue;
471
              wrote_return_column = true;
472
            }
473
          size = GET_MODE_SIZE (save_mode);
474
          if (offset < 0)
475
            continue;
476
 
477
          emit_move_insn (adjust_address (mem, mode, offset),
478
                          gen_int_mode (size, mode));
479
        }
480
    }
481
 
482
#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
483
  gcc_assert (wrote_return_column);
484
  i = DWARF_ALT_FRAME_RETURN_COLUMN;
485
  wrote_return_column = false;
486
#else
487
  i = DWARF_FRAME_RETURN_COLUMN;
488
#endif
489
 
490
  if (! wrote_return_column)
491
    {
492
      enum machine_mode save_mode = Pmode;
493
      HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
494
      HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
495
      emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
496
    }
497
}
498
 
499
/* Convert a DWARF call frame info. operation to its string name */
500
 
501
static const char *
502
dwarf_cfi_name (unsigned int cfi_opc)
503
{
504
  switch (cfi_opc)
505
    {
506
    case DW_CFA_advance_loc:
507
      return "DW_CFA_advance_loc";
508
    case DW_CFA_offset:
509
      return "DW_CFA_offset";
510
    case DW_CFA_restore:
511
      return "DW_CFA_restore";
512
    case DW_CFA_nop:
513
      return "DW_CFA_nop";
514
    case DW_CFA_set_loc:
515
      return "DW_CFA_set_loc";
516
    case DW_CFA_advance_loc1:
517
      return "DW_CFA_advance_loc1";
518
    case DW_CFA_advance_loc2:
519
      return "DW_CFA_advance_loc2";
520
    case DW_CFA_advance_loc4:
521
      return "DW_CFA_advance_loc4";
522
    case DW_CFA_offset_extended:
523
      return "DW_CFA_offset_extended";
524
    case DW_CFA_restore_extended:
525
      return "DW_CFA_restore_extended";
526
    case DW_CFA_undefined:
527
      return "DW_CFA_undefined";
528
    case DW_CFA_same_value:
529
      return "DW_CFA_same_value";
530
    case DW_CFA_register:
531
      return "DW_CFA_register";
532
    case DW_CFA_remember_state:
533
      return "DW_CFA_remember_state";
534
    case DW_CFA_restore_state:
535
      return "DW_CFA_restore_state";
536
    case DW_CFA_def_cfa:
537
      return "DW_CFA_def_cfa";
538
    case DW_CFA_def_cfa_register:
539
      return "DW_CFA_def_cfa_register";
540
    case DW_CFA_def_cfa_offset:
541
      return "DW_CFA_def_cfa_offset";
542
 
543
    /* DWARF 3 */
544
    case DW_CFA_def_cfa_expression:
545
      return "DW_CFA_def_cfa_expression";
546
    case DW_CFA_expression:
547
      return "DW_CFA_expression";
548
    case DW_CFA_offset_extended_sf:
549
      return "DW_CFA_offset_extended_sf";
550
    case DW_CFA_def_cfa_sf:
551
      return "DW_CFA_def_cfa_sf";
552
    case DW_CFA_def_cfa_offset_sf:
553
      return "DW_CFA_def_cfa_offset_sf";
554
 
555
    /* SGI/MIPS specific */
556
    case DW_CFA_MIPS_advance_loc8:
557
      return "DW_CFA_MIPS_advance_loc8";
558
 
559
    /* GNU extensions */
560
    case DW_CFA_GNU_window_save:
561
      return "DW_CFA_GNU_window_save";
562
    case DW_CFA_GNU_args_size:
563
      return "DW_CFA_GNU_args_size";
564
    case DW_CFA_GNU_negative_offset_extended:
565
      return "DW_CFA_GNU_negative_offset_extended";
566
 
567
    default:
568
      return "DW_CFA_<unknown>";
569
    }
570
}
571
 
572
/* Return a pointer to a newly allocated Call Frame Instruction.  */
573
 
574
static inline dw_cfi_ref
575
new_cfi (void)
576
{
577
  dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
578
 
579
  cfi->dw_cfi_next = NULL;
580
  cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
581
  cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
582
 
583
  return cfi;
584
}
585
 
586
/* Add a Call Frame Instruction to list of instructions.  */
587
 
588
static inline void
589
add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
590
{
591
  dw_cfi_ref *p;
592
 
593
  /* Find the end of the chain.  */
594
  for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
595
    ;
596
 
597
  *p = cfi;
598
}
599
 
600
/* Generate a new label for the CFI info to refer to.  */
601
 
602
char *
603
dwarf2out_cfi_label (void)
604
{
605
  static char label[20];
606
 
607
  ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
608
  ASM_OUTPUT_LABEL (asm_out_file, label);
609
  return label;
610
}
611
 
612
/* Add CFI to the current fde at the PC value indicated by LABEL if specified,
613
   or to the CIE if LABEL is NULL.  */
614
 
615
static void
616
add_fde_cfi (const char *label, dw_cfi_ref cfi)
617
{
618
  if (label)
619
    {
620
      dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
621
 
622
      if (*label == 0)
623
        label = dwarf2out_cfi_label ();
624
 
625
      if (fde->dw_fde_current_label == NULL
626
          || strcmp (label, fde->dw_fde_current_label) != 0)
627
        {
628
          dw_cfi_ref xcfi;
629
 
630
          label = xstrdup (label);
631
 
632
          /* Set the location counter to the new label.  */
633
          xcfi = new_cfi ();
634
          /* If we have a current label, advance from there, otherwise
635
             set the location directly using set_loc.  */
636
          xcfi->dw_cfi_opc = fde->dw_fde_current_label
637
                             ? DW_CFA_advance_loc4
638
                             : DW_CFA_set_loc;
639
          xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
640
          add_cfi (&fde->dw_fde_cfi, xcfi);
641
 
642
          fde->dw_fde_current_label = label;
643
        }
644
 
645
      add_cfi (&fde->dw_fde_cfi, cfi);
646
    }
647
 
648
  else
649
    add_cfi (&cie_cfi_head, cfi);
650
}
651
 
652
/* Subroutine of lookup_cfa.  */
653
 
654
static void
655
lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
656
{
657
  switch (cfi->dw_cfi_opc)
658
    {
659
    case DW_CFA_def_cfa_offset:
660
      loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
661
      break;
662
    case DW_CFA_def_cfa_offset_sf:
663
      loc->offset
664
        = cfi->dw_cfi_oprnd1.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
665
      break;
666
    case DW_CFA_def_cfa_register:
667
      loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
668
      break;
669
    case DW_CFA_def_cfa:
670
      loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
671
      loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
672
      break;
673
    case DW_CFA_def_cfa_sf:
674
      loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
675
      loc->offset
676
        = cfi->dw_cfi_oprnd2.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
677
      break;
678
    case DW_CFA_def_cfa_expression:
679
      get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
680
      break;
681
    default:
682
      break;
683
    }
684
}
685
 
686
/* Find the previous value for the CFA.  */
687
 
688
static void
689
lookup_cfa (dw_cfa_location *loc)
690
{
691
  dw_cfi_ref cfi;
692
 
693
  loc->reg = INVALID_REGNUM;
694
  loc->offset = 0;
695
  loc->indirect = 0;
696
  loc->base_offset = 0;
697
 
698
  for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
699
    lookup_cfa_1 (cfi, loc);
700
 
701
  if (fde_table_in_use)
702
    {
703
      dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
704
      for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
705
        lookup_cfa_1 (cfi, loc);
706
    }
707
}
708
 
709
/* The current rule for calculating the DWARF2 canonical frame address.  */
710
static dw_cfa_location cfa;
711
 
712
/* The register used for saving registers to the stack, and its offset
713
   from the CFA.  */
714
static dw_cfa_location cfa_store;
715
 
716
/* The running total of the size of arguments pushed onto the stack.  */
717
static HOST_WIDE_INT args_size;
718
 
719
/* The last args_size we actually output.  */
720
static HOST_WIDE_INT old_args_size;
721
 
722
/* Entry point to update the canonical frame address (CFA).
723
   LABEL is passed to add_fde_cfi.  The value of CFA is now to be
724
   calculated from REG+OFFSET.  */
725
 
726
void
727
dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
728
{
729
  dw_cfa_location loc;
730
  loc.indirect = 0;
731
  loc.base_offset = 0;
732
  loc.reg = reg;
733
  loc.offset = offset;
734
  def_cfa_1 (label, &loc);
735
}
736
 
737
/* Determine if two dw_cfa_location structures define the same data.  */
738
 
739
static bool
740
cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
741
{
742
  return (loc1->reg == loc2->reg
743
          && loc1->offset == loc2->offset
744
          && loc1->indirect == loc2->indirect
745
          && (loc1->indirect == 0
746
              || loc1->base_offset == loc2->base_offset));
747
}
748
 
749
/* This routine does the actual work.  The CFA is now calculated from
750
   the dw_cfa_location structure.  */
751
 
752
static void
753
def_cfa_1 (const char *label, dw_cfa_location *loc_p)
754
{
755
  dw_cfi_ref cfi;
756
  dw_cfa_location old_cfa, loc;
757
 
758
  cfa = *loc_p;
759
  loc = *loc_p;
760
 
761
  if (cfa_store.reg == loc.reg && loc.indirect == 0)
762
    cfa_store.offset = loc.offset;
763
 
764
  loc.reg = DWARF_FRAME_REGNUM (loc.reg);
765
  lookup_cfa (&old_cfa);
766
 
767
  /* If nothing changed, no need to issue any call frame instructions.  */
768
  if (cfa_equal_p (&loc, &old_cfa))
769
    return;
770
 
771
  cfi = new_cfi ();
772
 
773
  if (loc.reg == old_cfa.reg && !loc.indirect)
774
    {
775
      /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
776
         the CFA register did not change but the offset did.  */
777
      if (loc.offset < 0)
778
        {
779
          HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
780
          gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
781
 
782
          cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
783
          cfi->dw_cfi_oprnd1.dw_cfi_offset = f_offset;
784
        }
785
      else
786
        {
787
          cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
788
          cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
789
        }
790
    }
791
 
792
#ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
793
  else if (loc.offset == old_cfa.offset
794
           && old_cfa.reg != INVALID_REGNUM
795
           && !loc.indirect)
796
    {
797
      /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
798
         indicating the CFA register has changed to <register> but the
799
         offset has not changed.  */
800
      cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
801
      cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
802
    }
803
#endif
804
 
805
  else if (loc.indirect == 0)
806
    {
807
      /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
808
         indicating the CFA register has changed to <register> with
809
         the specified offset.  */
810
      if (loc.offset < 0)
811
        {
812
          HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
813
          gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
814
 
815
          cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
816
          cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
817
          cfi->dw_cfi_oprnd2.dw_cfi_offset = f_offset;
818
        }
819
      else
820
        {
821
          cfi->dw_cfi_opc = DW_CFA_def_cfa;
822
          cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
823
          cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
824
        }
825
    }
826
  else
827
    {
828
      /* Construct a DW_CFA_def_cfa_expression instruction to
829
         calculate the CFA using a full location expression since no
830
         register-offset pair is available.  */
831
      struct dw_loc_descr_struct *loc_list;
832
 
833
      cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
834
      loc_list = build_cfa_loc (&loc, 0);
835
      cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
836
    }
837
 
838
  add_fde_cfi (label, cfi);
839
}
840
 
841
/* Add the CFI for saving a register.  REG is the CFA column number.
842
   LABEL is passed to add_fde_cfi.
843
   If SREG is -1, the register is saved at OFFSET from the CFA;
844
   otherwise it is saved in SREG.  */
845
 
846
static void
847
reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
848
{
849
  dw_cfi_ref cfi = new_cfi ();
850
 
851
  cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
852
 
853
  if (sreg == INVALID_REGNUM)
854
    {
855
      if (reg & ~0x3f)
856
        /* The register number won't fit in 6 bits, so we have to use
857
           the long form.  */
858
        cfi->dw_cfi_opc = DW_CFA_offset_extended;
859
      else
860
        cfi->dw_cfi_opc = DW_CFA_offset;
861
 
862
#ifdef ENABLE_CHECKING
863
      {
864
        /* If we get an offset that is not a multiple of
865
           DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
866
           definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
867
           description.  */
868
        HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
869
 
870
        gcc_assert (check_offset * DWARF_CIE_DATA_ALIGNMENT == offset);
871
      }
872
#endif
873
      offset /= DWARF_CIE_DATA_ALIGNMENT;
874
      if (offset < 0)
875
        cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
876
 
877
      cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
878
    }
879
  else if (sreg == reg)
880
    cfi->dw_cfi_opc = DW_CFA_same_value;
881
  else
882
    {
883
      cfi->dw_cfi_opc = DW_CFA_register;
884
      cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
885
    }
886
 
887
  add_fde_cfi (label, cfi);
888
}
889
 
890
/* Add the CFI for saving a register window.  LABEL is passed to reg_save.
891
   This CFI tells the unwinder that it needs to restore the window registers
892
   from the previous frame's window save area.
893
 
894
   ??? Perhaps we should note in the CIE where windows are saved (instead of
895
   assuming 0(cfa)) and what registers are in the window.  */
896
 
897
void
898
dwarf2out_window_save (const char *label)
899
{
900
  dw_cfi_ref cfi = new_cfi ();
901
 
902
  cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
903
  add_fde_cfi (label, cfi);
904
}
905
 
906
/* Add a CFI to update the running total of the size of arguments
907
   pushed onto the stack.  */
908
 
909
void
910
dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
911
{
912
  dw_cfi_ref cfi;
913
 
914
  if (size == old_args_size)
915
    return;
916
 
917
  old_args_size = size;
918
 
919
  cfi = new_cfi ();
920
  cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
921
  cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
922
  add_fde_cfi (label, cfi);
923
}
924
 
925
/* Entry point for saving a register to the stack.  REG is the GCC register
926
   number.  LABEL and OFFSET are passed to reg_save.  */
927
 
928
void
929
dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
930
{
931
  reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
932
}
933
 
934
/* Entry point for saving the return address in the stack.
935
   LABEL and OFFSET are passed to reg_save.  */
936
 
937
void
938
dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
939
{
940
  reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
941
}
942
 
943
/* Entry point for saving the return address in a register.
944
   LABEL and SREG are passed to reg_save.  */
945
 
946
void
947
dwarf2out_return_reg (const char *label, unsigned int sreg)
948
{
949
  reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
950
}
951
 
952
/* Record the initial position of the return address.  RTL is
953
   INCOMING_RETURN_ADDR_RTX.  */
954
 
955
static void
956
initial_return_save (rtx rtl)
957
{
958
  unsigned int reg = INVALID_REGNUM;
959
  HOST_WIDE_INT offset = 0;
960
 
961
  switch (GET_CODE (rtl))
962
    {
963
    case REG:
964
      /* RA is in a register.  */
965
      reg = DWARF_FRAME_REGNUM (REGNO (rtl));
966
      break;
967
 
968
    case MEM:
969
      /* RA is on the stack.  */
970
      rtl = XEXP (rtl, 0);
971
      switch (GET_CODE (rtl))
972
        {
973
        case REG:
974
          gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
975
          offset = 0;
976
          break;
977
 
978
        case PLUS:
979
          gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
980
          offset = INTVAL (XEXP (rtl, 1));
981
          break;
982
 
983
        case MINUS:
984
          gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
985
          offset = -INTVAL (XEXP (rtl, 1));
986
          break;
987
 
988
        default:
989
          gcc_unreachable ();
990
        }
991
 
992
      break;
993
 
994
    case PLUS:
995
      /* The return address is at some offset from any value we can
996
         actually load.  For instance, on the SPARC it is in %i7+8. Just
997
         ignore the offset for now; it doesn't matter for unwinding frames.  */
998
      gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
999
      initial_return_save (XEXP (rtl, 0));
1000
      return;
1001
 
1002
    default:
1003
      gcc_unreachable ();
1004
    }
1005
 
1006
  if (reg != DWARF_FRAME_RETURN_COLUMN)
1007
    reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1008
}
1009
 
1010
/* Given a SET, calculate the amount of stack adjustment it
1011
   contains.  */
1012
 
1013
static HOST_WIDE_INT
1014
stack_adjust_offset (rtx pattern)
1015
{
1016
  rtx src = SET_SRC (pattern);
1017
  rtx dest = SET_DEST (pattern);
1018
  HOST_WIDE_INT offset = 0;
1019
  enum rtx_code code;
1020
 
1021
  if (dest == stack_pointer_rtx)
1022
    {
1023
      /* (set (reg sp) (plus (reg sp) (const_int))) */
1024
      code = GET_CODE (src);
1025
      if (! (code == PLUS || code == MINUS)
1026
          || XEXP (src, 0) != stack_pointer_rtx
1027
          || GET_CODE (XEXP (src, 1)) != CONST_INT)
1028
        return 0;
1029
 
1030
      offset = INTVAL (XEXP (src, 1));
1031
      if (code == PLUS)
1032
        offset = -offset;
1033
    }
1034
  else if (MEM_P (dest))
1035
    {
1036
      /* (set (mem (pre_dec (reg sp))) (foo)) */
1037
      src = XEXP (dest, 0);
1038
      code = GET_CODE (src);
1039
 
1040
      switch (code)
1041
        {
1042
        case PRE_MODIFY:
1043
        case POST_MODIFY:
1044
          if (XEXP (src, 0) == stack_pointer_rtx)
1045
            {
1046
              rtx val = XEXP (XEXP (src, 1), 1);
1047
              /* We handle only adjustments by constant amount.  */
1048
              gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1049
                          && GET_CODE (val) == CONST_INT);
1050
              offset = -INTVAL (val);
1051
              break;
1052
            }
1053
          return 0;
1054
 
1055
        case PRE_DEC:
1056
        case POST_DEC:
1057
          if (XEXP (src, 0) == stack_pointer_rtx)
1058
            {
1059
              offset = GET_MODE_SIZE (GET_MODE (dest));
1060
              break;
1061
            }
1062
          return 0;
1063
 
1064
        case PRE_INC:
1065
        case POST_INC:
1066
          if (XEXP (src, 0) == stack_pointer_rtx)
1067
            {
1068
              offset = -GET_MODE_SIZE (GET_MODE (dest));
1069
              break;
1070
            }
1071
          return 0;
1072
 
1073
        default:
1074
          return 0;
1075
        }
1076
    }
1077
  else
1078
    return 0;
1079
 
1080
  return offset;
1081
}
1082
 
1083
/* Check INSN to see if it looks like a push or a stack adjustment, and
1084
   make a note of it if it does.  EH uses this information to find out how
1085
   much extra space it needs to pop off the stack.  */
1086
 
1087
static void
1088
dwarf2out_stack_adjust (rtx insn, bool after_p)
1089
{
1090
  HOST_WIDE_INT offset;
1091
  const char *label;
1092
  int i;
1093
 
1094
  /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1095
     with this function.  Proper support would require all frame-related
1096
     insns to be marked, and to be able to handle saving state around
1097
     epilogues textually in the middle of the function.  */
1098
  if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1099
    return;
1100
 
1101
  /* If only calls can throw, and we have a frame pointer,
1102
     save up adjustments until we see the CALL_INSN.  */
1103
  if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1104
    {
1105
      if (CALL_P (insn) && !after_p)
1106
        {
1107
          /* Extract the size of the args from the CALL rtx itself.  */
1108
          insn = PATTERN (insn);
1109
          if (GET_CODE (insn) == PARALLEL)
1110
            insn = XVECEXP (insn, 0, 0);
1111
          if (GET_CODE (insn) == SET)
1112
            insn = SET_SRC (insn);
1113
          gcc_assert (GET_CODE (insn) == CALL);
1114
          dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1115
        }
1116
      return;
1117
    }
1118
 
1119
  if (CALL_P (insn) && !after_p)
1120
    {
1121
      if (!flag_asynchronous_unwind_tables)
1122
        dwarf2out_args_size ("", args_size);
1123
      return;
1124
    }
1125
  else if (BARRIER_P (insn))
1126
    {
1127
      /* When we see a BARRIER, we know to reset args_size to 0.  Usually
1128
         the compiler will have already emitted a stack adjustment, but
1129
         doesn't bother for calls to noreturn functions.  */
1130
#ifdef STACK_GROWS_DOWNWARD
1131
      offset = -args_size;
1132
#else
1133
      offset = args_size;
1134
#endif
1135
    }
1136
  else if (GET_CODE (PATTERN (insn)) == SET)
1137
    offset = stack_adjust_offset (PATTERN (insn));
1138
  else if (GET_CODE (PATTERN (insn)) == PARALLEL
1139
           || GET_CODE (PATTERN (insn)) == SEQUENCE)
1140
    {
1141
      /* There may be stack adjustments inside compound insns.  Search
1142
         for them.  */
1143
      for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1144
        if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1145
          offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1146
    }
1147
  else
1148
    return;
1149
 
1150
  if (offset == 0)
1151
    return;
1152
 
1153
  if (cfa.reg == STACK_POINTER_REGNUM)
1154
    cfa.offset += offset;
1155
 
1156
#ifndef STACK_GROWS_DOWNWARD
1157
  offset = -offset;
1158
#endif
1159
 
1160
  args_size += offset;
1161
  if (args_size < 0)
1162
    args_size = 0;
1163
 
1164
  label = dwarf2out_cfi_label ();
1165
  def_cfa_1 (label, &cfa);
1166
  if (flag_asynchronous_unwind_tables)
1167
    dwarf2out_args_size (label, args_size);
1168
}
1169
 
1170
#endif
1171
 
1172
/* We delay emitting a register save until either (a) we reach the end
1173
   of the prologue or (b) the register is clobbered.  This clusters
1174
   register saves so that there are fewer pc advances.  */
1175
 
1176
struct queued_reg_save GTY(())
1177
{
1178
  struct queued_reg_save *next;
1179
  rtx reg;
1180
  HOST_WIDE_INT cfa_offset;
1181
  rtx saved_reg;
1182
};
1183
 
1184
static GTY(()) struct queued_reg_save *queued_reg_saves;
1185
 
1186
/* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1187
struct reg_saved_in_data GTY(()) {
1188
  rtx orig_reg;
1189
  rtx saved_in_reg;
1190
};
1191
 
1192
/* A list of registers saved in other registers.
1193
   The list intentionally has a small maximum capacity of 4; if your
1194
   port needs more than that, you might consider implementing a
1195
   more efficient data structure.  */
1196
static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1197
static GTY(()) size_t num_regs_saved_in_regs;
1198
 
1199
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1200
static const char *last_reg_save_label;
1201
 
1202
/* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1203
   SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1204
 
1205
static void
1206
queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1207
{
1208
  struct queued_reg_save *q;
1209
 
1210
  /* Duplicates waste space, but it's also necessary to remove them
1211
     for correctness, since the queue gets output in reverse
1212
     order.  */
1213
  for (q = queued_reg_saves; q != NULL; q = q->next)
1214
    if (REGNO (q->reg) == REGNO (reg))
1215
      break;
1216
 
1217
  if (q == NULL)
1218
    {
1219
      q = ggc_alloc (sizeof (*q));
1220
      q->next = queued_reg_saves;
1221
      queued_reg_saves = q;
1222
    }
1223
 
1224
  q->reg = reg;
1225
  q->cfa_offset = offset;
1226
  q->saved_reg = sreg;
1227
 
1228
  last_reg_save_label = label;
1229
}
1230
 
1231
/* Output all the entries in QUEUED_REG_SAVES.  */
1232
 
1233
static void
1234
flush_queued_reg_saves (void)
1235
{
1236
  struct queued_reg_save *q;
1237
 
1238
  for (q = queued_reg_saves; q; q = q->next)
1239
    {
1240
      size_t i;
1241
      unsigned int reg, sreg;
1242
 
1243
      for (i = 0; i < num_regs_saved_in_regs; i++)
1244
        if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1245
          break;
1246
      if (q->saved_reg && i == num_regs_saved_in_regs)
1247
        {
1248
          gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1249
          num_regs_saved_in_regs++;
1250
        }
1251
      if (i != num_regs_saved_in_regs)
1252
        {
1253
          regs_saved_in_regs[i].orig_reg = q->reg;
1254
          regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1255
        }
1256
 
1257
      reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1258
      if (q->saved_reg)
1259
        sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1260
      else
1261
        sreg = INVALID_REGNUM;
1262
      reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1263
    }
1264
 
1265
  queued_reg_saves = NULL;
1266
  last_reg_save_label = NULL;
1267
}
1268
 
1269
/* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1270
   location for?  Or, does it clobber a register which we've previously
1271
   said that some other register is saved in, and for which we now
1272
   have a new location for?  */
1273
 
1274
static bool
1275
clobbers_queued_reg_save (rtx insn)
1276
{
1277
  struct queued_reg_save *q;
1278
 
1279
  for (q = queued_reg_saves; q; q = q->next)
1280
    {
1281
      size_t i;
1282
      if (modified_in_p (q->reg, insn))
1283
        return true;
1284
      for (i = 0; i < num_regs_saved_in_regs; i++)
1285
        if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1286
            && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1287
          return true;
1288
    }
1289
 
1290
  return false;
1291
}
1292
 
1293
/* Entry point for saving the first register into the second.  */
1294
 
1295
void
1296
dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1297
{
1298
  size_t i;
1299
  unsigned int regno, sregno;
1300
 
1301
  for (i = 0; i < num_regs_saved_in_regs; i++)
1302
    if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1303
      break;
1304
  if (i == num_regs_saved_in_regs)
1305
    {
1306
      gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1307
      num_regs_saved_in_regs++;
1308
    }
1309
  regs_saved_in_regs[i].orig_reg = reg;
1310
  regs_saved_in_regs[i].saved_in_reg = sreg;
1311
 
1312
  regno = DWARF_FRAME_REGNUM (REGNO (reg));
1313
  sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1314
  reg_save (label, regno, sregno, 0);
1315
}
1316
 
1317
/* What register, if any, is currently saved in REG?  */
1318
 
1319
static rtx
1320
reg_saved_in (rtx reg)
1321
{
1322
  unsigned int regn = REGNO (reg);
1323
  size_t i;
1324
  struct queued_reg_save *q;
1325
 
1326
  for (q = queued_reg_saves; q; q = q->next)
1327
    if (q->saved_reg && regn == REGNO (q->saved_reg))
1328
      return q->reg;
1329
 
1330
  for (i = 0; i < num_regs_saved_in_regs; i++)
1331
    if (regs_saved_in_regs[i].saved_in_reg
1332
        && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1333
      return regs_saved_in_regs[i].orig_reg;
1334
 
1335
  return NULL_RTX;
1336
}
1337
 
1338
 
1339
/* A temporary register holding an integral value used in adjusting SP
1340
   or setting up the store_reg.  The "offset" field holds the integer
1341
   value, not an offset.  */
1342
static dw_cfa_location cfa_temp;
1343
 
1344
/* Record call frame debugging information for an expression EXPR,
1345
   which either sets SP or FP (adjusting how we calculate the frame
1346
   address) or saves a register to the stack or another register.
1347
   LABEL indicates the address of EXPR.
1348
 
1349
   This function encodes a state machine mapping rtxes to actions on
1350
   cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1351
   users need not read the source code.
1352
 
1353
  The High-Level Picture
1354
 
1355
  Changes in the register we use to calculate the CFA: Currently we
1356
  assume that if you copy the CFA register into another register, we
1357
  should take the other one as the new CFA register; this seems to
1358
  work pretty well.  If it's wrong for some target, it's simple
1359
  enough not to set RTX_FRAME_RELATED_P on the insn in question.
1360
 
1361
  Changes in the register we use for saving registers to the stack:
1362
  This is usually SP, but not always.  Again, we deduce that if you
1363
  copy SP into another register (and SP is not the CFA register),
1364
  then the new register is the one we will be using for register
1365
  saves.  This also seems to work.
1366
 
1367
  Register saves: There's not much guesswork about this one; if
1368
  RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1369
  register save, and the register used to calculate the destination
1370
  had better be the one we think we're using for this purpose.
1371
  It's also assumed that a copy from a call-saved register to another
1372
  register is saving that register if RTX_FRAME_RELATED_P is set on
1373
  that instruction.  If the copy is from a call-saved register to
1374
  the *same* register, that means that the register is now the same
1375
  value as in the caller.
1376
 
1377
  Except: If the register being saved is the CFA register, and the
1378
  offset is nonzero, we are saving the CFA, so we assume we have to
1379
  use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
1380
  the intent is to save the value of SP from the previous frame.
1381
 
1382
  In addition, if a register has previously been saved to a different
1383
  register,
1384
 
1385
  Invariants / Summaries of Rules
1386
 
1387
  cfa          current rule for calculating the CFA.  It usually
1388
               consists of a register and an offset.
1389
  cfa_store    register used by prologue code to save things to the stack
1390
               cfa_store.offset is the offset from the value of
1391
               cfa_store.reg to the actual CFA
1392
  cfa_temp     register holding an integral value.  cfa_temp.offset
1393
               stores the value, which will be used to adjust the
1394
               stack pointer.  cfa_temp is also used like cfa_store,
1395
               to track stores to the stack via fp or a temp reg.
1396
 
1397
  Rules  1- 4: Setting a register's value to cfa.reg or an expression
1398
               with cfa.reg as the first operand changes the cfa.reg and its
1399
               cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
1400
               cfa_temp.offset.
1401
 
1402
  Rules  6- 9: Set a non-cfa.reg register value to a constant or an
1403
               expression yielding a constant.  This sets cfa_temp.reg
1404
               and cfa_temp.offset.
1405
 
1406
  Rule 5:      Create a new register cfa_store used to save items to the
1407
               stack.
1408
 
1409
  Rules 10-14: Save a register to the stack.  Define offset as the
1410
               difference of the original location and cfa_store's
1411
               location (or cfa_temp's location if cfa_temp is used).
1412
 
1413
  The Rules
1414
 
1415
  "{a,b}" indicates a choice of a xor b.
1416
  "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1417
 
1418
  Rule 1:
1419
  (set <reg1> <reg2>:cfa.reg)
1420
  effects: cfa.reg = <reg1>
1421
           cfa.offset unchanged
1422
           cfa_temp.reg = <reg1>
1423
           cfa_temp.offset = cfa.offset
1424
 
1425
  Rule 2:
1426
  (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1427
                              {<const_int>,<reg>:cfa_temp.reg}))
1428
  effects: cfa.reg = sp if fp used
1429
           cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1430
           cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1431
             if cfa_store.reg==sp
1432
 
1433
  Rule 3:
1434
  (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1435
  effects: cfa.reg = fp
1436
           cfa_offset += +/- <const_int>
1437
 
1438
  Rule 4:
1439
  (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1440
  constraints: <reg1> != fp
1441
               <reg1> != sp
1442
  effects: cfa.reg = <reg1>
1443
           cfa_temp.reg = <reg1>
1444
           cfa_temp.offset = cfa.offset
1445
 
1446
  Rule 5:
1447
  (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1448
  constraints: <reg1> != fp
1449
               <reg1> != sp
1450
  effects: cfa_store.reg = <reg1>
1451
           cfa_store.offset = cfa.offset - cfa_temp.offset
1452
 
1453
  Rule 6:
1454
  (set <reg> <const_int>)
1455
  effects: cfa_temp.reg = <reg>
1456
           cfa_temp.offset = <const_int>
1457
 
1458
  Rule 7:
1459
  (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1460
  effects: cfa_temp.reg = <reg1>
1461
           cfa_temp.offset |= <const_int>
1462
 
1463
  Rule 8:
1464
  (set <reg> (high <exp>))
1465
  effects: none
1466
 
1467
  Rule 9:
1468
  (set <reg> (lo_sum <exp> <const_int>))
1469
  effects: cfa_temp.reg = <reg>
1470
           cfa_temp.offset = <const_int>
1471
 
1472
  Rule 10:
1473
  (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1474
  effects: cfa_store.offset -= <const_int>
1475
           cfa.offset = cfa_store.offset if cfa.reg == sp
1476
           cfa.reg = sp
1477
           cfa.base_offset = -cfa_store.offset
1478
 
1479
  Rule 11:
1480
  (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1481
  effects: cfa_store.offset += -/+ mode_size(mem)
1482
           cfa.offset = cfa_store.offset if cfa.reg == sp
1483
           cfa.reg = sp
1484
           cfa.base_offset = -cfa_store.offset
1485
 
1486
  Rule 12:
1487
  (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1488
 
1489
       <reg2>)
1490
  effects: cfa.reg = <reg1>
1491
           cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1492
 
1493
  Rule 13:
1494
  (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1495
  effects: cfa.reg = <reg1>
1496
           cfa.base_offset = -{cfa_store,cfa_temp}.offset
1497
 
1498
  Rule 14:
1499
  (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1500
  effects: cfa.reg = <reg1>
1501
           cfa.base_offset = -cfa_temp.offset
1502
           cfa_temp.offset -= mode_size(mem)
1503
 
1504
  Rule 15:
1505
  (set <reg> {unspec, unspec_volatile})
1506
  effects: target-dependent  */
1507
 
1508
static void
1509
dwarf2out_frame_debug_expr (rtx expr, const char *label)
1510
{
1511
  rtx src, dest;
1512
  HOST_WIDE_INT offset;
1513
 
1514
  /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1515
     the PARALLEL independently. The first element is always processed if
1516
     it is a SET. This is for backward compatibility.   Other elements
1517
     are processed only if they are SETs and the RTX_FRAME_RELATED_P
1518
     flag is set in them.  */
1519
  if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1520
    {
1521
      int par_index;
1522
      int limit = XVECLEN (expr, 0);
1523
 
1524
      for (par_index = 0; par_index < limit; par_index++)
1525
        if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1526
            && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1527
                || par_index == 0))
1528
          dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1529
 
1530
      return;
1531
    }
1532
 
1533
  gcc_assert (GET_CODE (expr) == SET);
1534
 
1535
  src = SET_SRC (expr);
1536
  dest = SET_DEST (expr);
1537
 
1538
  if (REG_P (src))
1539
    {
1540
      rtx rsi = reg_saved_in (src);
1541
      if (rsi)
1542
        src = rsi;
1543
    }
1544
 
1545
  switch (GET_CODE (dest))
1546
    {
1547
    case REG:
1548
      switch (GET_CODE (src))
1549
        {
1550
          /* Setting FP from SP.  */
1551
        case REG:
1552
          if (cfa.reg == (unsigned) REGNO (src))
1553
            {
1554
              /* Rule 1 */
1555
              /* Update the CFA rule wrt SP or FP.  Make sure src is
1556
                 relative to the current CFA register.
1557
 
1558
                 We used to require that dest be either SP or FP, but the
1559
                 ARM copies SP to a temporary register, and from there to
1560
                 FP.  So we just rely on the backends to only set
1561
                 RTX_FRAME_RELATED_P on appropriate insns.  */
1562
              cfa.reg = REGNO (dest);
1563
              cfa_temp.reg = cfa.reg;
1564
              cfa_temp.offset = cfa.offset;
1565
            }
1566
          else
1567
            {
1568
              /* Saving a register in a register.  */
1569
              gcc_assert (!fixed_regs [REGNO (dest)]
1570
                          /* For the SPARC and its register window.  */
1571
                          || (DWARF_FRAME_REGNUM (REGNO (src))
1572
                              == DWARF_FRAME_RETURN_COLUMN));
1573
              queue_reg_save (label, src, dest, 0);
1574
            }
1575
          break;
1576
 
1577
        case PLUS:
1578
        case MINUS:
1579
        case LO_SUM:
1580
          if (dest == stack_pointer_rtx)
1581
            {
1582
              /* Rule 2 */
1583
              /* Adjusting SP.  */
1584
              switch (GET_CODE (XEXP (src, 1)))
1585
                {
1586
                case CONST_INT:
1587
                  offset = INTVAL (XEXP (src, 1));
1588
                  break;
1589
                case REG:
1590
                  gcc_assert ((unsigned) REGNO (XEXP (src, 1))
1591
                              == cfa_temp.reg);
1592
                  offset = cfa_temp.offset;
1593
                  break;
1594
                default:
1595
                  gcc_unreachable ();
1596
                }
1597
 
1598
              if (XEXP (src, 0) == hard_frame_pointer_rtx)
1599
                {
1600
                  /* Restoring SP from FP in the epilogue.  */
1601
                  gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
1602
                  cfa.reg = STACK_POINTER_REGNUM;
1603
                }
1604
              else if (GET_CODE (src) == LO_SUM)
1605
                /* Assume we've set the source reg of the LO_SUM from sp.  */
1606
                ;
1607
              else
1608
                gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
1609
 
1610
              if (GET_CODE (src) != MINUS)
1611
                offset = -offset;
1612
              if (cfa.reg == STACK_POINTER_REGNUM)
1613
                cfa.offset += offset;
1614
              if (cfa_store.reg == STACK_POINTER_REGNUM)
1615
                cfa_store.offset += offset;
1616
            }
1617
          else if (dest == hard_frame_pointer_rtx)
1618
            {
1619
              /* Rule 3 */
1620
              /* Either setting the FP from an offset of the SP,
1621
                 or adjusting the FP */
1622
              gcc_assert (frame_pointer_needed);
1623
 
1624
              gcc_assert (REG_P (XEXP (src, 0))
1625
                          && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1626
                          && GET_CODE (XEXP (src, 1)) == CONST_INT);
1627
              offset = INTVAL (XEXP (src, 1));
1628
              if (GET_CODE (src) != MINUS)
1629
                offset = -offset;
1630
              cfa.offset += offset;
1631
              cfa.reg = HARD_FRAME_POINTER_REGNUM;
1632
            }
1633
          else
1634
            {
1635
              gcc_assert (GET_CODE (src) != MINUS);
1636
 
1637
              /* Rule 4 */
1638
              if (REG_P (XEXP (src, 0))
1639
                  && REGNO (XEXP (src, 0)) == cfa.reg
1640
                  && GET_CODE (XEXP (src, 1)) == CONST_INT)
1641
                {
1642
                  /* Setting a temporary CFA register that will be copied
1643
                     into the FP later on.  */
1644
                  offset = - INTVAL (XEXP (src, 1));
1645
                  cfa.offset += offset;
1646
                  cfa.reg = REGNO (dest);
1647
                  /* Or used to save regs to the stack.  */
1648
                  cfa_temp.reg = cfa.reg;
1649
                  cfa_temp.offset = cfa.offset;
1650
                }
1651
 
1652
              /* Rule 5 */
1653
              else if (REG_P (XEXP (src, 0))
1654
                       && REGNO (XEXP (src, 0)) == cfa_temp.reg
1655
                       && XEXP (src, 1) == stack_pointer_rtx)
1656
                {
1657
                  /* Setting a scratch register that we will use instead
1658
                     of SP for saving registers to the stack.  */
1659
                  gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
1660
                  cfa_store.reg = REGNO (dest);
1661
                  cfa_store.offset = cfa.offset - cfa_temp.offset;
1662
                }
1663
 
1664
              /* Rule 9 */
1665
              else if (GET_CODE (src) == LO_SUM
1666
                       && GET_CODE (XEXP (src, 1)) == CONST_INT)
1667
                {
1668
                  cfa_temp.reg = REGNO (dest);
1669
                  cfa_temp.offset = INTVAL (XEXP (src, 1));
1670
                }
1671
              else
1672
                gcc_unreachable ();
1673
            }
1674
          break;
1675
 
1676
          /* Rule 6 */
1677
        case CONST_INT:
1678
          cfa_temp.reg = REGNO (dest);
1679
          cfa_temp.offset = INTVAL (src);
1680
          break;
1681
 
1682
          /* Rule 7 */
1683
        case IOR:
1684
          gcc_assert (REG_P (XEXP (src, 0))
1685
                      && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
1686
                      && GET_CODE (XEXP (src, 1)) == CONST_INT);
1687
 
1688
          if ((unsigned) REGNO (dest) != cfa_temp.reg)
1689
            cfa_temp.reg = REGNO (dest);
1690
          cfa_temp.offset |= INTVAL (XEXP (src, 1));
1691
          break;
1692
 
1693
          /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1694
             which will fill in all of the bits.  */
1695
          /* Rule 8 */
1696
        case HIGH:
1697
          break;
1698
 
1699
          /* Rule 15 */
1700
        case UNSPEC:
1701
        case UNSPEC_VOLATILE:
1702
          gcc_assert (targetm.dwarf_handle_frame_unspec);
1703
          targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
1704
          return;
1705
 
1706
        default:
1707
          gcc_unreachable ();
1708
        }
1709
 
1710
      def_cfa_1 (label, &cfa);
1711
      break;
1712
 
1713
    case MEM:
1714
      gcc_assert (REG_P (src));
1715
 
1716
      /* Saving a register to the stack.  Make sure dest is relative to the
1717
         CFA register.  */
1718
      switch (GET_CODE (XEXP (dest, 0)))
1719
        {
1720
          /* Rule 10 */
1721
          /* With a push.  */
1722
        case PRE_MODIFY:
1723
          /* We can't handle variable size modifications.  */
1724
          gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
1725
                      == CONST_INT);
1726
          offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1727
 
1728
          gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1729
                      && cfa_store.reg == STACK_POINTER_REGNUM);
1730
 
1731
          cfa_store.offset += offset;
1732
          if (cfa.reg == STACK_POINTER_REGNUM)
1733
            cfa.offset = cfa_store.offset;
1734
 
1735
          offset = -cfa_store.offset;
1736
          break;
1737
 
1738
          /* Rule 11 */
1739
        case PRE_INC:
1740
        case PRE_DEC:
1741
          offset = GET_MODE_SIZE (GET_MODE (dest));
1742
          if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1743
            offset = -offset;
1744
 
1745
          gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1746
                      && cfa_store.reg == STACK_POINTER_REGNUM);
1747
 
1748
          cfa_store.offset += offset;
1749
          if (cfa.reg == STACK_POINTER_REGNUM)
1750
            cfa.offset = cfa_store.offset;
1751
 
1752
          offset = -cfa_store.offset;
1753
          break;
1754
 
1755
          /* Rule 12 */
1756
          /* With an offset.  */
1757
        case PLUS:
1758
        case MINUS:
1759
        case LO_SUM:
1760
          {
1761
            int regno;
1762
 
1763
            gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT
1764
                        && REG_P (XEXP (XEXP (dest, 0), 0)));
1765
            offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1766
            if (GET_CODE (XEXP (dest, 0)) == MINUS)
1767
              offset = -offset;
1768
 
1769
            regno = REGNO (XEXP (XEXP (dest, 0), 0));
1770
 
1771
            if (cfa_store.reg == (unsigned) regno)
1772
              offset -= cfa_store.offset;
1773
            else
1774
              {
1775
                gcc_assert (cfa_temp.reg == (unsigned) regno);
1776
                offset -= cfa_temp.offset;
1777
              }
1778
          }
1779
          break;
1780
 
1781
          /* Rule 13 */
1782
          /* Without an offset.  */
1783
        case REG:
1784
          {
1785
            int regno = REGNO (XEXP (dest, 0));
1786
 
1787
            if (cfa_store.reg == (unsigned) regno)
1788
              offset = -cfa_store.offset;
1789
            else
1790
              {
1791
                gcc_assert (cfa_temp.reg == (unsigned) regno);
1792
                offset = -cfa_temp.offset;
1793
              }
1794
          }
1795
          break;
1796
 
1797
          /* Rule 14 */
1798
        case POST_INC:
1799
          gcc_assert (cfa_temp.reg
1800
                      == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
1801
          offset = -cfa_temp.offset;
1802
          cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1803
          break;
1804
 
1805
        default:
1806
          gcc_unreachable ();
1807
        }
1808
 
1809
      if (REGNO (src) != STACK_POINTER_REGNUM
1810
          && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1811
          && (unsigned) REGNO (src) == cfa.reg)
1812
        {
1813
          /* We're storing the current CFA reg into the stack.  */
1814
 
1815
          if (cfa.offset == 0)
1816
            {
1817
              /* If the source register is exactly the CFA, assume
1818
                 we're saving SP like any other register; this happens
1819
                 on the ARM.  */
1820
              def_cfa_1 (label, &cfa);
1821
              queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
1822
              break;
1823
            }
1824
          else
1825
            {
1826
              /* Otherwise, we'll need to look in the stack to
1827
                 calculate the CFA.  */
1828
              rtx x = XEXP (dest, 0);
1829
 
1830
              if (!REG_P (x))
1831
                x = XEXP (x, 0);
1832
              gcc_assert (REG_P (x));
1833
 
1834
              cfa.reg = REGNO (x);
1835
              cfa.base_offset = offset;
1836
              cfa.indirect = 1;
1837
              def_cfa_1 (label, &cfa);
1838
              break;
1839
            }
1840
        }
1841
 
1842
      def_cfa_1 (label, &cfa);
1843
      queue_reg_save (label, src, NULL_RTX, offset);
1844
      break;
1845
 
1846
    default:
1847
      gcc_unreachable ();
1848
    }
1849
}
1850
 
1851
/* Record call frame debugging information for INSN, which either
1852
   sets SP or FP (adjusting how we calculate the frame address) or saves a
1853
   register to the stack.  If INSN is NULL_RTX, initialize our state.
1854
 
1855
   If AFTER_P is false, we're being called before the insn is emitted,
1856
   otherwise after.  Call instructions get invoked twice.  */
1857
 
1858
void
1859
dwarf2out_frame_debug (rtx insn, bool after_p)
1860
{
1861
  const char *label;
1862
  rtx src;
1863
 
1864
  if (insn == NULL_RTX)
1865
    {
1866
      size_t i;
1867
 
1868
      /* Flush any queued register saves.  */
1869
      flush_queued_reg_saves ();
1870
 
1871
      /* Set up state for generating call frame debug info.  */
1872
      lookup_cfa (&cfa);
1873
      gcc_assert (cfa.reg
1874
                  == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
1875
 
1876
      cfa.reg = STACK_POINTER_REGNUM;
1877
      cfa_store = cfa;
1878
      cfa_temp.reg = -1;
1879
      cfa_temp.offset = 0;
1880
 
1881
      for (i = 0; i < num_regs_saved_in_regs; i++)
1882
        {
1883
          regs_saved_in_regs[i].orig_reg = NULL_RTX;
1884
          regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
1885
        }
1886
      num_regs_saved_in_regs = 0;
1887
      return;
1888
    }
1889
 
1890
  if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
1891
    flush_queued_reg_saves ();
1892
 
1893
  if (! RTX_FRAME_RELATED_P (insn))
1894
    {
1895
      if (!ACCUMULATE_OUTGOING_ARGS)
1896
        dwarf2out_stack_adjust (insn, after_p);
1897
      return;
1898
    }
1899
 
1900
  label = dwarf2out_cfi_label ();
1901
  src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1902
  if (src)
1903
    insn = XEXP (src, 0);
1904
  else
1905
    insn = PATTERN (insn);
1906
 
1907
  dwarf2out_frame_debug_expr (insn, label);
1908
}
1909
 
1910
#endif
1911
 
1912
/* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
1913
static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1914
 (enum dwarf_call_frame_info cfi);
1915
 
1916
static enum dw_cfi_oprnd_type
1917
dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1918
{
1919
  switch (cfi)
1920
    {
1921
    case DW_CFA_nop:
1922
    case DW_CFA_GNU_window_save:
1923
      return dw_cfi_oprnd_unused;
1924
 
1925
    case DW_CFA_set_loc:
1926
    case DW_CFA_advance_loc1:
1927
    case DW_CFA_advance_loc2:
1928
    case DW_CFA_advance_loc4:
1929
    case DW_CFA_MIPS_advance_loc8:
1930
      return dw_cfi_oprnd_addr;
1931
 
1932
    case DW_CFA_offset:
1933
    case DW_CFA_offset_extended:
1934
    case DW_CFA_def_cfa:
1935
    case DW_CFA_offset_extended_sf:
1936
    case DW_CFA_def_cfa_sf:
1937
    case DW_CFA_restore_extended:
1938
    case DW_CFA_undefined:
1939
    case DW_CFA_same_value:
1940
    case DW_CFA_def_cfa_register:
1941
    case DW_CFA_register:
1942
      return dw_cfi_oprnd_reg_num;
1943
 
1944
    case DW_CFA_def_cfa_offset:
1945
    case DW_CFA_GNU_args_size:
1946
    case DW_CFA_def_cfa_offset_sf:
1947
      return dw_cfi_oprnd_offset;
1948
 
1949
    case DW_CFA_def_cfa_expression:
1950
    case DW_CFA_expression:
1951
      return dw_cfi_oprnd_loc;
1952
 
1953
    default:
1954
      gcc_unreachable ();
1955
    }
1956
}
1957
 
1958
/* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
1959
static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1960
 (enum dwarf_call_frame_info cfi);
1961
 
1962
static enum dw_cfi_oprnd_type
1963
dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1964
{
1965
  switch (cfi)
1966
    {
1967
    case DW_CFA_def_cfa:
1968
    case DW_CFA_def_cfa_sf:
1969
    case DW_CFA_offset:
1970
    case DW_CFA_offset_extended_sf:
1971
    case DW_CFA_offset_extended:
1972
      return dw_cfi_oprnd_offset;
1973
 
1974
    case DW_CFA_register:
1975
      return dw_cfi_oprnd_reg_num;
1976
 
1977
    default:
1978
      return dw_cfi_oprnd_unused;
1979
    }
1980
}
1981
 
1982
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1983
 
1984
/* Switch to eh_frame_section.  If we don't have an eh_frame_section,
1985
   switch to the data section instead, and write out a synthetic label
1986
   for collect2.  */
1987
 
1988
static void
1989
switch_to_eh_frame_section (void)
1990
{
1991
  tree label;
1992
 
1993
#ifdef EH_FRAME_SECTION_NAME
1994
  if (eh_frame_section == 0)
1995
    {
1996
      int flags;
1997
 
1998
      if (EH_TABLES_CAN_BE_READ_ONLY)
1999
        {
2000
          int fde_encoding;
2001
          int per_encoding;
2002
          int lsda_encoding;
2003
 
2004
          fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2005
                                                       /*global=*/0);
2006
          per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2007
                                                       /*global=*/1);
2008
          lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2009
                                                        /*global=*/0);
2010
          flags = ((! flag_pic
2011
                    || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2012
                        && (fde_encoding & 0x70) != DW_EH_PE_aligned
2013
                        && (per_encoding & 0x70) != DW_EH_PE_absptr
2014
                        && (per_encoding & 0x70) != DW_EH_PE_aligned
2015
                        && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2016
                        && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2017
                   ? 0 : SECTION_WRITE);
2018
        }
2019
      else
2020
        flags = SECTION_WRITE;
2021
      eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2022
    }
2023
#endif
2024
 
2025
  if (eh_frame_section)
2026
    switch_to_section (eh_frame_section);
2027
  else
2028
    {
2029
      /* We have no special eh_frame section.  Put the information in
2030
         the data section and emit special labels to guide collect2.  */
2031
      switch_to_section (data_section);
2032
      label = get_file_function_name ('F');
2033
      ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2034
      targetm.asm_out.globalize_label (asm_out_file,
2035
                                       IDENTIFIER_POINTER (label));
2036
      ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
2037
    }
2038
}
2039
 
2040
/* Output a Call Frame Information opcode and its operand(s).  */
2041
 
2042
static void
2043
output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2044
{
2045
  unsigned long r;
2046
  if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
2047
    dw2_asm_output_data (1, (cfi->dw_cfi_opc
2048
                             | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
2049
                         "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
2050
                         cfi->dw_cfi_oprnd1.dw_cfi_offset);
2051
  else if (cfi->dw_cfi_opc == DW_CFA_offset)
2052
    {
2053
      r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2054
      dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2055
                           "DW_CFA_offset, column 0x%lx", r);
2056
      dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2057
    }
2058
  else if (cfi->dw_cfi_opc == DW_CFA_restore)
2059
    {
2060
      r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2061
      dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2062
                           "DW_CFA_restore, column 0x%lx", r);
2063
    }
2064
  else
2065
    {
2066
      dw2_asm_output_data (1, cfi->dw_cfi_opc,
2067
                           "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
2068
 
2069
      switch (cfi->dw_cfi_opc)
2070
        {
2071
        case DW_CFA_set_loc:
2072
          if (for_eh)
2073
            dw2_asm_output_encoded_addr_rtx (
2074
                ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2075
                gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
2076
                false, NULL);
2077
          else
2078
            dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2079
                                 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
2080
          fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2081
          break;
2082
 
2083
        case DW_CFA_advance_loc1:
2084
          dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2085
                                fde->dw_fde_current_label, NULL);
2086
          fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2087
          break;
2088
 
2089
        case DW_CFA_advance_loc2:
2090
          dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2091
                                fde->dw_fde_current_label, NULL);
2092
          fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2093
          break;
2094
 
2095
        case DW_CFA_advance_loc4:
2096
          dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2097
                                fde->dw_fde_current_label, NULL);
2098
          fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2099
          break;
2100
 
2101
        case DW_CFA_MIPS_advance_loc8:
2102
          dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2103
                                fde->dw_fde_current_label, NULL);
2104
          fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2105
          break;
2106
 
2107
        case DW_CFA_offset_extended:
2108
        case DW_CFA_def_cfa:
2109
          r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2110
          dw2_asm_output_data_uleb128 (r, NULL);
2111
          dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2112
          break;
2113
 
2114
        case DW_CFA_offset_extended_sf:
2115
        case DW_CFA_def_cfa_sf:
2116
          r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2117
          dw2_asm_output_data_uleb128 (r, NULL);
2118
          dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2119
          break;
2120
 
2121
        case DW_CFA_restore_extended:
2122
        case DW_CFA_undefined:
2123
        case DW_CFA_same_value:
2124
        case DW_CFA_def_cfa_register:
2125
          r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2126
          dw2_asm_output_data_uleb128 (r, NULL);
2127
          break;
2128
 
2129
        case DW_CFA_register:
2130
          r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2131
          dw2_asm_output_data_uleb128 (r, NULL);
2132
          r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2133
          dw2_asm_output_data_uleb128 (r, NULL);
2134
          break;
2135
 
2136
        case DW_CFA_def_cfa_offset:
2137
        case DW_CFA_GNU_args_size:
2138
          dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2139
          break;
2140
 
2141
        case DW_CFA_def_cfa_offset_sf:
2142
          dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2143
          break;
2144
 
2145
        case DW_CFA_GNU_window_save:
2146
          break;
2147
 
2148
        case DW_CFA_def_cfa_expression:
2149
        case DW_CFA_expression:
2150
          output_cfa_loc (cfi);
2151
          break;
2152
 
2153
        case DW_CFA_GNU_negative_offset_extended:
2154
          /* Obsoleted by DW_CFA_offset_extended_sf.  */
2155
          gcc_unreachable ();
2156
 
2157
        default:
2158
          break;
2159
        }
2160
    }
2161
}
2162
 
2163
/* Output the call frame information used to record information
2164
   that relates to calculating the frame pointer, and records the
2165
   location of saved registers.  */
2166
 
2167
static void
2168
output_call_frame_info (int for_eh)
2169
{
2170
  unsigned int i;
2171
  dw_fde_ref fde;
2172
  dw_cfi_ref cfi;
2173
  char l1[20], l2[20], section_start_label[20];
2174
  bool any_lsda_needed = false;
2175
  char augmentation[6];
2176
  int augmentation_size;
2177
  int fde_encoding = DW_EH_PE_absptr;
2178
  int per_encoding = DW_EH_PE_absptr;
2179
  int lsda_encoding = DW_EH_PE_absptr;
2180
  int return_reg;
2181
 
2182
  /* Don't emit a CIE if there won't be any FDEs.  */
2183
  if (fde_table_in_use == 0)
2184
    return;
2185
 
2186
  /* If we make FDEs linkonce, we may have to emit an empty label for
2187
     an FDE that wouldn't otherwise be emitted.  We want to avoid
2188
     having an FDE kept around when the function it refers to is
2189
     discarded.  Example where this matters: a primary function
2190
     template in C++ requires EH information, but an explicit
2191
     specialization doesn't.  */
2192
  if (TARGET_USES_WEAK_UNWIND_INFO
2193
      && ! flag_asynchronous_unwind_tables
2194
      && for_eh)
2195
    for (i = 0; i < fde_table_in_use; i++)
2196
      if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2197
          && !fde_table[i].uses_eh_lsda
2198
          && ! DECL_WEAK (fde_table[i].decl))
2199
        targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2200
                                      for_eh, /* empty */ 1);
2201
 
2202
  /* If we don't have any functions we'll want to unwind out of, don't
2203
     emit any EH unwind information.  Note that if exceptions aren't
2204
     enabled, we won't have collected nothrow information, and if we
2205
     asked for asynchronous tables, we always want this info.  */
2206
  if (for_eh)
2207
    {
2208
      bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2209
 
2210
      for (i = 0; i < fde_table_in_use; i++)
2211
        if (fde_table[i].uses_eh_lsda)
2212
          any_eh_needed = any_lsda_needed = true;
2213
        else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2214
          any_eh_needed = true;
2215
        else if (! fde_table[i].nothrow
2216
                 && ! fde_table[i].all_throwers_are_sibcalls)
2217
          any_eh_needed = true;
2218
 
2219
      if (! any_eh_needed)
2220
        return;
2221
    }
2222
 
2223
  /* We're going to be generating comments, so turn on app.  */
2224
  if (flag_debug_asm)
2225
    app_enable ();
2226
 
2227
  if (for_eh)
2228
    switch_to_eh_frame_section ();
2229
  else
2230
    {
2231
      if (!debug_frame_section)
2232
        debug_frame_section = get_section (DEBUG_FRAME_SECTION,
2233
                                           SECTION_DEBUG, NULL);
2234
      switch_to_section (debug_frame_section);
2235
    }
2236
 
2237
  ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2238
  ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2239
 
2240
  /* Output the CIE.  */
2241
  ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2242
  ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2243
  if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
2244
    dw2_asm_output_data (4, 0xffffffff,
2245
      "Initial length escape value indicating 64-bit DWARF extension");
2246
  dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2247
                        "Length of Common Information Entry");
2248
  ASM_OUTPUT_LABEL (asm_out_file, l1);
2249
 
2250
  /* Now that the CIE pointer is PC-relative for EH,
2251
     use 0 to identify the CIE.  */
2252
  dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2253
                       (for_eh ? 0 : DWARF_CIE_ID),
2254
                       "CIE Identifier Tag");
2255
 
2256
  dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2257
 
2258
  augmentation[0] = 0;
2259
  augmentation_size = 0;
2260
  if (for_eh)
2261
    {
2262
      char *p;
2263
 
2264
      /* Augmentation:
2265
         z      Indicates that a uleb128 is present to size the
2266
                augmentation section.
2267
         L      Indicates the encoding (and thus presence) of
2268
                an LSDA pointer in the FDE augmentation.
2269
         R      Indicates a non-default pointer encoding for
2270
                FDE code pointers.
2271
         P      Indicates the presence of an encoding + language
2272
                personality routine in the CIE augmentation.  */
2273
 
2274
      fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2275
      per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2276
      lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2277
 
2278
      p = augmentation + 1;
2279
      if (eh_personality_libfunc)
2280
        {
2281
          *p++ = 'P';
2282
          augmentation_size += 1 + size_of_encoded_value (per_encoding);
2283
        }
2284
      if (any_lsda_needed)
2285
        {
2286
          *p++ = 'L';
2287
          augmentation_size += 1;
2288
        }
2289
      if (fde_encoding != DW_EH_PE_absptr)
2290
        {
2291
          *p++ = 'R';
2292
          augmentation_size += 1;
2293
        }
2294
      if (p > augmentation + 1)
2295
        {
2296
          augmentation[0] = 'z';
2297
          *p = '\0';
2298
        }
2299
 
2300
      /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
2301
      if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2302
        {
2303
          int offset = (  4             /* Length */
2304
                        + 4             /* CIE Id */
2305
                        + 1             /* CIE version */
2306
                        + strlen (augmentation) + 1     /* Augmentation */
2307
                        + size_of_uleb128 (1)           /* Code alignment */
2308
                        + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2309
                        + 1             /* RA column */
2310
                        + 1             /* Augmentation size */
2311
                        + 1             /* Personality encoding */ );
2312
          int pad = -offset & (PTR_SIZE - 1);
2313
 
2314
          augmentation_size += pad;
2315
 
2316
          /* Augmentations should be small, so there's scarce need to
2317
             iterate for a solution.  Die if we exceed one uleb128 byte.  */
2318
          gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2319
        }
2320
    }
2321
 
2322
  dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2323
  dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2324
  dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2325
                               "CIE Data Alignment Factor");
2326
 
2327
  return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
2328
  if (DW_CIE_VERSION == 1)
2329
    dw2_asm_output_data (1, return_reg, "CIE RA Column");
2330
  else
2331
    dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
2332
 
2333
  if (augmentation[0])
2334
    {
2335
      dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2336
      if (eh_personality_libfunc)
2337
        {
2338
          dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2339
                               eh_data_format_name (per_encoding));
2340
          dw2_asm_output_encoded_addr_rtx (per_encoding,
2341
                                           eh_personality_libfunc,
2342
                                           true, NULL);
2343
        }
2344
 
2345
      if (any_lsda_needed)
2346
        dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2347
                             eh_data_format_name (lsda_encoding));
2348
 
2349
      if (fde_encoding != DW_EH_PE_absptr)
2350
        dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2351
                             eh_data_format_name (fde_encoding));
2352
    }
2353
 
2354
  for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2355
    output_cfi (cfi, NULL, for_eh);
2356
 
2357
  /* Pad the CIE out to an address sized boundary.  */
2358
  ASM_OUTPUT_ALIGN (asm_out_file,
2359
                    floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2360
  ASM_OUTPUT_LABEL (asm_out_file, l2);
2361
 
2362
  /* Loop through all of the FDE's.  */
2363
  for (i = 0; i < fde_table_in_use; i++)
2364
    {
2365
      fde = &fde_table[i];
2366
 
2367
      /* Don't emit EH unwind info for leaf functions that don't need it.  */
2368
      if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2369
          && (fde->nothrow || fde->all_throwers_are_sibcalls)
2370
          && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2371
          && !fde->uses_eh_lsda)
2372
        continue;
2373
 
2374
      targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
2375
      targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
2376
      ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2377
      ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2378
      if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
2379
        dw2_asm_output_data (4, 0xffffffff,
2380
                             "Initial length escape value indicating 64-bit DWARF extension");
2381
      dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2382
                            "FDE Length");
2383
      ASM_OUTPUT_LABEL (asm_out_file, l1);
2384
 
2385
      if (for_eh)
2386
        dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2387
      else
2388
        dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2389
                               debug_frame_section, "FDE CIE offset");
2390
 
2391
      if (for_eh)
2392
        {
2393
          rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
2394
          SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
2395
          dw2_asm_output_encoded_addr_rtx (fde_encoding,
2396
                                           sym_ref,
2397
                                           false,
2398
                                           "FDE initial location");
2399
          if (fde->dw_fde_switched_sections)
2400
            {
2401
              rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode,
2402
                                      fde->dw_fde_unlikely_section_label);
2403
              rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode,
2404
                                      fde->dw_fde_hot_section_label);
2405
              SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
2406
              SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
2407
              dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false,
2408
                                               "FDE initial location");
2409
              dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2410
                                    fde->dw_fde_hot_section_end_label,
2411
                                    fde->dw_fde_hot_section_label,
2412
                                    "FDE address range");
2413
              dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false,
2414
                                               "FDE initial location");
2415
              dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2416
                                    fde->dw_fde_unlikely_section_end_label,
2417
                                    fde->dw_fde_unlikely_section_label,
2418
                                    "FDE address range");
2419
            }
2420
          else
2421
            dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2422
                                  fde->dw_fde_end, fde->dw_fde_begin,
2423
                                  "FDE address range");
2424
        }
2425
      else
2426
        {
2427
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2428
                               "FDE initial location");
2429
          if (fde->dw_fde_switched_sections)
2430
            {
2431
              dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2432
                                   fde->dw_fde_hot_section_label,
2433
                                   "FDE initial location");
2434
              dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2435
                                    fde->dw_fde_hot_section_end_label,
2436
                                    fde->dw_fde_hot_section_label,
2437
                                    "FDE address range");
2438
              dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2439
                                   fde->dw_fde_unlikely_section_label,
2440
                                   "FDE initial location");
2441
              dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2442
                                    fde->dw_fde_unlikely_section_end_label,
2443
                                    fde->dw_fde_unlikely_section_label,
2444
                                    "FDE address range");
2445
            }
2446
          else
2447
            dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2448
                                  fde->dw_fde_end, fde->dw_fde_begin,
2449
                                  "FDE address range");
2450
        }
2451
 
2452
      if (augmentation[0])
2453
        {
2454
          if (any_lsda_needed)
2455
            {
2456
              int size = size_of_encoded_value (lsda_encoding);
2457
 
2458
              if (lsda_encoding == DW_EH_PE_aligned)
2459
                {
2460
                  int offset = (  4             /* Length */
2461
                                + 4             /* CIE offset */
2462
                                + 2 * size_of_encoded_value (fde_encoding)
2463
                                + 1             /* Augmentation size */ );
2464
                  int pad = -offset & (PTR_SIZE - 1);
2465
 
2466
                  size += pad;
2467
                  gcc_assert (size_of_uleb128 (size) == 1);
2468
                }
2469
 
2470
              dw2_asm_output_data_uleb128 (size, "Augmentation size");
2471
 
2472
              if (fde->uses_eh_lsda)
2473
                {
2474
                  ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2475
                                               fde->funcdef_number);
2476
                  dw2_asm_output_encoded_addr_rtx (
2477
                        lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2478
                        false, "Language Specific Data Area");
2479
                }
2480
              else
2481
                {
2482
                  if (lsda_encoding == DW_EH_PE_aligned)
2483
                    ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2484
                  dw2_asm_output_data
2485
                    (size_of_encoded_value (lsda_encoding), 0,
2486
                     "Language Specific Data Area (none)");
2487
                }
2488
            }
2489
          else
2490
            dw2_asm_output_data_uleb128 (0, "Augmentation size");
2491
        }
2492
 
2493
      /* Loop through the Call Frame Instructions associated with
2494
         this FDE.  */
2495
      fde->dw_fde_current_label = fde->dw_fde_begin;
2496
      for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2497
        output_cfi (cfi, fde, for_eh);
2498
 
2499
      /* Pad the FDE out to an address sized boundary.  */
2500
      ASM_OUTPUT_ALIGN (asm_out_file,
2501
                        floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2502
      ASM_OUTPUT_LABEL (asm_out_file, l2);
2503
    }
2504
 
2505
  if (for_eh && targetm.terminate_dw2_eh_frame_info)
2506
    dw2_asm_output_data (4, 0, "End of Table");
2507
#ifdef MIPS_DEBUGGING_INFO
2508
  /* Work around Irix 6 assembler bug whereby labels at the end of a section
2509
     get a value of 0.  Putting .align 0 after the label fixes it.  */
2510
  ASM_OUTPUT_ALIGN (asm_out_file, 0);
2511
#endif
2512
 
2513
  /* Turn off app to make assembly quicker.  */
2514
  if (flag_debug_asm)
2515
    app_disable ();
2516
}
2517
 
2518
/* Output a marker (i.e. a label) for the beginning of a function, before
2519
   the prologue.  */
2520
 
2521
void
2522
dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2523
                          const char *file ATTRIBUTE_UNUSED)
2524
{
2525
  char label[MAX_ARTIFICIAL_LABEL_BYTES];
2526
  char * dup_label;
2527
  dw_fde_ref fde;
2528
 
2529
  current_function_func_begin_label = NULL;
2530
 
2531
#ifdef TARGET_UNWIND_INFO
2532
  /* ??? current_function_func_begin_label is also used by except.c
2533
     for call-site information.  We must emit this label if it might
2534
     be used.  */
2535
  if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2536
      && ! dwarf2out_do_frame ())
2537
    return;
2538
#else
2539
  if (! dwarf2out_do_frame ())
2540
    return;
2541
#endif
2542
 
2543
  switch_to_section (function_section (current_function_decl));
2544
  ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2545
                               current_function_funcdef_no);
2546
  ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2547
                          current_function_funcdef_no);
2548
  dup_label = xstrdup (label);
2549
  current_function_func_begin_label = dup_label;
2550
 
2551
#ifdef TARGET_UNWIND_INFO
2552
  /* We can elide the fde allocation if we're not emitting debug info.  */
2553
  if (! dwarf2out_do_frame ())
2554
    return;
2555
#endif
2556
 
2557
  /* Expand the fde table if necessary.  */
2558
  if (fde_table_in_use == fde_table_allocated)
2559
    {
2560
      fde_table_allocated += FDE_TABLE_INCREMENT;
2561
      fde_table = ggc_realloc (fde_table,
2562
                               fde_table_allocated * sizeof (dw_fde_node));
2563
      memset (fde_table + fde_table_in_use, 0,
2564
              FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2565
    }
2566
 
2567
  /* Record the FDE associated with this function.  */
2568
  current_funcdef_fde = fde_table_in_use;
2569
 
2570
  /* Add the new FDE at the end of the fde_table.  */
2571
  fde = &fde_table[fde_table_in_use++];
2572
  fde->decl = current_function_decl;
2573
  fde->dw_fde_begin = dup_label;
2574
  fde->dw_fde_current_label = dup_label;
2575
  fde->dw_fde_hot_section_label = NULL;
2576
  fde->dw_fde_hot_section_end_label = NULL;
2577
  fde->dw_fde_unlikely_section_label = NULL;
2578
  fde->dw_fde_unlikely_section_end_label = NULL;
2579
  fde->dw_fde_switched_sections = false;
2580
  fde->dw_fde_end = NULL;
2581
  fde->dw_fde_cfi = NULL;
2582
  fde->funcdef_number = current_function_funcdef_no;
2583
  fde->nothrow = TREE_NOTHROW (current_function_decl);
2584
  fde->uses_eh_lsda = cfun->uses_eh_lsda;
2585
  fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2586
 
2587
  args_size = old_args_size = 0;
2588
 
2589
  /* We only want to output line number information for the genuine dwarf2
2590
     prologue case, not the eh frame case.  */
2591
#ifdef DWARF2_DEBUGGING_INFO
2592
  if (file)
2593
    dwarf2out_source_line (line, file);
2594
#endif
2595
}
2596
 
2597
/* Output a marker (i.e. a label) for the absolute end of the generated code
2598
   for a function definition.  This gets called *after* the epilogue code has
2599
   been generated.  */
2600
 
2601
void
2602
dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2603
                        const char *file ATTRIBUTE_UNUSED)
2604
{
2605
  dw_fde_ref fde;
2606
  char label[MAX_ARTIFICIAL_LABEL_BYTES];
2607
 
2608
  /* Output a label to mark the endpoint of the code generated for this
2609
     function.  */
2610
  ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2611
                               current_function_funcdef_no);
2612
  ASM_OUTPUT_LABEL (asm_out_file, label);
2613
  fde = &fde_table[fde_table_in_use - 1];
2614
  fde->dw_fde_end = xstrdup (label);
2615
}
2616
 
2617
void
2618
dwarf2out_frame_init (void)
2619
{
2620
  /* Allocate the initial hunk of the fde_table.  */
2621
  fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2622
  fde_table_allocated = FDE_TABLE_INCREMENT;
2623
  fde_table_in_use = 0;
2624
 
2625
  /* Generate the CFA instructions common to all FDE's.  Do it now for the
2626
     sake of lookup_cfa.  */
2627
 
2628
  /* On entry, the Canonical Frame Address is at SP.  */
2629
  dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2630
 
2631
#ifdef DWARF2_UNWIND_INFO
2632
  if (DWARF2_UNWIND_INFO)
2633
    initial_return_save (INCOMING_RETURN_ADDR_RTX);
2634
#endif
2635
}
2636
 
2637
void
2638
dwarf2out_frame_finish (void)
2639
{
2640
  /* Output call frame information.  */
2641
  if (DWARF2_FRAME_INFO)
2642
    output_call_frame_info (0);
2643
 
2644
#ifndef TARGET_UNWIND_INFO
2645
  /* Output another copy for the unwinder.  */
2646
  if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2647
    output_call_frame_info (1);
2648
#endif
2649
}
2650
#endif
2651
 
2652
/* And now, the subset of the debugging information support code necessary
2653
   for emitting location expressions.  */
2654
 
2655
/* Data about a single source file.  */
2656
struct dwarf_file_data GTY(())
2657
{
2658
  const char * filename;
2659
  int emitted_number;
2660
};
2661
 
2662
/* We need some way to distinguish DW_OP_addr with a direct symbol
2663
   relocation from DW_OP_addr with a dtp-relative symbol relocation.  */
2664
#define INTERNAL_DW_OP_tls_addr         (0x100 + DW_OP_addr)
2665
 
2666
 
2667
typedef struct dw_val_struct *dw_val_ref;
2668
typedef struct die_struct *dw_die_ref;
2669
typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2670
typedef struct dw_loc_list_struct *dw_loc_list_ref;
2671
 
2672
/* Each DIE may have a series of attribute/value pairs.  Values
2673
   can take on several forms.  The forms that are used in this
2674
   implementation are listed below.  */
2675
 
2676
enum dw_val_class
2677
{
2678
  dw_val_class_addr,
2679
  dw_val_class_offset,
2680
  dw_val_class_loc,
2681
  dw_val_class_loc_list,
2682
  dw_val_class_range_list,
2683
  dw_val_class_const,
2684
  dw_val_class_unsigned_const,
2685
  dw_val_class_long_long,
2686
  dw_val_class_vec,
2687
  dw_val_class_flag,
2688
  dw_val_class_die_ref,
2689
  dw_val_class_fde_ref,
2690
  dw_val_class_lbl_id,
2691
  dw_val_class_lineptr,
2692
  dw_val_class_str,
2693
  dw_val_class_macptr,
2694
  dw_val_class_file
2695
};
2696
 
2697
/* Describe a double word constant value.  */
2698
/* ??? Every instance of long_long in the code really means CONST_DOUBLE.  */
2699
 
2700
typedef struct dw_long_long_struct GTY(())
2701
{
2702
  unsigned long hi;
2703
  unsigned long low;
2704
}
2705
dw_long_long_const;
2706
 
2707
/* Describe a floating point constant value, or a vector constant value.  */
2708
 
2709
typedef struct dw_vec_struct GTY(())
2710
{
2711
  unsigned char * GTY((length ("%h.length"))) array;
2712
  unsigned length;
2713
  unsigned elt_size;
2714
}
2715
dw_vec_const;
2716
 
2717
/* The dw_val_node describes an attribute's value, as it is
2718
   represented internally.  */
2719
 
2720
typedef struct dw_val_struct GTY(())
2721
{
2722
  enum dw_val_class val_class;
2723
  union dw_val_struct_union
2724
    {
2725
      rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2726
      unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2727
      dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2728
      dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2729
      HOST_WIDE_INT GTY ((default)) val_int;
2730
      unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2731
      dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2732
      dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2733
      struct dw_val_die_union
2734
        {
2735
          dw_die_ref die;
2736
          int external;
2737
        } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2738
      unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2739
      struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2740
      char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2741
      unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2742
      struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
2743
    }
2744
  GTY ((desc ("%1.val_class"))) v;
2745
}
2746
dw_val_node;
2747
 
2748
/* Locations in memory are described using a sequence of stack machine
2749
   operations.  */
2750
 
2751
typedef struct dw_loc_descr_struct GTY(())
2752
{
2753
  dw_loc_descr_ref dw_loc_next;
2754
  enum dwarf_location_atom dw_loc_opc;
2755
  dw_val_node dw_loc_oprnd1;
2756
  dw_val_node dw_loc_oprnd2;
2757
  int dw_loc_addr;
2758
}
2759
dw_loc_descr_node;
2760
 
2761
/* Location lists are ranges + location descriptions for that range,
2762
   so you can track variables that are in different places over
2763
   their entire life.  */
2764
typedef struct dw_loc_list_struct GTY(())
2765
{
2766
  dw_loc_list_ref dw_loc_next;
2767
  const char *begin; /* Label for begin address of range */
2768
  const char *end;  /* Label for end address of range */
2769
  char *ll_symbol; /* Label for beginning of location list.
2770
                      Only on head of list */
2771
  const char *section; /* Section this loclist is relative to */
2772
  dw_loc_descr_ref expr;
2773
} dw_loc_list_node;
2774
 
2775
#if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2776
 
2777
static const char *dwarf_stack_op_name (unsigned);
2778
static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2779
                                       unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2780
static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2781
static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2782
static unsigned long size_of_locs (dw_loc_descr_ref);
2783
static void output_loc_operands (dw_loc_descr_ref);
2784
static void output_loc_sequence (dw_loc_descr_ref);
2785
 
2786
/* Convert a DWARF stack opcode into its string name.  */
2787
 
2788
static const char *
2789
dwarf_stack_op_name (unsigned int op)
2790
{
2791
  switch (op)
2792
    {
2793
    case DW_OP_addr:
2794
    case INTERNAL_DW_OP_tls_addr:
2795
      return "DW_OP_addr";
2796
    case DW_OP_deref:
2797
      return "DW_OP_deref";
2798
    case DW_OP_const1u:
2799
      return "DW_OP_const1u";
2800
    case DW_OP_const1s:
2801
      return "DW_OP_const1s";
2802
    case DW_OP_const2u:
2803
      return "DW_OP_const2u";
2804
    case DW_OP_const2s:
2805
      return "DW_OP_const2s";
2806
    case DW_OP_const4u:
2807
      return "DW_OP_const4u";
2808
    case DW_OP_const4s:
2809
      return "DW_OP_const4s";
2810
    case DW_OP_const8u:
2811
      return "DW_OP_const8u";
2812
    case DW_OP_const8s:
2813
      return "DW_OP_const8s";
2814
    case DW_OP_constu:
2815
      return "DW_OP_constu";
2816
    case DW_OP_consts:
2817
      return "DW_OP_consts";
2818
    case DW_OP_dup:
2819
      return "DW_OP_dup";
2820
    case DW_OP_drop:
2821
      return "DW_OP_drop";
2822
    case DW_OP_over:
2823
      return "DW_OP_over";
2824
    case DW_OP_pick:
2825
      return "DW_OP_pick";
2826
    case DW_OP_swap:
2827
      return "DW_OP_swap";
2828
    case DW_OP_rot:
2829
      return "DW_OP_rot";
2830
    case DW_OP_xderef:
2831
      return "DW_OP_xderef";
2832
    case DW_OP_abs:
2833
      return "DW_OP_abs";
2834
    case DW_OP_and:
2835
      return "DW_OP_and";
2836
    case DW_OP_div:
2837
      return "DW_OP_div";
2838
    case DW_OP_minus:
2839
      return "DW_OP_minus";
2840
    case DW_OP_mod:
2841
      return "DW_OP_mod";
2842
    case DW_OP_mul:
2843
      return "DW_OP_mul";
2844
    case DW_OP_neg:
2845
      return "DW_OP_neg";
2846
    case DW_OP_not:
2847
      return "DW_OP_not";
2848
    case DW_OP_or:
2849
      return "DW_OP_or";
2850
    case DW_OP_plus:
2851
      return "DW_OP_plus";
2852
    case DW_OP_plus_uconst:
2853
      return "DW_OP_plus_uconst";
2854
    case DW_OP_shl:
2855
      return "DW_OP_shl";
2856
    case DW_OP_shr:
2857
      return "DW_OP_shr";
2858
    case DW_OP_shra:
2859
      return "DW_OP_shra";
2860
    case DW_OP_xor:
2861
      return "DW_OP_xor";
2862
    case DW_OP_bra:
2863
      return "DW_OP_bra";
2864
    case DW_OP_eq:
2865
      return "DW_OP_eq";
2866
    case DW_OP_ge:
2867
      return "DW_OP_ge";
2868
    case DW_OP_gt:
2869
      return "DW_OP_gt";
2870
    case DW_OP_le:
2871
      return "DW_OP_le";
2872
    case DW_OP_lt:
2873
      return "DW_OP_lt";
2874
    case DW_OP_ne:
2875
      return "DW_OP_ne";
2876
    case DW_OP_skip:
2877
      return "DW_OP_skip";
2878
    case DW_OP_lit0:
2879
      return "DW_OP_lit0";
2880
    case DW_OP_lit1:
2881
      return "DW_OP_lit1";
2882
    case DW_OP_lit2:
2883
      return "DW_OP_lit2";
2884
    case DW_OP_lit3:
2885
      return "DW_OP_lit3";
2886
    case DW_OP_lit4:
2887
      return "DW_OP_lit4";
2888
    case DW_OP_lit5:
2889
      return "DW_OP_lit5";
2890
    case DW_OP_lit6:
2891
      return "DW_OP_lit6";
2892
    case DW_OP_lit7:
2893
      return "DW_OP_lit7";
2894
    case DW_OP_lit8:
2895
      return "DW_OP_lit8";
2896
    case DW_OP_lit9:
2897
      return "DW_OP_lit9";
2898
    case DW_OP_lit10:
2899
      return "DW_OP_lit10";
2900
    case DW_OP_lit11:
2901
      return "DW_OP_lit11";
2902
    case DW_OP_lit12:
2903
      return "DW_OP_lit12";
2904
    case DW_OP_lit13:
2905
      return "DW_OP_lit13";
2906
    case DW_OP_lit14:
2907
      return "DW_OP_lit14";
2908
    case DW_OP_lit15:
2909
      return "DW_OP_lit15";
2910
    case DW_OP_lit16:
2911
      return "DW_OP_lit16";
2912
    case DW_OP_lit17:
2913
      return "DW_OP_lit17";
2914
    case DW_OP_lit18:
2915
      return "DW_OP_lit18";
2916
    case DW_OP_lit19:
2917
      return "DW_OP_lit19";
2918
    case DW_OP_lit20:
2919
      return "DW_OP_lit20";
2920
    case DW_OP_lit21:
2921
      return "DW_OP_lit21";
2922
    case DW_OP_lit22:
2923
      return "DW_OP_lit22";
2924
    case DW_OP_lit23:
2925
      return "DW_OP_lit23";
2926
    case DW_OP_lit24:
2927
      return "DW_OP_lit24";
2928
    case DW_OP_lit25:
2929
      return "DW_OP_lit25";
2930
    case DW_OP_lit26:
2931
      return "DW_OP_lit26";
2932
    case DW_OP_lit27:
2933
      return "DW_OP_lit27";
2934
    case DW_OP_lit28:
2935
      return "DW_OP_lit28";
2936
    case DW_OP_lit29:
2937
      return "DW_OP_lit29";
2938
    case DW_OP_lit30:
2939
      return "DW_OP_lit30";
2940
    case DW_OP_lit31:
2941
      return "DW_OP_lit31";
2942
    case DW_OP_reg0:
2943
      return "DW_OP_reg0";
2944
    case DW_OP_reg1:
2945
      return "DW_OP_reg1";
2946
    case DW_OP_reg2:
2947
      return "DW_OP_reg2";
2948
    case DW_OP_reg3:
2949
      return "DW_OP_reg3";
2950
    case DW_OP_reg4:
2951
      return "DW_OP_reg4";
2952
    case DW_OP_reg5:
2953
      return "DW_OP_reg5";
2954
    case DW_OP_reg6:
2955
      return "DW_OP_reg6";
2956
    case DW_OP_reg7:
2957
      return "DW_OP_reg7";
2958
    case DW_OP_reg8:
2959
      return "DW_OP_reg8";
2960
    case DW_OP_reg9:
2961
      return "DW_OP_reg9";
2962
    case DW_OP_reg10:
2963
      return "DW_OP_reg10";
2964
    case DW_OP_reg11:
2965
      return "DW_OP_reg11";
2966
    case DW_OP_reg12:
2967
      return "DW_OP_reg12";
2968
    case DW_OP_reg13:
2969
      return "DW_OP_reg13";
2970
    case DW_OP_reg14:
2971
      return "DW_OP_reg14";
2972
    case DW_OP_reg15:
2973
      return "DW_OP_reg15";
2974
    case DW_OP_reg16:
2975
      return "DW_OP_reg16";
2976
    case DW_OP_reg17:
2977
      return "DW_OP_reg17";
2978
    case DW_OP_reg18:
2979
      return "DW_OP_reg18";
2980
    case DW_OP_reg19:
2981
      return "DW_OP_reg19";
2982
    case DW_OP_reg20:
2983
      return "DW_OP_reg20";
2984
    case DW_OP_reg21:
2985
      return "DW_OP_reg21";
2986
    case DW_OP_reg22:
2987
      return "DW_OP_reg22";
2988
    case DW_OP_reg23:
2989
      return "DW_OP_reg23";
2990
    case DW_OP_reg24:
2991
      return "DW_OP_reg24";
2992
    case DW_OP_reg25:
2993
      return "DW_OP_reg25";
2994
    case DW_OP_reg26:
2995
      return "DW_OP_reg26";
2996
    case DW_OP_reg27:
2997
      return "DW_OP_reg27";
2998
    case DW_OP_reg28:
2999
      return "DW_OP_reg28";
3000
    case DW_OP_reg29:
3001
      return "DW_OP_reg29";
3002
    case DW_OP_reg30:
3003
      return "DW_OP_reg30";
3004
    case DW_OP_reg31:
3005
      return "DW_OP_reg31";
3006
    case DW_OP_breg0:
3007
      return "DW_OP_breg0";
3008
    case DW_OP_breg1:
3009
      return "DW_OP_breg1";
3010
    case DW_OP_breg2:
3011
      return "DW_OP_breg2";
3012
    case DW_OP_breg3:
3013
      return "DW_OP_breg3";
3014
    case DW_OP_breg4:
3015
      return "DW_OP_breg4";
3016
    case DW_OP_breg5:
3017
      return "DW_OP_breg5";
3018
    case DW_OP_breg6:
3019
      return "DW_OP_breg6";
3020
    case DW_OP_breg7:
3021
      return "DW_OP_breg7";
3022
    case DW_OP_breg8:
3023
      return "DW_OP_breg8";
3024
    case DW_OP_breg9:
3025
      return "DW_OP_breg9";
3026
    case DW_OP_breg10:
3027
      return "DW_OP_breg10";
3028
    case DW_OP_breg11:
3029
      return "DW_OP_breg11";
3030
    case DW_OP_breg12:
3031
      return "DW_OP_breg12";
3032
    case DW_OP_breg13:
3033
      return "DW_OP_breg13";
3034
    case DW_OP_breg14:
3035
      return "DW_OP_breg14";
3036
    case DW_OP_breg15:
3037
      return "DW_OP_breg15";
3038
    case DW_OP_breg16:
3039
      return "DW_OP_breg16";
3040
    case DW_OP_breg17:
3041
      return "DW_OP_breg17";
3042
    case DW_OP_breg18:
3043
      return "DW_OP_breg18";
3044
    case DW_OP_breg19:
3045
      return "DW_OP_breg19";
3046
    case DW_OP_breg20:
3047
      return "DW_OP_breg20";
3048
    case DW_OP_breg21:
3049
      return "DW_OP_breg21";
3050
    case DW_OP_breg22:
3051
      return "DW_OP_breg22";
3052
    case DW_OP_breg23:
3053
      return "DW_OP_breg23";
3054
    case DW_OP_breg24:
3055
      return "DW_OP_breg24";
3056
    case DW_OP_breg25:
3057
      return "DW_OP_breg25";
3058
    case DW_OP_breg26:
3059
      return "DW_OP_breg26";
3060
    case DW_OP_breg27:
3061
      return "DW_OP_breg27";
3062
    case DW_OP_breg28:
3063
      return "DW_OP_breg28";
3064
    case DW_OP_breg29:
3065
      return "DW_OP_breg29";
3066
    case DW_OP_breg30:
3067
      return "DW_OP_breg30";
3068
    case DW_OP_breg31:
3069
      return "DW_OP_breg31";
3070
    case DW_OP_regx:
3071
      return "DW_OP_regx";
3072
    case DW_OP_fbreg:
3073
      return "DW_OP_fbreg";
3074
    case DW_OP_bregx:
3075
      return "DW_OP_bregx";
3076
    case DW_OP_piece:
3077
      return "DW_OP_piece";
3078
    case DW_OP_deref_size:
3079
      return "DW_OP_deref_size";
3080
    case DW_OP_xderef_size:
3081
      return "DW_OP_xderef_size";
3082
    case DW_OP_nop:
3083
      return "DW_OP_nop";
3084
    case DW_OP_push_object_address:
3085
      return "DW_OP_push_object_address";
3086
    case DW_OP_call2:
3087
      return "DW_OP_call2";
3088
    case DW_OP_call4:
3089
      return "DW_OP_call4";
3090
    case DW_OP_call_ref:
3091
      return "DW_OP_call_ref";
3092
    case DW_OP_GNU_push_tls_address:
3093
      return "DW_OP_GNU_push_tls_address";
3094
    default:
3095
      return "OP_<unknown>";
3096
    }
3097
}
3098
 
3099
/* Return a pointer to a newly allocated location description.  Location
3100
   descriptions are simple expression terms that can be strung
3101
   together to form more complicated location (address) descriptions.  */
3102
 
3103
static inline dw_loc_descr_ref
3104
new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
3105
               unsigned HOST_WIDE_INT oprnd2)
3106
{
3107
  dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
3108
 
3109
  descr->dw_loc_opc = op;
3110
  descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
3111
  descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
3112
  descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
3113
  descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
3114
 
3115
  return descr;
3116
}
3117
 
3118
/* Add a location description term to a location description expression.  */
3119
 
3120
static inline void
3121
add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
3122
{
3123
  dw_loc_descr_ref *d;
3124
 
3125
  /* Find the end of the chain.  */
3126
  for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3127
    ;
3128
 
3129
  *d = descr;
3130
}
3131
 
3132
/* Return the size of a location descriptor.  */
3133
 
3134
static unsigned long
3135
size_of_loc_descr (dw_loc_descr_ref loc)
3136
{
3137
  unsigned long size = 1;
3138
 
3139
  switch (loc->dw_loc_opc)
3140
    {
3141
    case DW_OP_addr:
3142
    case INTERNAL_DW_OP_tls_addr:
3143
      size += DWARF2_ADDR_SIZE;
3144
      break;
3145
    case DW_OP_const1u:
3146
    case DW_OP_const1s:
3147
      size += 1;
3148
      break;
3149
    case DW_OP_const2u:
3150
    case DW_OP_const2s:
3151
      size += 2;
3152
      break;
3153
    case DW_OP_const4u:
3154
    case DW_OP_const4s:
3155
      size += 4;
3156
      break;
3157
    case DW_OP_const8u:
3158
    case DW_OP_const8s:
3159
      size += 8;
3160
      break;
3161
    case DW_OP_constu:
3162
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3163
      break;
3164
    case DW_OP_consts:
3165
      size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3166
      break;
3167
    case DW_OP_pick:
3168
      size += 1;
3169
      break;
3170
    case DW_OP_plus_uconst:
3171
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3172
      break;
3173
    case DW_OP_skip:
3174
    case DW_OP_bra:
3175
      size += 2;
3176
      break;
3177
    case DW_OP_breg0:
3178
    case DW_OP_breg1:
3179
    case DW_OP_breg2:
3180
    case DW_OP_breg3:
3181
    case DW_OP_breg4:
3182
    case DW_OP_breg5:
3183
    case DW_OP_breg6:
3184
    case DW_OP_breg7:
3185
    case DW_OP_breg8:
3186
    case DW_OP_breg9:
3187
    case DW_OP_breg10:
3188
    case DW_OP_breg11:
3189
    case DW_OP_breg12:
3190
    case DW_OP_breg13:
3191
    case DW_OP_breg14:
3192
    case DW_OP_breg15:
3193
    case DW_OP_breg16:
3194
    case DW_OP_breg17:
3195
    case DW_OP_breg18:
3196
    case DW_OP_breg19:
3197
    case DW_OP_breg20:
3198
    case DW_OP_breg21:
3199
    case DW_OP_breg22:
3200
    case DW_OP_breg23:
3201
    case DW_OP_breg24:
3202
    case DW_OP_breg25:
3203
    case DW_OP_breg26:
3204
    case DW_OP_breg27:
3205
    case DW_OP_breg28:
3206
    case DW_OP_breg29:
3207
    case DW_OP_breg30:
3208
    case DW_OP_breg31:
3209
      size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3210
      break;
3211
    case DW_OP_regx:
3212
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3213
      break;
3214
    case DW_OP_fbreg:
3215
      size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3216
      break;
3217
    case DW_OP_bregx:
3218
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3219
      size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3220
      break;
3221
    case DW_OP_piece:
3222
      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3223
      break;
3224
    case DW_OP_deref_size:
3225
    case DW_OP_xderef_size:
3226
      size += 1;
3227
      break;
3228
    case DW_OP_call2:
3229
      size += 2;
3230
      break;
3231
    case DW_OP_call4:
3232
      size += 4;
3233
      break;
3234
    case DW_OP_call_ref:
3235
      size += DWARF2_ADDR_SIZE;
3236
      break;
3237
    default:
3238
      break;
3239
    }
3240
 
3241
  return size;
3242
}
3243
 
3244
/* Return the size of a series of location descriptors.  */
3245
 
3246
static unsigned long
3247
size_of_locs (dw_loc_descr_ref loc)
3248
{
3249
  dw_loc_descr_ref l;
3250
  unsigned long size;
3251
 
3252
  /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
3253
     field, to avoid writing to a PCH file.  */
3254
  for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
3255
    {
3256
      if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
3257
        break;
3258
      size += size_of_loc_descr (l);
3259
    }
3260
  if (! l)
3261
    return size;
3262
 
3263
  for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
3264
    {
3265
      l->dw_loc_addr = size;
3266
      size += size_of_loc_descr (l);
3267
    }
3268
 
3269
  return size;
3270
}
3271
 
3272
/* Output location description stack opcode's operands (if any).  */
3273
 
3274
static void
3275
output_loc_operands (dw_loc_descr_ref loc)
3276
{
3277
  dw_val_ref val1 = &loc->dw_loc_oprnd1;
3278
  dw_val_ref val2 = &loc->dw_loc_oprnd2;
3279
 
3280
  switch (loc->dw_loc_opc)
3281
    {
3282
#ifdef DWARF2_DEBUGGING_INFO
3283
    case DW_OP_addr:
3284
      dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
3285
      break;
3286
    case DW_OP_const2u:
3287
    case DW_OP_const2s:
3288
      dw2_asm_output_data (2, val1->v.val_int, NULL);
3289
      break;
3290
    case DW_OP_const4u:
3291
    case DW_OP_const4s:
3292
      dw2_asm_output_data (4, val1->v.val_int, NULL);
3293
      break;
3294
    case DW_OP_const8u:
3295
    case DW_OP_const8s:
3296
      gcc_assert (HOST_BITS_PER_LONG >= 64);
3297
      dw2_asm_output_data (8, val1->v.val_int, NULL);
3298
      break;
3299
    case DW_OP_skip:
3300
    case DW_OP_bra:
3301
      {
3302
        int offset;
3303
 
3304
        gcc_assert (val1->val_class == dw_val_class_loc);
3305
        offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
3306
 
3307
        dw2_asm_output_data (2, offset, NULL);
3308
      }
3309
      break;
3310
#else
3311
    case DW_OP_addr:
3312
    case DW_OP_const2u:
3313
    case DW_OP_const2s:
3314
    case DW_OP_const4u:
3315
    case DW_OP_const4s:
3316
    case DW_OP_const8u:
3317
    case DW_OP_const8s:
3318
    case DW_OP_skip:
3319
    case DW_OP_bra:
3320
      /* We currently don't make any attempt to make sure these are
3321
         aligned properly like we do for the main unwind info, so
3322
         don't support emitting things larger than a byte if we're
3323
         only doing unwinding.  */
3324
      gcc_unreachable ();
3325
#endif
3326
    case DW_OP_const1u:
3327
    case DW_OP_const1s:
3328
      dw2_asm_output_data (1, val1->v.val_int, NULL);
3329
      break;
3330
    case DW_OP_constu:
3331
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3332
      break;
3333
    case DW_OP_consts:
3334
      dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3335
      break;
3336
    case DW_OP_pick:
3337
      dw2_asm_output_data (1, val1->v.val_int, NULL);
3338
      break;
3339
    case DW_OP_plus_uconst:
3340
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3341
      break;
3342
    case DW_OP_breg0:
3343
    case DW_OP_breg1:
3344
    case DW_OP_breg2:
3345
    case DW_OP_breg3:
3346
    case DW_OP_breg4:
3347
    case DW_OP_breg5:
3348
    case DW_OP_breg6:
3349
    case DW_OP_breg7:
3350
    case DW_OP_breg8:
3351
    case DW_OP_breg9:
3352
    case DW_OP_breg10:
3353
    case DW_OP_breg11:
3354
    case DW_OP_breg12:
3355
    case DW_OP_breg13:
3356
    case DW_OP_breg14:
3357
    case DW_OP_breg15:
3358
    case DW_OP_breg16:
3359
    case DW_OP_breg17:
3360
    case DW_OP_breg18:
3361
    case DW_OP_breg19:
3362
    case DW_OP_breg20:
3363
    case DW_OP_breg21:
3364
    case DW_OP_breg22:
3365
    case DW_OP_breg23:
3366
    case DW_OP_breg24:
3367
    case DW_OP_breg25:
3368
    case DW_OP_breg26:
3369
    case DW_OP_breg27:
3370
    case DW_OP_breg28:
3371
    case DW_OP_breg29:
3372
    case DW_OP_breg30:
3373
    case DW_OP_breg31:
3374
      dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3375
      break;
3376
    case DW_OP_regx:
3377
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3378
      break;
3379
    case DW_OP_fbreg:
3380
      dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3381
      break;
3382
    case DW_OP_bregx:
3383
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3384
      dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3385
      break;
3386
    case DW_OP_piece:
3387
      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3388
      break;
3389
    case DW_OP_deref_size:
3390
    case DW_OP_xderef_size:
3391
      dw2_asm_output_data (1, val1->v.val_int, NULL);
3392
      break;
3393
 
3394
    case INTERNAL_DW_OP_tls_addr:
3395
      if (targetm.asm_out.output_dwarf_dtprel)
3396
        {
3397
          targetm.asm_out.output_dwarf_dtprel (asm_out_file,
3398
                                               DWARF2_ADDR_SIZE,
3399
                                               val1->v.val_addr);
3400
          fputc ('\n', asm_out_file);
3401
        }
3402
      else
3403
        gcc_unreachable ();
3404
      break;
3405
 
3406
    default:
3407
      /* Other codes have no operands.  */
3408
      break;
3409
    }
3410
}
3411
 
3412
/* Output a sequence of location operations.  */
3413
 
3414
static void
3415
output_loc_sequence (dw_loc_descr_ref loc)
3416
{
3417
  for (; loc != NULL; loc = loc->dw_loc_next)
3418
    {
3419
      /* Output the opcode.  */
3420
      dw2_asm_output_data (1, loc->dw_loc_opc,
3421
                           "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3422
 
3423
      /* Output the operand(s) (if any).  */
3424
      output_loc_operands (loc);
3425
    }
3426
}
3427
 
3428
/* This routine will generate the correct assembly data for a location
3429
   description based on a cfi entry with a complex address.  */
3430
 
3431
static void
3432
output_cfa_loc (dw_cfi_ref cfi)
3433
{
3434
  dw_loc_descr_ref loc;
3435
  unsigned long size;
3436
 
3437
  /* Output the size of the block.  */
3438
  loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3439
  size = size_of_locs (loc);
3440
  dw2_asm_output_data_uleb128 (size, NULL);
3441
 
3442
  /* Now output the operations themselves.  */
3443
  output_loc_sequence (loc);
3444
}
3445
 
3446
/* This function builds a dwarf location descriptor sequence from a
3447
   dw_cfa_location, adding the given OFFSET to the result of the
3448
   expression.  */
3449
 
3450
static struct dw_loc_descr_struct *
3451
build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
3452
{
3453
  struct dw_loc_descr_struct *head, *tmp;
3454
 
3455
  offset += cfa->offset;
3456
 
3457
  if (cfa->indirect)
3458
    {
3459
      if (cfa->base_offset)
3460
        {
3461
          if (cfa->reg <= 31)
3462
            head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3463
          else
3464
            head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3465
        }
3466
      else if (cfa->reg <= 31)
3467
        head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3468
      else
3469
        head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3470
 
3471
      head->dw_loc_oprnd1.val_class = dw_val_class_const;
3472
      tmp = new_loc_descr (DW_OP_deref, 0, 0);
3473
      add_loc_descr (&head, tmp);
3474
      if (offset != 0)
3475
        {
3476
          tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
3477
          add_loc_descr (&head, tmp);
3478
        }
3479
    }
3480
  else
3481
    {
3482
      if (offset == 0)
3483
        if (cfa->reg <= 31)
3484
          head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3485
        else
3486
          head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3487
      else if (cfa->reg <= 31)
3488
        head = new_loc_descr (DW_OP_breg0 + cfa->reg, offset, 0);
3489
      else
3490
        head = new_loc_descr (DW_OP_bregx, cfa->reg, offset);
3491
    }
3492
 
3493
  return head;
3494
}
3495
 
3496
/* This function fills in aa dw_cfa_location structure from a dwarf location
3497
   descriptor sequence.  */
3498
 
3499
static void
3500
get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3501
{
3502
  struct dw_loc_descr_struct *ptr;
3503
  cfa->offset = 0;
3504
  cfa->base_offset = 0;
3505
  cfa->indirect = 0;
3506
  cfa->reg = -1;
3507
 
3508
  for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3509
    {
3510
      enum dwarf_location_atom op = ptr->dw_loc_opc;
3511
 
3512
      switch (op)
3513
        {
3514
        case DW_OP_reg0:
3515
        case DW_OP_reg1:
3516
        case DW_OP_reg2:
3517
        case DW_OP_reg3:
3518
        case DW_OP_reg4:
3519
        case DW_OP_reg5:
3520
        case DW_OP_reg6:
3521
        case DW_OP_reg7:
3522
        case DW_OP_reg8:
3523
        case DW_OP_reg9:
3524
        case DW_OP_reg10:
3525
        case DW_OP_reg11:
3526
        case DW_OP_reg12:
3527
        case DW_OP_reg13:
3528
        case DW_OP_reg14:
3529
        case DW_OP_reg15:
3530
        case DW_OP_reg16:
3531
        case DW_OP_reg17:
3532
        case DW_OP_reg18:
3533
        case DW_OP_reg19:
3534
        case DW_OP_reg20:
3535
        case DW_OP_reg21:
3536
        case DW_OP_reg22:
3537
        case DW_OP_reg23:
3538
        case DW_OP_reg24:
3539
        case DW_OP_reg25:
3540
        case DW_OP_reg26:
3541
        case DW_OP_reg27:
3542
        case DW_OP_reg28:
3543
        case DW_OP_reg29:
3544
        case DW_OP_reg30:
3545
        case DW_OP_reg31:
3546
          cfa->reg = op - DW_OP_reg0;
3547
          break;
3548
        case DW_OP_regx:
3549
          cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3550
          break;
3551
        case DW_OP_breg0:
3552
        case DW_OP_breg1:
3553
        case DW_OP_breg2:
3554
        case DW_OP_breg3:
3555
        case DW_OP_breg4:
3556
        case DW_OP_breg5:
3557
        case DW_OP_breg6:
3558
        case DW_OP_breg7:
3559
        case DW_OP_breg8:
3560
        case DW_OP_breg9:
3561
        case DW_OP_breg10:
3562
        case DW_OP_breg11:
3563
        case DW_OP_breg12:
3564
        case DW_OP_breg13:
3565
        case DW_OP_breg14:
3566
        case DW_OP_breg15:
3567
        case DW_OP_breg16:
3568
        case DW_OP_breg17:
3569
        case DW_OP_breg18:
3570
        case DW_OP_breg19:
3571
        case DW_OP_breg20:
3572
        case DW_OP_breg21:
3573
        case DW_OP_breg22:
3574
        case DW_OP_breg23:
3575
        case DW_OP_breg24:
3576
        case DW_OP_breg25:
3577
        case DW_OP_breg26:
3578
        case DW_OP_breg27:
3579
        case DW_OP_breg28:
3580
        case DW_OP_breg29:
3581
        case DW_OP_breg30:
3582
        case DW_OP_breg31:
3583
          cfa->reg = op - DW_OP_breg0;
3584
          cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3585
          break;
3586
        case DW_OP_bregx:
3587
          cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3588
          cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3589
          break;
3590
        case DW_OP_deref:
3591
          cfa->indirect = 1;
3592
          break;
3593
        case DW_OP_plus_uconst:
3594
          cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3595
          break;
3596
        default:
3597
          internal_error ("DW_LOC_OP %s not implemented",
3598
                          dwarf_stack_op_name (ptr->dw_loc_opc));
3599
        }
3600
    }
3601
}
3602
#endif /* .debug_frame support */
3603
 
3604
/* And now, the support for symbolic debugging information.  */
3605
#ifdef DWARF2_DEBUGGING_INFO
3606
 
3607
/* .debug_str support.  */
3608
static int output_indirect_string (void **, void *);
3609
 
3610
static void dwarf2out_init (const char *);
3611
static void dwarf2out_finish (const char *);
3612
static void dwarf2out_define (unsigned int, const char *);
3613
static void dwarf2out_undef (unsigned int, const char *);
3614
static void dwarf2out_start_source_file (unsigned, const char *);
3615
static void dwarf2out_end_source_file (unsigned);
3616
static void dwarf2out_begin_block (unsigned, unsigned);
3617
static void dwarf2out_end_block (unsigned, unsigned);
3618
static bool dwarf2out_ignore_block (tree);
3619
static void dwarf2out_global_decl (tree);
3620
static void dwarf2out_type_decl (tree, int);
3621
static void dwarf2out_imported_module_or_decl (tree, tree);
3622
static void dwarf2out_abstract_function (tree);
3623
static void dwarf2out_var_location (rtx);
3624
static void dwarf2out_begin_function (tree);
3625
static void dwarf2out_switch_text_section (void);
3626
 
3627
/* The debug hooks structure.  */
3628
 
3629
const struct gcc_debug_hooks dwarf2_debug_hooks =
3630
{
3631
  dwarf2out_init,
3632
  dwarf2out_finish,
3633
  dwarf2out_define,
3634
  dwarf2out_undef,
3635
  dwarf2out_start_source_file,
3636
  dwarf2out_end_source_file,
3637
  dwarf2out_begin_block,
3638
  dwarf2out_end_block,
3639
  dwarf2out_ignore_block,
3640
  dwarf2out_source_line,
3641
  dwarf2out_begin_prologue,
3642
  debug_nothing_int_charstar,   /* end_prologue */
3643
  dwarf2out_end_epilogue,
3644
  dwarf2out_begin_function,
3645
  debug_nothing_int,            /* end_function */
3646
  dwarf2out_decl,               /* function_decl */
3647
  dwarf2out_global_decl,
3648
  dwarf2out_type_decl,          /* type_decl */
3649
  dwarf2out_imported_module_or_decl,
3650
  debug_nothing_tree,           /* deferred_inline_function */
3651
  /* The DWARF 2 backend tries to reduce debugging bloat by not
3652
     emitting the abstract description of inline functions until
3653
     something tries to reference them.  */
3654
  dwarf2out_abstract_function,  /* outlining_inline_function */
3655
  debug_nothing_rtx,            /* label */
3656
  debug_nothing_int,            /* handle_pch */
3657
  dwarf2out_var_location,
3658
  dwarf2out_switch_text_section,
3659
  1                             /* start_end_main_source_file */
3660
};
3661
#endif
3662
 
3663
/* NOTE: In the comments in this file, many references are made to
3664
   "Debugging Information Entries".  This term is abbreviated as `DIE'
3665
   throughout the remainder of this file.  */
3666
 
3667
/* An internal representation of the DWARF output is built, and then
3668
   walked to generate the DWARF debugging info.  The walk of the internal
3669
   representation is done after the entire program has been compiled.
3670
   The types below are used to describe the internal representation.  */
3671
 
3672
/* Various DIE's use offsets relative to the beginning of the
3673
   .debug_info section to refer to each other.  */
3674
 
3675
typedef long int dw_offset;
3676
 
3677
/* Define typedefs here to avoid circular dependencies.  */
3678
 
3679
typedef struct dw_attr_struct *dw_attr_ref;
3680
typedef struct dw_line_info_struct *dw_line_info_ref;
3681
typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3682
typedef struct pubname_struct *pubname_ref;
3683
typedef struct dw_ranges_struct *dw_ranges_ref;
3684
 
3685
/* Each entry in the line_info_table maintains the file and
3686
   line number associated with the label generated for that
3687
   entry.  The label gives the PC value associated with
3688
   the line number entry.  */
3689
 
3690
typedef struct dw_line_info_struct GTY(())
3691
{
3692
  unsigned long dw_file_num;
3693
  unsigned long dw_line_num;
3694
}
3695
dw_line_info_entry;
3696
 
3697
/* Line information for functions in separate sections; each one gets its
3698
   own sequence.  */
3699
typedef struct dw_separate_line_info_struct GTY(())
3700
{
3701
  unsigned long dw_file_num;
3702
  unsigned long dw_line_num;
3703
  unsigned long function;
3704
}
3705
dw_separate_line_info_entry;
3706
 
3707
/* Each DIE attribute has a field specifying the attribute kind,
3708
   a link to the next attribute in the chain, and an attribute value.
3709
   Attributes are typically linked below the DIE they modify.  */
3710
 
3711
typedef struct dw_attr_struct GTY(())
3712
{
3713
  enum dwarf_attribute dw_attr;
3714
  dw_val_node dw_attr_val;
3715
}
3716
dw_attr_node;
3717
 
3718
DEF_VEC_O(dw_attr_node);
3719
DEF_VEC_ALLOC_O(dw_attr_node,gc);
3720
 
3721
/* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
3722
   The children of each node form a circular list linked by
3723
   die_sib.  die_child points to the node *before* the "first" child node.  */
3724
 
3725
typedef struct die_struct GTY(())
3726
{
3727
  enum dwarf_tag die_tag;
3728
  char *die_symbol;
3729
  VEC(dw_attr_node,gc) * die_attr;
3730
  dw_die_ref die_parent;
3731
  dw_die_ref die_child;
3732
  dw_die_ref die_sib;
3733
  dw_die_ref die_definition; /* ref from a specification to its definition */
3734
  dw_offset die_offset;
3735
  unsigned long die_abbrev;
3736
  int die_mark;
3737
  /* Die is used and must not be pruned as unused.  */
3738
  int die_perennial_p;
3739
  unsigned int decl_id;
3740
}
3741
die_node;
3742
 
3743
/* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
3744
#define FOR_EACH_CHILD(die, c, expr) do {       \
3745
  c = die->die_child;                           \
3746
  if (c) do {                                   \
3747
    c = c->die_sib;                             \
3748
    expr;                                       \
3749
  } while (c != die->die_child);                \
3750
} while (0)
3751
 
3752
/* The pubname structure */
3753
 
3754
typedef struct pubname_struct GTY(())
3755
{
3756
  dw_die_ref die;
3757
  char *name;
3758
}
3759
pubname_entry;
3760
 
3761
struct dw_ranges_struct GTY(())
3762
{
3763
  int block_num;
3764
};
3765
 
3766
/* The limbo die list structure.  */
3767
typedef struct limbo_die_struct GTY(())
3768
{
3769
  dw_die_ref die;
3770
  tree created_for;
3771
  struct limbo_die_struct *next;
3772
}
3773
limbo_die_node;
3774
 
3775
/* How to start an assembler comment.  */
3776
#ifndef ASM_COMMENT_START
3777
#define ASM_COMMENT_START ";#"
3778
#endif
3779
 
3780
/* Define a macro which returns nonzero for a TYPE_DECL which was
3781
   implicitly generated for a tagged type.
3782
 
3783
   Note that unlike the gcc front end (which generates a NULL named
3784
   TYPE_DECL node for each complete tagged type, each array type, and
3785
   each function type node created) the g++ front end generates a
3786
   _named_ TYPE_DECL node for each tagged type node created.
3787
   These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3788
   generate a DW_TAG_typedef DIE for them.  */
3789
 
3790
#define TYPE_DECL_IS_STUB(decl)                         \
3791
  (DECL_NAME (decl) == NULL_TREE                        \
3792
   || (DECL_ARTIFICIAL (decl)                           \
3793
       && is_tagged_type (TREE_TYPE (decl))             \
3794
       && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
3795
           /* This is necessary for stub decls that     \
3796
              appear in nested inline functions.  */    \
3797
           || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3798
               && (decl_ultimate_origin (decl)          \
3799
                   == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3800
 
3801
/* Information concerning the compilation unit's programming
3802
   language, and compiler version.  */
3803
 
3804
/* Fixed size portion of the DWARF compilation unit header.  */
3805
#define DWARF_COMPILE_UNIT_HEADER_SIZE \
3806
  (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3807
 
3808
/* Fixed size portion of public names info.  */
3809
#define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3810
 
3811
/* Fixed size portion of the address range info.  */
3812
#define DWARF_ARANGES_HEADER_SIZE                                       \
3813
  (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
3814
                DWARF2_ADDR_SIZE * 2)                                   \
3815
   - DWARF_INITIAL_LENGTH_SIZE)
3816
 
3817
/* Size of padding portion in the address range info.  It must be
3818
   aligned to twice the pointer size.  */
3819
#define DWARF_ARANGES_PAD_SIZE \
3820
  (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3821
                DWARF2_ADDR_SIZE * 2) \
3822
   - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3823
 
3824
/* Use assembler line directives if available.  */
3825
#ifndef DWARF2_ASM_LINE_DEBUG_INFO
3826
#ifdef HAVE_AS_DWARF2_DEBUG_LINE
3827
#define DWARF2_ASM_LINE_DEBUG_INFO 1
3828
#else
3829
#define DWARF2_ASM_LINE_DEBUG_INFO 0
3830
#endif
3831
#endif
3832
 
3833
/* Minimum line offset in a special line info. opcode.
3834
   This value was chosen to give a reasonable range of values.  */
3835
#define DWARF_LINE_BASE  -10
3836
 
3837
/* First special line opcode - leave room for the standard opcodes.  */
3838
#define DWARF_LINE_OPCODE_BASE  10
3839
 
3840
/* Range of line offsets in a special line info. opcode.  */
3841
#define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
3842
 
3843
/* Flag that indicates the initial value of the is_stmt_start flag.
3844
   In the present implementation, we do not mark any lines as
3845
   the beginning of a source statement, because that information
3846
   is not made available by the GCC front-end.  */
3847
#define DWARF_LINE_DEFAULT_IS_STMT_START 1
3848
 
3849
#ifdef DWARF2_DEBUGGING_INFO
3850
/* This location is used by calc_die_sizes() to keep track
3851
   the offset of each DIE within the .debug_info section.  */
3852
static unsigned long next_die_offset;
3853
#endif
3854
 
3855
/* Record the root of the DIE's built for the current compilation unit.  */
3856
static GTY(()) dw_die_ref comp_unit_die;
3857
 
3858
/* A list of DIEs with a NULL parent waiting to be relocated.  */
3859
static GTY(()) limbo_die_node *limbo_die_list;
3860
 
3861
/* Filenames referenced by this compilation unit.  */
3862
static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
3863
 
3864
/* A hash table of references to DIE's that describe declarations.
3865
   The key is a DECL_UID() which is a unique number identifying each decl.  */
3866
static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3867
 
3868
/* Node of the variable location list.  */
3869
struct var_loc_node GTY ((chain_next ("%h.next")))
3870
{
3871
  rtx GTY (()) var_loc_note;
3872
  const char * GTY (()) label;
3873
  const char * GTY (()) section_label;
3874
  struct var_loc_node * GTY (()) next;
3875
};
3876
 
3877
/* Variable location list.  */
3878
struct var_loc_list_def GTY (())
3879
{
3880
  struct var_loc_node * GTY (()) first;
3881
 
3882
  /* Do not mark the last element of the chained list because
3883
     it is marked through the chain.  */
3884
  struct var_loc_node * GTY ((skip ("%h"))) last;
3885
 
3886
  /* DECL_UID of the variable decl.  */
3887
  unsigned int decl_id;
3888
};
3889
typedef struct var_loc_list_def var_loc_list;
3890
 
3891
 
3892
/* Table of decl location linked lists.  */
3893
static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3894
 
3895
/* A pointer to the base of a list of references to DIE's that
3896
   are uniquely identified by their tag, presence/absence of
3897
   children DIE's, and list of attribute/value pairs.  */
3898
static GTY((length ("abbrev_die_table_allocated")))
3899
  dw_die_ref *abbrev_die_table;
3900
 
3901
/* Number of elements currently allocated for abbrev_die_table.  */
3902
static GTY(()) unsigned abbrev_die_table_allocated;
3903
 
3904
/* Number of elements in type_die_table currently in use.  */
3905
static GTY(()) unsigned abbrev_die_table_in_use;
3906
 
3907
/* Size (in elements) of increments by which we may expand the
3908
   abbrev_die_table.  */
3909
#define ABBREV_DIE_TABLE_INCREMENT 256
3910
 
3911
/* A pointer to the base of a table that contains line information
3912
   for each source code line in .text in the compilation unit.  */
3913
static GTY((length ("line_info_table_allocated")))
3914
     dw_line_info_ref line_info_table;
3915
 
3916
/* Number of elements currently allocated for line_info_table.  */
3917
static GTY(()) unsigned line_info_table_allocated;
3918
 
3919
/* Number of elements in line_info_table currently in use.  */
3920
static GTY(()) unsigned line_info_table_in_use;
3921
 
3922
/* True if the compilation unit places functions in more than one section.  */
3923
static GTY(()) bool have_multiple_function_sections = false;
3924
 
3925
/* A pointer to the base of a table that contains line information
3926
   for each source code line outside of .text in the compilation unit.  */
3927
static GTY ((length ("separate_line_info_table_allocated")))
3928
     dw_separate_line_info_ref separate_line_info_table;
3929
 
3930
/* Number of elements currently allocated for separate_line_info_table.  */
3931
static GTY(()) unsigned separate_line_info_table_allocated;
3932
 
3933
/* Number of elements in separate_line_info_table currently in use.  */
3934
static GTY(()) unsigned separate_line_info_table_in_use;
3935
 
3936
/* Size (in elements) of increments by which we may expand the
3937
   line_info_table.  */
3938
#define LINE_INFO_TABLE_INCREMENT 1024
3939
 
3940
/* A pointer to the base of a table that contains a list of publicly
3941
   accessible names.  */
3942
static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table;
3943
 
3944
/* Number of elements currently allocated for pubname_table.  */
3945
static GTY(()) unsigned pubname_table_allocated;
3946
 
3947
/* Number of elements in pubname_table currently in use.  */
3948
static GTY(()) unsigned pubname_table_in_use;
3949
 
3950
/* Size (in elements) of increments by which we may expand the
3951
   pubname_table.  */
3952
#define PUBNAME_TABLE_INCREMENT 64
3953
 
3954
/* Array of dies for which we should generate .debug_arange info.  */
3955
static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3956
 
3957
/* Number of elements currently allocated for arange_table.  */
3958
static GTY(()) unsigned arange_table_allocated;
3959
 
3960
/* Number of elements in arange_table currently in use.  */
3961
static GTY(()) unsigned arange_table_in_use;
3962
 
3963
/* Size (in elements) of increments by which we may expand the
3964
   arange_table.  */
3965
#define ARANGE_TABLE_INCREMENT 64
3966
 
3967
/* Array of dies for which we should generate .debug_ranges info.  */
3968
static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3969
 
3970
/* Number of elements currently allocated for ranges_table.  */
3971
static GTY(()) unsigned ranges_table_allocated;
3972
 
3973
/* Number of elements in ranges_table currently in use.  */
3974
static GTY(()) unsigned ranges_table_in_use;
3975
 
3976
/* Size (in elements) of increments by which we may expand the
3977
   ranges_table.  */
3978
#define RANGES_TABLE_INCREMENT 64
3979
 
3980
/* Whether we have location lists that need outputting */
3981
static GTY(()) bool have_location_lists;
3982
 
3983
/* Unique label counter.  */
3984
static GTY(()) unsigned int loclabel_num;
3985
 
3986
#ifdef DWARF2_DEBUGGING_INFO
3987
/* Record whether the function being analyzed contains inlined functions.  */
3988
static int current_function_has_inlines;
3989
#endif
3990
#if 0 && defined (MIPS_DEBUGGING_INFO)
3991
static int comp_unit_has_inlines;
3992
#endif
3993
 
3994
/* The last file entry emitted by maybe_emit_file().  */
3995
static GTY(()) struct dwarf_file_data * last_emitted_file;
3996
 
3997
/* Number of internal labels generated by gen_internal_sym().  */
3998
static GTY(()) int label_num;
3999
 
4000
/* Cached result of previous call to lookup_filename.  */
4001
static GTY(()) struct dwarf_file_data * file_table_last_lookup;
4002
 
4003
#ifdef DWARF2_DEBUGGING_INFO
4004
 
4005
/* Offset from the "steady-state frame pointer" to the frame base,
4006
   within the current function.  */
4007
static HOST_WIDE_INT frame_pointer_fb_offset;
4008
 
4009
/* Forward declarations for functions defined in this file.  */
4010
 
4011
static int is_pseudo_reg (rtx);
4012
static tree type_main_variant (tree);
4013
static int is_tagged_type (tree);
4014
static const char *dwarf_tag_name (unsigned);
4015
static const char *dwarf_attr_name (unsigned);
4016
static const char *dwarf_form_name (unsigned);
4017
static tree decl_ultimate_origin (tree);
4018
static tree block_ultimate_origin (tree);
4019
static tree decl_class_context (tree);
4020
static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
4021
static inline enum dw_val_class AT_class (dw_attr_ref);
4022
static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
4023
static inline unsigned AT_flag (dw_attr_ref);
4024
static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
4025
static inline HOST_WIDE_INT AT_int (dw_attr_ref);
4026
static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
4027
static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
4028
static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
4029
                              unsigned long);
4030
static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
4031
                               unsigned int, unsigned char *);
4032
static hashval_t debug_str_do_hash (const void *);
4033
static int debug_str_eq (const void *, const void *);
4034
static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
4035
static inline const char *AT_string (dw_attr_ref);
4036
static int AT_string_form (dw_attr_ref);
4037
static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
4038
static void add_AT_specification (dw_die_ref, dw_die_ref);
4039
static inline dw_die_ref AT_ref (dw_attr_ref);
4040
static inline int AT_ref_external (dw_attr_ref);
4041
static inline void set_AT_ref_external (dw_attr_ref, int);
4042
static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
4043
static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
4044
static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
4045
static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
4046
                             dw_loc_list_ref);
4047
static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
4048
static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
4049
static inline rtx AT_addr (dw_attr_ref);
4050
static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
4051
static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
4052
static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
4053
static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
4054
                           unsigned HOST_WIDE_INT);
4055
static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
4056
                               unsigned long);
4057
static inline const char *AT_lbl (dw_attr_ref);
4058
static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
4059
static const char *get_AT_low_pc (dw_die_ref);
4060
static const char *get_AT_hi_pc (dw_die_ref);
4061
static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
4062
static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
4063
static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
4064
static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
4065
static bool is_c_family (void);
4066
static bool is_cxx (void);
4067
static bool is_java (void);
4068
static bool is_fortran (void);
4069
static bool is_ada (void);
4070
static void remove_AT (dw_die_ref, enum dwarf_attribute);
4071
static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
4072
static void add_child_die (dw_die_ref, dw_die_ref);
4073
static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
4074
static dw_die_ref lookup_type_die (tree);
4075
static void equate_type_number_to_die (tree, dw_die_ref);
4076
static hashval_t decl_die_table_hash (const void *);
4077
static int decl_die_table_eq (const void *, const void *);
4078
static dw_die_ref lookup_decl_die (tree);
4079
static hashval_t decl_loc_table_hash (const void *);
4080
static int decl_loc_table_eq (const void *, const void *);
4081
static var_loc_list *lookup_decl_loc (tree);
4082
static void equate_decl_number_to_die (tree, dw_die_ref);
4083
static void add_var_loc_to_decl (tree, struct var_loc_node *);
4084
static void print_spaces (FILE *);
4085
static void print_die (dw_die_ref, FILE *);
4086
static void print_dwarf_line_table (FILE *);
4087
static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
4088
static dw_die_ref pop_compile_unit (dw_die_ref);
4089
static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
4090
static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
4091
static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
4092
static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
4093
static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
4094
static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
4095
static int same_die_p (dw_die_ref, dw_die_ref, int *);
4096
static int same_die_p_wrap (dw_die_ref, dw_die_ref);
4097
static void compute_section_prefix (dw_die_ref);
4098
static int is_type_die (dw_die_ref);
4099
static int is_comdat_die (dw_die_ref);
4100
static int is_symbol_die (dw_die_ref);
4101
static void assign_symbol_names (dw_die_ref);
4102
static void break_out_includes (dw_die_ref);
4103
static hashval_t htab_cu_hash (const void *);
4104
static int htab_cu_eq (const void *, const void *);
4105
static void htab_cu_del (void *);
4106
static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
4107
static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
4108
static void add_sibling_attributes (dw_die_ref);
4109
static void build_abbrev_table (dw_die_ref);
4110
static void output_location_lists (dw_die_ref);
4111
static int constant_size (long unsigned);
4112
static unsigned long size_of_die (dw_die_ref);
4113
static void calc_die_sizes (dw_die_ref);
4114
static void mark_dies (dw_die_ref);
4115
static void unmark_dies (dw_die_ref);
4116
static void unmark_all_dies (dw_die_ref);
4117
static unsigned long size_of_pubnames (void);
4118
static unsigned long size_of_aranges (void);
4119
static enum dwarf_form value_format (dw_attr_ref);
4120
static void output_value_format (dw_attr_ref);
4121
static void output_abbrev_section (void);
4122
static void output_die_symbol (dw_die_ref);
4123
static void output_die (dw_die_ref);
4124
static void output_compilation_unit_header (void);
4125
static void output_comp_unit (dw_die_ref, int);
4126
static const char *dwarf2_name (tree, int);
4127
static void add_pubname (tree, dw_die_ref);
4128
static void output_pubnames (void);
4129
static void add_arange (tree, dw_die_ref);
4130
static void output_aranges (void);
4131
static unsigned int add_ranges (tree);
4132
static void output_ranges (void);
4133
static void output_line_info (void);
4134
static void output_file_names (void);
4135
static dw_die_ref base_type_die (tree);
4136
static tree root_type (tree);
4137
static int is_base_type (tree);
4138
static bool is_subrange_type (tree);
4139
static dw_die_ref subrange_type_die (tree, dw_die_ref);
4140
static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
4141
static int type_is_enum (tree);
4142
static unsigned int dbx_reg_number (rtx);
4143
static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
4144
static dw_loc_descr_ref reg_loc_descriptor (rtx);
4145
static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
4146
static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
4147
static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4148
static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT);
4149
static int is_based_loc (rtx);
4150
static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode);
4151
static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
4152
static dw_loc_descr_ref loc_descriptor (rtx);
4153
static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
4154
static dw_loc_descr_ref loc_descriptor_from_tree (tree);
4155
static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
4156
static tree field_type (tree);
4157
static unsigned int simple_type_align_in_bits (tree);
4158
static unsigned int simple_decl_align_in_bits (tree);
4159
static unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
4160
static HOST_WIDE_INT field_byte_offset (tree);
4161
static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
4162
                                         dw_loc_descr_ref);
4163
static void add_data_member_location_attribute (dw_die_ref, tree);
4164
static void add_const_value_attribute (dw_die_ref, rtx);
4165
static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
4166
static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4167
static void insert_float (rtx, unsigned char *);
4168
static rtx rtl_for_decl_location (tree);
4169
static void add_location_or_const_value_attribute (dw_die_ref, tree,
4170
                                                   enum dwarf_attribute);
4171
static void tree_add_const_value_attribute (dw_die_ref, tree);
4172
static void add_name_attribute (dw_die_ref, const char *);
4173
static void add_comp_dir_attribute (dw_die_ref);
4174
static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
4175
static void add_subscript_info (dw_die_ref, tree);
4176
static void add_byte_size_attribute (dw_die_ref, tree);
4177
static void add_bit_offset_attribute (dw_die_ref, tree);
4178
static void add_bit_size_attribute (dw_die_ref, tree);
4179
static void add_prototyped_attribute (dw_die_ref, tree);
4180
static void add_abstract_origin_attribute (dw_die_ref, tree);
4181
static void add_pure_or_virtual_attribute (dw_die_ref, tree);
4182
static void add_src_coords_attributes (dw_die_ref, tree);
4183
static void add_name_and_src_coords_attributes (dw_die_ref, tree);
4184
static void push_decl_scope (tree);
4185
static void pop_decl_scope (void);
4186
static dw_die_ref scope_die_for (tree, dw_die_ref);
4187
static inline int local_scope_p (dw_die_ref);
4188
static inline int class_or_namespace_scope_p (dw_die_ref);
4189
static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
4190
static void add_calling_convention_attribute (dw_die_ref, tree);
4191
static const char *type_tag (tree);
4192
static tree member_declared_type (tree);
4193
#if 0
4194
static const char *decl_start_label (tree);
4195
#endif
4196
static void gen_array_type_die (tree, dw_die_ref);
4197
#if 0
4198
static void gen_entry_point_die (tree, dw_die_ref);
4199
#endif
4200
static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
4201
static void gen_inlined_structure_type_die (tree, dw_die_ref);
4202
static void gen_inlined_union_type_die (tree, dw_die_ref);
4203
static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
4204
static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
4205
static void gen_unspecified_parameters_die (tree, dw_die_ref);
4206
static void gen_formal_types_die (tree, dw_die_ref);
4207
static void gen_subprogram_die (tree, dw_die_ref);
4208
static void gen_variable_die (tree, dw_die_ref);
4209
static void gen_label_die (tree, dw_die_ref);
4210
static void gen_lexical_block_die (tree, dw_die_ref, int);
4211
static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
4212
static void gen_field_die (tree, dw_die_ref);
4213
static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
4214
static dw_die_ref gen_compile_unit_die (const char *);
4215
static void gen_inheritance_die (tree, tree, dw_die_ref);
4216
static void gen_member_die (tree, dw_die_ref);
4217
static void gen_struct_or_union_type_die (tree, dw_die_ref);
4218
static void gen_subroutine_type_die (tree, dw_die_ref);
4219
static void gen_typedef_die (tree, dw_die_ref);
4220
static void gen_type_die (tree, dw_die_ref);
4221
static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
4222
static void gen_block_die (tree, dw_die_ref, int);
4223
static void decls_for_scope (tree, dw_die_ref, int);
4224
static int is_redundant_typedef (tree);
4225
static void gen_namespace_die (tree);
4226
static void gen_decl_die (tree, dw_die_ref);
4227
static dw_die_ref force_decl_die (tree);
4228
static dw_die_ref force_type_die (tree);
4229
static dw_die_ref setup_namespace_context (tree, dw_die_ref);
4230
static void declare_in_namespace (tree, dw_die_ref);
4231
static struct dwarf_file_data * lookup_filename (const char *);
4232
static void retry_incomplete_types (void);
4233
static void gen_type_die_for_member (tree, tree, dw_die_ref);
4234
static void splice_child_die (dw_die_ref, dw_die_ref);
4235
static int file_info_cmp (const void *, const void *);
4236
static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
4237
                                     const char *, const char *, unsigned);
4238
static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
4239
                                       const char *, const char *,
4240
                                       const char *);
4241
static void output_loc_list (dw_loc_list_ref);
4242
static char *gen_internal_sym (const char *);
4243
 
4244
static void prune_unmark_dies (dw_die_ref);
4245
static void prune_unused_types_mark (dw_die_ref, int);
4246
static void prune_unused_types_walk (dw_die_ref);
4247
static void prune_unused_types_walk_attribs (dw_die_ref);
4248
static void prune_unused_types_prune (dw_die_ref);
4249
static void prune_unused_types (void);
4250
static int maybe_emit_file (struct dwarf_file_data *fd);
4251
 
4252
/* Section names used to hold DWARF debugging information.  */
4253
#ifndef DEBUG_INFO_SECTION
4254
#define DEBUG_INFO_SECTION      ".debug_info"
4255
#endif
4256
#ifndef DEBUG_ABBREV_SECTION
4257
#define DEBUG_ABBREV_SECTION    ".debug_abbrev"
4258
#endif
4259
#ifndef DEBUG_ARANGES_SECTION
4260
#define DEBUG_ARANGES_SECTION   ".debug_aranges"
4261
#endif
4262
#ifndef DEBUG_MACINFO_SECTION
4263
#define DEBUG_MACINFO_SECTION   ".debug_macinfo"
4264
#endif
4265
#ifndef DEBUG_LINE_SECTION
4266
#define DEBUG_LINE_SECTION      ".debug_line"
4267
#endif
4268
#ifndef DEBUG_LOC_SECTION
4269
#define DEBUG_LOC_SECTION       ".debug_loc"
4270
#endif
4271
#ifndef DEBUG_PUBNAMES_SECTION
4272
#define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
4273
#endif
4274
#ifndef DEBUG_STR_SECTION
4275
#define DEBUG_STR_SECTION       ".debug_str"
4276
#endif
4277
#ifndef DEBUG_RANGES_SECTION
4278
#define DEBUG_RANGES_SECTION    ".debug_ranges"
4279
#endif
4280
 
4281
/* Standard ELF section names for compiled code and data.  */
4282
#ifndef TEXT_SECTION_NAME
4283
#define TEXT_SECTION_NAME       ".text"
4284
#endif
4285
 
4286
/* Section flags for .debug_str section.  */
4287
#define DEBUG_STR_SECTION_FLAGS \
4288
  (HAVE_GAS_SHF_MERGE && flag_merge_constants                   \
4289
   ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
4290
   : SECTION_DEBUG)
4291
 
4292
/* Labels we insert at beginning sections we can reference instead of
4293
   the section names themselves.  */
4294
 
4295
#ifndef TEXT_SECTION_LABEL
4296
#define TEXT_SECTION_LABEL              "Ltext"
4297
#endif
4298
#ifndef COLD_TEXT_SECTION_LABEL
4299
#define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
4300
#endif
4301
#ifndef DEBUG_LINE_SECTION_LABEL
4302
#define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
4303
#endif
4304
#ifndef DEBUG_INFO_SECTION_LABEL
4305
#define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
4306
#endif
4307
#ifndef DEBUG_ABBREV_SECTION_LABEL
4308
#define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
4309
#endif
4310
#ifndef DEBUG_LOC_SECTION_LABEL
4311
#define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
4312
#endif
4313
#ifndef DEBUG_RANGES_SECTION_LABEL
4314
#define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
4315
#endif
4316
#ifndef DEBUG_MACINFO_SECTION_LABEL
4317
#define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
4318
#endif
4319
 
4320
/* Definitions of defaults for formats and names of various special
4321
   (artificial) labels which may be generated within this file (when the -g
4322
   options is used and DWARF2_DEBUGGING_INFO is in effect.
4323
   If necessary, these may be overridden from within the tm.h file, but
4324
   typically, overriding these defaults is unnecessary.  */
4325
 
4326
static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4327
static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4328
static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4329
static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4330
static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4331
static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4332
static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4333
static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4334
static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4335
static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
4336
 
4337
#ifndef TEXT_END_LABEL
4338
#define TEXT_END_LABEL          "Letext"
4339
#endif
4340
#ifndef COLD_END_LABEL
4341
#define COLD_END_LABEL          "Letext_cold"
4342
#endif
4343
#ifndef BLOCK_BEGIN_LABEL
4344
#define BLOCK_BEGIN_LABEL       "LBB"
4345
#endif
4346
#ifndef BLOCK_END_LABEL
4347
#define BLOCK_END_LABEL         "LBE"
4348
#endif
4349
#ifndef LINE_CODE_LABEL
4350
#define LINE_CODE_LABEL         "LM"
4351
#endif
4352
#ifndef SEPARATE_LINE_CODE_LABEL
4353
#define SEPARATE_LINE_CODE_LABEL        "LSM"
4354
#endif
4355
 
4356
/* We allow a language front-end to designate a function that is to be
4357
   called to "demangle" any name before it is put into a DIE.  */
4358
 
4359
static const char *(*demangle_name_func) (const char *);
4360
 
4361
void
4362
dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
4363
{
4364
  demangle_name_func = func;
4365
}
4366
 
4367
/* Test if rtl node points to a pseudo register.  */
4368
 
4369
static inline int
4370
is_pseudo_reg (rtx rtl)
4371
{
4372
  return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
4373
          || (GET_CODE (rtl) == SUBREG
4374
              && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
4375
}
4376
 
4377
/* Return a reference to a type, with its const and volatile qualifiers
4378
   removed.  */
4379
 
4380
static inline tree
4381
type_main_variant (tree type)
4382
{
4383
  type = TYPE_MAIN_VARIANT (type);
4384
 
4385
  /* ??? There really should be only one main variant among any group of
4386
     variants of a given type (and all of the MAIN_VARIANT values for all
4387
     members of the group should point to that one type) but sometimes the C
4388
     front-end messes this up for array types, so we work around that bug
4389
     here.  */
4390
  if (TREE_CODE (type) == ARRAY_TYPE)
4391
    while (type != TYPE_MAIN_VARIANT (type))
4392
      type = TYPE_MAIN_VARIANT (type);
4393
 
4394
  return type;
4395
}
4396
 
4397
/* Return nonzero if the given type node represents a tagged type.  */
4398
 
4399
static inline int
4400
is_tagged_type (tree type)
4401
{
4402
  enum tree_code code = TREE_CODE (type);
4403
 
4404
  return (code == RECORD_TYPE || code == UNION_TYPE
4405
          || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4406
}
4407
 
4408
/* Convert a DIE tag into its string name.  */
4409
 
4410
static const char *
4411
dwarf_tag_name (unsigned int tag)
4412
{
4413
  switch (tag)
4414
    {
4415
    case DW_TAG_padding:
4416
      return "DW_TAG_padding";
4417
    case DW_TAG_array_type:
4418
      return "DW_TAG_array_type";
4419
    case DW_TAG_class_type:
4420
      return "DW_TAG_class_type";
4421
    case DW_TAG_entry_point:
4422
      return "DW_TAG_entry_point";
4423
    case DW_TAG_enumeration_type:
4424
      return "DW_TAG_enumeration_type";
4425
    case DW_TAG_formal_parameter:
4426
      return "DW_TAG_formal_parameter";
4427
    case DW_TAG_imported_declaration:
4428
      return "DW_TAG_imported_declaration";
4429
    case DW_TAG_label:
4430
      return "DW_TAG_label";
4431
    case DW_TAG_lexical_block:
4432
      return "DW_TAG_lexical_block";
4433
    case DW_TAG_member:
4434
      return "DW_TAG_member";
4435
    case DW_TAG_pointer_type:
4436
      return "DW_TAG_pointer_type";
4437
    case DW_TAG_reference_type:
4438
      return "DW_TAG_reference_type";
4439
    case DW_TAG_compile_unit:
4440
      return "DW_TAG_compile_unit";
4441
    case DW_TAG_string_type:
4442
      return "DW_TAG_string_type";
4443
    case DW_TAG_structure_type:
4444
      return "DW_TAG_structure_type";
4445
    case DW_TAG_subroutine_type:
4446
      return "DW_TAG_subroutine_type";
4447
    case DW_TAG_typedef:
4448
      return "DW_TAG_typedef";
4449
    case DW_TAG_union_type:
4450
      return "DW_TAG_union_type";
4451
    case DW_TAG_unspecified_parameters:
4452
      return "DW_TAG_unspecified_parameters";
4453
    case DW_TAG_variant:
4454
      return "DW_TAG_variant";
4455
    case DW_TAG_common_block:
4456
      return "DW_TAG_common_block";
4457
    case DW_TAG_common_inclusion:
4458
      return "DW_TAG_common_inclusion";
4459
    case DW_TAG_inheritance:
4460
      return "DW_TAG_inheritance";
4461
    case DW_TAG_inlined_subroutine:
4462
      return "DW_TAG_inlined_subroutine";
4463
    case DW_TAG_module:
4464
      return "DW_TAG_module";
4465
    case DW_TAG_ptr_to_member_type:
4466
      return "DW_TAG_ptr_to_member_type";
4467
    case DW_TAG_set_type:
4468
      return "DW_TAG_set_type";
4469
    case DW_TAG_subrange_type:
4470
      return "DW_TAG_subrange_type";
4471
    case DW_TAG_with_stmt:
4472
      return "DW_TAG_with_stmt";
4473
    case DW_TAG_access_declaration:
4474
      return "DW_TAG_access_declaration";
4475
    case DW_TAG_base_type:
4476
      return "DW_TAG_base_type";
4477
    case DW_TAG_catch_block:
4478
      return "DW_TAG_catch_block";
4479
    case DW_TAG_const_type:
4480
      return "DW_TAG_const_type";
4481
    case DW_TAG_constant:
4482
      return "DW_TAG_constant";
4483
    case DW_TAG_enumerator:
4484
      return "DW_TAG_enumerator";
4485
    case DW_TAG_file_type:
4486
      return "DW_TAG_file_type";
4487
    case DW_TAG_friend:
4488
      return "DW_TAG_friend";
4489
    case DW_TAG_namelist:
4490
      return "DW_TAG_namelist";
4491
    case DW_TAG_namelist_item:
4492
      return "DW_TAG_namelist_item";
4493
    case DW_TAG_namespace:
4494
      return "DW_TAG_namespace";
4495
    case DW_TAG_packed_type:
4496
      return "DW_TAG_packed_type";
4497
    case DW_TAG_subprogram:
4498
      return "DW_TAG_subprogram";
4499
    case DW_TAG_template_type_param:
4500
      return "DW_TAG_template_type_param";
4501
    case DW_TAG_template_value_param:
4502
      return "DW_TAG_template_value_param";
4503
    case DW_TAG_thrown_type:
4504
      return "DW_TAG_thrown_type";
4505
    case DW_TAG_try_block:
4506
      return "DW_TAG_try_block";
4507
    case DW_TAG_variant_part:
4508
      return "DW_TAG_variant_part";
4509
    case DW_TAG_variable:
4510
      return "DW_TAG_variable";
4511
    case DW_TAG_volatile_type:
4512
      return "DW_TAG_volatile_type";
4513
    case DW_TAG_imported_module:
4514
      return "DW_TAG_imported_module";
4515
    case DW_TAG_MIPS_loop:
4516
      return "DW_TAG_MIPS_loop";
4517
    case DW_TAG_format_label:
4518
      return "DW_TAG_format_label";
4519
    case DW_TAG_function_template:
4520
      return "DW_TAG_function_template";
4521
    case DW_TAG_class_template:
4522
      return "DW_TAG_class_template";
4523
    case DW_TAG_GNU_BINCL:
4524
      return "DW_TAG_GNU_BINCL";
4525
    case DW_TAG_GNU_EINCL:
4526
      return "DW_TAG_GNU_EINCL";
4527
    default:
4528
      return "DW_TAG_<unknown>";
4529
    }
4530
}
4531
 
4532
/* Convert a DWARF attribute code into its string name.  */
4533
 
4534
static const char *
4535
dwarf_attr_name (unsigned int attr)
4536
{
4537
  switch (attr)
4538
    {
4539
    case DW_AT_sibling:
4540
      return "DW_AT_sibling";
4541
    case DW_AT_location:
4542
      return "DW_AT_location";
4543
    case DW_AT_name:
4544
      return "DW_AT_name";
4545
    case DW_AT_ordering:
4546
      return "DW_AT_ordering";
4547
    case DW_AT_subscr_data:
4548
      return "DW_AT_subscr_data";
4549
    case DW_AT_byte_size:
4550
      return "DW_AT_byte_size";
4551
    case DW_AT_bit_offset:
4552
      return "DW_AT_bit_offset";
4553
    case DW_AT_bit_size:
4554
      return "DW_AT_bit_size";
4555
    case DW_AT_element_list:
4556
      return "DW_AT_element_list";
4557
    case DW_AT_stmt_list:
4558
      return "DW_AT_stmt_list";
4559
    case DW_AT_low_pc:
4560
      return "DW_AT_low_pc";
4561
    case DW_AT_high_pc:
4562
      return "DW_AT_high_pc";
4563
    case DW_AT_language:
4564
      return "DW_AT_language";
4565
    case DW_AT_member:
4566
      return "DW_AT_member";
4567
    case DW_AT_discr:
4568
      return "DW_AT_discr";
4569
    case DW_AT_discr_value:
4570
      return "DW_AT_discr_value";
4571
    case DW_AT_visibility:
4572
      return "DW_AT_visibility";
4573
    case DW_AT_import:
4574
      return "DW_AT_import";
4575
    case DW_AT_string_length:
4576
      return "DW_AT_string_length";
4577
    case DW_AT_common_reference:
4578
      return "DW_AT_common_reference";
4579
    case DW_AT_comp_dir:
4580
      return "DW_AT_comp_dir";
4581
    case DW_AT_const_value:
4582
      return "DW_AT_const_value";
4583
    case DW_AT_containing_type:
4584
      return "DW_AT_containing_type";
4585
    case DW_AT_default_value:
4586
      return "DW_AT_default_value";
4587
    case DW_AT_inline:
4588
      return "DW_AT_inline";
4589
    case DW_AT_is_optional:
4590
      return "DW_AT_is_optional";
4591
    case DW_AT_lower_bound:
4592
      return "DW_AT_lower_bound";
4593
    case DW_AT_producer:
4594
      return "DW_AT_producer";
4595
    case DW_AT_prototyped:
4596
      return "DW_AT_prototyped";
4597
    case DW_AT_return_addr:
4598
      return "DW_AT_return_addr";
4599
    case DW_AT_start_scope:
4600
      return "DW_AT_start_scope";
4601
    case DW_AT_stride_size:
4602
      return "DW_AT_stride_size";
4603
    case DW_AT_upper_bound:
4604
      return "DW_AT_upper_bound";
4605
    case DW_AT_abstract_origin:
4606
      return "DW_AT_abstract_origin";
4607
    case DW_AT_accessibility:
4608
      return "DW_AT_accessibility";
4609
    case DW_AT_address_class:
4610
      return "DW_AT_address_class";
4611
    case DW_AT_artificial:
4612
      return "DW_AT_artificial";
4613
    case DW_AT_base_types:
4614
      return "DW_AT_base_types";
4615
    case DW_AT_calling_convention:
4616
      return "DW_AT_calling_convention";
4617
    case DW_AT_count:
4618
      return "DW_AT_count";
4619
    case DW_AT_data_member_location:
4620
      return "DW_AT_data_member_location";
4621
    case DW_AT_decl_column:
4622
      return "DW_AT_decl_column";
4623
    case DW_AT_decl_file:
4624
      return "DW_AT_decl_file";
4625
    case DW_AT_decl_line:
4626
      return "DW_AT_decl_line";
4627
    case DW_AT_declaration:
4628
      return "DW_AT_declaration";
4629
    case DW_AT_discr_list:
4630
      return "DW_AT_discr_list";
4631
    case DW_AT_encoding:
4632
      return "DW_AT_encoding";
4633
    case DW_AT_external:
4634
      return "DW_AT_external";
4635
    case DW_AT_frame_base:
4636
      return "DW_AT_frame_base";
4637
    case DW_AT_friend:
4638
      return "DW_AT_friend";
4639
    case DW_AT_identifier_case:
4640
      return "DW_AT_identifier_case";
4641
    case DW_AT_macro_info:
4642
      return "DW_AT_macro_info";
4643
    case DW_AT_namelist_items:
4644
      return "DW_AT_namelist_items";
4645
    case DW_AT_priority:
4646
      return "DW_AT_priority";
4647
    case DW_AT_segment:
4648
      return "DW_AT_segment";
4649
    case DW_AT_specification:
4650
      return "DW_AT_specification";
4651
    case DW_AT_static_link:
4652
      return "DW_AT_static_link";
4653
    case DW_AT_type:
4654
      return "DW_AT_type";
4655
    case DW_AT_use_location:
4656
      return "DW_AT_use_location";
4657
    case DW_AT_variable_parameter:
4658
      return "DW_AT_variable_parameter";
4659
    case DW_AT_virtuality:
4660
      return "DW_AT_virtuality";
4661
    case DW_AT_vtable_elem_location:
4662
      return "DW_AT_vtable_elem_location";
4663
 
4664
    case DW_AT_allocated:
4665
      return "DW_AT_allocated";
4666
    case DW_AT_associated:
4667
      return "DW_AT_associated";
4668
    case DW_AT_data_location:
4669
      return "DW_AT_data_location";
4670
    case DW_AT_stride:
4671
      return "DW_AT_stride";
4672
    case DW_AT_entry_pc:
4673
      return "DW_AT_entry_pc";
4674
    case DW_AT_use_UTF8:
4675
      return "DW_AT_use_UTF8";
4676
    case DW_AT_extension:
4677
      return "DW_AT_extension";
4678
    case DW_AT_ranges:
4679
      return "DW_AT_ranges";
4680
    case DW_AT_trampoline:
4681
      return "DW_AT_trampoline";
4682
    case DW_AT_call_column:
4683
      return "DW_AT_call_column";
4684
    case DW_AT_call_file:
4685
      return "DW_AT_call_file";
4686
    case DW_AT_call_line:
4687
      return "DW_AT_call_line";
4688
 
4689
    case DW_AT_MIPS_fde:
4690
      return "DW_AT_MIPS_fde";
4691
    case DW_AT_MIPS_loop_begin:
4692
      return "DW_AT_MIPS_loop_begin";
4693
    case DW_AT_MIPS_tail_loop_begin:
4694
      return "DW_AT_MIPS_tail_loop_begin";
4695
    case DW_AT_MIPS_epilog_begin:
4696
      return "DW_AT_MIPS_epilog_begin";
4697
    case DW_AT_MIPS_loop_unroll_factor:
4698
      return "DW_AT_MIPS_loop_unroll_factor";
4699
    case DW_AT_MIPS_software_pipeline_depth:
4700
      return "DW_AT_MIPS_software_pipeline_depth";
4701
    case DW_AT_MIPS_linkage_name:
4702
      return "DW_AT_MIPS_linkage_name";
4703
    case DW_AT_MIPS_stride:
4704
      return "DW_AT_MIPS_stride";
4705
    case DW_AT_MIPS_abstract_name:
4706
      return "DW_AT_MIPS_abstract_name";
4707
    case DW_AT_MIPS_clone_origin:
4708
      return "DW_AT_MIPS_clone_origin";
4709
    case DW_AT_MIPS_has_inlines:
4710
      return "DW_AT_MIPS_has_inlines";
4711
 
4712
    case DW_AT_sf_names:
4713
      return "DW_AT_sf_names";
4714
    case DW_AT_src_info:
4715
      return "DW_AT_src_info";
4716
    case DW_AT_mac_info:
4717
      return "DW_AT_mac_info";
4718
    case DW_AT_src_coords:
4719
      return "DW_AT_src_coords";
4720
    case DW_AT_body_begin:
4721
      return "DW_AT_body_begin";
4722
    case DW_AT_body_end:
4723
      return "DW_AT_body_end";
4724
    case DW_AT_GNU_vector:
4725
      return "DW_AT_GNU_vector";
4726
 
4727
    case DW_AT_VMS_rtnbeg_pd_address:
4728
      return "DW_AT_VMS_rtnbeg_pd_address";
4729
 
4730
    default:
4731
      return "DW_AT_<unknown>";
4732
    }
4733
}
4734
 
4735
/* Convert a DWARF value form code into its string name.  */
4736
 
4737
static const char *
4738
dwarf_form_name (unsigned int form)
4739
{
4740
  switch (form)
4741
    {
4742
    case DW_FORM_addr:
4743
      return "DW_FORM_addr";
4744
    case DW_FORM_block2:
4745
      return "DW_FORM_block2";
4746
    case DW_FORM_block4:
4747
      return "DW_FORM_block4";
4748
    case DW_FORM_data2:
4749
      return "DW_FORM_data2";
4750
    case DW_FORM_data4:
4751
      return "DW_FORM_data4";
4752
    case DW_FORM_data8:
4753
      return "DW_FORM_data8";
4754
    case DW_FORM_string:
4755
      return "DW_FORM_string";
4756
    case DW_FORM_block:
4757
      return "DW_FORM_block";
4758
    case DW_FORM_block1:
4759
      return "DW_FORM_block1";
4760
    case DW_FORM_data1:
4761
      return "DW_FORM_data1";
4762
    case DW_FORM_flag:
4763
      return "DW_FORM_flag";
4764
    case DW_FORM_sdata:
4765
      return "DW_FORM_sdata";
4766
    case DW_FORM_strp:
4767
      return "DW_FORM_strp";
4768
    case DW_FORM_udata:
4769
      return "DW_FORM_udata";
4770
    case DW_FORM_ref_addr:
4771
      return "DW_FORM_ref_addr";
4772
    case DW_FORM_ref1:
4773
      return "DW_FORM_ref1";
4774
    case DW_FORM_ref2:
4775
      return "DW_FORM_ref2";
4776
    case DW_FORM_ref4:
4777
      return "DW_FORM_ref4";
4778
    case DW_FORM_ref8:
4779
      return "DW_FORM_ref8";
4780
    case DW_FORM_ref_udata:
4781
      return "DW_FORM_ref_udata";
4782
    case DW_FORM_indirect:
4783
      return "DW_FORM_indirect";
4784
    default:
4785
      return "DW_FORM_<unknown>";
4786
    }
4787
}
4788
 
4789
/* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4790
   instance of an inlined instance of a decl which is local to an inline
4791
   function, so we have to trace all of the way back through the origin chain
4792
   to find out what sort of node actually served as the original seed for the
4793
   given block.  */
4794
 
4795
static tree
4796
decl_ultimate_origin (tree decl)
4797
{
4798
  if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4799
    return NULL_TREE;
4800
 
4801
  /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4802
     nodes in the function to point to themselves; ignore that if
4803
     we're trying to output the abstract instance of this function.  */
4804
  if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4805
    return NULL_TREE;
4806
 
4807
  /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4808
     most distant ancestor, this should never happen.  */
4809
  gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4810
 
4811
  return DECL_ABSTRACT_ORIGIN (decl);
4812
}
4813
 
4814
/* Determine the "ultimate origin" of a block.  The block may be an inlined
4815
   instance of an inlined instance of a block which is local to an inline
4816
   function, so we have to trace all of the way back through the origin chain
4817
   to find out what sort of node actually served as the original seed for the
4818
   given block.  */
4819
 
4820
static tree
4821
block_ultimate_origin (tree block)
4822
{
4823
  tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4824
 
4825
  /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4826
     nodes in the function to point to themselves; ignore that if
4827
     we're trying to output the abstract instance of this function.  */
4828
  if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4829
    return NULL_TREE;
4830
 
4831
  if (immediate_origin == NULL_TREE)
4832
    return NULL_TREE;
4833
  else
4834
    {
4835
      tree ret_val;
4836
      tree lookahead = immediate_origin;
4837
 
4838
      do
4839
        {
4840
          ret_val = lookahead;
4841
          lookahead = (TREE_CODE (ret_val) == BLOCK
4842
                       ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4843
        }
4844
      while (lookahead != NULL && lookahead != ret_val);
4845
 
4846
      /* The block's abstract origin chain may not be the *ultimate* origin of
4847
         the block. It could lead to a DECL that has an abstract origin set.
4848
         If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
4849
         will give us if it has one).  Note that DECL's abstract origins are
4850
         supposed to be the most distant ancestor (or so decl_ultimate_origin
4851
         claims), so we don't need to loop following the DECL origins.  */
4852
      if (DECL_P (ret_val))
4853
        return DECL_ORIGIN (ret_val);
4854
 
4855
      return ret_val;
4856
    }
4857
}
4858
 
4859
/* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4860
   of a virtual function may refer to a base class, so we check the 'this'
4861
   parameter.  */
4862
 
4863
static tree
4864
decl_class_context (tree decl)
4865
{
4866
  tree context = NULL_TREE;
4867
 
4868
  if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4869
    context = DECL_CONTEXT (decl);
4870
  else
4871
    context = TYPE_MAIN_VARIANT
4872
      (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4873
 
4874
  if (context && !TYPE_P (context))
4875
    context = NULL_TREE;
4876
 
4877
  return context;
4878
}
4879
 
4880
/* Add an attribute/value pair to a DIE.  */
4881
 
4882
static inline void
4883
add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4884
{
4885
  /* Maybe this should be an assert?  */
4886
  if (die == NULL)
4887
    return;
4888
 
4889
  if (die->die_attr == NULL)
4890
    die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4891
  VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4892
}
4893
 
4894
static inline enum dw_val_class
4895
AT_class (dw_attr_ref a)
4896
{
4897
  return a->dw_attr_val.val_class;
4898
}
4899
 
4900
/* Add a flag value attribute to a DIE.  */
4901
 
4902
static inline void
4903
add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4904
{
4905
  dw_attr_node attr;
4906
 
4907
  attr.dw_attr = attr_kind;
4908
  attr.dw_attr_val.val_class = dw_val_class_flag;
4909
  attr.dw_attr_val.v.val_flag = flag;
4910
  add_dwarf_attr (die, &attr);
4911
}
4912
 
4913
static inline unsigned
4914
AT_flag (dw_attr_ref a)
4915
{
4916
  gcc_assert (a && AT_class (a) == dw_val_class_flag);
4917
  return a->dw_attr_val.v.val_flag;
4918
}
4919
 
4920
/* Add a signed integer attribute value to a DIE.  */
4921
 
4922
static inline void
4923
add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4924
{
4925
  dw_attr_node attr;
4926
 
4927
  attr.dw_attr = attr_kind;
4928
  attr.dw_attr_val.val_class = dw_val_class_const;
4929
  attr.dw_attr_val.v.val_int = int_val;
4930
  add_dwarf_attr (die, &attr);
4931
}
4932
 
4933
static inline HOST_WIDE_INT
4934
AT_int (dw_attr_ref a)
4935
{
4936
  gcc_assert (a && AT_class (a) == dw_val_class_const);
4937
  return a->dw_attr_val.v.val_int;
4938
}
4939
 
4940
/* Add an unsigned integer attribute value to a DIE.  */
4941
 
4942
static inline void
4943
add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4944
                 unsigned HOST_WIDE_INT unsigned_val)
4945
{
4946
  dw_attr_node attr;
4947
 
4948
  attr.dw_attr = attr_kind;
4949
  attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
4950
  attr.dw_attr_val.v.val_unsigned = unsigned_val;
4951
  add_dwarf_attr (die, &attr);
4952
}
4953
 
4954
static inline unsigned HOST_WIDE_INT
4955
AT_unsigned (dw_attr_ref a)
4956
{
4957
  gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4958
  return a->dw_attr_val.v.val_unsigned;
4959
}
4960
 
4961
/* Add an unsigned double integer attribute value to a DIE.  */
4962
 
4963
static inline void
4964
add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
4965
                  long unsigned int val_hi, long unsigned int val_low)
4966
{
4967
  dw_attr_node attr;
4968
 
4969
  attr.dw_attr = attr_kind;
4970
  attr.dw_attr_val.val_class = dw_val_class_long_long;
4971
  attr.dw_attr_val.v.val_long_long.hi = val_hi;
4972
  attr.dw_attr_val.v.val_long_long.low = val_low;
4973
  add_dwarf_attr (die, &attr);
4974
}
4975
 
4976
/* Add a floating point attribute value to a DIE and return it.  */
4977
 
4978
static inline void
4979
add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4980
            unsigned int length, unsigned int elt_size, unsigned char *array)
4981
{
4982
  dw_attr_node attr;
4983
 
4984
  attr.dw_attr = attr_kind;
4985
  attr.dw_attr_val.val_class = dw_val_class_vec;
4986
  attr.dw_attr_val.v.val_vec.length = length;
4987
  attr.dw_attr_val.v.val_vec.elt_size = elt_size;
4988
  attr.dw_attr_val.v.val_vec.array = array;
4989
  add_dwarf_attr (die, &attr);
4990
}
4991
 
4992
/* Hash and equality functions for debug_str_hash.  */
4993
 
4994
static hashval_t
4995
debug_str_do_hash (const void *x)
4996
{
4997
  return htab_hash_string (((const struct indirect_string_node *)x)->str);
4998
}
4999
 
5000
static int
5001
debug_str_eq (const void *x1, const void *x2)
5002
{
5003
  return strcmp ((((const struct indirect_string_node *)x1)->str),
5004
                 (const char *)x2) == 0;
5005
}
5006
 
5007
/* Add a string attribute value to a DIE.  */
5008
 
5009
static inline void
5010
add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
5011
{
5012
  dw_attr_node attr;
5013
  struct indirect_string_node *node;
5014
  void **slot;
5015
 
5016
  if (! debug_str_hash)
5017
    debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
5018
                                      debug_str_eq, NULL);
5019
 
5020
  slot = htab_find_slot_with_hash (debug_str_hash, str,
5021
                                   htab_hash_string (str), INSERT);
5022
  if (*slot == NULL)
5023
    *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
5024
  node = (struct indirect_string_node *) *slot;
5025
  node->str = ggc_strdup (str);
5026
  node->refcount++;
5027
 
5028
  attr.dw_attr = attr_kind;
5029
  attr.dw_attr_val.val_class = dw_val_class_str;
5030
  attr.dw_attr_val.v.val_str = node;
5031
  add_dwarf_attr (die, &attr);
5032
}
5033
 
5034
static inline const char *
5035
AT_string (dw_attr_ref a)
5036
{
5037
  gcc_assert (a && AT_class (a) == dw_val_class_str);
5038
  return a->dw_attr_val.v.val_str->str;
5039
}
5040
 
5041
/* Find out whether a string should be output inline in DIE
5042
   or out-of-line in .debug_str section.  */
5043
 
5044
static int
5045
AT_string_form (dw_attr_ref a)
5046
{
5047
  struct indirect_string_node *node;
5048
  unsigned int len;
5049
  char label[32];
5050
 
5051
  gcc_assert (a && AT_class (a) == dw_val_class_str);
5052
 
5053
  node = a->dw_attr_val.v.val_str;
5054
  if (node->form)
5055
    return node->form;
5056
 
5057
  len = strlen (node->str) + 1;
5058
 
5059
  /* If the string is shorter or equal to the size of the reference, it is
5060
     always better to put it inline.  */
5061
  if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
5062
    return node->form = DW_FORM_string;
5063
 
5064
  /* If we cannot expect the linker to merge strings in .debug_str
5065
     section, only put it into .debug_str if it is worth even in this
5066
     single module.  */
5067
  if ((debug_str_section->common.flags & SECTION_MERGE) == 0
5068
      && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
5069
    return node->form = DW_FORM_string;
5070
 
5071
  ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
5072
  ++dw2_string_counter;
5073
  node->label = xstrdup (label);
5074
 
5075
  return node->form = DW_FORM_strp;
5076
}
5077
 
5078
/* Add a DIE reference attribute value to a DIE.  */
5079
 
5080
static inline void
5081
add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
5082
{
5083
  dw_attr_node attr;
5084
 
5085
  attr.dw_attr = attr_kind;
5086
  attr.dw_attr_val.val_class = dw_val_class_die_ref;
5087
  attr.dw_attr_val.v.val_die_ref.die = targ_die;
5088
  attr.dw_attr_val.v.val_die_ref.external = 0;
5089
  add_dwarf_attr (die, &attr);
5090
}
5091
 
5092
/* Add an AT_specification attribute to a DIE, and also make the back
5093
   pointer from the specification to the definition.  */
5094
 
5095
static inline void
5096
add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
5097
{
5098
  add_AT_die_ref (die, DW_AT_specification, targ_die);
5099
  gcc_assert (!targ_die->die_definition);
5100
  targ_die->die_definition = die;
5101
}
5102
 
5103
static inline dw_die_ref
5104
AT_ref (dw_attr_ref a)
5105
{
5106
  gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5107
  return a->dw_attr_val.v.val_die_ref.die;
5108
}
5109
 
5110
static inline int
5111
AT_ref_external (dw_attr_ref a)
5112
{
5113
  if (a && AT_class (a) == dw_val_class_die_ref)
5114
    return a->dw_attr_val.v.val_die_ref.external;
5115
 
5116
  return 0;
5117
}
5118
 
5119
static inline void
5120
set_AT_ref_external (dw_attr_ref a, int i)
5121
{
5122
  gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5123
  a->dw_attr_val.v.val_die_ref.external = i;
5124
}
5125
 
5126
/* Add an FDE reference attribute value to a DIE.  */
5127
 
5128
static inline void
5129
add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
5130
{
5131
  dw_attr_node attr;
5132
 
5133
  attr.dw_attr = attr_kind;
5134
  attr.dw_attr_val.val_class = dw_val_class_fde_ref;
5135
  attr.dw_attr_val.v.val_fde_index = targ_fde;
5136
  add_dwarf_attr (die, &attr);
5137
}
5138
 
5139
/* Add a location description attribute value to a DIE.  */
5140
 
5141
static inline void
5142
add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
5143
{
5144
  dw_attr_node attr;
5145
 
5146
  attr.dw_attr = attr_kind;
5147
  attr.dw_attr_val.val_class = dw_val_class_loc;
5148
  attr.dw_attr_val.v.val_loc = loc;
5149
  add_dwarf_attr (die, &attr);
5150
}
5151
 
5152
static inline dw_loc_descr_ref
5153
AT_loc (dw_attr_ref a)
5154
{
5155
  gcc_assert (a && AT_class (a) == dw_val_class_loc);
5156
  return a->dw_attr_val.v.val_loc;
5157
}
5158
 
5159
static inline void
5160
add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
5161
{
5162
  dw_attr_node attr;
5163
 
5164
  attr.dw_attr = attr_kind;
5165
  attr.dw_attr_val.val_class = dw_val_class_loc_list;
5166
  attr.dw_attr_val.v.val_loc_list = loc_list;
5167
  add_dwarf_attr (die, &attr);
5168
  have_location_lists = true;
5169
}
5170
 
5171
static inline dw_loc_list_ref
5172
AT_loc_list (dw_attr_ref a)
5173
{
5174
  gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
5175
  return a->dw_attr_val.v.val_loc_list;
5176
}
5177
 
5178
/* Add an address constant attribute value to a DIE.  */
5179
 
5180
static inline void
5181
add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
5182
{
5183
  dw_attr_node attr;
5184
 
5185
  attr.dw_attr = attr_kind;
5186
  attr.dw_attr_val.val_class = dw_val_class_addr;
5187
  attr.dw_attr_val.v.val_addr = addr;
5188
  add_dwarf_attr (die, &attr);
5189
}
5190
 
5191
/* Get the RTX from to an address DIE attribute.  */
5192
 
5193
static inline rtx
5194
AT_addr (dw_attr_ref a)
5195
{
5196
  gcc_assert (a && AT_class (a) == dw_val_class_addr);
5197
  return a->dw_attr_val.v.val_addr;
5198
}
5199
 
5200
/* Add a file attribute value to a DIE.  */
5201
 
5202
static inline void
5203
add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
5204
             struct dwarf_file_data *fd)
5205
{
5206
  dw_attr_node attr;
5207
 
5208
  attr.dw_attr = attr_kind;
5209
  attr.dw_attr_val.val_class = dw_val_class_file;
5210
  attr.dw_attr_val.v.val_file = fd;
5211
  add_dwarf_attr (die, &attr);
5212
}
5213
 
5214
/* Get the dwarf_file_data from a file DIE attribute.  */
5215
 
5216
static inline struct dwarf_file_data *
5217
AT_file (dw_attr_ref a)
5218
{
5219
  gcc_assert (a && AT_class (a) == dw_val_class_file);
5220
  return a->dw_attr_val.v.val_file;
5221
}
5222
 
5223
/* Add a label identifier attribute value to a DIE.  */
5224
 
5225
static inline void
5226
add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
5227
{
5228
  dw_attr_node attr;
5229
 
5230
  attr.dw_attr = attr_kind;
5231
  attr.dw_attr_val.val_class = dw_val_class_lbl_id;
5232
  attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
5233
  add_dwarf_attr (die, &attr);
5234
}
5235
 
5236
/* Add a section offset attribute value to a DIE, an offset into the
5237
   debug_line section.  */
5238
 
5239
static inline void
5240
add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
5241
                const char *label)
5242
{
5243
  dw_attr_node attr;
5244
 
5245
  attr.dw_attr = attr_kind;
5246
  attr.dw_attr_val.val_class = dw_val_class_lineptr;
5247
  attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
5248
  add_dwarf_attr (die, &attr);
5249
}
5250
 
5251
/* Add a section offset attribute value to a DIE, an offset into the
5252
   debug_macinfo section.  */
5253
 
5254
static inline void
5255
add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
5256
               const char *label)
5257
{
5258
  dw_attr_node attr;
5259
 
5260
  attr.dw_attr = attr_kind;
5261
  attr.dw_attr_val.val_class = dw_val_class_macptr;
5262
  attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
5263
  add_dwarf_attr (die, &attr);
5264
}
5265
 
5266
/* Add an offset attribute value to a DIE.  */
5267
 
5268
static inline void
5269
add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
5270
               unsigned HOST_WIDE_INT offset)
5271
{
5272
  dw_attr_node attr;
5273
 
5274
  attr.dw_attr = attr_kind;
5275
  attr.dw_attr_val.val_class = dw_val_class_offset;
5276
  attr.dw_attr_val.v.val_offset = offset;
5277
  add_dwarf_attr (die, &attr);
5278
}
5279
 
5280
/* Add an range_list attribute value to a DIE.  */
5281
 
5282
static void
5283
add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
5284
                   long unsigned int offset)
5285
{
5286
  dw_attr_node attr;
5287
 
5288
  attr.dw_attr = attr_kind;
5289
  attr.dw_attr_val.val_class = dw_val_class_range_list;
5290
  attr.dw_attr_val.v.val_offset = offset;
5291
  add_dwarf_attr (die, &attr);
5292
}
5293
 
5294
static inline const char *
5295
AT_lbl (dw_attr_ref a)
5296
{
5297
  gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
5298
                    || AT_class (a) == dw_val_class_lineptr
5299
                    || AT_class (a) == dw_val_class_macptr));
5300
  return a->dw_attr_val.v.val_lbl_id;
5301
}
5302
 
5303
/* Get the attribute of type attr_kind.  */
5304
 
5305
static dw_attr_ref
5306
get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5307
{
5308
  dw_attr_ref a;
5309
  unsigned ix;
5310
  dw_die_ref spec = NULL;
5311
 
5312
  if (! die)
5313
    return NULL;
5314
 
5315
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
5316
    if (a->dw_attr == attr_kind)
5317
      return a;
5318
    else if (a->dw_attr == DW_AT_specification
5319
             || a->dw_attr == DW_AT_abstract_origin)
5320
      spec = AT_ref (a);
5321
 
5322
  if (spec)
5323
    return get_AT (spec, attr_kind);
5324
 
5325
  return NULL;
5326
}
5327
 
5328
/* Return the "low pc" attribute value, typically associated with a subprogram
5329
   DIE.  Return null if the "low pc" attribute is either not present, or if it
5330
   cannot be represented as an assembler label identifier.  */
5331
 
5332
static inline const char *
5333
get_AT_low_pc (dw_die_ref die)
5334
{
5335
  dw_attr_ref a = get_AT (die, DW_AT_low_pc);
5336
 
5337
  return a ? AT_lbl (a) : NULL;
5338
}
5339
 
5340
/* Return the "high pc" attribute value, typically associated with a subprogram
5341
   DIE.  Return null if the "high pc" attribute is either not present, or if it
5342
   cannot be represented as an assembler label identifier.  */
5343
 
5344
static inline const char *
5345
get_AT_hi_pc (dw_die_ref die)
5346
{
5347
  dw_attr_ref a = get_AT (die, DW_AT_high_pc);
5348
 
5349
  return a ? AT_lbl (a) : NULL;
5350
}
5351
 
5352
/* Return the value of the string attribute designated by ATTR_KIND, or
5353
   NULL if it is not present.  */
5354
 
5355
static inline const char *
5356
get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
5357
{
5358
  dw_attr_ref a = get_AT (die, attr_kind);
5359
 
5360
  return a ? AT_string (a) : NULL;
5361
}
5362
 
5363
/* Return the value of the flag attribute designated by ATTR_KIND, or -1
5364
   if it is not present.  */
5365
 
5366
static inline int
5367
get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
5368
{
5369
  dw_attr_ref a = get_AT (die, attr_kind);
5370
 
5371
  return a ? AT_flag (a) : 0;
5372
}
5373
 
5374
/* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5375
   if it is not present.  */
5376
 
5377
static inline unsigned
5378
get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
5379
{
5380
  dw_attr_ref a = get_AT (die, attr_kind);
5381
 
5382
  return a ? AT_unsigned (a) : 0;
5383
}
5384
 
5385
static inline dw_die_ref
5386
get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5387
{
5388
  dw_attr_ref a = get_AT (die, attr_kind);
5389
 
5390
  return a ? AT_ref (a) : NULL;
5391
}
5392
 
5393
static inline struct dwarf_file_data *
5394
get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
5395
{
5396
  dw_attr_ref a = get_AT (die, attr_kind);
5397
 
5398
  return a ? AT_file (a) : NULL;
5399
}
5400
 
5401
/* Return TRUE if the language is C or C++.  */
5402
 
5403
static inline bool
5404
is_c_family (void)
5405
{
5406
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5407
 
5408
  return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
5409
          || lang == DW_LANG_C99
5410
          || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
5411
}
5412
 
5413
/* Return TRUE if the language is C++.  */
5414
 
5415
static inline bool
5416
is_cxx (void)
5417
{
5418
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5419
 
5420
  return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
5421
}
5422
 
5423
/* Return TRUE if the language is Fortran.  */
5424
 
5425
static inline bool
5426
is_fortran (void)
5427
{
5428
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5429
 
5430
  return (lang == DW_LANG_Fortran77
5431
          || lang == DW_LANG_Fortran90
5432
          || lang == DW_LANG_Fortran95);
5433
}
5434
 
5435
/* Return TRUE if the language is Java.  */
5436
 
5437
static inline bool
5438
is_java (void)
5439
{
5440
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5441
 
5442
  return lang == DW_LANG_Java;
5443
}
5444
 
5445
/* Return TRUE if the language is Ada.  */
5446
 
5447
static inline bool
5448
is_ada (void)
5449
{
5450
  unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5451
 
5452
  return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5453
}
5454
 
5455
/* Remove the specified attribute if present.  */
5456
 
5457
static void
5458
remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5459
{
5460
  dw_attr_ref a;
5461
  unsigned ix;
5462
 
5463
  if (! die)
5464
    return;
5465
 
5466
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
5467
    if (a->dw_attr == attr_kind)
5468
      {
5469
        if (AT_class (a) == dw_val_class_str)
5470
          if (a->dw_attr_val.v.val_str->refcount)
5471
            a->dw_attr_val.v.val_str->refcount--;
5472
 
5473
        /* VEC_ordered_remove should help reduce the number of abbrevs
5474
           that are needed.  */
5475
        VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
5476
        return;
5477
      }
5478
}
5479
 
5480
/* Remove CHILD from its parent.  PREV must have the property that
5481
   PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
5482
 
5483
static void
5484
remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
5485
{
5486
  gcc_assert (child->die_parent == prev->die_parent);
5487
  gcc_assert (prev->die_sib == child);
5488
  if (prev == child)
5489
    {
5490
      gcc_assert (child->die_parent->die_child == child);
5491
      prev = NULL;
5492
    }
5493
  else
5494
    prev->die_sib = child->die_sib;
5495
  if (child->die_parent->die_child == child)
5496
    child->die_parent->die_child = prev;
5497
}
5498
 
5499
/* Remove child DIE whose die_tag is TAG.  Do nothing if no child
5500
   matches TAG.  */
5501
 
5502
static void
5503
remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5504
{
5505
  dw_die_ref c;
5506
 
5507
  c = die->die_child;
5508
  if (c) do {
5509
    dw_die_ref prev = c;
5510
    c = c->die_sib;
5511
    while (c->die_tag == tag)
5512
      {
5513
        remove_child_with_prev (c, prev);
5514
        /* Might have removed every child.  */
5515
        if (c == c->die_sib)
5516
          return;
5517
        c = c->die_sib;
5518
      }
5519
  } while (c != die->die_child);
5520
}
5521
 
5522
/* Add a CHILD_DIE as the last child of DIE.  */
5523
 
5524
static void
5525
add_child_die (dw_die_ref die, dw_die_ref child_die)
5526
{
5527
  /* FIXME this should probably be an assert.  */
5528
  if (! die || ! child_die)
5529
    return;
5530
  gcc_assert (die != child_die);
5531
 
5532
  child_die->die_parent = die;
5533
  if (die->die_child)
5534
    {
5535
      child_die->die_sib = die->die_child->die_sib;
5536
      die->die_child->die_sib = child_die;
5537
    }
5538
  else
5539
    child_die->die_sib = child_die;
5540
  die->die_child = child_die;
5541
}
5542
 
5543
/* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5544
   is the specification, to the end of PARENT's list of children.
5545
   This is done by removing and re-adding it.  */
5546
 
5547
static void
5548
splice_child_die (dw_die_ref parent, dw_die_ref child)
5549
{
5550
  dw_die_ref p;
5551
 
5552
  /* We want the declaration DIE from inside the class, not the
5553
     specification DIE at toplevel.  */
5554
  if (child->die_parent != parent)
5555
    {
5556
      dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5557
 
5558
      if (tmp)
5559
        child = tmp;
5560
    }
5561
 
5562
  gcc_assert (child->die_parent == parent
5563
              || (child->die_parent
5564
                  == get_AT_ref (parent, DW_AT_specification)));
5565
 
5566
  for (p = child->die_parent->die_child; ; p = p->die_sib)
5567
    if (p->die_sib == child)
5568
      {
5569
        remove_child_with_prev (child, p);
5570
        break;
5571
      }
5572
 
5573
  add_child_die (parent, child);
5574
}
5575
 
5576
/* Return a pointer to a newly created DIE node.  */
5577
 
5578
static inline dw_die_ref
5579
new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5580
{
5581
  dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5582
 
5583
  die->die_tag = tag_value;
5584
 
5585
  if (parent_die != NULL)
5586
    add_child_die (parent_die, die);
5587
  else
5588
    {
5589
      limbo_die_node *limbo_node;
5590
 
5591
      limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5592
      limbo_node->die = die;
5593
      limbo_node->created_for = t;
5594
      limbo_node->next = limbo_die_list;
5595
      limbo_die_list = limbo_node;
5596
    }
5597
 
5598
  return die;
5599
}
5600
 
5601
/* Return the DIE associated with the given type specifier.  */
5602
 
5603
static inline dw_die_ref
5604
lookup_type_die (tree type)
5605
{
5606
  return TYPE_SYMTAB_DIE (type);
5607
}
5608
 
5609
/* Equate a DIE to a given type specifier.  */
5610
 
5611
static inline void
5612
equate_type_number_to_die (tree type, dw_die_ref type_die)
5613
{
5614
  TYPE_SYMTAB_DIE (type) = type_die;
5615
}
5616
 
5617
/* Returns a hash value for X (which really is a die_struct).  */
5618
 
5619
static hashval_t
5620
decl_die_table_hash (const void *x)
5621
{
5622
  return (hashval_t) ((const dw_die_ref) x)->decl_id;
5623
}
5624
 
5625
/* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5626
 
5627
static int
5628
decl_die_table_eq (const void *x, const void *y)
5629
{
5630
  return (((const dw_die_ref) x)->decl_id == DECL_UID ((const tree) y));
5631
}
5632
 
5633
/* Return the DIE associated with a given declaration.  */
5634
 
5635
static inline dw_die_ref
5636
lookup_decl_die (tree decl)
5637
{
5638
  return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5639
}
5640
 
5641
/* Returns a hash value for X (which really is a var_loc_list).  */
5642
 
5643
static hashval_t
5644
decl_loc_table_hash (const void *x)
5645
{
5646
  return (hashval_t) ((const var_loc_list *) x)->decl_id;
5647
}
5648
 
5649
/* Return nonzero if decl_id of var_loc_list X is the same as
5650
   UID of decl *Y.  */
5651
 
5652
static int
5653
decl_loc_table_eq (const void *x, const void *y)
5654
{
5655
  return (((const var_loc_list *) x)->decl_id == DECL_UID ((const tree) y));
5656
}
5657
 
5658
/* Return the var_loc list associated with a given declaration.  */
5659
 
5660
static inline var_loc_list *
5661
lookup_decl_loc (tree decl)
5662
{
5663
  return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5664
}
5665
 
5666
/* Equate a DIE to a particular declaration.  */
5667
 
5668
static void
5669
equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5670
{
5671
  unsigned int decl_id = DECL_UID (decl);
5672
  void **slot;
5673
 
5674
  slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5675
  *slot = decl_die;
5676
  decl_die->decl_id = decl_id;
5677
}
5678
 
5679
/* Add a variable location node to the linked list for DECL.  */
5680
 
5681
static void
5682
add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5683
{
5684
  unsigned int decl_id = DECL_UID (decl);
5685
  var_loc_list *temp;
5686
  void **slot;
5687
 
5688
  slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5689
  if (*slot == NULL)
5690
    {
5691
      temp = ggc_alloc_cleared (sizeof (var_loc_list));
5692
      temp->decl_id = decl_id;
5693
      *slot = temp;
5694
    }
5695
  else
5696
    temp = *slot;
5697
 
5698
  if (temp->last)
5699
    {
5700
      /* If the current location is the same as the end of the list,
5701
         we have nothing to do.  */
5702
      if (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5703
                        NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5704
        {
5705
          /* Add LOC to the end of list and update LAST.  */
5706
          temp->last->next = loc;
5707
          temp->last = loc;
5708
        }
5709
    }
5710
  /* Do not add empty location to the beginning of the list.  */
5711
  else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5712
    {
5713
      temp->first = loc;
5714
      temp->last = loc;
5715
    }
5716
}
5717
 
5718
/* Keep track of the number of spaces used to indent the
5719
   output of the debugging routines that print the structure of
5720
   the DIE internal representation.  */
5721
static int print_indent;
5722
 
5723
/* Indent the line the number of spaces given by print_indent.  */
5724
 
5725
static inline void
5726
print_spaces (FILE *outfile)
5727
{
5728
  fprintf (outfile, "%*s", print_indent, "");
5729
}
5730
 
5731
/* Print the information associated with a given DIE, and its children.
5732
   This routine is a debugging aid only.  */
5733
 
5734
static void
5735
print_die (dw_die_ref die, FILE *outfile)
5736
{
5737
  dw_attr_ref a;
5738
  dw_die_ref c;
5739
  unsigned ix;
5740
 
5741
  print_spaces (outfile);
5742
  fprintf (outfile, "DIE %4lu: %s\n",
5743
           die->die_offset, dwarf_tag_name (die->die_tag));
5744
  print_spaces (outfile);
5745
  fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5746
  fprintf (outfile, " offset: %lu\n", die->die_offset);
5747
 
5748
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
5749
    {
5750
      print_spaces (outfile);
5751
      fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5752
 
5753
      switch (AT_class (a))
5754
        {
5755
        case dw_val_class_addr:
5756
          fprintf (outfile, "address");
5757
          break;
5758
        case dw_val_class_offset:
5759
          fprintf (outfile, "offset");
5760
          break;
5761
        case dw_val_class_loc:
5762
          fprintf (outfile, "location descriptor");
5763
          break;
5764
        case dw_val_class_loc_list:
5765
          fprintf (outfile, "location list -> label:%s",
5766
                   AT_loc_list (a)->ll_symbol);
5767
          break;
5768
        case dw_val_class_range_list:
5769
          fprintf (outfile, "range list");
5770
          break;
5771
        case dw_val_class_const:
5772
          fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5773
          break;
5774
        case dw_val_class_unsigned_const:
5775
          fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5776
          break;
5777
        case dw_val_class_long_long:
5778
          fprintf (outfile, "constant (%lu,%lu)",
5779
                   a->dw_attr_val.v.val_long_long.hi,
5780
                   a->dw_attr_val.v.val_long_long.low);
5781
          break;
5782
        case dw_val_class_vec:
5783
          fprintf (outfile, "floating-point or vector constant");
5784
          break;
5785
        case dw_val_class_flag:
5786
          fprintf (outfile, "%u", AT_flag (a));
5787
          break;
5788
        case dw_val_class_die_ref:
5789
          if (AT_ref (a) != NULL)
5790
            {
5791
              if (AT_ref (a)->die_symbol)
5792
                fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5793
              else
5794
                fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
5795
            }
5796
          else
5797
            fprintf (outfile, "die -> <null>");
5798
          break;
5799
        case dw_val_class_lbl_id:
5800
        case dw_val_class_lineptr:
5801
        case dw_val_class_macptr:
5802
          fprintf (outfile, "label: %s", AT_lbl (a));
5803
          break;
5804
        case dw_val_class_str:
5805
          if (AT_string (a) != NULL)
5806
            fprintf (outfile, "\"%s\"", AT_string (a));
5807
          else
5808
            fprintf (outfile, "<null>");
5809
          break;
5810
        case dw_val_class_file:
5811
          fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5812
                   AT_file (a)->emitted_number);
5813
          break;
5814
        default:
5815
          break;
5816
        }
5817
 
5818
      fprintf (outfile, "\n");
5819
    }
5820
 
5821
  if (die->die_child != NULL)
5822
    {
5823
      print_indent += 4;
5824
      FOR_EACH_CHILD (die, c, print_die (c, outfile));
5825
      print_indent -= 4;
5826
    }
5827
  if (print_indent == 0)
5828
    fprintf (outfile, "\n");
5829
}
5830
 
5831
/* Print the contents of the source code line number correspondence table.
5832
   This routine is a debugging aid only.  */
5833
 
5834
static void
5835
print_dwarf_line_table (FILE *outfile)
5836
{
5837
  unsigned i;
5838
  dw_line_info_ref line_info;
5839
 
5840
  fprintf (outfile, "\n\nDWARF source line information\n");
5841
  for (i = 1; i < line_info_table_in_use; i++)
5842
    {
5843
      line_info = &line_info_table[i];
5844
      fprintf (outfile, "%5d: %4ld %6ld\n", i,
5845
               line_info->dw_file_num,
5846
               line_info->dw_line_num);
5847
    }
5848
 
5849
  fprintf (outfile, "\n\n");
5850
}
5851
 
5852
/* Print the information collected for a given DIE.  */
5853
 
5854
void
5855
debug_dwarf_die (dw_die_ref die)
5856
{
5857
  print_die (die, stderr);
5858
}
5859
 
5860
/* Print all DWARF information collected for the compilation unit.
5861
   This routine is a debugging aid only.  */
5862
 
5863
void
5864
debug_dwarf (void)
5865
{
5866
  print_indent = 0;
5867
  print_die (comp_unit_die, stderr);
5868
  if (! DWARF2_ASM_LINE_DEBUG_INFO)
5869
    print_dwarf_line_table (stderr);
5870
}
5871
 
5872
/* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5873
   for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5874
   DIE that marks the start of the DIEs for this include file.  */
5875
 
5876
static dw_die_ref
5877
push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5878
{
5879
  const char *filename = get_AT_string (bincl_die, DW_AT_name);
5880
  dw_die_ref new_unit = gen_compile_unit_die (filename);
5881
 
5882
  new_unit->die_sib = old_unit;
5883
  return new_unit;
5884
}
5885
 
5886
/* Close an include-file CU and reopen the enclosing one.  */
5887
 
5888
static dw_die_ref
5889
pop_compile_unit (dw_die_ref old_unit)
5890
{
5891
  dw_die_ref new_unit = old_unit->die_sib;
5892
 
5893
  old_unit->die_sib = NULL;
5894
  return new_unit;
5895
}
5896
 
5897
#define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5898
#define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5899
 
5900
/* Calculate the checksum of a location expression.  */
5901
 
5902
static inline void
5903
loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5904
{
5905
  CHECKSUM (loc->dw_loc_opc);
5906
  CHECKSUM (loc->dw_loc_oprnd1);
5907
  CHECKSUM (loc->dw_loc_oprnd2);
5908
}
5909
 
5910
/* Calculate the checksum of an attribute.  */
5911
 
5912
static void
5913
attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5914
{
5915
  dw_loc_descr_ref loc;
5916
  rtx r;
5917
 
5918
  CHECKSUM (at->dw_attr);
5919
 
5920
  /* We don't care that this was compiled with a different compiler
5921
     snapshot; if the output is the same, that's what matters.  */
5922
  if (at->dw_attr == DW_AT_producer)
5923
    return;
5924
 
5925
  switch (AT_class (at))
5926
    {
5927
    case dw_val_class_const:
5928
      CHECKSUM (at->dw_attr_val.v.val_int);
5929
      break;
5930
    case dw_val_class_unsigned_const:
5931
      CHECKSUM (at->dw_attr_val.v.val_unsigned);
5932
      break;
5933
    case dw_val_class_long_long:
5934
      CHECKSUM (at->dw_attr_val.v.val_long_long);
5935
      break;
5936
    case dw_val_class_vec:
5937
      CHECKSUM (at->dw_attr_val.v.val_vec);
5938
      break;
5939
    case dw_val_class_flag:
5940
      CHECKSUM (at->dw_attr_val.v.val_flag);
5941
      break;
5942
    case dw_val_class_str:
5943
      CHECKSUM_STRING (AT_string (at));
5944
      break;
5945
 
5946
    case dw_val_class_addr:
5947
      r = AT_addr (at);
5948
      gcc_assert (GET_CODE (r) == SYMBOL_REF);
5949
      CHECKSUM_STRING (XSTR (r, 0));
5950
      break;
5951
 
5952
    case dw_val_class_offset:
5953
      CHECKSUM (at->dw_attr_val.v.val_offset);
5954
      break;
5955
 
5956
    case dw_val_class_loc:
5957
      for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5958
        loc_checksum (loc, ctx);
5959
      break;
5960
 
5961
    case dw_val_class_die_ref:
5962
      die_checksum (AT_ref (at), ctx, mark);
5963
      break;
5964
 
5965
    case dw_val_class_fde_ref:
5966
    case dw_val_class_lbl_id:
5967
    case dw_val_class_lineptr:
5968
    case dw_val_class_macptr:
5969
      break;
5970
 
5971
    case dw_val_class_file:
5972
      CHECKSUM_STRING (AT_file (at)->filename);
5973
      break;
5974
 
5975
    default:
5976
      break;
5977
    }
5978
}
5979
 
5980
/* Calculate the checksum of a DIE.  */
5981
 
5982
static void
5983
die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5984
{
5985
  dw_die_ref c;
5986
  dw_attr_ref a;
5987
  unsigned ix;
5988
 
5989
  /* To avoid infinite recursion.  */
5990
  if (die->die_mark)
5991
    {
5992
      CHECKSUM (die->die_mark);
5993
      return;
5994
    }
5995
  die->die_mark = ++(*mark);
5996
 
5997
  CHECKSUM (die->die_tag);
5998
 
5999
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6000
    attr_checksum (a, ctx, mark);
6001
 
6002
  FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
6003
}
6004
 
6005
#undef CHECKSUM
6006
#undef CHECKSUM_STRING
6007
 
6008
/* Do the location expressions look same?  */
6009
static inline int
6010
same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6011
{
6012
  return loc1->dw_loc_opc == loc2->dw_loc_opc
6013
         && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6014
         && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6015
}
6016
 
6017
/* Do the values look the same?  */
6018
static int
6019
same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
6020
{
6021
  dw_loc_descr_ref loc1, loc2;
6022
  rtx r1, r2;
6023
 
6024
  if (v1->val_class != v2->val_class)
6025
    return 0;
6026
 
6027
  switch (v1->val_class)
6028
    {
6029
    case dw_val_class_const:
6030
      return v1->v.val_int == v2->v.val_int;
6031
    case dw_val_class_unsigned_const:
6032
      return v1->v.val_unsigned == v2->v.val_unsigned;
6033
    case dw_val_class_long_long:
6034
      return v1->v.val_long_long.hi == v2->v.val_long_long.hi
6035
             && v1->v.val_long_long.low == v2->v.val_long_long.low;
6036
    case dw_val_class_vec:
6037
      if (v1->v.val_vec.length != v2->v.val_vec.length
6038
          || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6039
        return 0;
6040
      if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6041
                  v1->v.val_vec.length * v1->v.val_vec.elt_size))
6042
        return 0;
6043
      return 1;
6044
    case dw_val_class_flag:
6045
      return v1->v.val_flag == v2->v.val_flag;
6046
    case dw_val_class_str:
6047
      return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6048
 
6049
    case dw_val_class_addr:
6050
      r1 = v1->v.val_addr;
6051
      r2 = v2->v.val_addr;
6052
      if (GET_CODE (r1) != GET_CODE (r2))
6053
        return 0;
6054
      gcc_assert (GET_CODE (r1) == SYMBOL_REF);
6055
      return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
6056
 
6057
    case dw_val_class_offset:
6058
      return v1->v.val_offset == v2->v.val_offset;
6059
 
6060
    case dw_val_class_loc:
6061
      for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6062
           loc1 && loc2;
6063
           loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6064
        if (!same_loc_p (loc1, loc2, mark))
6065
          return 0;
6066
      return !loc1 && !loc2;
6067
 
6068
    case dw_val_class_die_ref:
6069
      return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6070
 
6071
    case dw_val_class_fde_ref:
6072
    case dw_val_class_lbl_id:
6073
    case dw_val_class_lineptr:
6074
    case dw_val_class_macptr:
6075
      return 1;
6076
 
6077
    case dw_val_class_file:
6078
      return v1->v.val_file == v2->v.val_file;
6079
 
6080
    default:
6081
      return 1;
6082
    }
6083
}
6084
 
6085
/* Do the attributes look the same?  */
6086
 
6087
static int
6088
same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6089
{
6090
  if (at1->dw_attr != at2->dw_attr)
6091
    return 0;
6092
 
6093
  /* We don't care that this was compiled with a different compiler
6094
     snapshot; if the output is the same, that's what matters. */
6095
  if (at1->dw_attr == DW_AT_producer)
6096
    return 1;
6097
 
6098
  return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6099
}
6100
 
6101
/* Do the dies look the same?  */
6102
 
6103
static int
6104
same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6105
{
6106
  dw_die_ref c1, c2;
6107
  dw_attr_ref a1;
6108
  unsigned ix;
6109
 
6110
  /* To avoid infinite recursion.  */
6111
  if (die1->die_mark)
6112
    return die1->die_mark == die2->die_mark;
6113
  die1->die_mark = die2->die_mark = ++(*mark);
6114
 
6115
  if (die1->die_tag != die2->die_tag)
6116
    return 0;
6117
 
6118
  if (VEC_length (dw_attr_node, die1->die_attr)
6119
      != VEC_length (dw_attr_node, die2->die_attr))
6120
    return 0;
6121
 
6122
  for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
6123
    if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6124
      return 0;
6125
 
6126
  c1 = die1->die_child;
6127
  c2 = die2->die_child;
6128
  if (! c1)
6129
    {
6130
      if (c2)
6131
        return 0;
6132
    }
6133
  else
6134
    for (;;)
6135
      {
6136
        if (!same_die_p (c1, c2, mark))
6137
          return 0;
6138
        c1 = c1->die_sib;
6139
        c2 = c2->die_sib;
6140
        if (c1 == die1->die_child)
6141
          {
6142
            if (c2 == die2->die_child)
6143
              break;
6144
            else
6145
              return 0;
6146
          }
6147
    }
6148
 
6149
  return 1;
6150
}
6151
 
6152
/* Do the dies look the same?  Wrapper around same_die_p.  */
6153
 
6154
static int
6155
same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6156
{
6157
  int mark = 0;
6158
  int ret = same_die_p (die1, die2, &mark);
6159
 
6160
  unmark_all_dies (die1);
6161
  unmark_all_dies (die2);
6162
 
6163
  return ret;
6164
}
6165
 
6166
/* The prefix to attach to symbols on DIEs in the current comdat debug
6167
   info section.  */
6168
static char *comdat_symbol_id;
6169
 
6170
/* The index of the current symbol within the current comdat CU.  */
6171
static unsigned int comdat_symbol_number;
6172
 
6173
/* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6174
   children, and set comdat_symbol_id accordingly.  */
6175
 
6176
static void
6177
compute_section_prefix (dw_die_ref unit_die)
6178
{
6179
  const char *die_name = get_AT_string (unit_die, DW_AT_name);
6180
  const char *base = die_name ? lbasename (die_name) : "anonymous";
6181
  char *name = alloca (strlen (base) + 64);
6182
  char *p;
6183
  int i, mark;
6184
  unsigned char checksum[16];
6185
  struct md5_ctx ctx;
6186
 
6187
  /* Compute the checksum of the DIE, then append part of it as hex digits to
6188
     the name filename of the unit.  */
6189
 
6190
  md5_init_ctx (&ctx);
6191
  mark = 0;
6192
  die_checksum (unit_die, &ctx, &mark);
6193
  unmark_all_dies (unit_die);
6194
  md5_finish_ctx (&ctx, checksum);
6195
 
6196
  sprintf (name, "%s.", base);
6197
  clean_symbol_name (name);
6198
 
6199
  p = name + strlen (name);
6200
  for (i = 0; i < 4; i++)
6201
    {
6202
      sprintf (p, "%.2x", checksum[i]);
6203
      p += 2;
6204
    }
6205
 
6206
  comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
6207
  comdat_symbol_number = 0;
6208
}
6209
 
6210
/* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6211
 
6212
static int
6213
is_type_die (dw_die_ref die)
6214
{
6215
  switch (die->die_tag)
6216
    {
6217
    case DW_TAG_array_type:
6218
    case DW_TAG_class_type:
6219
    case DW_TAG_enumeration_type:
6220
    case DW_TAG_pointer_type:
6221
    case DW_TAG_reference_type:
6222
    case DW_TAG_string_type:
6223
    case DW_TAG_structure_type:
6224
    case DW_TAG_subroutine_type:
6225
    case DW_TAG_union_type:
6226
    case DW_TAG_ptr_to_member_type:
6227
    case DW_TAG_set_type:
6228
    case DW_TAG_subrange_type:
6229
    case DW_TAG_base_type:
6230
    case DW_TAG_const_type:
6231
    case DW_TAG_file_type:
6232
    case DW_TAG_packed_type:
6233
    case DW_TAG_volatile_type:
6234
    case DW_TAG_typedef:
6235
      return 1;
6236
    default:
6237
      return 0;
6238
    }
6239
}
6240
 
6241
/* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6242
   Basically, we want to choose the bits that are likely to be shared between
6243
   compilations (types) and leave out the bits that are specific to individual
6244
   compilations (functions).  */
6245
 
6246
static int
6247
is_comdat_die (dw_die_ref c)
6248
{
6249
  /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6250
     we do for stabs.  The advantage is a greater likelihood of sharing between
6251
     objects that don't include headers in the same order (and therefore would
6252
     put the base types in a different comdat).  jason 8/28/00 */
6253
 
6254
  if (c->die_tag == DW_TAG_base_type)
6255
    return 0;
6256
 
6257
  if (c->die_tag == DW_TAG_pointer_type
6258
      || c->die_tag == DW_TAG_reference_type
6259
      || c->die_tag == DW_TAG_const_type
6260
      || c->die_tag == DW_TAG_volatile_type)
6261
    {
6262
      dw_die_ref t = get_AT_ref (c, DW_AT_type);
6263
 
6264
      return t ? is_comdat_die (t) : 0;
6265
    }
6266
 
6267
  return is_type_die (c);
6268
}
6269
 
6270
/* Returns 1 iff C is the sort of DIE that might be referred to from another
6271
   compilation unit.  */
6272
 
6273
static int
6274
is_symbol_die (dw_die_ref c)
6275
{
6276
  return (is_type_die (c)
6277
          || (get_AT (c, DW_AT_declaration)
6278
              && !get_AT (c, DW_AT_specification))
6279
          || c->die_tag == DW_TAG_namespace);
6280
}
6281
 
6282
static char *
6283
gen_internal_sym (const char *prefix)
6284
{
6285
  char buf[256];
6286
 
6287
  ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6288
  return xstrdup (buf);
6289
}
6290
 
6291
/* Assign symbols to all worthy DIEs under DIE.  */
6292
 
6293
static void
6294
assign_symbol_names (dw_die_ref die)
6295
{
6296
  dw_die_ref c;
6297
 
6298
  if (is_symbol_die (die))
6299
    {
6300
      if (comdat_symbol_id)
6301
        {
6302
          char *p = alloca (strlen (comdat_symbol_id) + 64);
6303
 
6304
          sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6305
                   comdat_symbol_id, comdat_symbol_number++);
6306
          die->die_symbol = xstrdup (p);
6307
        }
6308
      else
6309
        die->die_symbol = gen_internal_sym ("LDIE");
6310
    }
6311
 
6312
  FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6313
}
6314
 
6315
struct cu_hash_table_entry
6316
{
6317
  dw_die_ref cu;
6318
  unsigned min_comdat_num, max_comdat_num;
6319
  struct cu_hash_table_entry *next;
6320
};
6321
 
6322
/* Routines to manipulate hash table of CUs.  */
6323
static hashval_t
6324
htab_cu_hash (const void *of)
6325
{
6326
  const struct cu_hash_table_entry *entry = of;
6327
 
6328
  return htab_hash_string (entry->cu->die_symbol);
6329
}
6330
 
6331
static int
6332
htab_cu_eq (const void *of1, const void *of2)
6333
{
6334
  const struct cu_hash_table_entry *entry1 = of1;
6335
  const struct die_struct *entry2 = of2;
6336
 
6337
  return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6338
}
6339
 
6340
static void
6341
htab_cu_del (void *what)
6342
{
6343
  struct cu_hash_table_entry *next, *entry = what;
6344
 
6345
  while (entry)
6346
    {
6347
      next = entry->next;
6348
      free (entry);
6349
      entry = next;
6350
    }
6351
}
6352
 
6353
/* Check whether we have already seen this CU and set up SYM_NUM
6354
   accordingly.  */
6355
static int
6356
check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6357
{
6358
  struct cu_hash_table_entry dummy;
6359
  struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6360
 
6361
  dummy.max_comdat_num = 0;
6362
 
6363
  slot = (struct cu_hash_table_entry **)
6364
    htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6365
        INSERT);
6366
  entry = *slot;
6367
 
6368
  for (; entry; last = entry, entry = entry->next)
6369
    {
6370
      if (same_die_p_wrap (cu, entry->cu))
6371
        break;
6372
    }
6373
 
6374
  if (entry)
6375
    {
6376
      *sym_num = entry->min_comdat_num;
6377
      return 1;
6378
    }
6379
 
6380
  entry = XCNEW (struct cu_hash_table_entry);
6381
  entry->cu = cu;
6382
  entry->min_comdat_num = *sym_num = last->max_comdat_num;
6383
  entry->next = *slot;
6384
  *slot = entry;
6385
 
6386
  return 0;
6387
}
6388
 
6389
/* Record SYM_NUM to record of CU in HTABLE.  */
6390
static void
6391
record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6392
{
6393
  struct cu_hash_table_entry **slot, *entry;
6394
 
6395
  slot = (struct cu_hash_table_entry **)
6396
    htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6397
        NO_INSERT);
6398
  entry = *slot;
6399
 
6400
  entry->max_comdat_num = sym_num;
6401
}
6402
 
6403
/* Traverse the DIE (which is always comp_unit_die), and set up
6404
   additional compilation units for each of the include files we see
6405
   bracketed by BINCL/EINCL.  */
6406
 
6407
static void
6408
break_out_includes (dw_die_ref die)
6409
{
6410
  dw_die_ref c;
6411
  dw_die_ref unit = NULL;
6412
  limbo_die_node *node, **pnode;
6413
  htab_t cu_hash_table;
6414
 
6415
  c = die->die_child;
6416
  if (c) do {
6417
    dw_die_ref prev = c;
6418
    c = c->die_sib;
6419
    while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6420
           || (unit && is_comdat_die (c)))
6421
      {
6422
        dw_die_ref next = c->die_sib;
6423
 
6424
        /* This DIE is for a secondary CU; remove it from the main one.  */
6425
        remove_child_with_prev (c, prev);
6426
 
6427
        if (c->die_tag == DW_TAG_GNU_BINCL)
6428
          unit = push_new_compile_unit (unit, c);
6429
        else if (c->die_tag == DW_TAG_GNU_EINCL)
6430
          unit = pop_compile_unit (unit);
6431
        else
6432
          add_child_die (unit, c);
6433
        c = next;
6434
        if (c == die->die_child)
6435
          break;
6436
      }
6437
  } while (c != die->die_child);
6438
 
6439
#if 0
6440
  /* We can only use this in debugging, since the frontend doesn't check
6441
     to make sure that we leave every include file we enter.  */
6442
  gcc_assert (!unit);
6443
#endif
6444
 
6445
  assign_symbol_names (die);
6446
  cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6447
  for (node = limbo_die_list, pnode = &limbo_die_list;
6448
       node;
6449
       node = node->next)
6450
    {
6451
      int is_dupl;
6452
 
6453
      compute_section_prefix (node->die);
6454
      is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6455
                        &comdat_symbol_number);
6456
      assign_symbol_names (node->die);
6457
      if (is_dupl)
6458
        *pnode = node->next;
6459
      else
6460
        {
6461
          pnode = &node->next;
6462
          record_comdat_symbol_number (node->die, cu_hash_table,
6463
                comdat_symbol_number);
6464
        }
6465
    }
6466
  htab_delete (cu_hash_table);
6467
}
6468
 
6469
/* Traverse the DIE and add a sibling attribute if it may have the
6470
   effect of speeding up access to siblings.  To save some space,
6471
   avoid generating sibling attributes for DIE's without children.  */
6472
 
6473
static void
6474
add_sibling_attributes (dw_die_ref die)
6475
{
6476
  dw_die_ref c;
6477
 
6478
  if (! die->die_child)
6479
    return;
6480
 
6481
  if (die->die_parent && die != die->die_parent->die_child)
6482
    add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6483
 
6484
  FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
6485
}
6486
 
6487
/* Output all location lists for the DIE and its children.  */
6488
 
6489
static void
6490
output_location_lists (dw_die_ref die)
6491
{
6492
  dw_die_ref c;
6493
  dw_attr_ref a;
6494
  unsigned ix;
6495
 
6496
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6497
    if (AT_class (a) == dw_val_class_loc_list)
6498
      output_loc_list (AT_loc_list (a));
6499
 
6500
  FOR_EACH_CHILD (die, c, output_location_lists (c));
6501
}
6502
 
6503
/* The format of each DIE (and its attribute value pairs) is encoded in an
6504
   abbreviation table.  This routine builds the abbreviation table and assigns
6505
   a unique abbreviation id for each abbreviation entry.  The children of each
6506
   die are visited recursively.  */
6507
 
6508
static void
6509
build_abbrev_table (dw_die_ref die)
6510
{
6511
  unsigned long abbrev_id;
6512
  unsigned int n_alloc;
6513
  dw_die_ref c;
6514
  dw_attr_ref a;
6515
  unsigned ix;
6516
 
6517
  /* Scan the DIE references, and mark as external any that refer to
6518
     DIEs from other CUs (i.e. those which are not marked).  */
6519
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6520
    if (AT_class (a) == dw_val_class_die_ref
6521
        && AT_ref (a)->die_mark == 0)
6522
      {
6523
        gcc_assert (AT_ref (a)->die_symbol);
6524
 
6525
        set_AT_ref_external (a, 1);
6526
      }
6527
 
6528
  for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6529
    {
6530
      dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6531
      dw_attr_ref die_a, abbrev_a;
6532
      unsigned ix;
6533
      bool ok = true;
6534
 
6535
      if (abbrev->die_tag != die->die_tag)
6536
        continue;
6537
      if ((abbrev->die_child != NULL) != (die->die_child != NULL))
6538
        continue;
6539
 
6540
      if (VEC_length (dw_attr_node, abbrev->die_attr)
6541
          != VEC_length (dw_attr_node, die->die_attr))
6542
        continue;
6543
 
6544
      for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
6545
        {
6546
          abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
6547
          if ((abbrev_a->dw_attr != die_a->dw_attr)
6548
              || (value_format (abbrev_a) != value_format (die_a)))
6549
            {
6550
              ok = false;
6551
              break;
6552
            }
6553
        }
6554
      if (ok)
6555
        break;
6556
    }
6557
 
6558
  if (abbrev_id >= abbrev_die_table_in_use)
6559
    {
6560
      if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6561
        {
6562
          n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6563
          abbrev_die_table = ggc_realloc (abbrev_die_table,
6564
                                          sizeof (dw_die_ref) * n_alloc);
6565
 
6566
          memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6567
                 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6568
          abbrev_die_table_allocated = n_alloc;
6569
        }
6570
 
6571
      ++abbrev_die_table_in_use;
6572
      abbrev_die_table[abbrev_id] = die;
6573
    }
6574
 
6575
  die->die_abbrev = abbrev_id;
6576
  FOR_EACH_CHILD (die, c, build_abbrev_table (c));
6577
}
6578
 
6579
/* Return the power-of-two number of bytes necessary to represent VALUE.  */
6580
 
6581
static int
6582
constant_size (long unsigned int value)
6583
{
6584
  int log;
6585
 
6586
  if (value == 0)
6587
    log = 0;
6588
  else
6589
    log = floor_log2 (value);
6590
 
6591
  log = log / 8;
6592
  log = 1 << (floor_log2 (log) + 1);
6593
 
6594
  return log;
6595
}
6596
 
6597
/* Return the size of a DIE as it is represented in the
6598
   .debug_info section.  */
6599
 
6600
static unsigned long
6601
size_of_die (dw_die_ref die)
6602
{
6603
  unsigned long size = 0;
6604
  dw_attr_ref a;
6605
  unsigned ix;
6606
 
6607
  size += size_of_uleb128 (die->die_abbrev);
6608
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6609
    {
6610
      switch (AT_class (a))
6611
        {
6612
        case dw_val_class_addr:
6613
          size += DWARF2_ADDR_SIZE;
6614
          break;
6615
        case dw_val_class_offset:
6616
          size += DWARF_OFFSET_SIZE;
6617
          break;
6618
        case dw_val_class_loc:
6619
          {
6620
            unsigned long lsize = size_of_locs (AT_loc (a));
6621
 
6622
            /* Block length.  */
6623
            size += constant_size (lsize);
6624
            size += lsize;
6625
          }
6626
          break;
6627
        case dw_val_class_loc_list:
6628
          size += DWARF_OFFSET_SIZE;
6629
          break;
6630
        case dw_val_class_range_list:
6631
          size += DWARF_OFFSET_SIZE;
6632
          break;
6633
        case dw_val_class_const:
6634
          size += size_of_sleb128 (AT_int (a));
6635
          break;
6636
        case dw_val_class_unsigned_const:
6637
          size += constant_size (AT_unsigned (a));
6638
          break;
6639
        case dw_val_class_long_long:
6640
          size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6641
          break;
6642
        case dw_val_class_vec:
6643
          size += 1 + (a->dw_attr_val.v.val_vec.length
6644
                       * a->dw_attr_val.v.val_vec.elt_size); /* block */
6645
          break;
6646
        case dw_val_class_flag:
6647
          size += 1;
6648
          break;
6649
        case dw_val_class_die_ref:
6650
          if (AT_ref_external (a))
6651
            size += DWARF2_ADDR_SIZE;
6652
          else
6653
            size += DWARF_OFFSET_SIZE;
6654
          break;
6655
        case dw_val_class_fde_ref:
6656
          size += DWARF_OFFSET_SIZE;
6657
          break;
6658
        case dw_val_class_lbl_id:
6659
          size += DWARF2_ADDR_SIZE;
6660
          break;
6661
        case dw_val_class_lineptr:
6662
        case dw_val_class_macptr:
6663
          size += DWARF_OFFSET_SIZE;
6664
          break;
6665
        case dw_val_class_str:
6666
          if (AT_string_form (a) == DW_FORM_strp)
6667
            size += DWARF_OFFSET_SIZE;
6668
          else
6669
            size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6670
          break;
6671
        case dw_val_class_file:
6672
          size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
6673
          break;
6674
        default:
6675
          gcc_unreachable ();
6676
        }
6677
    }
6678
 
6679
  return size;
6680
}
6681
 
6682
/* Size the debugging information associated with a given DIE.  Visits the
6683
   DIE's children recursively.  Updates the global variable next_die_offset, on
6684
   each time through.  Uses the current value of next_die_offset to update the
6685
   die_offset field in each DIE.  */
6686
 
6687
static void
6688
calc_die_sizes (dw_die_ref die)
6689
{
6690
  dw_die_ref c;
6691
 
6692
  die->die_offset = next_die_offset;
6693
  next_die_offset += size_of_die (die);
6694
 
6695
  FOR_EACH_CHILD (die, c, calc_die_sizes (c));
6696
 
6697
  if (die->die_child != NULL)
6698
    /* Count the null byte used to terminate sibling lists.  */
6699
    next_die_offset += 1;
6700
}
6701
 
6702
/* Set the marks for a die and its children.  We do this so
6703
   that we know whether or not a reference needs to use FORM_ref_addr; only
6704
   DIEs in the same CU will be marked.  We used to clear out the offset
6705
   and use that as the flag, but ran into ordering problems.  */
6706
 
6707
static void
6708
mark_dies (dw_die_ref die)
6709
{
6710
  dw_die_ref c;
6711
 
6712
  gcc_assert (!die->die_mark);
6713
 
6714
  die->die_mark = 1;
6715
  FOR_EACH_CHILD (die, c, mark_dies (c));
6716
}
6717
 
6718
/* Clear the marks for a die and its children.  */
6719
 
6720
static void
6721
unmark_dies (dw_die_ref die)
6722
{
6723
  dw_die_ref c;
6724
 
6725
  gcc_assert (die->die_mark);
6726
 
6727
  die->die_mark = 0;
6728
  FOR_EACH_CHILD (die, c, unmark_dies (c));
6729
}
6730
 
6731
/* Clear the marks for a die, its children and referred dies.  */
6732
 
6733
static void
6734
unmark_all_dies (dw_die_ref die)
6735
{
6736
  dw_die_ref c;
6737
  dw_attr_ref a;
6738
  unsigned ix;
6739
 
6740
  if (!die->die_mark)
6741
    return;
6742
  die->die_mark = 0;
6743
 
6744
  FOR_EACH_CHILD (die, c, unmark_all_dies (c));
6745
 
6746
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6747
    if (AT_class (a) == dw_val_class_die_ref)
6748
      unmark_all_dies (AT_ref (a));
6749
}
6750
 
6751
/* Return the size of the .debug_pubnames table  generated for the
6752
   compilation unit.  */
6753
 
6754
static unsigned long
6755
size_of_pubnames (void)
6756
{
6757
  unsigned long size;
6758
  unsigned i;
6759
 
6760
  size = DWARF_PUBNAMES_HEADER_SIZE;
6761
  for (i = 0; i < pubname_table_in_use; i++)
6762
    {
6763
      pubname_ref p = &pubname_table[i];
6764
      size += DWARF_OFFSET_SIZE + strlen (p->name) + 1;
6765
    }
6766
 
6767
  size += DWARF_OFFSET_SIZE;
6768
  return size;
6769
}
6770
 
6771
/* Return the size of the information in the .debug_aranges section.  */
6772
 
6773
static unsigned long
6774
size_of_aranges (void)
6775
{
6776
  unsigned long size;
6777
 
6778
  size = DWARF_ARANGES_HEADER_SIZE;
6779
 
6780
  /* Count the address/length pair for this compilation unit.  */
6781
  size += 2 * DWARF2_ADDR_SIZE;
6782
  size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6783
 
6784
  /* Count the two zero words used to terminated the address range table.  */
6785
  size += 2 * DWARF2_ADDR_SIZE;
6786
  return size;
6787
}
6788
 
6789
/* Select the encoding of an attribute value.  */
6790
 
6791
static enum dwarf_form
6792
value_format (dw_attr_ref a)
6793
{
6794
  switch (a->dw_attr_val.val_class)
6795
    {
6796
    case dw_val_class_addr:
6797
      return DW_FORM_addr;
6798
    case dw_val_class_range_list:
6799
    case dw_val_class_offset:
6800
    case dw_val_class_loc_list:
6801
      switch (DWARF_OFFSET_SIZE)
6802
        {
6803
        case 4:
6804
          return DW_FORM_data4;
6805
        case 8:
6806
          return DW_FORM_data8;
6807
        default:
6808
          gcc_unreachable ();
6809
        }
6810
    case dw_val_class_loc:
6811
      switch (constant_size (size_of_locs (AT_loc (a))))
6812
        {
6813
        case 1:
6814
          return DW_FORM_block1;
6815
        case 2:
6816
          return DW_FORM_block2;
6817
        default:
6818
          gcc_unreachable ();
6819
        }
6820
    case dw_val_class_const:
6821
      return DW_FORM_sdata;
6822
    case dw_val_class_unsigned_const:
6823
      switch (constant_size (AT_unsigned (a)))
6824
        {
6825
        case 1:
6826
          return DW_FORM_data1;
6827
        case 2:
6828
          return DW_FORM_data2;
6829
        case 4:
6830
          return DW_FORM_data4;
6831
        case 8:
6832
          return DW_FORM_data8;
6833
        default:
6834
          gcc_unreachable ();
6835
        }
6836
    case dw_val_class_long_long:
6837
      return DW_FORM_block1;
6838
    case dw_val_class_vec:
6839
      return DW_FORM_block1;
6840
    case dw_val_class_flag:
6841
      return DW_FORM_flag;
6842
    case dw_val_class_die_ref:
6843
      if (AT_ref_external (a))
6844
        return DW_FORM_ref_addr;
6845
      else
6846
        return DW_FORM_ref;
6847
    case dw_val_class_fde_ref:
6848
      return DW_FORM_data;
6849
    case dw_val_class_lbl_id:
6850
      return DW_FORM_addr;
6851
    case dw_val_class_lineptr:
6852
    case dw_val_class_macptr:
6853
      return DW_FORM_data;
6854
    case dw_val_class_str:
6855
      return AT_string_form (a);
6856
    case dw_val_class_file:
6857
      switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
6858
        {
6859
        case 1:
6860
          return DW_FORM_data1;
6861
        case 2:
6862
          return DW_FORM_data2;
6863
        case 4:
6864
          return DW_FORM_data4;
6865
        default:
6866
          gcc_unreachable ();
6867
        }
6868
 
6869
    default:
6870
      gcc_unreachable ();
6871
    }
6872
}
6873
 
6874
/* Output the encoding of an attribute value.  */
6875
 
6876
static void
6877
output_value_format (dw_attr_ref a)
6878
{
6879
  enum dwarf_form form = value_format (a);
6880
 
6881
  dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6882
}
6883
 
6884
/* Output the .debug_abbrev section which defines the DIE abbreviation
6885
   table.  */
6886
 
6887
static void
6888
output_abbrev_section (void)
6889
{
6890
  unsigned long abbrev_id;
6891
 
6892
  for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6893
    {
6894
      dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6895
      unsigned ix;
6896
      dw_attr_ref a_attr;
6897
 
6898
      dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6899
      dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6900
                                   dwarf_tag_name (abbrev->die_tag));
6901
 
6902
      if (abbrev->die_child != NULL)
6903
        dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6904
      else
6905
        dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6906
 
6907
      for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
6908
           ix++)
6909
        {
6910
          dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
6911
                                       dwarf_attr_name (a_attr->dw_attr));
6912
          output_value_format (a_attr);
6913
        }
6914
 
6915
      dw2_asm_output_data (1, 0, NULL);
6916
      dw2_asm_output_data (1, 0, NULL);
6917
    }
6918
 
6919
  /* Terminate the table.  */
6920
  dw2_asm_output_data (1, 0, NULL);
6921
}
6922
 
6923
/* Output a symbol we can use to refer to this DIE from another CU.  */
6924
 
6925
static inline void
6926
output_die_symbol (dw_die_ref die)
6927
{
6928
  char *sym = die->die_symbol;
6929
 
6930
  if (sym == 0)
6931
    return;
6932
 
6933
  if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
6934
    /* We make these global, not weak; if the target doesn't support
6935
       .linkonce, it doesn't support combining the sections, so debugging
6936
       will break.  */
6937
    targetm.asm_out.globalize_label (asm_out_file, sym);
6938
 
6939
  ASM_OUTPUT_LABEL (asm_out_file, sym);
6940
}
6941
 
6942
/* Return a new location list, given the begin and end range, and the
6943
   expression. gensym tells us whether to generate a new internal symbol for
6944
   this location list node, which is done for the head of the list only.  */
6945
 
6946
static inline dw_loc_list_ref
6947
new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
6948
              const char *section, unsigned int gensym)
6949
{
6950
  dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
6951
 
6952
  retlist->begin = begin;
6953
  retlist->end = end;
6954
  retlist->expr = expr;
6955
  retlist->section = section;
6956
  if (gensym)
6957
    retlist->ll_symbol = gen_internal_sym ("LLST");
6958
 
6959
  return retlist;
6960
}
6961
 
6962
/* Add a location description expression to a location list.  */
6963
 
6964
static inline void
6965
add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
6966
                           const char *begin, const char *end,
6967
                           const char *section)
6968
{
6969
  dw_loc_list_ref *d;
6970
 
6971
  /* Find the end of the chain.  */
6972
  for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
6973
    ;
6974
 
6975
  /* Add a new location list node to the list.  */
6976
  *d = new_loc_list (descr, begin, end, section, 0);
6977
}
6978
 
6979
static void
6980
dwarf2out_switch_text_section (void)
6981
{
6982
  dw_fde_ref fde;
6983
 
6984
  gcc_assert (cfun);
6985
 
6986
  fde = &fde_table[fde_table_in_use - 1];
6987
  fde->dw_fde_switched_sections = true;
6988
  fde->dw_fde_hot_section_label = cfun->hot_section_label;
6989
  fde->dw_fde_hot_section_end_label = cfun->hot_section_end_label;
6990
  fde->dw_fde_unlikely_section_label = cfun->cold_section_label;
6991
  fde->dw_fde_unlikely_section_end_label = cfun->cold_section_end_label;
6992
  have_multiple_function_sections = true;
6993
 
6994
  /* Reset the current label on switching text sections, so that we
6995
     don't attempt to advance_loc4 between labels in different sections.  */
6996
  fde->dw_fde_current_label = NULL;
6997
}
6998
 
6999
/* Output the location list given to us.  */
7000
 
7001
static void
7002
output_loc_list (dw_loc_list_ref list_head)
7003
{
7004
  dw_loc_list_ref curr = list_head;
7005
 
7006
  ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
7007
 
7008
  /* Walk the location list, and output each range + expression.  */
7009
  for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
7010
    {
7011
      unsigned long size;
7012
      if (!have_multiple_function_sections)
7013
        {
7014
          dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
7015
                                "Location list begin address (%s)",
7016
                                list_head->ll_symbol);
7017
          dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
7018
                                "Location list end address (%s)",
7019
                                list_head->ll_symbol);
7020
        }
7021
      else
7022
        {
7023
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
7024
                               "Location list begin address (%s)",
7025
                               list_head->ll_symbol);
7026
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
7027
                               "Location list end address (%s)",
7028
                               list_head->ll_symbol);
7029
        }
7030
      size = size_of_locs (curr->expr);
7031
 
7032
      /* Output the block length for this list of location operations.  */
7033
      gcc_assert (size <= 0xffff);
7034
      dw2_asm_output_data (2, size, "%s", "Location expression size");
7035
 
7036
      output_loc_sequence (curr->expr);
7037
    }
7038
 
7039
  dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
7040
                       "Location list terminator begin (%s)",
7041
                       list_head->ll_symbol);
7042
  dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
7043
                       "Location list terminator end (%s)",
7044
                       list_head->ll_symbol);
7045
}
7046
 
7047
/* Output the DIE and its attributes.  Called recursively to generate
7048
   the definitions of each child DIE.  */
7049
 
7050
static void
7051
output_die (dw_die_ref die)
7052
{
7053
  dw_attr_ref a;
7054
  dw_die_ref c;
7055
  unsigned long size;
7056
  unsigned ix;
7057
 
7058
  /* If someone in another CU might refer to us, set up a symbol for
7059
     them to point to.  */
7060
  if (die->die_symbol)
7061
    output_die_symbol (die);
7062
 
7063
  dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
7064
                               die->die_offset, dwarf_tag_name (die->die_tag));
7065
 
7066
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7067
    {
7068
      const char *name = dwarf_attr_name (a->dw_attr);
7069
 
7070
      switch (AT_class (a))
7071
        {
7072
        case dw_val_class_addr:
7073
          dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
7074
          break;
7075
 
7076
        case dw_val_class_offset:
7077
          dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
7078
                               "%s", name);
7079
          break;
7080
 
7081
        case dw_val_class_range_list:
7082
          {
7083
            char *p = strchr (ranges_section_label, '\0');
7084
 
7085
            sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
7086
                     a->dw_attr_val.v.val_offset);
7087
            dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
7088
                                   debug_ranges_section, "%s", name);
7089
            *p = '\0';
7090
          }
7091
          break;
7092
 
7093
        case dw_val_class_loc:
7094
          size = size_of_locs (AT_loc (a));
7095
 
7096
          /* Output the block length for this list of location operations.  */
7097
          dw2_asm_output_data (constant_size (size), size, "%s", name);
7098
 
7099
          output_loc_sequence (AT_loc (a));
7100
          break;
7101
 
7102
        case dw_val_class_const:
7103
          /* ??? It would be slightly more efficient to use a scheme like is
7104
             used for unsigned constants below, but gdb 4.x does not sign
7105
             extend.  Gdb 5.x does sign extend.  */
7106
          dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
7107
          break;
7108
 
7109
        case dw_val_class_unsigned_const:
7110
          dw2_asm_output_data (constant_size (AT_unsigned (a)),
7111
                               AT_unsigned (a), "%s", name);
7112
          break;
7113
 
7114
        case dw_val_class_long_long:
7115
          {
7116
            unsigned HOST_WIDE_INT first, second;
7117
 
7118
            dw2_asm_output_data (1,
7119
                                 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7120
                                 "%s", name);
7121
 
7122
            if (WORDS_BIG_ENDIAN)
7123
              {
7124
                first = a->dw_attr_val.v.val_long_long.hi;
7125
                second = a->dw_attr_val.v.val_long_long.low;
7126
              }
7127
            else
7128
              {
7129
                first = a->dw_attr_val.v.val_long_long.low;
7130
                second = a->dw_attr_val.v.val_long_long.hi;
7131
              }
7132
 
7133
            dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7134
                                 first, "long long constant");
7135
            dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7136
                                 second, NULL);
7137
          }
7138
          break;
7139
 
7140
        case dw_val_class_vec:
7141
          {
7142
            unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
7143
            unsigned int len = a->dw_attr_val.v.val_vec.length;
7144
            unsigned int i;
7145
            unsigned char *p;
7146
 
7147
            dw2_asm_output_data (1, len * elt_size, "%s", name);
7148
            if (elt_size > sizeof (HOST_WIDE_INT))
7149
              {
7150
                elt_size /= 2;
7151
                len *= 2;
7152
              }
7153
            for (i = 0, p = a->dw_attr_val.v.val_vec.array;
7154
                 i < len;
7155
                 i++, p += elt_size)
7156
              dw2_asm_output_data (elt_size, extract_int (p, elt_size),
7157
                                   "fp or vector constant word %u", i);
7158
            break;
7159
          }
7160
 
7161
        case dw_val_class_flag:
7162
          dw2_asm_output_data (1, AT_flag (a), "%s", name);
7163
          break;
7164
 
7165
        case dw_val_class_loc_list:
7166
          {
7167
            char *sym = AT_loc_list (a)->ll_symbol;
7168
 
7169
            gcc_assert (sym);
7170
            dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
7171
                                   "%s", name);
7172
          }
7173
          break;
7174
 
7175
        case dw_val_class_die_ref:
7176
          if (AT_ref_external (a))
7177
            {
7178
              char *sym = AT_ref (a)->die_symbol;
7179
 
7180
              gcc_assert (sym);
7181
              dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, debug_info_section,
7182
                                     "%s", name);
7183
            }
7184
          else
7185
            {
7186
              gcc_assert (AT_ref (a)->die_offset);
7187
              dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
7188
                                   "%s", name);
7189
            }
7190
          break;
7191
 
7192
        case dw_val_class_fde_ref:
7193
          {
7194
            char l1[20];
7195
 
7196
            ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
7197
                                         a->dw_attr_val.v.val_fde_index * 2);
7198
            dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
7199
                                   "%s", name);
7200
          }
7201
          break;
7202
 
7203
        case dw_val_class_lbl_id:
7204
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
7205
          break;
7206
 
7207
        case dw_val_class_lineptr:
7208
          dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
7209
                                 debug_line_section, "%s", name);
7210
          break;
7211
 
7212
        case dw_val_class_macptr:
7213
          dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
7214
                                 debug_macinfo_section, "%s", name);
7215
          break;
7216
 
7217
        case dw_val_class_str:
7218
          if (AT_string_form (a) == DW_FORM_strp)
7219
            dw2_asm_output_offset (DWARF_OFFSET_SIZE,
7220
                                   a->dw_attr_val.v.val_str->label,
7221
                                   debug_str_section,
7222
                                   "%s: \"%s\"", name, AT_string (a));
7223
          else
7224
            dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
7225
          break;
7226
 
7227
        case dw_val_class_file:
7228
          {
7229
            int f = maybe_emit_file (a->dw_attr_val.v.val_file);
7230
 
7231
            dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
7232
                                 a->dw_attr_val.v.val_file->filename);
7233
            break;
7234
          }
7235
 
7236
        default:
7237
          gcc_unreachable ();
7238
        }
7239
    }
7240
 
7241
  FOR_EACH_CHILD (die, c, output_die (c));
7242
 
7243
  /* Add null byte to terminate sibling list.  */
7244
  if (die->die_child != NULL)
7245
    dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
7246
                         die->die_offset);
7247
}
7248
 
7249
/* Output the compilation unit that appears at the beginning of the
7250
   .debug_info section, and precedes the DIE descriptions.  */
7251
 
7252
static void
7253
output_compilation_unit_header (void)
7254
{
7255
  if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7256
    dw2_asm_output_data (4, 0xffffffff,
7257
      "Initial length escape value indicating 64-bit DWARF extension");
7258
  dw2_asm_output_data (DWARF_OFFSET_SIZE,
7259
                       next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
7260
                       "Length of Compilation Unit Info");
7261
  dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
7262
  dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
7263
                         debug_abbrev_section,
7264
                         "Offset Into Abbrev. Section");
7265
  dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
7266
}
7267
 
7268
/* Output the compilation unit DIE and its children.  */
7269
 
7270
static void
7271
output_comp_unit (dw_die_ref die, int output_if_empty)
7272
{
7273
  const char *secname;
7274
  char *oldsym, *tmp;
7275
 
7276
  /* Unless we are outputting main CU, we may throw away empty ones.  */
7277
  if (!output_if_empty && die->die_child == NULL)
7278
    return;
7279
 
7280
  /* Even if there are no children of this DIE, we must output the information
7281
     about the compilation unit.  Otherwise, on an empty translation unit, we
7282
     will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
7283
     will then complain when examining the file.  First mark all the DIEs in
7284
     this CU so we know which get local refs.  */
7285
  mark_dies (die);
7286
 
7287
  build_abbrev_table (die);
7288
 
7289
  /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
7290
  next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7291
  calc_die_sizes (die);
7292
 
7293
  oldsym = die->die_symbol;
7294
  if (oldsym)
7295
    {
7296
      tmp = alloca (strlen (oldsym) + 24);
7297
 
7298
      sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
7299
      secname = tmp;
7300
      die->die_symbol = NULL;
7301
      switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
7302
    }
7303
  else
7304
    switch_to_section (debug_info_section);
7305
 
7306
  /* Output debugging information.  */
7307
  output_compilation_unit_header ();
7308
  output_die (die);
7309
 
7310
  /* Leave the marks on the main CU, so we can check them in
7311
     output_pubnames.  */
7312
  if (oldsym)
7313
    {
7314
      unmark_dies (die);
7315
      die->die_symbol = oldsym;
7316
    }
7317
}
7318
 
7319
/* Return the DWARF2/3 pubname associated with a decl.  */
7320
 
7321
static const char *
7322
dwarf2_name (tree decl, int scope)
7323
{
7324
  return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
7325
}
7326
 
7327
/* Add a new entry to .debug_pubnames if appropriate.  */
7328
 
7329
static void
7330
add_pubname (tree decl, dw_die_ref die)
7331
{
7332
  pubname_ref p;
7333
 
7334
  if (! TREE_PUBLIC (decl))
7335
    return;
7336
 
7337
  if (pubname_table_in_use == pubname_table_allocated)
7338
    {
7339
      pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
7340
      pubname_table
7341
        = ggc_realloc (pubname_table,
7342
                       (pubname_table_allocated * sizeof (pubname_entry)));
7343
      memset (pubname_table + pubname_table_in_use, 0,
7344
              PUBNAME_TABLE_INCREMENT * sizeof (pubname_entry));
7345
    }
7346
 
7347
  p = &pubname_table[pubname_table_in_use++];
7348
  p->die = die;
7349
  p->name = xstrdup (dwarf2_name (decl, 1));
7350
}
7351
 
7352
/* Output the public names table used to speed up access to externally
7353
   visible names.  For now, only generate entries for externally
7354
   visible procedures.  */
7355
 
7356
static void
7357
output_pubnames (void)
7358
{
7359
  unsigned i;
7360
  unsigned long pubnames_length = size_of_pubnames ();
7361
 
7362
  if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7363
    dw2_asm_output_data (4, 0xffffffff,
7364
      "Initial length escape value indicating 64-bit DWARF extension");
7365
  dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
7366
                       "Length of Public Names Info");
7367
  dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7368
  dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7369
                         debug_info_section,
7370
                         "Offset of Compilation Unit Info");
7371
  dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
7372
                       "Compilation Unit Length");
7373
 
7374
  for (i = 0; i < pubname_table_in_use; i++)
7375
    {
7376
      pubname_ref pub = &pubname_table[i];
7377
 
7378
      /* We shouldn't see pubnames for DIEs outside of the main CU.  */
7379
      gcc_assert (pub->die->die_mark);
7380
 
7381
      dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7382
                           "DIE offset");
7383
 
7384
      dw2_asm_output_nstring (pub->name, -1, "external name");
7385
    }
7386
 
7387
  dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7388
}
7389
 
7390
/* Add a new entry to .debug_aranges if appropriate.  */
7391
 
7392
static void
7393
add_arange (tree decl, dw_die_ref die)
7394
{
7395
  if (! DECL_SECTION_NAME (decl))
7396
    return;
7397
 
7398
  if (arange_table_in_use == arange_table_allocated)
7399
    {
7400
      arange_table_allocated += ARANGE_TABLE_INCREMENT;
7401
      arange_table = ggc_realloc (arange_table,
7402
                                  (arange_table_allocated
7403
                                   * sizeof (dw_die_ref)));
7404
      memset (arange_table + arange_table_in_use, 0,
7405
              ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7406
    }
7407
 
7408
  arange_table[arange_table_in_use++] = die;
7409
}
7410
 
7411
/* Output the information that goes into the .debug_aranges table.
7412
   Namely, define the beginning and ending address range of the
7413
   text section generated for this compilation unit.  */
7414
 
7415
static void
7416
output_aranges (void)
7417
{
7418
  unsigned i;
7419
  unsigned long aranges_length = size_of_aranges ();
7420
 
7421
  if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7422
    dw2_asm_output_data (4, 0xffffffff,
7423
      "Initial length escape value indicating 64-bit DWARF extension");
7424
  dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7425
                       "Length of Address Ranges Info");
7426
  dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7427
  dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7428
                         debug_info_section,
7429
                         "Offset of Compilation Unit Info");
7430
  dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7431
  dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7432
 
7433
  /* We need to align to twice the pointer size here.  */
7434
  if (DWARF_ARANGES_PAD_SIZE)
7435
    {
7436
      /* Pad using a 2 byte words so that padding is correct for any
7437
         pointer size.  */
7438
      dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7439
                           2 * DWARF2_ADDR_SIZE);
7440
      for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7441
        dw2_asm_output_data (2, 0, NULL);
7442
    }
7443
 
7444
  dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7445
  dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7446
                        text_section_label, "Length");
7447
  if (flag_reorder_blocks_and_partition)
7448
    {
7449
      dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
7450
                           "Address");
7451
      dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
7452
                            cold_text_section_label, "Length");
7453
    }
7454
 
7455
  for (i = 0; i < arange_table_in_use; i++)
7456
    {
7457
      dw_die_ref die = arange_table[i];
7458
 
7459
      /* We shouldn't see aranges for DIEs outside of the main CU.  */
7460
      gcc_assert (die->die_mark);
7461
 
7462
      if (die->die_tag == DW_TAG_subprogram)
7463
        {
7464
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7465
                               "Address");
7466
          dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7467
                                get_AT_low_pc (die), "Length");
7468
        }
7469
      else
7470
        {
7471
          /* A static variable; extract the symbol from DW_AT_location.
7472
             Note that this code isn't currently hit, as we only emit
7473
             aranges for functions (jason 9/23/99).  */
7474
          dw_attr_ref a = get_AT (die, DW_AT_location);
7475
          dw_loc_descr_ref loc;
7476
 
7477
          gcc_assert (a && AT_class (a) == dw_val_class_loc);
7478
 
7479
          loc = AT_loc (a);
7480
          gcc_assert (loc->dw_loc_opc == DW_OP_addr);
7481
 
7482
          dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7483
                                   loc->dw_loc_oprnd1.v.val_addr, "Address");
7484
          dw2_asm_output_data (DWARF2_ADDR_SIZE,
7485
                               get_AT_unsigned (die, DW_AT_byte_size),
7486
                               "Length");
7487
        }
7488
    }
7489
 
7490
  /* Output the terminator words.  */
7491
  dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7492
  dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7493
}
7494
 
7495
/* Add a new entry to .debug_ranges.  Return the offset at which it
7496
   was placed.  */
7497
 
7498
static unsigned int
7499
add_ranges (tree block)
7500
{
7501
  unsigned int in_use = ranges_table_in_use;
7502
 
7503
  if (in_use == ranges_table_allocated)
7504
    {
7505
      ranges_table_allocated += RANGES_TABLE_INCREMENT;
7506
      ranges_table
7507
        = ggc_realloc (ranges_table, (ranges_table_allocated
7508
                                      * sizeof (struct dw_ranges_struct)));
7509
      memset (ranges_table + ranges_table_in_use, 0,
7510
              RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7511
    }
7512
 
7513
  ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0);
7514
  ranges_table_in_use = in_use + 1;
7515
 
7516
  return in_use * 2 * DWARF2_ADDR_SIZE;
7517
}
7518
 
7519
static void
7520
output_ranges (void)
7521
{
7522
  unsigned i;
7523
  static const char *const start_fmt = "Offset 0x%x";
7524
  const char *fmt = start_fmt;
7525
 
7526
  for (i = 0; i < ranges_table_in_use; i++)
7527
    {
7528
      int block_num = ranges_table[i].block_num;
7529
 
7530
      if (block_num)
7531
        {
7532
          char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7533
          char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7534
 
7535
          ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7536
          ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7537
 
7538
          /* If all code is in the text section, then the compilation
7539
             unit base address defaults to DW_AT_low_pc, which is the
7540
             base of the text section.  */
7541
          if (!have_multiple_function_sections)
7542
            {
7543
              dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7544
                                    text_section_label,
7545
                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
7546
              dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7547
                                    text_section_label, NULL);
7548
            }
7549
 
7550
          /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7551
             compilation unit base address to zero, which allows us to
7552
             use absolute addresses, and not worry about whether the
7553
             target supports cross-section arithmetic.  */
7554
          else
7555
            {
7556
              dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7557
                                   fmt, i * 2 * DWARF2_ADDR_SIZE);
7558
              dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7559
            }
7560
 
7561
          fmt = NULL;
7562
        }
7563
      else
7564
        {
7565
          dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7566
          dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7567
          fmt = start_fmt;
7568
        }
7569
    }
7570
}
7571
 
7572
/* Data structure containing information about input files.  */
7573
struct file_info
7574
{
7575
  const char *path;     /* Complete file name.  */
7576
  const char *fname;    /* File name part.  */
7577
  int length;           /* Length of entire string.  */
7578
  struct dwarf_file_data * file_idx;    /* Index in input file table.  */
7579
  int dir_idx;          /* Index in directory table.  */
7580
};
7581
 
7582
/* Data structure containing information about directories with source
7583
   files.  */
7584
struct dir_info
7585
{
7586
  const char *path;     /* Path including directory name.  */
7587
  int length;           /* Path length.  */
7588
  int prefix;           /* Index of directory entry which is a prefix.  */
7589
  int count;            /* Number of files in this directory.  */
7590
  int dir_idx;          /* Index of directory used as base.  */
7591
};
7592
 
7593
/* Callback function for file_info comparison.  We sort by looking at
7594
   the directories in the path.  */
7595
 
7596
static int
7597
file_info_cmp (const void *p1, const void *p2)
7598
{
7599
  const struct file_info *s1 = p1;
7600
  const struct file_info *s2 = p2;
7601
  unsigned char *cp1;
7602
  unsigned char *cp2;
7603
 
7604
  /* Take care of file names without directories.  We need to make sure that
7605
     we return consistent values to qsort since some will get confused if
7606
     we return the same value when identical operands are passed in opposite
7607
     orders.  So if neither has a directory, return 0 and otherwise return
7608
     1 or -1 depending on which one has the directory.  */
7609
  if ((s1->path == s1->fname || s2->path == s2->fname))
7610
    return (s2->path == s2->fname) - (s1->path == s1->fname);
7611
 
7612
  cp1 = (unsigned char *) s1->path;
7613
  cp2 = (unsigned char *) s2->path;
7614
 
7615
  while (1)
7616
    {
7617
      ++cp1;
7618
      ++cp2;
7619
      /* Reached the end of the first path?  If so, handle like above.  */
7620
      if ((cp1 == (unsigned char *) s1->fname)
7621
          || (cp2 == (unsigned char *) s2->fname))
7622
        return ((cp2 == (unsigned char *) s2->fname)
7623
                - (cp1 == (unsigned char *) s1->fname));
7624
 
7625
      /* Character of current path component the same?  */
7626
      else if (*cp1 != *cp2)
7627
        return *cp1 - *cp2;
7628
    }
7629
}
7630
 
7631
struct file_name_acquire_data
7632
{
7633
  struct file_info *files;
7634
  int used_files;
7635
  int max_files;
7636
};
7637
 
7638
/* Traversal function for the hash table.  */
7639
 
7640
static int
7641
file_name_acquire (void ** slot, void *data)
7642
{
7643
  struct file_name_acquire_data *fnad = data;
7644
  struct dwarf_file_data *d = *slot;
7645
  struct file_info *fi;
7646
  const char *f;
7647
 
7648
  gcc_assert (fnad->max_files >= d->emitted_number);
7649
 
7650
  if (! d->emitted_number)
7651
    return 1;
7652
 
7653
  gcc_assert (fnad->max_files != fnad->used_files);
7654
 
7655
  fi = fnad->files + fnad->used_files++;
7656
 
7657
  /* Skip all leading "./".  */
7658
  f = d->filename;
7659
  while (f[0] == '.' && f[1] == '/')
7660
    f += 2;
7661
 
7662
  /* Create a new array entry.  */
7663
  fi->path = f;
7664
  fi->length = strlen (f);
7665
  fi->file_idx = d;
7666
 
7667
  /* Search for the file name part.  */
7668
  f = strrchr (f, '/');
7669
  fi->fname = f == NULL ? fi->path : f + 1;
7670
  return 1;
7671
}
7672
 
7673
/* Output the directory table and the file name table.  We try to minimize
7674
   the total amount of memory needed.  A heuristic is used to avoid large
7675
   slowdowns with many input files.  */
7676
 
7677
static void
7678
output_file_names (void)
7679
{
7680
  struct file_name_acquire_data fnad;
7681
  int numfiles;
7682
  struct file_info *files;
7683
  struct dir_info *dirs;
7684
  int *saved;
7685
  int *savehere;
7686
  int *backmap;
7687
  int ndirs;
7688
  int idx_offset;
7689
  int i;
7690
  int idx;
7691
 
7692
  if (!last_emitted_file)
7693
    {
7694
      dw2_asm_output_data (1, 0, "End directory table");
7695
      dw2_asm_output_data (1, 0, "End file name table");
7696
      return;
7697
    }
7698
 
7699
  numfiles = last_emitted_file->emitted_number;
7700
 
7701
  /* Allocate the various arrays we need.  */
7702
  files = alloca (numfiles * sizeof (struct file_info));
7703
  dirs = alloca (numfiles * sizeof (struct dir_info));
7704
 
7705
  fnad.files = files;
7706
  fnad.used_files = 0;
7707
  fnad.max_files = numfiles;
7708
  htab_traverse (file_table, file_name_acquire, &fnad);
7709
  gcc_assert (fnad.used_files == fnad.max_files);
7710
 
7711
  qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
7712
 
7713
  /* Find all the different directories used.  */
7714
  dirs[0].path = files[0].path;
7715
  dirs[0].length = files[0].fname - files[0].path;
7716
  dirs[0].prefix = -1;
7717
  dirs[0].count = 1;
7718
  dirs[0].dir_idx = 0;
7719
  files[0].dir_idx = 0;
7720
  ndirs = 1;
7721
 
7722
  for (i = 1; i < numfiles; i++)
7723
    if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7724
        && memcmp (dirs[ndirs - 1].path, files[i].path,
7725
                   dirs[ndirs - 1].length) == 0)
7726
      {
7727
        /* Same directory as last entry.  */
7728
        files[i].dir_idx = ndirs - 1;
7729
        ++dirs[ndirs - 1].count;
7730
      }
7731
    else
7732
      {
7733
        int j;
7734
 
7735
        /* This is a new directory.  */
7736
        dirs[ndirs].path = files[i].path;
7737
        dirs[ndirs].length = files[i].fname - files[i].path;
7738
        dirs[ndirs].count = 1;
7739
        dirs[ndirs].dir_idx = ndirs;
7740
        files[i].dir_idx = ndirs;
7741
 
7742
        /* Search for a prefix.  */
7743
        dirs[ndirs].prefix = -1;
7744
        for (j = 0; j < ndirs; j++)
7745
          if (dirs[j].length < dirs[ndirs].length
7746
              && dirs[j].length > 1
7747
              && (dirs[ndirs].prefix == -1
7748
                  || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7749
              && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7750
            dirs[ndirs].prefix = j;
7751
 
7752
        ++ndirs;
7753
      }
7754
 
7755
  /* Now to the actual work.  We have to find a subset of the directories which
7756
     allow expressing the file name using references to the directory table
7757
     with the least amount of characters.  We do not do an exhaustive search
7758
     where we would have to check out every combination of every single
7759
     possible prefix.  Instead we use a heuristic which provides nearly optimal
7760
     results in most cases and never is much off.  */
7761
  saved = alloca (ndirs * sizeof (int));
7762
  savehere = alloca (ndirs * sizeof (int));
7763
 
7764
  memset (saved, '\0', ndirs * sizeof (saved[0]));
7765
  for (i = 0; i < ndirs; i++)
7766
    {
7767
      int j;
7768
      int total;
7769
 
7770
      /* We can always save some space for the current directory.  But this
7771
         does not mean it will be enough to justify adding the directory.  */
7772
      savehere[i] = dirs[i].length;
7773
      total = (savehere[i] - saved[i]) * dirs[i].count;
7774
 
7775
      for (j = i + 1; j < ndirs; j++)
7776
        {
7777
          savehere[j] = 0;
7778
          if (saved[j] < dirs[i].length)
7779
            {
7780
              /* Determine whether the dirs[i] path is a prefix of the
7781
                 dirs[j] path.  */
7782
              int k;
7783
 
7784
              k = dirs[j].prefix;
7785
              while (k != -1 && k != (int) i)
7786
                k = dirs[k].prefix;
7787
 
7788
              if (k == (int) i)
7789
                {
7790
                  /* Yes it is.  We can possibly save some memory by
7791
                     writing the filenames in dirs[j] relative to
7792
                     dirs[i].  */
7793
                  savehere[j] = dirs[i].length;
7794
                  total += (savehere[j] - saved[j]) * dirs[j].count;
7795
                }
7796
            }
7797
        }
7798
 
7799
      /* Check whether we can save enough to justify adding the dirs[i]
7800
         directory.  */
7801
      if (total > dirs[i].length + 1)
7802
        {
7803
          /* It's worthwhile adding.  */
7804
          for (j = i; j < ndirs; j++)
7805
            if (savehere[j] > 0)
7806
              {
7807
                /* Remember how much we saved for this directory so far.  */
7808
                saved[j] = savehere[j];
7809
 
7810
                /* Remember the prefix directory.  */
7811
                dirs[j].dir_idx = i;
7812
              }
7813
        }
7814
    }
7815
 
7816
  /* Emit the directory name table.  */
7817
  idx = 1;
7818
  idx_offset = dirs[0].length > 0 ? 1 : 0;
7819
  for (i = 1 - idx_offset; i < ndirs; i++)
7820
    dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
7821
                            "Directory Entry: 0x%x", i + idx_offset);
7822
 
7823
  dw2_asm_output_data (1, 0, "End directory table");
7824
 
7825
  /* We have to emit them in the order of emitted_number since that's
7826
     used in the debug info generation.  To do this efficiently we
7827
     generate a back-mapping of the indices first.  */
7828
  backmap = alloca (numfiles * sizeof (int));
7829
  for (i = 0; i < numfiles; i++)
7830
    backmap[files[i].file_idx->emitted_number - 1] = i;
7831
 
7832
  /* Now write all the file names.  */
7833
  for (i = 0; i < numfiles; i++)
7834
    {
7835
      int file_idx = backmap[i];
7836
      int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
7837
 
7838
      dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
7839
                              "File Entry: 0x%x", (unsigned) i + 1);
7840
 
7841
      /* Include directory index.  */
7842
      dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
7843
 
7844
      /* Modification time.  */
7845
      dw2_asm_output_data_uleb128 (0, NULL);
7846
 
7847
      /* File length in bytes.  */
7848
      dw2_asm_output_data_uleb128 (0, NULL);
7849
    }
7850
 
7851
  dw2_asm_output_data (1, 0, "End file name table");
7852
}
7853
 
7854
 
7855
/* Output the source line number correspondence information.  This
7856
   information goes into the .debug_line section.  */
7857
 
7858
static void
7859
output_line_info (void)
7860
{
7861
  char l1[20], l2[20], p1[20], p2[20];
7862
  char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7863
  char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7864
  unsigned opc;
7865
  unsigned n_op_args;
7866
  unsigned long lt_index;
7867
  unsigned long current_line;
7868
  long line_offset;
7869
  long line_delta;
7870
  unsigned long current_file;
7871
  unsigned long function;
7872
 
7873
  ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
7874
  ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
7875
  ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
7876
  ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
7877
 
7878
  if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7879
    dw2_asm_output_data (4, 0xffffffff,
7880
      "Initial length escape value indicating 64-bit DWARF extension");
7881
  dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
7882
                        "Length of Source Line Info");
7883
  ASM_OUTPUT_LABEL (asm_out_file, l1);
7884
 
7885
  dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7886
  dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
7887
  ASM_OUTPUT_LABEL (asm_out_file, p1);
7888
 
7889
  /* Define the architecture-dependent minimum instruction length (in
7890
   bytes).  In this implementation of DWARF, this field is used for
7891
   information purposes only.  Since GCC generates assembly language,
7892
   we have no a priori knowledge of how many instruction bytes are
7893
   generated for each source line, and therefore can use only the
7894
   DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7895
   commands.  Accordingly, we fix this as `1', which is "correct
7896
   enough" for all architectures, and don't let the target override.  */
7897
  dw2_asm_output_data (1, 1,
7898
                       "Minimum Instruction Length");
7899
 
7900
  dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
7901
                       "Default is_stmt_start flag");
7902
  dw2_asm_output_data (1, DWARF_LINE_BASE,
7903
                       "Line Base Value (Special Opcodes)");
7904
  dw2_asm_output_data (1, DWARF_LINE_RANGE,
7905
                       "Line Range Value (Special Opcodes)");
7906
  dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
7907
                       "Special Opcode Base");
7908
 
7909
  for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
7910
    {
7911
      switch (opc)
7912
        {
7913
        case DW_LNS_advance_pc:
7914
        case DW_LNS_advance_line:
7915
        case DW_LNS_set_file:
7916
        case DW_LNS_set_column:
7917
        case DW_LNS_fixed_advance_pc:
7918
          n_op_args = 1;
7919
          break;
7920
        default:
7921
          n_op_args = 0;
7922
          break;
7923
        }
7924
 
7925
      dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
7926
                           opc, n_op_args);
7927
    }
7928
 
7929
  /* Write out the information about the files we use.  */
7930
  output_file_names ();
7931
  ASM_OUTPUT_LABEL (asm_out_file, p2);
7932
 
7933
  /* We used to set the address register to the first location in the text
7934
     section here, but that didn't accomplish anything since we already
7935
     have a line note for the opening brace of the first function.  */
7936
 
7937
  /* Generate the line number to PC correspondence table, encoded as
7938
     a series of state machine operations.  */
7939
  current_file = 1;
7940
  current_line = 1;
7941
 
7942
  if (cfun && in_cold_section_p)
7943
    strcpy (prev_line_label, cfun->cold_section_label);
7944
  else
7945
    strcpy (prev_line_label, text_section_label);
7946
  for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
7947
    {
7948
      dw_line_info_ref line_info = &line_info_table[lt_index];
7949
 
7950
#if 0
7951
      /* Disable this optimization for now; GDB wants to see two line notes
7952
         at the beginning of a function so it can find the end of the
7953
         prologue.  */
7954
 
7955
      /* Don't emit anything for redundant notes.  Just updating the
7956
         address doesn't accomplish anything, because we already assume
7957
         that anything after the last address is this line.  */
7958
      if (line_info->dw_line_num == current_line
7959
          && line_info->dw_file_num == current_file)
7960
        continue;
7961
#endif
7962
 
7963
      /* Emit debug info for the address of the current line.
7964
 
7965
         Unfortunately, we have little choice here currently, and must always
7966
         use the most general form.  GCC does not know the address delta
7967
         itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
7968
         attributes which will give an upper bound on the address range.  We
7969
         could perhaps use length attributes to determine when it is safe to
7970
         use DW_LNS_fixed_advance_pc.  */
7971
 
7972
      ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
7973
      if (0)
7974
        {
7975
          /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
7976
          dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7977
                               "DW_LNS_fixed_advance_pc");
7978
          dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7979
        }
7980
      else
7981
        {
7982
          /* This can handle any delta.  This takes
7983
             4+DWARF2_ADDR_SIZE bytes.  */
7984
          dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7985
          dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7986
          dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7987
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7988
        }
7989
 
7990
      strcpy (prev_line_label, line_label);
7991
 
7992
      /* Emit debug info for the source file of the current line, if
7993
         different from the previous line.  */
7994
      if (line_info->dw_file_num != current_file)
7995
        {
7996
          current_file = line_info->dw_file_num;
7997
          dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7998
          dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
7999
        }
8000
 
8001
      /* Emit debug info for the current line number, choosing the encoding
8002
         that uses the least amount of space.  */
8003
      if (line_info->dw_line_num != current_line)
8004
        {
8005
          line_offset = line_info->dw_line_num - current_line;
8006
          line_delta = line_offset - DWARF_LINE_BASE;
8007
          current_line = line_info->dw_line_num;
8008
          if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8009
            /* This can handle deltas from -10 to 234, using the current
8010
               definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
8011
               takes 1 byte.  */
8012
            dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8013
                                 "line %lu", current_line);
8014
          else
8015
            {
8016
              /* This can handle any delta.  This takes at least 4 bytes,
8017
                 depending on the value being encoded.  */
8018
              dw2_asm_output_data (1, DW_LNS_advance_line,
8019
                                   "advance to line %lu", current_line);
8020
              dw2_asm_output_data_sleb128 (line_offset, NULL);
8021
              dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8022
            }
8023
        }
8024
      else
8025
        /* We still need to start a new row, so output a copy insn.  */
8026
        dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8027
    }
8028
 
8029
  /* Emit debug info for the address of the end of the function.  */
8030
  if (0)
8031
    {
8032
      dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8033
                           "DW_LNS_fixed_advance_pc");
8034
      dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
8035
    }
8036
  else
8037
    {
8038
      dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8039
      dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8040
      dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8041
      dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
8042
    }
8043
 
8044
  dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8045
  dw2_asm_output_data_uleb128 (1, NULL);
8046
  dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8047
 
8048
  function = 0;
8049
  current_file = 1;
8050
  current_line = 1;
8051
  for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
8052
    {
8053
      dw_separate_line_info_ref line_info
8054
        = &separate_line_info_table[lt_index];
8055
 
8056
#if 0
8057
      /* Don't emit anything for redundant notes.  */
8058
      if (line_info->dw_line_num == current_line
8059
          && line_info->dw_file_num == current_file
8060
          && line_info->function == function)
8061
        goto cont;
8062
#endif
8063
 
8064
      /* Emit debug info for the address of the current line.  If this is
8065
         a new function, or the first line of a function, then we need
8066
         to handle it differently.  */
8067
      ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
8068
                                   lt_index);
8069
      if (function != line_info->function)
8070
        {
8071
          function = line_info->function;
8072
 
8073
          /* Set the address register to the first line in the function.  */
8074
          dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8075
          dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8076
          dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8077
          dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8078
        }
8079
      else
8080
        {
8081
          /* ??? See the DW_LNS_advance_pc comment above.  */
8082
          if (0)
8083
            {
8084
              dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8085
                                   "DW_LNS_fixed_advance_pc");
8086
              dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8087
            }
8088
          else
8089
            {
8090
              dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8091
              dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8092
              dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8093
              dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8094
            }
8095
        }
8096
 
8097
      strcpy (prev_line_label, line_label);
8098
 
8099
      /* Emit debug info for the source file of the current line, if
8100
         different from the previous line.  */
8101
      if (line_info->dw_file_num != current_file)
8102
        {
8103
          current_file = line_info->dw_file_num;
8104
          dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
8105
          dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
8106
        }
8107
 
8108
      /* Emit debug info for the current line number, choosing the encoding
8109
         that uses the least amount of space.  */
8110
      if (line_info->dw_line_num != current_line)
8111
        {
8112
          line_offset = line_info->dw_line_num - current_line;
8113
          line_delta = line_offset - DWARF_LINE_BASE;
8114
          current_line = line_info->dw_line_num;
8115
          if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8116
            dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8117
                                 "line %lu", current_line);
8118
          else
8119
            {
8120
              dw2_asm_output_data (1, DW_LNS_advance_line,
8121
                                   "advance to line %lu", current_line);
8122
              dw2_asm_output_data_sleb128 (line_offset, NULL);
8123
              dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8124
            }
8125
        }
8126
      else
8127
        dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8128
 
8129
#if 0
8130
    cont:
8131
#endif
8132
 
8133
      lt_index++;
8134
 
8135
      /* If we're done with a function, end its sequence.  */
8136
      if (lt_index == separate_line_info_table_in_use
8137
          || separate_line_info_table[lt_index].function != function)
8138
        {
8139
          current_file = 1;
8140
          current_line = 1;
8141
 
8142
          /* Emit debug info for the address of the end of the function.  */
8143
          ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
8144
          if (0)
8145
            {
8146
              dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8147
                                   "DW_LNS_fixed_advance_pc");
8148
              dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8149
            }
8150
          else
8151
            {
8152
              dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8153
              dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8154
              dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8155
              dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8156
            }
8157
 
8158
          /* Output the marker for the end of this sequence.  */
8159
          dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8160
          dw2_asm_output_data_uleb128 (1, NULL);
8161
          dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8162
        }
8163
    }
8164
 
8165
  /* Output the marker for the end of the line number info.  */
8166
  ASM_OUTPUT_LABEL (asm_out_file, l2);
8167
}
8168
 
8169
/* Given a pointer to a tree node for some base type, return a pointer to
8170
   a DIE that describes the given type.
8171
 
8172
   This routine must only be called for GCC type nodes that correspond to
8173
   Dwarf base (fundamental) types.  */
8174
 
8175
static dw_die_ref
8176
base_type_die (tree type)
8177
{
8178
  dw_die_ref base_type_result;
8179
  enum dwarf_type encoding;
8180
 
8181
  if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
8182
    return 0;
8183
 
8184
  switch (TREE_CODE (type))
8185
    {
8186
    case INTEGER_TYPE:
8187
      if (TYPE_STRING_FLAG (type))
8188
        {
8189
          if (TYPE_UNSIGNED (type))
8190
            encoding = DW_ATE_unsigned_char;
8191
          else
8192
            encoding = DW_ATE_signed_char;
8193
        }
8194
      else if (TYPE_UNSIGNED (type))
8195
        encoding = DW_ATE_unsigned;
8196
      else
8197
        encoding = DW_ATE_signed;
8198
      break;
8199
 
8200
    case REAL_TYPE:
8201
      if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
8202
        encoding = DW_ATE_decimal_float;
8203
      else
8204
        encoding = DW_ATE_float;
8205
      break;
8206
 
8207
      /* Dwarf2 doesn't know anything about complex ints, so use
8208
         a user defined type for it.  */
8209
    case COMPLEX_TYPE:
8210
      if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
8211
        encoding = DW_ATE_complex_float;
8212
      else
8213
        encoding = DW_ATE_lo_user;
8214
      break;
8215
 
8216
    case BOOLEAN_TYPE:
8217
      /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
8218
      encoding = DW_ATE_boolean;
8219
      break;
8220
 
8221
    default:
8222
      /* No other TREE_CODEs are Dwarf fundamental types.  */
8223
      gcc_unreachable ();
8224
    }
8225
 
8226
  base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
8227
 
8228
  /* This probably indicates a bug.  */
8229
  if (! TYPE_NAME (type))
8230
    add_name_attribute (base_type_result, "__unknown__");
8231
 
8232
  add_AT_unsigned (base_type_result, DW_AT_byte_size,
8233
                   int_size_in_bytes (type));
8234
  add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
8235
 
8236
  return base_type_result;
8237
}
8238
 
8239
/* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
8240
   the Dwarf "root" type for the given input type.  The Dwarf "root" type of
8241
   a given type is generally the same as the given type, except that if the
8242
   given type is a pointer or reference type, then the root type of the given
8243
   type is the root type of the "basis" type for the pointer or reference
8244
   type.  (This definition of the "root" type is recursive.) Also, the root
8245
   type of a `const' qualified type or a `volatile' qualified type is the
8246
   root type of the given type without the qualifiers.  */
8247
 
8248
static tree
8249
root_type (tree type)
8250
{
8251
  if (TREE_CODE (type) == ERROR_MARK)
8252
    return error_mark_node;
8253
 
8254
  switch (TREE_CODE (type))
8255
    {
8256
    case ERROR_MARK:
8257
      return error_mark_node;
8258
 
8259
    case POINTER_TYPE:
8260
    case REFERENCE_TYPE:
8261
      return type_main_variant (root_type (TREE_TYPE (type)));
8262
 
8263
    default:
8264
      return type_main_variant (type);
8265
    }
8266
}
8267
 
8268
/* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
8269
   given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
8270
 
8271
static inline int
8272
is_base_type (tree type)
8273
{
8274
  switch (TREE_CODE (type))
8275
    {
8276
    case ERROR_MARK:
8277
    case VOID_TYPE:
8278
    case INTEGER_TYPE:
8279
    case REAL_TYPE:
8280
    case COMPLEX_TYPE:
8281
    case BOOLEAN_TYPE:
8282
      return 1;
8283
 
8284
    case ARRAY_TYPE:
8285
    case RECORD_TYPE:
8286
    case UNION_TYPE:
8287
    case QUAL_UNION_TYPE:
8288
    case ENUMERAL_TYPE:
8289
    case FUNCTION_TYPE:
8290
    case METHOD_TYPE:
8291
    case POINTER_TYPE:
8292
    case REFERENCE_TYPE:
8293
    case OFFSET_TYPE:
8294
    case LANG_TYPE:
8295
    case VECTOR_TYPE:
8296
      return 0;
8297
 
8298
    default:
8299
      gcc_unreachable ();
8300
    }
8301
 
8302
  return 0;
8303
}
8304
 
8305
/* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
8306
   node, return the size in bits for the type if it is a constant, or else
8307
   return the alignment for the type if the type's size is not constant, or
8308
   else return BITS_PER_WORD if the type actually turns out to be an
8309
   ERROR_MARK node.  */
8310
 
8311
static inline unsigned HOST_WIDE_INT
8312
simple_type_size_in_bits (tree type)
8313
{
8314
  if (TREE_CODE (type) == ERROR_MARK)
8315
    return BITS_PER_WORD;
8316
  else if (TYPE_SIZE (type) == NULL_TREE)
8317
    return 0;
8318
  else if (host_integerp (TYPE_SIZE (type), 1))
8319
    return tree_low_cst (TYPE_SIZE (type), 1);
8320
  else
8321
    return TYPE_ALIGN (type);
8322
}
8323
 
8324
/* Return true if the debug information for the given type should be
8325
   emitted as a subrange type.  */
8326
 
8327
static inline bool
8328
is_subrange_type (tree type)
8329
{
8330
  tree subtype = TREE_TYPE (type);
8331
 
8332
  /* Subrange types are identified by the fact that they are integer
8333
     types, and that they have a subtype which is either an integer type
8334
     or an enumeral type.  */
8335
 
8336
  if (TREE_CODE (type) != INTEGER_TYPE
8337
      || subtype == NULL_TREE)
8338
    return false;
8339
 
8340
  if (TREE_CODE (subtype) != INTEGER_TYPE
8341
      && TREE_CODE (subtype) != ENUMERAL_TYPE)
8342
    return false;
8343
 
8344
  if (TREE_CODE (type) == TREE_CODE (subtype)
8345
      && int_size_in_bytes (type) == int_size_in_bytes (subtype)
8346
      && TYPE_MIN_VALUE (type) != NULL
8347
      && TYPE_MIN_VALUE (subtype) != NULL
8348
      && tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
8349
      && TYPE_MAX_VALUE (type) != NULL
8350
      && TYPE_MAX_VALUE (subtype) != NULL
8351
      && tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
8352
    {
8353
      /* The type and its subtype have the same representation.  If in
8354
         addition the two types also have the same name, then the given
8355
         type is not a subrange type, but rather a plain base type.  */
8356
      /* FIXME: brobecker/2004-03-22:
8357
         Sizetype INTEGER_CSTs nodes are canonicalized.  It should
8358
         therefore be sufficient to check the TYPE_SIZE node pointers
8359
         rather than checking the actual size.  Unfortunately, we have
8360
         found some cases, such as in the Ada "integer" type, where
8361
         this is not the case.  Until this problem is solved, we need to
8362
         keep checking the actual size.  */
8363
      tree type_name = TYPE_NAME (type);
8364
      tree subtype_name = TYPE_NAME (subtype);
8365
 
8366
      if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
8367
        type_name = DECL_NAME (type_name);
8368
 
8369
      if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
8370
        subtype_name = DECL_NAME (subtype_name);
8371
 
8372
      if (type_name == subtype_name)
8373
        return false;
8374
    }
8375
 
8376
  return true;
8377
}
8378
 
8379
/*  Given a pointer to a tree node for a subrange type, return a pointer
8380
    to a DIE that describes the given type.  */
8381
 
8382
static dw_die_ref
8383
subrange_type_die (tree type, dw_die_ref context_die)
8384
{
8385
  dw_die_ref subrange_die;
8386
  const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
8387
 
8388
  if (context_die == NULL)
8389
    context_die = comp_unit_die;
8390
 
8391
  subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
8392
 
8393
  if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
8394
    {
8395
      /* The size of the subrange type and its base type do not match,
8396
         so we need to generate a size attribute for the subrange type.  */
8397
      add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8398
    }
8399
 
8400
  if (TYPE_MIN_VALUE (type) != NULL)
8401
    add_bound_info (subrange_die, DW_AT_lower_bound,
8402
                    TYPE_MIN_VALUE (type));
8403
  if (TYPE_MAX_VALUE (type) != NULL)
8404
    add_bound_info (subrange_die, DW_AT_upper_bound,
8405
                    TYPE_MAX_VALUE (type));
8406
 
8407
  return subrange_die;
8408
}
8409
 
8410
/* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8411
   entry that chains various modifiers in front of the given type.  */
8412
 
8413
static dw_die_ref
8414
modified_type_die (tree type, int is_const_type, int is_volatile_type,
8415
                   dw_die_ref context_die)
8416
{
8417
  enum tree_code code = TREE_CODE (type);
8418
  dw_die_ref mod_type_die;
8419
  dw_die_ref sub_die = NULL;
8420
  tree item_type = NULL;
8421
  tree qualified_type;
8422
  tree name;
8423
 
8424
  if (code == ERROR_MARK)
8425
    return NULL;
8426
 
8427
  /* See if we already have the appropriately qualified variant of
8428
     this type.  */
8429
  qualified_type
8430
    = get_qualified_type (type,
8431
                          ((is_const_type ? TYPE_QUAL_CONST : 0)
8432
                           | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
8433
 
8434
  /* If we do, then we can just use its DIE, if it exists.  */
8435
  if (qualified_type)
8436
    {
8437
      mod_type_die = lookup_type_die (qualified_type);
8438
      if (mod_type_die)
8439
        return mod_type_die;
8440
    }
8441
 
8442
  name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
8443
 
8444
  /* Handle C typedef types.  */
8445
  if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
8446
    {
8447
      tree dtype = TREE_TYPE (name);
8448
 
8449
      if (qualified_type == dtype)
8450
        {
8451
          /* For a named type, use the typedef.  */
8452
          gen_type_die (qualified_type, context_die);
8453
          return lookup_type_die (qualified_type);
8454
        }
8455
      else if (is_const_type < TYPE_READONLY (dtype)
8456
               || is_volatile_type < TYPE_VOLATILE (dtype)
8457
               || (is_const_type <= TYPE_READONLY (dtype)
8458
                   && is_volatile_type <= TYPE_VOLATILE (dtype)
8459
                   && DECL_ORIGINAL_TYPE (name) != type))
8460
        /* cv-unqualified version of named type.  Just use the unnamed
8461
           type to which it refers.  */
8462
        return modified_type_die (DECL_ORIGINAL_TYPE (name),
8463
                                  is_const_type, is_volatile_type,
8464
                                  context_die);
8465
      /* Else cv-qualified version of named type; fall through.  */
8466
    }
8467
 
8468
  if (is_const_type)
8469
    {
8470
      mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8471
      sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8472
    }
8473
  else if (is_volatile_type)
8474
    {
8475
      mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8476
      sub_die = modified_type_die (type, 0, 0, context_die);
8477
    }
8478
  else if (code == POINTER_TYPE)
8479
    {
8480
      mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8481
      add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8482
                       simple_type_size_in_bits (type) / BITS_PER_UNIT);
8483
      item_type = TREE_TYPE (type);
8484
    }
8485
  else if (code == REFERENCE_TYPE)
8486
    {
8487
      mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8488
      add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8489
                       simple_type_size_in_bits (type) / BITS_PER_UNIT);
8490
      item_type = TREE_TYPE (type);
8491
    }
8492
  else if (is_subrange_type (type))
8493
    {
8494
      mod_type_die = subrange_type_die (type, context_die);
8495
      item_type = TREE_TYPE (type);
8496
    }
8497
  else if (is_base_type (type))
8498
    mod_type_die = base_type_die (type);
8499
  else
8500
    {
8501
      gen_type_die (type, context_die);
8502
 
8503
      /* We have to get the type_main_variant here (and pass that to the
8504
         `lookup_type_die' routine) because the ..._TYPE node we have
8505
         might simply be a *copy* of some original type node (where the
8506
         copy was created to help us keep track of typedef names) and
8507
         that copy might have a different TYPE_UID from the original
8508
         ..._TYPE node.  */
8509
      if (TREE_CODE (type) != VECTOR_TYPE)
8510
        return lookup_type_die (type_main_variant (type));
8511
      else
8512
        /* Vectors have the debugging information in the type,
8513
           not the main variant.  */
8514
        return lookup_type_die (type);
8515
    }
8516
 
8517
  /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
8518
     don't output a DW_TAG_typedef, since there isn't one in the
8519
     user's program; just attach a DW_AT_name to the type.  */
8520
  if (name
8521
      && (TREE_CODE (name) != TYPE_DECL
8522
          || (TREE_TYPE (name) == qualified_type && DECL_NAME (name))))
8523
    {
8524
      if (TREE_CODE (name) == TYPE_DECL)
8525
        /* Could just call add_name_and_src_coords_attributes here,
8526
           but since this is a builtin type it doesn't have any
8527
           useful source coordinates anyway.  */
8528
        name = DECL_NAME (name);
8529
      add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
8530
    }
8531
 
8532
  if (qualified_type)
8533
    equate_type_number_to_die (qualified_type, mod_type_die);
8534
 
8535
  if (item_type)
8536
    /* We must do this after the equate_type_number_to_die call, in case
8537
       this is a recursive type.  This ensures that the modified_type_die
8538
       recursion will terminate even if the type is recursive.  Recursive
8539
       types are possible in Ada.  */
8540
    sub_die = modified_type_die (item_type,
8541
                                 TYPE_READONLY (item_type),
8542
                                 TYPE_VOLATILE (item_type),
8543
                                 context_die);
8544
 
8545
  if (sub_die != NULL)
8546
    add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8547
 
8548
  return mod_type_die;
8549
}
8550
 
8551
/* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8552
   an enumerated type.  */
8553
 
8554
static inline int
8555
type_is_enum (tree type)
8556
{
8557
  return TREE_CODE (type) == ENUMERAL_TYPE;
8558
}
8559
 
8560
/* Return the DBX register number described by a given RTL node.  */
8561
 
8562
static unsigned int
8563
dbx_reg_number (rtx rtl)
8564
{
8565
  unsigned regno = REGNO (rtl);
8566
 
8567
  gcc_assert (regno < FIRST_PSEUDO_REGISTER);
8568
 
8569
#ifdef LEAF_REG_REMAP
8570
  if (current_function_uses_only_leaf_regs)
8571
    {
8572
      int leaf_reg = LEAF_REG_REMAP (regno);
8573
      if (leaf_reg != -1)
8574
        regno = (unsigned) leaf_reg;
8575
    }
8576
#endif
8577
 
8578
  return DBX_REGISTER_NUMBER (regno);
8579
}
8580
 
8581
/* Optionally add a DW_OP_piece term to a location description expression.
8582
   DW_OP_piece is only added if the location description expression already
8583
   doesn't end with DW_OP_piece.  */
8584
 
8585
static void
8586
add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
8587
{
8588
  dw_loc_descr_ref loc;
8589
 
8590
  if (*list_head != NULL)
8591
    {
8592
      /* Find the end of the chain.  */
8593
      for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
8594
        ;
8595
 
8596
      if (loc->dw_loc_opc != DW_OP_piece)
8597
        loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
8598
    }
8599
}
8600
 
8601
/* Return a location descriptor that designates a machine register or
8602
   zero if there is none.  */
8603
 
8604
static dw_loc_descr_ref
8605
reg_loc_descriptor (rtx rtl)
8606
{
8607
  rtx regs;
8608
 
8609
  if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8610
    return 0;
8611
 
8612
  regs = targetm.dwarf_register_span (rtl);
8613
 
8614
  if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
8615
    return multiple_reg_loc_descriptor (rtl, regs);
8616
  else
8617
    return one_reg_loc_descriptor (dbx_reg_number (rtl));
8618
}
8619
 
8620
/* Return a location descriptor that designates a machine register for
8621
   a given hard register number.  */
8622
 
8623
static dw_loc_descr_ref
8624
one_reg_loc_descriptor (unsigned int regno)
8625
{
8626
  if (regno <= 31)
8627
    return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8628
  else
8629
    return new_loc_descr (DW_OP_regx, regno, 0);
8630
}
8631
 
8632
/* Given an RTL of a register, return a location descriptor that
8633
   designates a value that spans more than one register.  */
8634
 
8635
static dw_loc_descr_ref
8636
multiple_reg_loc_descriptor (rtx rtl, rtx regs)
8637
{
8638
  int nregs, size, i;
8639
  unsigned reg;
8640
  dw_loc_descr_ref loc_result = NULL;
8641
 
8642
  reg = REGNO (rtl);
8643
#ifdef LEAF_REG_REMAP
8644
  if (current_function_uses_only_leaf_regs)
8645
    {
8646
      int leaf_reg = LEAF_REG_REMAP (reg);
8647
      if (leaf_reg != -1)
8648
        reg = (unsigned) leaf_reg;
8649
    }
8650
#endif
8651
  gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
8652
  nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
8653
 
8654
  /* Simple, contiguous registers.  */
8655
  if (regs == NULL_RTX)
8656
    {
8657
      size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8658
 
8659
      loc_result = NULL;
8660
      while (nregs--)
8661
        {
8662
          dw_loc_descr_ref t;
8663
 
8664
          t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg));
8665
          add_loc_descr (&loc_result, t);
8666
          add_loc_descr_op_piece (&loc_result, size);
8667
          ++reg;
8668
        }
8669
      return loc_result;
8670
    }
8671
 
8672
  /* Now onto stupid register sets in non contiguous locations.  */
8673
 
8674
  gcc_assert (GET_CODE (regs) == PARALLEL);
8675
 
8676
  size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8677
  loc_result = NULL;
8678
 
8679
  for (i = 0; i < XVECLEN (regs, 0); ++i)
8680
    {
8681
      dw_loc_descr_ref t;
8682
 
8683
      t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
8684
      add_loc_descr (&loc_result, t);
8685
      size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8686
      add_loc_descr_op_piece (&loc_result, size);
8687
    }
8688
  return loc_result;
8689
}
8690
 
8691
/* Return a location descriptor that designates a constant.  */
8692
 
8693
static dw_loc_descr_ref
8694
int_loc_descriptor (HOST_WIDE_INT i)
8695
{
8696
  enum dwarf_location_atom op;
8697
 
8698
  /* Pick the smallest representation of a constant, rather than just
8699
     defaulting to the LEB encoding.  */
8700
  if (i >= 0)
8701
    {
8702
      if (i <= 31)
8703
        op = DW_OP_lit0 + i;
8704
      else if (i <= 0xff)
8705
        op = DW_OP_const1u;
8706
      else if (i <= 0xffff)
8707
        op = DW_OP_const2u;
8708
      else if (HOST_BITS_PER_WIDE_INT == 32
8709
               || i <= 0xffffffff)
8710
        op = DW_OP_const4u;
8711
      else
8712
        op = DW_OP_constu;
8713
    }
8714
  else
8715
    {
8716
      if (i >= -0x80)
8717
        op = DW_OP_const1s;
8718
      else if (i >= -0x8000)
8719
        op = DW_OP_const2s;
8720
      else if (HOST_BITS_PER_WIDE_INT == 32
8721
               || i >= -0x80000000)
8722
        op = DW_OP_const4s;
8723
      else
8724
        op = DW_OP_consts;
8725
    }
8726
 
8727
  return new_loc_descr (op, i, 0);
8728
}
8729
 
8730
/* Return a location descriptor that designates a base+offset location.  */
8731
 
8732
static dw_loc_descr_ref
8733
based_loc_descr (rtx reg, HOST_WIDE_INT offset)
8734
{
8735
  unsigned int regno;
8736
 
8737
  /* We only use "frame base" when we're sure we're talking about the
8738
     post-prologue local stack frame.  We do this by *not* running
8739
     register elimination until this point, and recognizing the special
8740
     argument pointer and soft frame pointer rtx's.  */
8741
  if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
8742
    {
8743
      rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
8744
 
8745
      if (elim != reg)
8746
        {
8747
          if (GET_CODE (elim) == PLUS)
8748
            {
8749
              offset += INTVAL (XEXP (elim, 1));
8750
              elim = XEXP (elim, 0);
8751
            }
8752
          gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
8753
                      : stack_pointer_rtx));
8754
          offset += frame_pointer_fb_offset;
8755
 
8756
          return new_loc_descr (DW_OP_fbreg, offset, 0);
8757
        }
8758
    }
8759
 
8760
  regno = dbx_reg_number (reg);
8761
  if (regno <= 31)
8762
    return new_loc_descr (DW_OP_breg0 + regno, offset, 0);
8763
  else
8764
    return new_loc_descr (DW_OP_bregx, regno, offset);
8765
}
8766
 
8767
/* Return true if this RTL expression describes a base+offset calculation.  */
8768
 
8769
static inline int
8770
is_based_loc (rtx rtl)
8771
{
8772
  return (GET_CODE (rtl) == PLUS
8773
          && ((REG_P (XEXP (rtl, 0))
8774
               && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
8775
               && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
8776
}
8777
 
8778
/* The following routine converts the RTL for a variable or parameter
8779
   (resident in memory) into an equivalent Dwarf representation of a
8780
   mechanism for getting the address of that same variable onto the top of a
8781
   hypothetical "address evaluation" stack.
8782
 
8783
   When creating memory location descriptors, we are effectively transforming
8784
   the RTL for a memory-resident object into its Dwarf postfix expression
8785
   equivalent.  This routine recursively descends an RTL tree, turning
8786
   it into Dwarf postfix code as it goes.
8787
 
8788
   MODE is the mode of the memory reference, needed to handle some
8789
   autoincrement addressing modes.
8790
 
8791
   CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
8792
   location list for RTL.
8793
 
8794
   Return 0 if we can't represent the location.  */
8795
 
8796
static dw_loc_descr_ref
8797
mem_loc_descriptor (rtx rtl, enum machine_mode mode)
8798
{
8799
  dw_loc_descr_ref mem_loc_result = NULL;
8800
  enum dwarf_location_atom op;
8801
 
8802
  /* Note that for a dynamically sized array, the location we will generate a
8803
     description of here will be the lowest numbered location which is
8804
     actually within the array.  That's *not* necessarily the same as the
8805
     zeroth element of the array.  */
8806
 
8807
  rtl = targetm.delegitimize_address (rtl);
8808
 
8809
  switch (GET_CODE (rtl))
8810
    {
8811
    case POST_INC:
8812
    case POST_DEC:
8813
    case POST_MODIFY:
8814
      /* POST_INC and POST_DEC can be handled just like a SUBREG.  So we
8815
         just fall into the SUBREG code.  */
8816
 
8817
      /* ... fall through ...  */
8818
 
8819
    case SUBREG:
8820
      /* The case of a subreg may arise when we have a local (register)
8821
         variable or a formal (register) parameter which doesn't quite fill
8822
         up an entire register.  For now, just assume that it is
8823
         legitimate to make the Dwarf info refer to the whole register which
8824
         contains the given subreg.  */
8825
      rtl = XEXP (rtl, 0);
8826
 
8827
      /* ... fall through ...  */
8828
 
8829
    case REG:
8830
      /* Whenever a register number forms a part of the description of the
8831
         method for calculating the (dynamic) address of a memory resident
8832
         object, DWARF rules require the register number be referred to as
8833
         a "base register".  This distinction is not based in any way upon
8834
         what category of register the hardware believes the given register
8835
         belongs to.  This is strictly DWARF terminology we're dealing with
8836
         here. Note that in cases where the location of a memory-resident
8837
         data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8838
         OP_CONST (0)) the actual DWARF location descriptor that we generate
8839
         may just be OP_BASEREG (basereg).  This may look deceptively like
8840
         the object in question was allocated to a register (rather than in
8841
         memory) so DWARF consumers need to be aware of the subtle
8842
         distinction between OP_REG and OP_BASEREG.  */
8843
      if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
8844
        mem_loc_result = based_loc_descr (rtl, 0);
8845
      break;
8846
 
8847
    case MEM:
8848
      mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8849
      if (mem_loc_result != 0)
8850
        add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
8851
      break;
8852
 
8853
    case LO_SUM:
8854
         rtl = XEXP (rtl, 1);
8855
 
8856
      /* ... fall through ...  */
8857
 
8858
    case LABEL_REF:
8859
      /* Some ports can transform a symbol ref into a label ref, because
8860
         the symbol ref is too far away and has to be dumped into a constant
8861
         pool.  */
8862
    case CONST:
8863
    case SYMBOL_REF:
8864
      /* Alternatively, the symbol in the constant pool might be referenced
8865
         by a different symbol.  */
8866
      if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
8867
        {
8868
          bool marked;
8869
          rtx tmp = get_pool_constant_mark (rtl, &marked);
8870
 
8871
          if (GET_CODE (tmp) == SYMBOL_REF)
8872
            {
8873
              rtl = tmp;
8874
              if (CONSTANT_POOL_ADDRESS_P (tmp))
8875
                get_pool_constant_mark (tmp, &marked);
8876
              else
8877
                marked = true;
8878
            }
8879
 
8880
          /* If all references to this pool constant were optimized away,
8881
             it was not output and thus we can't represent it.
8882
             FIXME: might try to use DW_OP_const_value here, though
8883
             DW_OP_piece complicates it.  */
8884
          if (!marked)
8885
            return 0;
8886
        }
8887
 
8888
      mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
8889
      mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
8890
      mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
8891
      VEC_safe_push (rtx, gc, used_rtx_array, rtl);
8892
      break;
8893
 
8894
    case PRE_MODIFY:
8895
      /* Extract the PLUS expression nested inside and fall into
8896
         PLUS code below.  */
8897
      rtl = XEXP (rtl, 1);
8898
      goto plus;
8899
 
8900
    case PRE_INC:
8901
    case PRE_DEC:
8902
      /* Turn these into a PLUS expression and fall into the PLUS code
8903
         below.  */
8904
      rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
8905
                          GEN_INT (GET_CODE (rtl) == PRE_INC
8906
                                   ? GET_MODE_UNIT_SIZE (mode)
8907
                                   : -GET_MODE_UNIT_SIZE (mode)));
8908
 
8909
      /* ... fall through ...  */
8910
 
8911
    case PLUS:
8912
    plus:
8913
      if (is_based_loc (rtl))
8914
        mem_loc_result = based_loc_descr (XEXP (rtl, 0),
8915
                                          INTVAL (XEXP (rtl, 1)));
8916
      else
8917
        {
8918
          mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode);
8919
          if (mem_loc_result == 0)
8920
            break;
8921
 
8922
          if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
8923
              && INTVAL (XEXP (rtl, 1)) >= 0)
8924
            add_loc_descr (&mem_loc_result,
8925
                           new_loc_descr (DW_OP_plus_uconst,
8926
                                          INTVAL (XEXP (rtl, 1)), 0));
8927
          else
8928
            {
8929
              add_loc_descr (&mem_loc_result,
8930
                             mem_loc_descriptor (XEXP (rtl, 1), mode));
8931
              add_loc_descr (&mem_loc_result,
8932
                             new_loc_descr (DW_OP_plus, 0, 0));
8933
            }
8934
        }
8935
      break;
8936
 
8937
    /* If a pseudo-reg is optimized away, it is possible for it to
8938
       be replaced with a MEM containing a multiply or shift.  */
8939
    case MULT:
8940
      op = DW_OP_mul;
8941
      goto do_binop;
8942
 
8943
    case ASHIFT:
8944
      op = DW_OP_shl;
8945
      goto do_binop;
8946
 
8947
    case ASHIFTRT:
8948
      op = DW_OP_shra;
8949
      goto do_binop;
8950
 
8951
    case LSHIFTRT:
8952
      op = DW_OP_shr;
8953
      goto do_binop;
8954
 
8955
    do_binop:
8956
      {
8957
        dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode);
8958
        dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode);
8959
 
8960
        if (op0 == 0 || op1 == 0)
8961
          break;
8962
 
8963
        mem_loc_result = op0;
8964
        add_loc_descr (&mem_loc_result, op1);
8965
        add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
8966
        break;
8967
      }
8968
 
8969
    case CONST_INT:
8970
      mem_loc_result = int_loc_descriptor (INTVAL (rtl));
8971
      break;
8972
 
8973
    default:
8974
      gcc_unreachable ();
8975
    }
8976
 
8977
  return mem_loc_result;
8978
}
8979
 
8980
/* Return a descriptor that describes the concatenation of two locations.
8981
   This is typically a complex variable.  */
8982
 
8983
static dw_loc_descr_ref
8984
concat_loc_descriptor (rtx x0, rtx x1)
8985
{
8986
  dw_loc_descr_ref cc_loc_result = NULL;
8987
  dw_loc_descr_ref x0_ref = loc_descriptor (x0);
8988
  dw_loc_descr_ref x1_ref = loc_descriptor (x1);
8989
 
8990
  if (x0_ref == 0 || x1_ref == 0)
8991
    return 0;
8992
 
8993
  cc_loc_result = x0_ref;
8994
  add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
8995
 
8996
  add_loc_descr (&cc_loc_result, x1_ref);
8997
  add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
8998
 
8999
  return cc_loc_result;
9000
}
9001
 
9002
/* Output a proper Dwarf location descriptor for a variable or parameter
9003
   which is either allocated in a register or in a memory location.  For a
9004
   register, we just generate an OP_REG and the register number.  For a
9005
   memory location we provide a Dwarf postfix expression describing how to
9006
   generate the (dynamic) address of the object onto the address stack.
9007
 
9008
   If we don't know how to describe it, return 0.  */
9009
 
9010
static dw_loc_descr_ref
9011
loc_descriptor (rtx rtl)
9012
{
9013
  dw_loc_descr_ref loc_result = NULL;
9014
 
9015
  switch (GET_CODE (rtl))
9016
    {
9017
    case SUBREG:
9018
      /* The case of a subreg may arise when we have a local (register)
9019
         variable or a formal (register) parameter which doesn't quite fill
9020
         up an entire register.  For now, just assume that it is
9021
         legitimate to make the Dwarf info refer to the whole register which
9022
         contains the given subreg.  */
9023
      rtl = SUBREG_REG (rtl);
9024
 
9025
      /* ... fall through ...  */
9026
 
9027
    case REG:
9028
      loc_result = reg_loc_descriptor (rtl);
9029
      break;
9030
 
9031
    case MEM:
9032
      loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
9033
      break;
9034
 
9035
    case CONCAT:
9036
      loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
9037
      break;
9038
 
9039
    case VAR_LOCATION:
9040
      /* Single part.  */
9041
      if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
9042
        {
9043
          loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0));
9044
          break;
9045
        }
9046
 
9047
      rtl = XEXP (rtl, 1);
9048
      /* FALLTHRU */
9049
 
9050
    case PARALLEL:
9051
      {
9052
        rtvec par_elems = XVEC (rtl, 0);
9053
        int num_elem = GET_NUM_ELEM (par_elems);
9054
        enum machine_mode mode;
9055
        int i;
9056
 
9057
        /* Create the first one, so we have something to add to.  */
9058
        loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0));
9059
        mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
9060
        add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
9061
        for (i = 1; i < num_elem; i++)
9062
          {
9063
            dw_loc_descr_ref temp;
9064
 
9065
            temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0));
9066
            add_loc_descr (&loc_result, temp);
9067
            mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
9068
            add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
9069
          }
9070
      }
9071
      break;
9072
 
9073
    default:
9074
      gcc_unreachable ();
9075
    }
9076
 
9077
  return loc_result;
9078
}
9079
 
9080
/* Similar, but generate the descriptor from trees instead of rtl.  This comes
9081
   up particularly with variable length arrays.  WANT_ADDRESS is 2 if this is
9082
   a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
9083
   top-level invocation, and we require the address of LOC; is 0 if we require
9084
   the value of LOC.  */
9085
 
9086
static dw_loc_descr_ref
9087
loc_descriptor_from_tree_1 (tree loc, int want_address)
9088
{
9089
  dw_loc_descr_ref ret, ret1;
9090
  int have_address = 0;
9091
  enum dwarf_location_atom op;
9092
 
9093
  /* ??? Most of the time we do not take proper care for sign/zero
9094
     extending the values properly.  Hopefully this won't be a real
9095
     problem...  */
9096
 
9097
  switch (TREE_CODE (loc))
9098
    {
9099
    case ERROR_MARK:
9100
      return 0;
9101
 
9102
    case PLACEHOLDER_EXPR:
9103
      /* This case involves extracting fields from an object to determine the
9104
         position of other fields.  We don't try to encode this here.  The
9105
         only user of this is Ada, which encodes the needed information using
9106
         the names of types.  */
9107
      return 0;
9108
 
9109
    case CALL_EXPR:
9110
      return 0;
9111
 
9112
    case PREINCREMENT_EXPR:
9113
    case PREDECREMENT_EXPR:
9114
    case POSTINCREMENT_EXPR:
9115
    case POSTDECREMENT_EXPR:
9116
      /* There are no opcodes for these operations.  */
9117
      return 0;
9118
 
9119
    case ADDR_EXPR:
9120
      /* If we already want an address, there's nothing we can do.  */
9121
      if (want_address)
9122
        return 0;
9123
 
9124
      /* Otherwise, process the argument and look for the address.  */
9125
      return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
9126
 
9127
    case VAR_DECL:
9128
      if (DECL_THREAD_LOCAL_P (loc))
9129
        {
9130
          rtx rtl;
9131
 
9132
          /* If this is not defined, we have no way to emit the data.  */
9133
          if (!targetm.asm_out.output_dwarf_dtprel)
9134
            return 0;
9135
 
9136
          /* The way DW_OP_GNU_push_tls_address is specified, we can only
9137
             look up addresses of objects in the current module.  */
9138
          if (DECL_EXTERNAL (loc))
9139
            return 0;
9140
 
9141
          rtl = rtl_for_decl_location (loc);
9142
          if (rtl == NULL_RTX)
9143
            return 0;
9144
 
9145
          if (!MEM_P (rtl))
9146
            return 0;
9147
          rtl = XEXP (rtl, 0);
9148
          if (! CONSTANT_P (rtl))
9149
            return 0;
9150
 
9151
          ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
9152
          ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9153
          ret->dw_loc_oprnd1.v.val_addr = rtl;
9154
 
9155
          ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
9156
          add_loc_descr (&ret, ret1);
9157
 
9158
          have_address = 1;
9159
          break;
9160
        }
9161
      /* FALLTHRU */
9162
 
9163
    case PARM_DECL:
9164
      if (DECL_HAS_VALUE_EXPR_P (loc))
9165
        return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
9166
                                           want_address);
9167
      /* FALLTHRU */
9168
 
9169
    case RESULT_DECL:
9170
    case FUNCTION_DECL:
9171
      {
9172
        rtx rtl = rtl_for_decl_location (loc);
9173
 
9174
        if (rtl == NULL_RTX)
9175
          return 0;
9176
        else if (GET_CODE (rtl) == CONST_INT)
9177
          {
9178
            HOST_WIDE_INT val = INTVAL (rtl);
9179
            if (TYPE_UNSIGNED (TREE_TYPE (loc)))
9180
              val &= GET_MODE_MASK (DECL_MODE (loc));
9181
            ret = int_loc_descriptor (val);
9182
          }
9183
        else if (GET_CODE (rtl) == CONST_STRING)
9184
          return 0;
9185
        else if (CONSTANT_P (rtl))
9186
          {
9187
            ret = new_loc_descr (DW_OP_addr, 0, 0);
9188
            ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9189
            ret->dw_loc_oprnd1.v.val_addr = rtl;
9190
          }
9191
        else
9192
          {
9193
            enum machine_mode mode;
9194
 
9195
            /* Certain constructs can only be represented at top-level.  */
9196
            if (want_address == 2)
9197
              return loc_descriptor (rtl);
9198
 
9199
            mode = GET_MODE (rtl);
9200
            if (MEM_P (rtl))
9201
              {
9202
                rtl = XEXP (rtl, 0);
9203
                have_address = 1;
9204
              }
9205
            ret = mem_loc_descriptor (rtl, mode);
9206
          }
9207
      }
9208
      break;
9209
 
9210
    case INDIRECT_REF:
9211
      ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9212
      have_address = 1;
9213
      break;
9214
 
9215
    case COMPOUND_EXPR:
9216
      return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
9217
 
9218
    case NOP_EXPR:
9219
    case CONVERT_EXPR:
9220
    case NON_LVALUE_EXPR:
9221
    case VIEW_CONVERT_EXPR:
9222
    case SAVE_EXPR:
9223
    case MODIFY_EXPR:
9224
      return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), want_address);
9225
 
9226
    case COMPONENT_REF:
9227
    case BIT_FIELD_REF:
9228
    case ARRAY_REF:
9229
    case ARRAY_RANGE_REF:
9230
      {
9231
        tree obj, offset;
9232
        HOST_WIDE_INT bitsize, bitpos, bytepos;
9233
        enum machine_mode mode;
9234
        int volatilep;
9235
        int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
9236
 
9237
        obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
9238
                                   &unsignedp, &volatilep, false);
9239
 
9240
        if (obj == loc)
9241
          return 0;
9242
 
9243
        ret = loc_descriptor_from_tree_1 (obj, 1);
9244
        if (ret == 0
9245
            || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
9246
          return 0;
9247
 
9248
        if (offset != NULL_TREE)
9249
          {
9250
            /* Variable offset.  */
9251
            add_loc_descr (&ret, loc_descriptor_from_tree_1 (offset, 0));
9252
            add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9253
          }
9254
 
9255
        bytepos = bitpos / BITS_PER_UNIT;
9256
        if (bytepos > 0)
9257
          add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
9258
        else if (bytepos < 0)
9259
          {
9260
            add_loc_descr (&ret, int_loc_descriptor (bytepos));
9261
            add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9262
          }
9263
 
9264
        have_address = 1;
9265
        break;
9266
      }
9267
 
9268
    case INTEGER_CST:
9269
      if (host_integerp (loc, 0))
9270
        ret = int_loc_descriptor (tree_low_cst (loc, 0));
9271
      else
9272
        return 0;
9273
      break;
9274
 
9275
    case CONSTRUCTOR:
9276
      {
9277
        /* Get an RTL for this, if something has been emitted.  */
9278
        rtx rtl = lookup_constant_def (loc);
9279
        enum machine_mode mode;
9280
 
9281
        if (!rtl || !MEM_P (rtl))
9282
          return 0;
9283
        mode = GET_MODE (rtl);
9284
        rtl = XEXP (rtl, 0);
9285
        ret = mem_loc_descriptor (rtl, mode);
9286
        have_address = 1;
9287
        break;
9288
      }
9289
 
9290
    case TRUTH_AND_EXPR:
9291
    case TRUTH_ANDIF_EXPR:
9292
    case BIT_AND_EXPR:
9293
      op = DW_OP_and;
9294
      goto do_binop;
9295
 
9296
    case TRUTH_XOR_EXPR:
9297
    case BIT_XOR_EXPR:
9298
      op = DW_OP_xor;
9299
      goto do_binop;
9300
 
9301
    case TRUTH_OR_EXPR:
9302
    case TRUTH_ORIF_EXPR:
9303
    case BIT_IOR_EXPR:
9304
      op = DW_OP_or;
9305
      goto do_binop;
9306
 
9307
    case FLOOR_DIV_EXPR:
9308
    case CEIL_DIV_EXPR:
9309
    case ROUND_DIV_EXPR:
9310
    case TRUNC_DIV_EXPR:
9311
      op = DW_OP_div;
9312
      goto do_binop;
9313
 
9314
    case MINUS_EXPR:
9315
      op = DW_OP_minus;
9316
      goto do_binop;
9317
 
9318
    case FLOOR_MOD_EXPR:
9319
    case CEIL_MOD_EXPR:
9320
    case ROUND_MOD_EXPR:
9321
    case TRUNC_MOD_EXPR:
9322
      op = DW_OP_mod;
9323
      goto do_binop;
9324
 
9325
    case MULT_EXPR:
9326
      op = DW_OP_mul;
9327
      goto do_binop;
9328
 
9329
    case LSHIFT_EXPR:
9330
      op = DW_OP_shl;
9331
      goto do_binop;
9332
 
9333
    case RSHIFT_EXPR:
9334
      op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
9335
      goto do_binop;
9336
 
9337
    case PLUS_EXPR:
9338
      if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
9339
          && host_integerp (TREE_OPERAND (loc, 1), 0))
9340
        {
9341
          ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9342
          if (ret == 0)
9343
            return 0;
9344
 
9345
          add_loc_descr (&ret,
9346
                         new_loc_descr (DW_OP_plus_uconst,
9347
                                        tree_low_cst (TREE_OPERAND (loc, 1),
9348
                                                      0),
9349
                                        0));
9350
          break;
9351
        }
9352
 
9353
      op = DW_OP_plus;
9354
      goto do_binop;
9355
 
9356
    case LE_EXPR:
9357
      if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9358
        return 0;
9359
 
9360
      op = DW_OP_le;
9361
      goto do_binop;
9362
 
9363
    case GE_EXPR:
9364
      if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9365
        return 0;
9366
 
9367
      op = DW_OP_ge;
9368
      goto do_binop;
9369
 
9370
    case LT_EXPR:
9371
      if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9372
        return 0;
9373
 
9374
      op = DW_OP_lt;
9375
      goto do_binop;
9376
 
9377
    case GT_EXPR:
9378
      if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9379
        return 0;
9380
 
9381
      op = DW_OP_gt;
9382
      goto do_binop;
9383
 
9384
    case EQ_EXPR:
9385
      op = DW_OP_eq;
9386
      goto do_binop;
9387
 
9388
    case NE_EXPR:
9389
      op = DW_OP_ne;
9390
      goto do_binop;
9391
 
9392
    do_binop:
9393
      ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9394
      ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9395
      if (ret == 0 || ret1 == 0)
9396
        return 0;
9397
 
9398
      add_loc_descr (&ret, ret1);
9399
      add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9400
      break;
9401
 
9402
    case TRUTH_NOT_EXPR:
9403
    case BIT_NOT_EXPR:
9404
      op = DW_OP_not;
9405
      goto do_unop;
9406
 
9407
    case ABS_EXPR:
9408
      op = DW_OP_abs;
9409
      goto do_unop;
9410
 
9411
    case NEGATE_EXPR:
9412
      op = DW_OP_neg;
9413
      goto do_unop;
9414
 
9415
    do_unop:
9416
      ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9417
      if (ret == 0)
9418
        return 0;
9419
 
9420
      add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9421
      break;
9422
 
9423
    case MIN_EXPR:
9424
    case MAX_EXPR:
9425
      {
9426
        const enum tree_code code =
9427
          TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
9428
 
9429
        loc = build3 (COND_EXPR, TREE_TYPE (loc),
9430
                      build2 (code, integer_type_node,
9431
                              TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
9432
                      TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
9433
      }
9434
 
9435
      /* ... fall through ...  */
9436
 
9437
    case COND_EXPR:
9438
      {
9439
        dw_loc_descr_ref lhs
9440
          = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9441
        dw_loc_descr_ref rhs
9442
          = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
9443
        dw_loc_descr_ref bra_node, jump_node, tmp;
9444
 
9445
        ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9446
        if (ret == 0 || lhs == 0 || rhs == 0)
9447
          return 0;
9448
 
9449
        bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9450
        add_loc_descr (&ret, bra_node);
9451
 
9452
        add_loc_descr (&ret, rhs);
9453
        jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9454
        add_loc_descr (&ret, jump_node);
9455
 
9456
        add_loc_descr (&ret, lhs);
9457
        bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9458
        bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9459
 
9460
        /* ??? Need a node to point the skip at.  Use a nop.  */
9461
        tmp = new_loc_descr (DW_OP_nop, 0, 0);
9462
        add_loc_descr (&ret, tmp);
9463
        jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9464
        jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9465
      }
9466
      break;
9467
 
9468
    case FIX_TRUNC_EXPR:
9469
    case FIX_CEIL_EXPR:
9470
    case FIX_FLOOR_EXPR:
9471
    case FIX_ROUND_EXPR:
9472
      return 0;
9473
 
9474
    default:
9475
      /* Leave front-end specific codes as simply unknown.  This comes
9476
         up, for instance, with the C STMT_EXPR.  */
9477
      if ((unsigned int) TREE_CODE (loc)
9478
          >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9479
        return 0;
9480
 
9481
#ifdef ENABLE_CHECKING
9482
      /* Otherwise this is a generic code; we should just lists all of
9483
         these explicitly.  We forgot one.  */
9484
      gcc_unreachable ();
9485
#else
9486
      /* In a release build, we want to degrade gracefully: better to
9487
         generate incomplete debugging information than to crash.  */
9488
      return NULL;
9489
#endif
9490
    }
9491
 
9492
  /* Show if we can't fill the request for an address.  */
9493
  if (want_address && !have_address)
9494
    return 0;
9495
 
9496
  /* If we've got an address and don't want one, dereference.  */
9497
  if (!want_address && have_address && ret)
9498
    {
9499
      HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9500
 
9501
      if (size > DWARF2_ADDR_SIZE || size == -1)
9502
        return 0;
9503
      else if (size == DWARF2_ADDR_SIZE)
9504
        op = DW_OP_deref;
9505
      else
9506
        op = DW_OP_deref_size;
9507
 
9508
      add_loc_descr (&ret, new_loc_descr (op, size, 0));
9509
    }
9510
 
9511
  return ret;
9512
}
9513
 
9514
static inline dw_loc_descr_ref
9515
loc_descriptor_from_tree (tree loc)
9516
{
9517
  return loc_descriptor_from_tree_1 (loc, 2);
9518
}
9519
 
9520
/* Given a value, round it up to the lowest multiple of `boundary'
9521
   which is not less than the value itself.  */
9522
 
9523
static inline HOST_WIDE_INT
9524
ceiling (HOST_WIDE_INT value, unsigned int boundary)
9525
{
9526
  return (((value + boundary - 1) / boundary) * boundary);
9527
}
9528
 
9529
/* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9530
   pointer to the declared type for the relevant field variable, or return
9531
   `integer_type_node' if the given node turns out to be an
9532
   ERROR_MARK node.  */
9533
 
9534
static inline tree
9535
field_type (tree decl)
9536
{
9537
  tree type;
9538
 
9539
  if (TREE_CODE (decl) == ERROR_MARK)
9540
    return integer_type_node;
9541
 
9542
  type = DECL_BIT_FIELD_TYPE (decl);
9543
  if (type == NULL_TREE)
9544
    type = TREE_TYPE (decl);
9545
 
9546
  return type;
9547
}
9548
 
9549
/* Given a pointer to a tree node, return the alignment in bits for
9550
   it, or else return BITS_PER_WORD if the node actually turns out to
9551
   be an ERROR_MARK node.  */
9552
 
9553
static inline unsigned
9554
simple_type_align_in_bits (tree type)
9555
{
9556
  return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9557
}
9558
 
9559
static inline unsigned
9560
simple_decl_align_in_bits (tree decl)
9561
{
9562
  return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9563
}
9564
 
9565
/* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9566
   lowest addressed byte of the "containing object" for the given FIELD_DECL,
9567
   or return 0 if we are unable to determine what that offset is, either
9568
   because the argument turns out to be a pointer to an ERROR_MARK node, or
9569
   because the offset is actually variable.  (We can't handle the latter case
9570
   just yet).  */
9571
 
9572
static HOST_WIDE_INT
9573
field_byte_offset (tree decl)
9574
{
9575
  unsigned int type_align_in_bits;
9576
  unsigned int decl_align_in_bits;
9577
  unsigned HOST_WIDE_INT type_size_in_bits;
9578
  HOST_WIDE_INT object_offset_in_bits;
9579
  tree type;
9580
  tree field_size_tree;
9581
  HOST_WIDE_INT bitpos_int;
9582
  HOST_WIDE_INT deepest_bitpos;
9583
  unsigned HOST_WIDE_INT field_size_in_bits;
9584
 
9585
  if (TREE_CODE (decl) == ERROR_MARK)
9586
    return 0;
9587
 
9588
  gcc_assert (TREE_CODE (decl) == FIELD_DECL);
9589
 
9590
  type = field_type (decl);
9591
  field_size_tree = DECL_SIZE (decl);
9592
 
9593
  /* The size could be unspecified if there was an error, or for
9594
     a flexible array member.  */
9595
  if (! field_size_tree)
9596
    field_size_tree = bitsize_zero_node;
9597
 
9598
  /* We cannot yet cope with fields whose positions are variable, so
9599
     for now, when we see such things, we simply return 0.  Someday, we may
9600
     be able to handle such cases, but it will be damn difficult.  */
9601
  if (! host_integerp (bit_position (decl), 0))
9602
    return 0;
9603
 
9604
  bitpos_int = int_bit_position (decl);
9605
 
9606
  /* If we don't know the size of the field, pretend it's a full word.  */
9607
  if (host_integerp (field_size_tree, 1))
9608
    field_size_in_bits = tree_low_cst (field_size_tree, 1);
9609
  else
9610
    field_size_in_bits = BITS_PER_WORD;
9611
 
9612
  type_size_in_bits = simple_type_size_in_bits (type);
9613
  type_align_in_bits = simple_type_align_in_bits (type);
9614
  decl_align_in_bits = simple_decl_align_in_bits (decl);
9615
 
9616
  /* The GCC front-end doesn't make any attempt to keep track of the starting
9617
     bit offset (relative to the start of the containing structure type) of the
9618
     hypothetical "containing object" for a bit-field.  Thus, when computing
9619
     the byte offset value for the start of the "containing object" of a
9620
     bit-field, we must deduce this information on our own. This can be rather
9621
     tricky to do in some cases.  For example, handling the following structure
9622
     type definition when compiling for an i386/i486 target (which only aligns
9623
     long long's to 32-bit boundaries) can be very tricky:
9624
 
9625
         struct S { int field1; long long field2:31; };
9626
 
9627
     Fortunately, there is a simple rule-of-thumb which can be used in such
9628
     cases.  When compiling for an i386/i486, GCC will allocate 8 bytes for the
9629
     structure shown above.  It decides to do this based upon one simple rule
9630
     for bit-field allocation.  GCC allocates each "containing object" for each
9631
     bit-field at the first (i.e. lowest addressed) legitimate alignment
9632
     boundary (based upon the required minimum alignment for the declared type
9633
     of the field) which it can possibly use, subject to the condition that
9634
     there is still enough available space remaining in the containing object
9635
     (when allocated at the selected point) to fully accommodate all of the
9636
     bits of the bit-field itself.
9637
 
9638
     This simple rule makes it obvious why GCC allocates 8 bytes for each
9639
     object of the structure type shown above.  When looking for a place to
9640
     allocate the "containing object" for `field2', the compiler simply tries
9641
     to allocate a 64-bit "containing object" at each successive 32-bit
9642
     boundary (starting at zero) until it finds a place to allocate that 64-
9643
     bit field such that at least 31 contiguous (and previously unallocated)
9644
     bits remain within that selected 64 bit field.  (As it turns out, for the
9645
     example above, the compiler finds it is OK to allocate the "containing
9646
     object" 64-bit field at bit-offset zero within the structure type.)
9647
 
9648
     Here we attempt to work backwards from the limited set of facts we're
9649
     given, and we try to deduce from those facts, where GCC must have believed
9650
     that the containing object started (within the structure type). The value
9651
     we deduce is then used (by the callers of this routine) to generate
9652
     DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
9653
     and, in the case of DW_AT_location, regular fields as well).  */
9654
 
9655
  /* Figure out the bit-distance from the start of the structure to the
9656
     "deepest" bit of the bit-field.  */
9657
  deepest_bitpos = bitpos_int + field_size_in_bits;
9658
 
9659
  /* This is the tricky part.  Use some fancy footwork to deduce where the
9660
     lowest addressed bit of the containing object must be.  */
9661
  object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9662
 
9663
  /* Round up to type_align by default.  This works best for bitfields.  */
9664
  object_offset_in_bits += type_align_in_bits - 1;
9665
  object_offset_in_bits /= type_align_in_bits;
9666
  object_offset_in_bits *= type_align_in_bits;
9667
 
9668
  if (object_offset_in_bits > bitpos_int)
9669
    {
9670
      /* Sigh, the decl must be packed.  */
9671
      object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9672
 
9673
      /* Round up to decl_align instead.  */
9674
      object_offset_in_bits += decl_align_in_bits - 1;
9675
      object_offset_in_bits /= decl_align_in_bits;
9676
      object_offset_in_bits *= decl_align_in_bits;
9677
    }
9678
 
9679
  return object_offset_in_bits / BITS_PER_UNIT;
9680
}
9681
 
9682
/* The following routines define various Dwarf attributes and any data
9683
   associated with them.  */
9684
 
9685
/* Add a location description attribute value to a DIE.
9686
 
9687
   This emits location attributes suitable for whole variables and
9688
   whole parameters.  Note that the location attributes for struct fields are
9689
   generated by the routine `data_member_location_attribute' below.  */
9690
 
9691
static inline void
9692
add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
9693
                             dw_loc_descr_ref descr)
9694
{
9695
  if (descr != 0)
9696
    add_AT_loc (die, attr_kind, descr);
9697
}
9698
 
9699
/* Attach the specialized form of location attribute used for data members of
9700
   struct and union types.  In the special case of a FIELD_DECL node which
9701
   represents a bit-field, the "offset" part of this special location
9702
   descriptor must indicate the distance in bytes from the lowest-addressed
9703
   byte of the containing struct or union type to the lowest-addressed byte of
9704
   the "containing object" for the bit-field.  (See the `field_byte_offset'
9705
   function above).
9706
 
9707
   For any given bit-field, the "containing object" is a hypothetical object
9708
   (of some integral or enum type) within which the given bit-field lives.  The
9709
   type of this hypothetical "containing object" is always the same as the
9710
   declared type of the individual bit-field itself (for GCC anyway... the
9711
   DWARF spec doesn't actually mandate this).  Note that it is the size (in
9712
   bytes) of the hypothetical "containing object" which will be given in the
9713
   DW_AT_byte_size attribute for this bit-field.  (See the
9714
   `byte_size_attribute' function below.)  It is also used when calculating the
9715
   value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
9716
   function below.)  */
9717
 
9718
static void
9719
add_data_member_location_attribute (dw_die_ref die, tree decl)
9720
{
9721
  HOST_WIDE_INT offset;
9722
  dw_loc_descr_ref loc_descr = 0;
9723
 
9724
  if (TREE_CODE (decl) == TREE_BINFO)
9725
    {
9726
      /* We're working on the TAG_inheritance for a base class.  */
9727
      if (BINFO_VIRTUAL_P (decl) && is_cxx ())
9728
        {
9729
          /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9730
             aren't at a fixed offset from all (sub)objects of the same
9731
             type.  We need to extract the appropriate offset from our
9732
             vtable.  The following dwarf expression means
9733
 
9734
               BaseAddr = ObAddr + *((*ObAddr) - Offset)
9735
 
9736
             This is specific to the V3 ABI, of course.  */
9737
 
9738
          dw_loc_descr_ref tmp;
9739
 
9740
          /* Make a copy of the object address.  */
9741
          tmp = new_loc_descr (DW_OP_dup, 0, 0);
9742
          add_loc_descr (&loc_descr, tmp);
9743
 
9744
          /* Extract the vtable address.  */
9745
          tmp = new_loc_descr (DW_OP_deref, 0, 0);
9746
          add_loc_descr (&loc_descr, tmp);
9747
 
9748
          /* Calculate the address of the offset.  */
9749
          offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
9750
          gcc_assert (offset < 0);
9751
 
9752
          tmp = int_loc_descriptor (-offset);
9753
          add_loc_descr (&loc_descr, tmp);
9754
          tmp = new_loc_descr (DW_OP_minus, 0, 0);
9755
          add_loc_descr (&loc_descr, tmp);
9756
 
9757
          /* Extract the offset.  */
9758
          tmp = new_loc_descr (DW_OP_deref, 0, 0);
9759
          add_loc_descr (&loc_descr, tmp);
9760
 
9761
          /* Add it to the object address.  */
9762
          tmp = new_loc_descr (DW_OP_plus, 0, 0);
9763
          add_loc_descr (&loc_descr, tmp);
9764
        }
9765
      else
9766
        offset = tree_low_cst (BINFO_OFFSET (decl), 0);
9767
    }
9768
  else
9769
    offset = field_byte_offset (decl);
9770
 
9771
  if (! loc_descr)
9772
    {
9773
      enum dwarf_location_atom op;
9774
 
9775
      /* The DWARF2 standard says that we should assume that the structure
9776
         address is already on the stack, so we can specify a structure field
9777
         address by using DW_OP_plus_uconst.  */
9778
 
9779
#ifdef MIPS_DEBUGGING_INFO
9780
      /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9781
         operator correctly.  It works only if we leave the offset on the
9782
         stack.  */
9783
      op = DW_OP_constu;
9784
#else
9785
      op = DW_OP_plus_uconst;
9786
#endif
9787
 
9788
      loc_descr = new_loc_descr (op, offset, 0);
9789
    }
9790
 
9791
  add_AT_loc (die, DW_AT_data_member_location, loc_descr);
9792
}
9793
 
9794
/* Writes integer values to dw_vec_const array.  */
9795
 
9796
static void
9797
insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
9798
{
9799
  while (size != 0)
9800
    {
9801
      *dest++ = val & 0xff;
9802
      val >>= 8;
9803
      --size;
9804
    }
9805
}
9806
 
9807
/* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
9808
 
9809
static HOST_WIDE_INT
9810
extract_int (const unsigned char *src, unsigned int size)
9811
{
9812
  HOST_WIDE_INT val = 0;
9813
 
9814
  src += size;
9815
  while (size != 0)
9816
    {
9817
      val <<= 8;
9818
      val |= *--src & 0xff;
9819
      --size;
9820
    }
9821
  return val;
9822
}
9823
 
9824
/* Writes floating point values to dw_vec_const array.  */
9825
 
9826
static void
9827
insert_float (rtx rtl, unsigned char *array)
9828
{
9829
  REAL_VALUE_TYPE rv;
9830
  long val[4];
9831
  int i;
9832
 
9833
  REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
9834
  real_to_target (val, &rv, GET_MODE (rtl));
9835
 
9836
  /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
9837
  for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
9838
    {
9839
      insert_int (val[i], 4, array);
9840
      array += 4;
9841
    }
9842
}
9843
 
9844
/* Attach a DW_AT_const_value attribute for a variable or a parameter which
9845
   does not have a "location" either in memory or in a register.  These
9846
   things can arise in GNU C when a constant is passed as an actual parameter
9847
   to an inlined function.  They can also arise in C++ where declared
9848
   constants do not necessarily get memory "homes".  */
9849
 
9850
static void
9851
add_const_value_attribute (dw_die_ref die, rtx rtl)
9852
{
9853
  switch (GET_CODE (rtl))
9854
    {
9855
    case CONST_INT:
9856
      {
9857
        HOST_WIDE_INT val = INTVAL (rtl);
9858
 
9859
        if (val < 0)
9860
          add_AT_int (die, DW_AT_const_value, val);
9861
        else
9862
          add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
9863
      }
9864
      break;
9865
 
9866
    case CONST_DOUBLE:
9867
      /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9868
         floating-point constant.  A CONST_DOUBLE is used whenever the
9869
         constant requires more than one word in order to be adequately
9870
         represented.  We output CONST_DOUBLEs as blocks.  */
9871
      {
9872
        enum machine_mode mode = GET_MODE (rtl);
9873
 
9874
        if (SCALAR_FLOAT_MODE_P (mode))
9875
          {
9876
            unsigned int length = GET_MODE_SIZE (mode);
9877
            unsigned char *array = ggc_alloc (length);
9878
 
9879
            insert_float (rtl, array);
9880
            add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
9881
          }
9882
        else
9883
          {
9884
            /* ??? We really should be using HOST_WIDE_INT throughout.  */
9885
            gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
9886
 
9887
            add_AT_long_long (die, DW_AT_const_value,
9888
                              CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
9889
          }
9890
      }
9891
      break;
9892
 
9893
    case CONST_VECTOR:
9894
      {
9895
        enum machine_mode mode = GET_MODE (rtl);
9896
        unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
9897
        unsigned int length = CONST_VECTOR_NUNITS (rtl);
9898
        unsigned char *array = ggc_alloc (length * elt_size);
9899
        unsigned int i;
9900
        unsigned char *p;
9901
 
9902
        switch (GET_MODE_CLASS (mode))
9903
          {
9904
          case MODE_VECTOR_INT:
9905
            for (i = 0, p = array; i < length; i++, p += elt_size)
9906
              {
9907
                rtx elt = CONST_VECTOR_ELT (rtl, i);
9908
                HOST_WIDE_INT lo, hi;
9909
 
9910
                switch (GET_CODE (elt))
9911
                  {
9912
                  case CONST_INT:
9913
                    lo = INTVAL (elt);
9914
                    hi = -(lo < 0);
9915
                    break;
9916
 
9917
                  case CONST_DOUBLE:
9918
                    lo = CONST_DOUBLE_LOW (elt);
9919
                    hi = CONST_DOUBLE_HIGH (elt);
9920
                    break;
9921
 
9922
                  default:
9923
                    gcc_unreachable ();
9924
                  }
9925
 
9926
                if (elt_size <= sizeof (HOST_WIDE_INT))
9927
                  insert_int (lo, elt_size, p);
9928
                else
9929
                  {
9930
                    unsigned char *p0 = p;
9931
                    unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
9932
 
9933
                    gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
9934
                    if (WORDS_BIG_ENDIAN)
9935
                      {
9936
                        p0 = p1;
9937
                        p1 = p;
9938
                      }
9939
                    insert_int (lo, sizeof (HOST_WIDE_INT), p0);
9940
                    insert_int (hi, sizeof (HOST_WIDE_INT), p1);
9941
                  }
9942
              }
9943
            break;
9944
 
9945
          case MODE_VECTOR_FLOAT:
9946
            for (i = 0, p = array; i < length; i++, p += elt_size)
9947
              {
9948
                rtx elt = CONST_VECTOR_ELT (rtl, i);
9949
                insert_float (elt, p);
9950
              }
9951
            break;
9952
 
9953
          default:
9954
            gcc_unreachable ();
9955
          }
9956
 
9957
        add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
9958
      }
9959
      break;
9960
 
9961
    case CONST_STRING:
9962
      add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
9963
      break;
9964
 
9965
    case SYMBOL_REF:
9966
    case LABEL_REF:
9967
    case CONST:
9968
      add_AT_addr (die, DW_AT_const_value, rtl);
9969
      VEC_safe_push (rtx, gc, used_rtx_array, rtl);
9970
      break;
9971
 
9972
    case PLUS:
9973
      /* In cases where an inlined instance of an inline function is passed
9974
         the address of an `auto' variable (which is local to the caller) we
9975
         can get a situation where the DECL_RTL of the artificial local
9976
         variable (for the inlining) which acts as a stand-in for the
9977
         corresponding formal parameter (of the inline function) will look
9978
         like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
9979
         exactly a compile-time constant expression, but it isn't the address
9980
         of the (artificial) local variable either.  Rather, it represents the
9981
         *value* which the artificial local variable always has during its
9982
         lifetime.  We currently have no way to represent such quasi-constant
9983
         values in Dwarf, so for now we just punt and generate nothing.  */
9984
      break;
9985
 
9986
    default:
9987
      /* No other kinds of rtx should be possible here.  */
9988
      gcc_unreachable ();
9989
    }
9990
 
9991
}
9992
 
9993
/* Determine whether the evaluation of EXPR references any variables
9994
   or functions which aren't otherwise used (and therefore may not be
9995
   output).  */
9996
static tree
9997
reference_to_unused (tree * tp, int * walk_subtrees,
9998
                     void * data ATTRIBUTE_UNUSED)
9999
{
10000
  if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
10001
    *walk_subtrees = 0;
10002
 
10003
  if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
10004
      && ! TREE_ASM_WRITTEN (*tp))
10005
    return *tp;
10006
  else if (!flag_unit_at_a_time)
10007
    return NULL_TREE;
10008
  else if (!cgraph_global_info_ready
10009
           && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
10010
    gcc_unreachable ();
10011
  else if (DECL_P (*tp) && TREE_CODE (*tp) == VAR_DECL)
10012
    {
10013
      struct cgraph_varpool_node *node = cgraph_varpool_node (*tp);
10014
      if (!node->needed)
10015
        return *tp;
10016
    }
10017
   else if (DECL_P (*tp) && TREE_CODE (*tp) == FUNCTION_DECL
10018
            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
10019
    {
10020
      struct cgraph_node *node = cgraph_node (*tp);
10021
      if (!node->output)
10022
        return *tp;
10023
    }
10024
 
10025
  return NULL_TREE;
10026
}
10027
 
10028
/* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
10029
   for use in a later add_const_value_attribute call.  */
10030
 
10031
static rtx
10032
rtl_for_decl_init (tree init, tree type)
10033
{
10034
  rtx rtl = NULL_RTX;
10035
 
10036
  /* If a variable is initialized with a string constant without embedded
10037
     zeros, build CONST_STRING.  */
10038
  if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
10039
    {
10040
      tree enttype = TREE_TYPE (type);
10041
      tree domain = TYPE_DOMAIN (type);
10042
      enum machine_mode mode = TYPE_MODE (enttype);
10043
 
10044
      if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
10045
          && domain
10046
          && integer_zerop (TYPE_MIN_VALUE (domain))
10047
          && compare_tree_int (TYPE_MAX_VALUE (domain),
10048
                               TREE_STRING_LENGTH (init) - 1) == 0
10049
          && ((size_t) TREE_STRING_LENGTH (init)
10050
              == strlen (TREE_STRING_POINTER (init)) + 1))
10051
        rtl = gen_rtx_CONST_STRING (VOIDmode,
10052
                                    ggc_strdup (TREE_STRING_POINTER (init)));
10053
    }
10054
  /* Other aggregates, and complex values, could be represented using
10055
     CONCAT: FIXME!  */
10056
  else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
10057
    ;
10058
  /* Vectors only work if their mode is supported by the target.
10059
     FIXME: generic vectors ought to work too.  */
10060
  else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
10061
    ;
10062
  /* If the initializer is something that we know will expand into an
10063
     immediate RTL constant, expand it now.  We must be careful not to
10064
     reference variables which won't be output.  */
10065
  else if (initializer_constant_valid_p (init, type)
10066
           && ! walk_tree (&init, reference_to_unused, NULL, NULL))
10067
    {
10068
      /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
10069
         possible.  */
10070
      if (TREE_CODE (type) == VECTOR_TYPE)
10071
        switch (TREE_CODE (init))
10072
          {
10073
          case VECTOR_CST:
10074
            break;
10075
          case CONSTRUCTOR:
10076
            if (TREE_CONSTANT (init))
10077
              {
10078
                VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
10079
                bool constant_p = true;
10080
                tree value;
10081
                unsigned HOST_WIDE_INT ix;
10082
 
10083
                /* Even when ctor is constant, it might contain non-*_CST
10084
                   elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
10085
                   belong into VECTOR_CST nodes.  */
10086
                FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
10087
                  if (!CONSTANT_CLASS_P (value))
10088
                    {
10089
                      constant_p = false;
10090
                      break;
10091
                    }
10092
 
10093
                if (constant_p)
10094
                  {
10095
                    init = build_vector_from_ctor (type, elts);
10096
                    break;
10097
                  }
10098
              }
10099
            /* FALLTHRU */
10100
 
10101
          default:
10102
            return NULL;
10103
          }
10104
 
10105
      rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
10106
 
10107
      /* If expand_expr returns a MEM, it wasn't immediate.  */
10108
      gcc_assert (!rtl || !MEM_P (rtl));
10109
    }
10110
 
10111
  return rtl;
10112
}
10113
 
10114
/* Generate RTL for the variable DECL to represent its location.  */
10115
 
10116
static rtx
10117
rtl_for_decl_location (tree decl)
10118
{
10119
  rtx rtl;
10120
 
10121
  /* Here we have to decide where we are going to say the parameter "lives"
10122
     (as far as the debugger is concerned).  We only have a couple of
10123
     choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
10124
 
10125
     DECL_RTL normally indicates where the parameter lives during most of the
10126
     activation of the function.  If optimization is enabled however, this
10127
     could be either NULL or else a pseudo-reg.  Both of those cases indicate
10128
     that the parameter doesn't really live anywhere (as far as the code
10129
     generation parts of GCC are concerned) during most of the function's
10130
     activation.  That will happen (for example) if the parameter is never
10131
     referenced within the function.
10132
 
10133
     We could just generate a location descriptor here for all non-NULL
10134
     non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
10135
     a little nicer than that if we also consider DECL_INCOMING_RTL in cases
10136
     where DECL_RTL is NULL or is a pseudo-reg.
10137
 
10138
     Note however that we can only get away with using DECL_INCOMING_RTL as
10139
     a backup substitute for DECL_RTL in certain limited cases.  In cases
10140
     where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
10141
     we can be sure that the parameter was passed using the same type as it is
10142
     declared to have within the function, and that its DECL_INCOMING_RTL
10143
     points us to a place where a value of that type is passed.
10144
 
10145
     In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
10146
     we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
10147
     because in these cases DECL_INCOMING_RTL points us to a value of some
10148
     type which is *different* from the type of the parameter itself.  Thus,
10149
     if we tried to use DECL_INCOMING_RTL to generate a location attribute in
10150
     such cases, the debugger would end up (for example) trying to fetch a
10151
     `float' from a place which actually contains the first part of a
10152
     `double'.  That would lead to really incorrect and confusing
10153
     output at debug-time.
10154
 
10155
     So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
10156
     in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
10157
     are a couple of exceptions however.  On little-endian machines we can
10158
     get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
10159
     not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
10160
     an integral type that is smaller than TREE_TYPE (decl). These cases arise
10161
     when (on a little-endian machine) a non-prototyped function has a
10162
     parameter declared to be of type `short' or `char'.  In such cases,
10163
     TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
10164
     be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
10165
     passed `int' value.  If the debugger then uses that address to fetch
10166
     a `short' or a `char' (on a little-endian machine) the result will be
10167
     the correct data, so we allow for such exceptional cases below.
10168
 
10169
     Note that our goal here is to describe the place where the given formal
10170
     parameter lives during most of the function's activation (i.e. between the
10171
     end of the prologue and the start of the epilogue).  We'll do that as best
10172
     as we can. Note however that if the given formal parameter is modified
10173
     sometime during the execution of the function, then a stack backtrace (at
10174
     debug-time) will show the function as having been called with the *new*
10175
     value rather than the value which was originally passed in.  This happens
10176
     rarely enough that it is not a major problem, but it *is* a problem, and
10177
     I'd like to fix it.
10178
 
10179
     A future version of dwarf2out.c may generate two additional attributes for
10180
     any given DW_TAG_formal_parameter DIE which will describe the "passed
10181
     type" and the "passed location" for the given formal parameter in addition
10182
     to the attributes we now generate to indicate the "declared type" and the
10183
     "active location" for each parameter.  This additional set of attributes
10184
     could be used by debuggers for stack backtraces. Separately, note that
10185
     sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
10186
     This happens (for example) for inlined-instances of inline function formal
10187
     parameters which are never referenced.  This really shouldn't be
10188
     happening.  All PARM_DECL nodes should get valid non-NULL
10189
     DECL_INCOMING_RTL values.  FIXME.  */
10190
 
10191
  /* Use DECL_RTL as the "location" unless we find something better.  */
10192
  rtl = DECL_RTL_IF_SET (decl);
10193
 
10194
  /* When generating abstract instances, ignore everything except
10195
     constants, symbols living in memory, and symbols living in
10196
     fixed registers.  */
10197
  if (! reload_completed)
10198
    {
10199
      if (rtl
10200
          && (CONSTANT_P (rtl)
10201
              || (MEM_P (rtl)
10202
                  && CONSTANT_P (XEXP (rtl, 0)))
10203
              || (REG_P (rtl)
10204
                  && TREE_CODE (decl) == VAR_DECL
10205
                  && TREE_STATIC (decl))))
10206
        {
10207
          rtl = targetm.delegitimize_address (rtl);
10208
          return rtl;
10209
        }
10210
      rtl = NULL_RTX;
10211
    }
10212
  else if (TREE_CODE (decl) == PARM_DECL)
10213
    {
10214
      if (rtl == NULL_RTX || is_pseudo_reg (rtl))
10215
        {
10216
          tree declared_type = TREE_TYPE (decl);
10217
          tree passed_type = DECL_ARG_TYPE (decl);
10218
          enum machine_mode dmode = TYPE_MODE (declared_type);
10219
          enum machine_mode pmode = TYPE_MODE (passed_type);
10220
 
10221
          /* This decl represents a formal parameter which was optimized out.
10222
             Note that DECL_INCOMING_RTL may be NULL in here, but we handle
10223
             all cases where (rtl == NULL_RTX) just below.  */
10224
          if (dmode == pmode)
10225
            rtl = DECL_INCOMING_RTL (decl);
10226
          else if (SCALAR_INT_MODE_P (dmode)
10227
                   && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
10228
                   && DECL_INCOMING_RTL (decl))
10229
            {
10230
              rtx inc = DECL_INCOMING_RTL (decl);
10231
              if (REG_P (inc))
10232
                rtl = inc;
10233
              else if (MEM_P (inc))
10234
                {
10235
                  if (BYTES_BIG_ENDIAN)
10236
                    rtl = adjust_address_nv (inc, dmode,
10237
                                             GET_MODE_SIZE (pmode)
10238
                                             - GET_MODE_SIZE (dmode));
10239
                  else
10240
                    rtl = inc;
10241
                }
10242
            }
10243
        }
10244
 
10245
      /* If the parm was passed in registers, but lives on the stack, then
10246
         make a big endian correction if the mode of the type of the
10247
         parameter is not the same as the mode of the rtl.  */
10248
      /* ??? This is the same series of checks that are made in dbxout.c before
10249
         we reach the big endian correction code there.  It isn't clear if all
10250
         of these checks are necessary here, but keeping them all is the safe
10251
         thing to do.  */
10252
      else if (MEM_P (rtl)
10253
               && XEXP (rtl, 0) != const0_rtx
10254
               && ! CONSTANT_P (XEXP (rtl, 0))
10255
               /* Not passed in memory.  */
10256
               && !MEM_P (DECL_INCOMING_RTL (decl))
10257
               /* Not passed by invisible reference.  */
10258
               && (!REG_P (XEXP (rtl, 0))
10259
                   || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
10260
                   || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
10261
#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
10262
                   || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
10263
#endif
10264
                     )
10265
               /* Big endian correction check.  */
10266
               && BYTES_BIG_ENDIAN
10267
               && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
10268
               && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
10269
                   < UNITS_PER_WORD))
10270
        {
10271
          int offset = (UNITS_PER_WORD
10272
                        - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
10273
 
10274
          rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10275
                             plus_constant (XEXP (rtl, 0), offset));
10276
        }
10277
    }
10278
  else if (TREE_CODE (decl) == VAR_DECL
10279
           && rtl
10280
           && MEM_P (rtl)
10281
           && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
10282
           && BYTES_BIG_ENDIAN)
10283
    {
10284
      int rsize = GET_MODE_SIZE (GET_MODE (rtl));
10285
      int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
10286
 
10287
      /* If a variable is declared "register" yet is smaller than
10288
         a register, then if we store the variable to memory, it
10289
         looks like we're storing a register-sized value, when in
10290
         fact we are not.  We need to adjust the offset of the
10291
         storage location to reflect the actual value's bytes,
10292
         else gdb will not be able to display it.  */
10293
      if (rsize > dsize)
10294
        rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10295
                           plus_constant (XEXP (rtl, 0), rsize-dsize));
10296
    }
10297
 
10298
  /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
10299
     and will have been substituted directly into all expressions that use it.
10300
     C does not have such a concept, but C++ and other languages do.  */
10301
  if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
10302
    rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
10303
 
10304
  if (rtl)
10305
    rtl = targetm.delegitimize_address (rtl);
10306
 
10307
  /* If we don't look past the constant pool, we risk emitting a
10308
     reference to a constant pool entry that isn't referenced from
10309
     code, and thus is not emitted.  */
10310
  if (rtl)
10311
    rtl = avoid_constant_pool_reference (rtl);
10312
 
10313
  return rtl;
10314
}
10315
 
10316
/* We need to figure out what section we should use as the base for the
10317
   address ranges where a given location is valid.
10318
   1. If this particular DECL has a section associated with it, use that.
10319
   2. If this function has a section associated with it, use that.
10320
   3. Otherwise, use the text section.
10321
   XXX: If you split a variable across multiple sections, we won't notice.  */
10322
 
10323
static const char *
10324
secname_for_decl (tree decl)
10325
{
10326
  const char *secname;
10327
 
10328
  if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
10329
    {
10330
      tree sectree = DECL_SECTION_NAME (decl);
10331
      secname = TREE_STRING_POINTER (sectree);
10332
    }
10333
  else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
10334
    {
10335
      tree sectree = DECL_SECTION_NAME (current_function_decl);
10336
      secname = TREE_STRING_POINTER (sectree);
10337
    }
10338
  else if (cfun && in_cold_section_p)
10339
    secname = cfun->cold_section_label;
10340
  else
10341
    secname = text_section_label;
10342
 
10343
  return secname;
10344
}
10345
 
10346
/* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
10347
   data attribute for a variable or a parameter.  We generate the
10348
   DW_AT_const_value attribute only in those cases where the given variable
10349
   or parameter does not have a true "location" either in memory or in a
10350
   register.  This can happen (for example) when a constant is passed as an
10351
   actual argument in a call to an inline function.  (It's possible that
10352
   these things can crop up in other ways also.)  Note that one type of
10353
   constant value which can be passed into an inlined function is a constant
10354
   pointer.  This can happen for example if an actual argument in an inlined
10355
   function call evaluates to a compile-time constant address.  */
10356
 
10357
static void
10358
add_location_or_const_value_attribute (dw_die_ref die, tree decl,
10359
                                       enum dwarf_attribute attr)
10360
{
10361
  rtx rtl;
10362
  dw_loc_descr_ref descr;
10363
  var_loc_list *loc_list;
10364
  struct var_loc_node *node;
10365
  if (TREE_CODE (decl) == ERROR_MARK)
10366
    return;
10367
 
10368
  gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
10369
              || TREE_CODE (decl) == RESULT_DECL);
10370
 
10371
  /* See if we possibly have multiple locations for this variable.  */
10372
  loc_list = lookup_decl_loc (decl);
10373
 
10374
  /* If it truly has multiple locations, the first and last node will
10375
     differ.  */
10376
  if (loc_list && loc_list->first != loc_list->last)
10377
    {
10378
      const char *endname, *secname;
10379
      dw_loc_list_ref list;
10380
      rtx varloc;
10381
 
10382
      /* Now that we know what section we are using for a base,
10383
         actually construct the list of locations.
10384
         The first location information is what is passed to the
10385
         function that creates the location list, and the remaining
10386
         locations just get added on to that list.
10387
         Note that we only know the start address for a location
10388
         (IE location changes), so to build the range, we use
10389
         the range [current location start, next location start].
10390
         This means we have to special case the last node, and generate
10391
         a range of [last location start, end of function label].  */
10392
 
10393
      node = loc_list->first;
10394
      varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10395
      secname = secname_for_decl (decl);
10396
 
10397
      list = new_loc_list (loc_descriptor (varloc),
10398
                           node->label, node->next->label, secname, 1);
10399
      node = node->next;
10400
 
10401
      for (; node->next; node = node->next)
10402
        if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10403
          {
10404
            /* The variable has a location between NODE->LABEL and
10405
               NODE->NEXT->LABEL.  */
10406
            varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10407
            add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10408
                                       node->label, node->next->label, secname);
10409
          }
10410
 
10411
      /* If the variable has a location at the last label
10412
         it keeps its location until the end of function.  */
10413
      if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10414
        {
10415
          char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
10416
 
10417
          varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10418
          if (!current_function_decl)
10419
            endname = text_end_label;
10420
          else
10421
            {
10422
              ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
10423
                                           current_function_funcdef_no);
10424
              endname = ggc_strdup (label_id);
10425
            }
10426
          add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10427
                                     node->label, endname, secname);
10428
        }
10429
 
10430
      /* Finally, add the location list to the DIE, and we are done.  */
10431
      add_AT_loc_list (die, attr, list);
10432
      return;
10433
    }
10434
 
10435
  /* Try to get some constant RTL for this decl, and use that as the value of
10436
     the location.  */
10437
 
10438
  rtl = rtl_for_decl_location (decl);
10439
  if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
10440
    {
10441
      add_const_value_attribute (die, rtl);
10442
      return;
10443
    }
10444
 
10445
  /* If we have tried to generate the location otherwise, and it
10446
     didn't work out (we wouldn't be here if we did), and we have a one entry
10447
     location list, try generating a location from that.  */
10448
  if (loc_list && loc_list->first)
10449
    {
10450
      node = loc_list->first;
10451
      descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note));
10452
      if (descr)
10453
        {
10454
          add_AT_location_description (die, attr, descr);
10455
          return;
10456
        }
10457
    }
10458
 
10459
  /* We couldn't get any rtl, so try directly generating the location
10460
     description from the tree.  */
10461
  descr = loc_descriptor_from_tree (decl);
10462
  if (descr)
10463
    {
10464
      add_AT_location_description (die, attr, descr);
10465
      return;
10466
    }
10467
  /* None of that worked, so it must not really have a location;
10468
     try adding a constant value attribute from the DECL_INITIAL.  */
10469
  tree_add_const_value_attribute (die, decl);
10470
}
10471
 
10472
/* If we don't have a copy of this variable in memory for some reason (such
10473
   as a C++ member constant that doesn't have an out-of-line definition),
10474
   we should tell the debugger about the constant value.  */
10475
 
10476
static void
10477
tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
10478
{
10479
  tree init = DECL_INITIAL (decl);
10480
  tree type = TREE_TYPE (decl);
10481
  rtx rtl;
10482
 
10483
  if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
10484
    /* OK */;
10485
  else
10486
    return;
10487
 
10488
  rtl = rtl_for_decl_init (init, type);
10489
  if (rtl)
10490
    add_const_value_attribute (var_die, rtl);
10491
}
10492
 
10493
/* Convert the CFI instructions for the current function into a
10494
   location list.  This is used for DW_AT_frame_base when we targeting
10495
   a dwarf2 consumer that does not support the dwarf3
10496
   DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
10497
   expressions.  */
10498
 
10499
static dw_loc_list_ref
10500
convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
10501
{
10502
  dw_fde_ref fde;
10503
  dw_loc_list_ref list, *list_tail;
10504
  dw_cfi_ref cfi;
10505
  dw_cfa_location last_cfa, next_cfa;
10506
  const char *start_label, *last_label, *section;
10507
 
10508
  fde = &fde_table[fde_table_in_use - 1];
10509
 
10510
  section = secname_for_decl (current_function_decl);
10511
  list_tail = &list;
10512
  list = NULL;
10513
 
10514
  next_cfa.reg = INVALID_REGNUM;
10515
  next_cfa.offset = 0;
10516
  next_cfa.indirect = 0;
10517
  next_cfa.base_offset = 0;
10518
 
10519
  start_label = fde->dw_fde_begin;
10520
 
10521
  /* ??? Bald assumption that the CIE opcode list does not contain
10522
     advance opcodes.  */
10523
  for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
10524
    lookup_cfa_1 (cfi, &next_cfa);
10525
 
10526
  last_cfa = next_cfa;
10527
  last_label = start_label;
10528
 
10529
  for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
10530
    switch (cfi->dw_cfi_opc)
10531
      {
10532
      case DW_CFA_set_loc:
10533
      case DW_CFA_advance_loc1:
10534
      case DW_CFA_advance_loc2:
10535
      case DW_CFA_advance_loc4:
10536
        if (!cfa_equal_p (&last_cfa, &next_cfa))
10537
          {
10538
            *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
10539
                                       start_label, last_label, section,
10540
                                       list == NULL);
10541
 
10542
            list_tail = &(*list_tail)->dw_loc_next;
10543
            last_cfa = next_cfa;
10544
            start_label = last_label;
10545
          }
10546
        last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
10547
        break;
10548
 
10549
      case DW_CFA_advance_loc:
10550
        /* The encoding is complex enough that we should never emit this.  */
10551
      case DW_CFA_remember_state:
10552
      case DW_CFA_restore_state:
10553
        /* We don't handle these two in this function.  It would be possible
10554
           if it were to be required.  */
10555
        gcc_unreachable ();
10556
 
10557
      default:
10558
        lookup_cfa_1 (cfi, &next_cfa);
10559
        break;
10560
      }
10561
 
10562
  if (!cfa_equal_p (&last_cfa, &next_cfa))
10563
    {
10564
      *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
10565
                                 start_label, last_label, section,
10566
                                 list == NULL);
10567
      list_tail = &(*list_tail)->dw_loc_next;
10568
      start_label = last_label;
10569
    }
10570
  *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
10571
                             start_label, fde->dw_fde_end, section,
10572
                             list == NULL);
10573
 
10574
  return list;
10575
}
10576
 
10577
/* Compute a displacement from the "steady-state frame pointer" to the
10578
   frame base (often the same as the CFA), and store it in
10579
   frame_pointer_fb_offset.  OFFSET is added to the displacement
10580
   before the latter is negated.  */
10581
 
10582
static void
10583
compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
10584
{
10585
  rtx reg, elim;
10586
 
10587
#ifdef FRAME_POINTER_CFA_OFFSET
10588
  reg = frame_pointer_rtx;
10589
  offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
10590
#else
10591
  reg = arg_pointer_rtx;
10592
  offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
10593
#endif
10594
 
10595
  elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10596
  if (GET_CODE (elim) == PLUS)
10597
    {
10598
      offset += INTVAL (XEXP (elim, 1));
10599
      elim = XEXP (elim, 0);
10600
    }
10601
  gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
10602
                       : stack_pointer_rtx));
10603
 
10604
  frame_pointer_fb_offset = -offset;
10605
}
10606
 
10607
/* Generate a DW_AT_name attribute given some string value to be included as
10608
   the value of the attribute.  */
10609
 
10610
static void
10611
add_name_attribute (dw_die_ref die, const char *name_string)
10612
{
10613
  if (name_string != NULL && *name_string != 0)
10614
    {
10615
      if (demangle_name_func)
10616
        name_string = (*demangle_name_func) (name_string);
10617
 
10618
      add_AT_string (die, DW_AT_name, name_string);
10619
    }
10620
}
10621
 
10622
/* Generate a DW_AT_comp_dir attribute for DIE.  */
10623
 
10624
static void
10625
add_comp_dir_attribute (dw_die_ref die)
10626
{
10627
  const char *wd = get_src_pwd ();
10628
  if (wd != NULL)
10629
    add_AT_string (die, DW_AT_comp_dir, wd);
10630
}
10631
 
10632
/* Given a tree node describing an array bound (either lower or upper) output
10633
   a representation for that bound.  */
10634
 
10635
static void
10636
add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
10637
{
10638
  switch (TREE_CODE (bound))
10639
    {
10640
    case ERROR_MARK:
10641
      return;
10642
 
10643
    /* All fixed-bounds are represented by INTEGER_CST nodes.  */
10644
    case INTEGER_CST:
10645
      if (! host_integerp (bound, 0)
10646
          || (bound_attr == DW_AT_lower_bound
10647
              && (((is_c_family () || is_java ()) &&  integer_zerop (bound))
10648
                  || (is_fortran () && integer_onep (bound)))))
10649
        /* Use the default.  */
10650
        ;
10651
      else
10652
        add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
10653
      break;
10654
 
10655
    case CONVERT_EXPR:
10656
    case NOP_EXPR:
10657
    case NON_LVALUE_EXPR:
10658
    case VIEW_CONVERT_EXPR:
10659
      add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
10660
      break;
10661
 
10662
    case SAVE_EXPR:
10663
      break;
10664
 
10665
    case VAR_DECL:
10666
    case PARM_DECL:
10667
    case RESULT_DECL:
10668
      {
10669
        dw_die_ref decl_die = lookup_decl_die (bound);
10670
 
10671
        /* ??? Can this happen, or should the variable have been bound
10672
           first?  Probably it can, since I imagine that we try to create
10673
           the types of parameters in the order in which they exist in
10674
           the list, and won't have created a forward reference to a
10675
           later parameter.  */
10676
        if (decl_die != NULL)
10677
          add_AT_die_ref (subrange_die, bound_attr, decl_die);
10678
        break;
10679
      }
10680
 
10681
    default:
10682
      {
10683
        /* Otherwise try to create a stack operation procedure to
10684
           evaluate the value of the array bound.  */
10685
 
10686
        dw_die_ref ctx, decl_die;
10687
        dw_loc_descr_ref loc;
10688
 
10689
        loc = loc_descriptor_from_tree (bound);
10690
        if (loc == NULL)
10691
          break;
10692
 
10693
        if (current_function_decl == 0)
10694
          ctx = comp_unit_die;
10695
        else
10696
          ctx = lookup_decl_die (current_function_decl);
10697
 
10698
        decl_die = new_die (DW_TAG_variable, ctx, bound);
10699
        add_AT_flag (decl_die, DW_AT_artificial, 1);
10700
        add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10701
        add_AT_loc (decl_die, DW_AT_location, loc);
10702
 
10703
        add_AT_die_ref (subrange_die, bound_attr, decl_die);
10704
        break;
10705
      }
10706
    }
10707
}
10708
 
10709
/* Note that the block of subscript information for an array type also
10710
   includes information about the element type of type given array type.  */
10711
 
10712
static void
10713
add_subscript_info (dw_die_ref type_die, tree type)
10714
{
10715
#ifndef MIPS_DEBUGGING_INFO
10716
  unsigned dimension_number;
10717
#endif
10718
  tree lower, upper;
10719
  dw_die_ref subrange_die;
10720
 
10721
  /* The GNU compilers represent multidimensional array types as sequences of
10722
     one dimensional array types whose element types are themselves array
10723
     types.  Here we squish that down, so that each multidimensional array
10724
     type gets only one array_type DIE in the Dwarf debugging info. The draft
10725
     Dwarf specification say that we are allowed to do this kind of
10726
     compression in C (because there is no difference between an array or
10727
     arrays and a multidimensional array in C) but for other source languages
10728
     (e.g. Ada) we probably shouldn't do this.  */
10729
 
10730
  /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10731
     const enum type.  E.g. const enum machine_mode insn_operand_mode[2][10].
10732
     We work around this by disabling this feature.  See also
10733
     gen_array_type_die.  */
10734
#ifndef MIPS_DEBUGGING_INFO
10735
  for (dimension_number = 0;
10736
       TREE_CODE (type) == ARRAY_TYPE;
10737
       type = TREE_TYPE (type), dimension_number++)
10738
#endif
10739
    {
10740
      tree domain = TYPE_DOMAIN (type);
10741
 
10742
      /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
10743
         and (in GNU C only) variable bounds.  Handle all three forms
10744
         here.  */
10745
      subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
10746
      if (domain)
10747
        {
10748
          /* We have an array type with specified bounds.  */
10749
          lower = TYPE_MIN_VALUE (domain);
10750
          upper = TYPE_MAX_VALUE (domain);
10751
 
10752
          /* Define the index type.  */
10753
          if (TREE_TYPE (domain))
10754
            {
10755
              /* ??? This is probably an Ada unnamed subrange type.  Ignore the
10756
                 TREE_TYPE field.  We can't emit debug info for this
10757
                 because it is an unnamed integral type.  */
10758
              if (TREE_CODE (domain) == INTEGER_TYPE
10759
                  && TYPE_NAME (domain) == NULL_TREE
10760
                  && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
10761
                  && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
10762
                ;
10763
              else
10764
                add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
10765
                                    type_die);
10766
            }
10767
 
10768
          /* ??? If upper is NULL, the array has unspecified length,
10769
             but it does have a lower bound.  This happens with Fortran
10770
               dimension arr(N:*)
10771
             Since the debugger is definitely going to need to know N
10772
             to produce useful results, go ahead and output the lower
10773
             bound solo, and hope the debugger can cope.  */
10774
 
10775
          add_bound_info (subrange_die, DW_AT_lower_bound, lower);
10776
          if (upper)
10777
            add_bound_info (subrange_die, DW_AT_upper_bound, upper);
10778
        }
10779
 
10780
      /* Otherwise we have an array type with an unspecified length.  The
10781
         DWARF-2 spec does not say how to handle this; let's just leave out the
10782
         bounds.  */
10783
    }
10784
}
10785
 
10786
static void
10787
add_byte_size_attribute (dw_die_ref die, tree tree_node)
10788
{
10789
  unsigned size;
10790
 
10791
  switch (TREE_CODE (tree_node))
10792
    {
10793
    case ERROR_MARK:
10794
      size = 0;
10795
      break;
10796
    case ENUMERAL_TYPE:
10797
    case RECORD_TYPE:
10798
    case UNION_TYPE:
10799
    case QUAL_UNION_TYPE:
10800
      size = int_size_in_bytes (tree_node);
10801
      break;
10802
    case FIELD_DECL:
10803
      /* For a data member of a struct or union, the DW_AT_byte_size is
10804
         generally given as the number of bytes normally allocated for an
10805
         object of the *declared* type of the member itself.  This is true
10806
         even for bit-fields.  */
10807
      size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
10808
      break;
10809
    default:
10810
      gcc_unreachable ();
10811
    }
10812
 
10813
  /* Note that `size' might be -1 when we get to this point.  If it is, that
10814
     indicates that the byte size of the entity in question is variable.  We
10815
     have no good way of expressing this fact in Dwarf at the present time,
10816
     so just let the -1 pass on through.  */
10817
  add_AT_unsigned (die, DW_AT_byte_size, size);
10818
}
10819
 
10820
/* For a FIELD_DECL node which represents a bit-field, output an attribute
10821
   which specifies the distance in bits from the highest order bit of the
10822
   "containing object" for the bit-field to the highest order bit of the
10823
   bit-field itself.
10824
 
10825
   For any given bit-field, the "containing object" is a hypothetical object
10826
   (of some integral or enum type) within which the given bit-field lives.  The
10827
   type of this hypothetical "containing object" is always the same as the
10828
   declared type of the individual bit-field itself.  The determination of the
10829
   exact location of the "containing object" for a bit-field is rather
10830
   complicated.  It's handled by the `field_byte_offset' function (above).
10831
 
10832
   Note that it is the size (in bytes) of the hypothetical "containing object"
10833
   which will be given in the DW_AT_byte_size attribute for this bit-field.
10834
   (See `byte_size_attribute' above).  */
10835
 
10836
static inline void
10837
add_bit_offset_attribute (dw_die_ref die, tree decl)
10838
{
10839
  HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
10840
  tree type = DECL_BIT_FIELD_TYPE (decl);
10841
  HOST_WIDE_INT bitpos_int;
10842
  HOST_WIDE_INT highest_order_object_bit_offset;
10843
  HOST_WIDE_INT highest_order_field_bit_offset;
10844
  HOST_WIDE_INT unsigned bit_offset;
10845
 
10846
  /* Must be a field and a bit field.  */
10847
  gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
10848
 
10849
  /* We can't yet handle bit-fields whose offsets are variable, so if we
10850
     encounter such things, just return without generating any attribute
10851
     whatsoever.  Likewise for variable or too large size.  */
10852
  if (! host_integerp (bit_position (decl), 0)
10853
      || ! host_integerp (DECL_SIZE (decl), 1))
10854
    return;
10855
 
10856
  bitpos_int = int_bit_position (decl);
10857
 
10858
  /* Note that the bit offset is always the distance (in bits) from the
10859
     highest-order bit of the "containing object" to the highest-order bit of
10860
     the bit-field itself.  Since the "high-order end" of any object or field
10861
     is different on big-endian and little-endian machines, the computation
10862
     below must take account of these differences.  */
10863
  highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
10864
  highest_order_field_bit_offset = bitpos_int;
10865
 
10866
  if (! BYTES_BIG_ENDIAN)
10867
    {
10868
      highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
10869
      highest_order_object_bit_offset += simple_type_size_in_bits (type);
10870
    }
10871
 
10872
  bit_offset
10873
    = (! BYTES_BIG_ENDIAN
10874
       ? highest_order_object_bit_offset - highest_order_field_bit_offset
10875
       : highest_order_field_bit_offset - highest_order_object_bit_offset);
10876
 
10877
  add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
10878
}
10879
 
10880
/* For a FIELD_DECL node which represents a bit field, output an attribute
10881
   which specifies the length in bits of the given field.  */
10882
 
10883
static inline void
10884
add_bit_size_attribute (dw_die_ref die, tree decl)
10885
{
10886
  /* Must be a field and a bit field.  */
10887
  gcc_assert (TREE_CODE (decl) == FIELD_DECL
10888
              && DECL_BIT_FIELD_TYPE (decl));
10889
 
10890
  if (host_integerp (DECL_SIZE (decl), 1))
10891
    add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
10892
}
10893
 
10894
/* If the compiled language is ANSI C, then add a 'prototyped'
10895
   attribute, if arg types are given for the parameters of a function.  */
10896
 
10897
static inline void
10898
add_prototyped_attribute (dw_die_ref die, tree func_type)
10899
{
10900
  if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
10901
      && TYPE_ARG_TYPES (func_type) != NULL)
10902
    add_AT_flag (die, DW_AT_prototyped, 1);
10903
}
10904
 
10905
/* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
10906
   by looking in either the type declaration or object declaration
10907
   equate table.  */
10908
 
10909
static inline void
10910
add_abstract_origin_attribute (dw_die_ref die, tree origin)
10911
{
10912
  dw_die_ref origin_die = NULL;
10913
 
10914
  if (TREE_CODE (origin) != FUNCTION_DECL)
10915
    {
10916
      /* We may have gotten separated from the block for the inlined
10917
         function, if we're in an exception handler or some such; make
10918
         sure that the abstract function has been written out.
10919
 
10920
         Doing this for nested functions is wrong, however; functions are
10921
         distinct units, and our context might not even be inline.  */
10922
      tree fn = origin;
10923
 
10924
      if (TYPE_P (fn))
10925
        fn = TYPE_STUB_DECL (fn);
10926
 
10927
      fn = decl_function_context (fn);
10928
      if (fn)
10929
        dwarf2out_abstract_function (fn);
10930
    }
10931
 
10932
  if (DECL_P (origin))
10933
    origin_die = lookup_decl_die (origin);
10934
  else if (TYPE_P (origin))
10935
    origin_die = lookup_type_die (origin);
10936
 
10937
  /* XXX: Functions that are never lowered don't always have correct block
10938
     trees (in the case of java, they simply have no block tree, in some other
10939
     languages).  For these functions, there is nothing we can really do to
10940
     output correct debug info for inlined functions in all cases.  Rather
10941
     than die, we'll just produce deficient debug info now, in that we will
10942
     have variables without a proper abstract origin.  In the future, when all
10943
     functions are lowered, we should re-add a gcc_assert (origin_die)
10944
     here.  */
10945
 
10946
  if (origin_die)
10947
      add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
10948
}
10949
 
10950
/* We do not currently support the pure_virtual attribute.  */
10951
 
10952
static inline void
10953
add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
10954
{
10955
  if (DECL_VINDEX (func_decl))
10956
    {
10957
      add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
10958
 
10959
      if (host_integerp (DECL_VINDEX (func_decl), 0))
10960
        add_AT_loc (die, DW_AT_vtable_elem_location,
10961
                    new_loc_descr (DW_OP_constu,
10962
                                   tree_low_cst (DECL_VINDEX (func_decl), 0),
10963
                                   0));
10964
 
10965
      /* GNU extension: Record what type this method came from originally.  */
10966
      if (debug_info_level > DINFO_LEVEL_TERSE)
10967
        add_AT_die_ref (die, DW_AT_containing_type,
10968
                        lookup_type_die (DECL_CONTEXT (func_decl)));
10969
    }
10970
}
10971
 
10972
/* Add source coordinate attributes for the given decl.  */
10973
 
10974
static void
10975
add_src_coords_attributes (dw_die_ref die, tree decl)
10976
{
10977
  expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
10978
 
10979
  add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
10980
  add_AT_unsigned (die, DW_AT_decl_line, s.line);
10981
}
10982
 
10983
/* Add a DW_AT_name attribute and source coordinate attribute for the
10984
   given decl, but only if it actually has a name.  */
10985
 
10986
static void
10987
add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
10988
{
10989
  tree decl_name;
10990
 
10991
  decl_name = DECL_NAME (decl);
10992
  if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
10993
    {
10994
      add_name_attribute (die, dwarf2_name (decl, 0));
10995
      if (! DECL_ARTIFICIAL (decl))
10996
        add_src_coords_attributes (die, decl);
10997
 
10998
      if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
10999
          && TREE_PUBLIC (decl)
11000
          && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
11001
          && !DECL_ABSTRACT (decl)
11002
          && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
11003
        add_AT_string (die, DW_AT_MIPS_linkage_name,
11004
                       IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
11005
    }
11006
 
11007
#ifdef VMS_DEBUGGING_INFO
11008
  /* Get the function's name, as described by its RTL.  This may be different
11009
     from the DECL_NAME name used in the source file.  */
11010
  if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
11011
    {
11012
      add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
11013
                   XEXP (DECL_RTL (decl), 0));
11014
      VEC_safe_push (tree, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
11015
    }
11016
#endif
11017
}
11018
 
11019
/* Push a new declaration scope.  */
11020
 
11021
static void
11022
push_decl_scope (tree scope)
11023
{
11024
  VEC_safe_push (tree, gc, decl_scope_table, scope);
11025
}
11026
 
11027
/* Pop a declaration scope.  */
11028
 
11029
static inline void
11030
pop_decl_scope (void)
11031
{
11032
  VEC_pop (tree, decl_scope_table);
11033
}
11034
 
11035
/* Return the DIE for the scope that immediately contains this type.
11036
   Non-named types get global scope.  Named types nested in other
11037
   types get their containing scope if it's open, or global scope
11038
   otherwise.  All other types (i.e. function-local named types) get
11039
   the current active scope.  */
11040
 
11041
static dw_die_ref
11042
scope_die_for (tree t, dw_die_ref context_die)
11043
{
11044
  dw_die_ref scope_die = NULL;
11045
  tree containing_scope;
11046
  int i;
11047
 
11048
  /* Non-types always go in the current scope.  */
11049
  gcc_assert (TYPE_P (t));
11050
 
11051
  containing_scope = TYPE_CONTEXT (t);
11052
 
11053
  /* Use the containing namespace if it was passed in (for a declaration).  */
11054
  if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
11055
    {
11056
      if (context_die == lookup_decl_die (containing_scope))
11057
        /* OK */;
11058
      else
11059
        containing_scope = NULL_TREE;
11060
    }
11061
 
11062
  /* Ignore function type "scopes" from the C frontend.  They mean that
11063
     a tagged type is local to a parmlist of a function declarator, but
11064
     that isn't useful to DWARF.  */
11065
  if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
11066
    containing_scope = NULL_TREE;
11067
 
11068
  if (containing_scope == NULL_TREE)
11069
    scope_die = comp_unit_die;
11070
  else if (TYPE_P (containing_scope))
11071
    {
11072
      /* For types, we can just look up the appropriate DIE.  But
11073
         first we check to see if we're in the middle of emitting it
11074
         so we know where the new DIE should go.  */
11075
      for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
11076
        if (VEC_index (tree, decl_scope_table, i) == containing_scope)
11077
          break;
11078
 
11079
      if (i < 0)
11080
        {
11081
          gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
11082
                      || TREE_ASM_WRITTEN (containing_scope));
11083
 
11084
          /* If none of the current dies are suitable, we get file scope.  */
11085
          scope_die = comp_unit_die;
11086
        }
11087
      else
11088
        scope_die = lookup_type_die (containing_scope);
11089
    }
11090
  else
11091
    scope_die = context_die;
11092
 
11093
  return scope_die;
11094
}
11095
 
11096
/* Returns nonzero if CONTEXT_DIE is internal to a function.  */
11097
 
11098
static inline int
11099
local_scope_p (dw_die_ref context_die)
11100
{
11101
  for (; context_die; context_die = context_die->die_parent)
11102
    if (context_die->die_tag == DW_TAG_inlined_subroutine
11103
        || context_die->die_tag == DW_TAG_subprogram)
11104
      return 1;
11105
 
11106
  return 0;
11107
}
11108
 
11109
/* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
11110
   whether or not to treat a DIE in this context as a declaration.  */
11111
 
11112
static inline int
11113
class_or_namespace_scope_p (dw_die_ref context_die)
11114
{
11115
  return (context_die
11116
          && (context_die->die_tag == DW_TAG_structure_type
11117
              || context_die->die_tag == DW_TAG_union_type
11118
              || context_die->die_tag == DW_TAG_namespace));
11119
}
11120
 
11121
/* Many forms of DIEs require a "type description" attribute.  This
11122
   routine locates the proper "type descriptor" die for the type given
11123
   by 'type', and adds a DW_AT_type attribute below the given die.  */
11124
 
11125
static void
11126
add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
11127
                    int decl_volatile, dw_die_ref context_die)
11128
{
11129
  enum tree_code code  = TREE_CODE (type);
11130
  dw_die_ref type_die  = NULL;
11131
 
11132
  /* ??? If this type is an unnamed subrange type of an integral or
11133
     floating-point type, use the inner type.  This is because we have no
11134
     support for unnamed types in base_type_die.  This can happen if this is
11135
     an Ada subrange type.  Correct solution is emit a subrange type die.  */
11136
  if ((code == INTEGER_TYPE || code == REAL_TYPE)
11137
      && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
11138
    type = TREE_TYPE (type), code = TREE_CODE (type);
11139
 
11140
  if (code == ERROR_MARK
11141
      /* Handle a special case.  For functions whose return type is void, we
11142
         generate *no* type attribute.  (Note that no object may have type
11143
         `void', so this only applies to function return types).  */
11144
      || code == VOID_TYPE)
11145
    return;
11146
 
11147
  type_die = modified_type_die (type,
11148
                                decl_const || TYPE_READONLY (type),
11149
                                decl_volatile || TYPE_VOLATILE (type),
11150
                                context_die);
11151
 
11152
  if (type_die != NULL)
11153
    add_AT_die_ref (object_die, DW_AT_type, type_die);
11154
}
11155
 
11156
/* Given an object die, add the calling convention attribute for the
11157
   function call type.  */
11158
static void
11159
add_calling_convention_attribute (dw_die_ref subr_die, tree type)
11160
{
11161
  enum dwarf_calling_convention value = DW_CC_normal;
11162
 
11163
  value = targetm.dwarf_calling_convention (type);
11164
 
11165
  /* Only add the attribute if the backend requests it, and
11166
     is not DW_CC_normal.  */
11167
  if (value && (value != DW_CC_normal))
11168
    add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
11169
}
11170
 
11171
/* Given a tree pointer to a struct, class, union, or enum type node, return
11172
   a pointer to the (string) tag name for the given type, or zero if the type
11173
   was declared without a tag.  */
11174
 
11175
static const char *
11176
type_tag (tree type)
11177
{
11178
  const char *name = 0;
11179
 
11180
  if (TYPE_NAME (type) != 0)
11181
    {
11182
      tree t = 0;
11183
 
11184
      /* Find the IDENTIFIER_NODE for the type name.  */
11185
      if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
11186
        t = TYPE_NAME (type);
11187
 
11188
      /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
11189
         a TYPE_DECL node, regardless of whether or not a `typedef' was
11190
         involved.  */
11191
      else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11192
               && ! DECL_IGNORED_P (TYPE_NAME (type)))
11193
        t = DECL_NAME (TYPE_NAME (type));
11194
 
11195
      /* Now get the name as a string, or invent one.  */
11196
      if (t != 0)
11197
        name = IDENTIFIER_POINTER (t);
11198
    }
11199
 
11200
  return (name == 0 || *name == '\0') ? 0 : name;
11201
}
11202
 
11203
/* Return the type associated with a data member, make a special check
11204
   for bit field types.  */
11205
 
11206
static inline tree
11207
member_declared_type (tree member)
11208
{
11209
  return (DECL_BIT_FIELD_TYPE (member)
11210
          ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
11211
}
11212
 
11213
/* Get the decl's label, as described by its RTL. This may be different
11214
   from the DECL_NAME name used in the source file.  */
11215
 
11216
#if 0
11217
static const char *
11218
decl_start_label (tree decl)
11219
{
11220
  rtx x;
11221
  const char *fnname;
11222
 
11223
  x = DECL_RTL (decl);
11224
  gcc_assert (MEM_P (x));
11225
 
11226
  x = XEXP (x, 0);
11227
  gcc_assert (GET_CODE (x) == SYMBOL_REF);
11228
 
11229
  fnname = XSTR (x, 0);
11230
  return fnname;
11231
}
11232
#endif
11233
 
11234
/* These routines generate the internal representation of the DIE's for
11235
   the compilation unit.  Debugging information is collected by walking
11236
   the declaration trees passed in from dwarf2out_decl().  */
11237
 
11238
static void
11239
gen_array_type_die (tree type, dw_die_ref context_die)
11240
{
11241
  dw_die_ref scope_die = scope_die_for (type, context_die);
11242
  dw_die_ref array_die;
11243
  tree element_type;
11244
 
11245
  /* ??? The SGI dwarf reader fails for array of array of enum types unless
11246
     the inner array type comes before the outer array type.  Thus we must
11247
     call gen_type_die before we call new_die.  See below also.  */
11248
#ifdef MIPS_DEBUGGING_INFO
11249
  gen_type_die (TREE_TYPE (type), context_die);
11250
#endif
11251
 
11252
  array_die = new_die (DW_TAG_array_type, scope_die, type);
11253
  add_name_attribute (array_die, type_tag (type));
11254
  equate_type_number_to_die (type, array_die);
11255
 
11256
  if (TREE_CODE (type) == VECTOR_TYPE)
11257
    {
11258
      /* The frontend feeds us a representation for the vector as a struct
11259
         containing an array.  Pull out the array type.  */
11260
      type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
11261
      add_AT_flag (array_die, DW_AT_GNU_vector, 1);
11262
    }
11263
 
11264
#if 0
11265
  /* We default the array ordering.  SDB will probably do
11266
     the right things even if DW_AT_ordering is not present.  It's not even
11267
     an issue until we start to get into multidimensional arrays anyway.  If
11268
     SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
11269
     then we'll have to put the DW_AT_ordering attribute back in.  (But if
11270
     and when we find out that we need to put these in, we will only do so
11271
     for multidimensional arrays.  */
11272
  add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
11273
#endif
11274
 
11275
#ifdef MIPS_DEBUGGING_INFO
11276
  /* The SGI compilers handle arrays of unknown bound by setting
11277
     AT_declaration and not emitting any subrange DIEs.  */
11278
  if (! TYPE_DOMAIN (type))
11279
    add_AT_flag (array_die, DW_AT_declaration, 1);
11280
  else
11281
#endif
11282
    add_subscript_info (array_die, type);
11283
 
11284
  /* Add representation of the type of the elements of this array type.  */
11285
  element_type = TREE_TYPE (type);
11286
 
11287
  /* ??? The SGI dwarf reader fails for multidimensional arrays with a
11288
     const enum type.  E.g. const enum machine_mode insn_operand_mode[2][10].
11289
     We work around this by disabling this feature.  See also
11290
     add_subscript_info.  */
11291
#ifndef MIPS_DEBUGGING_INFO
11292
  while (TREE_CODE (element_type) == ARRAY_TYPE)
11293
    element_type = TREE_TYPE (element_type);
11294
 
11295
  gen_type_die (element_type, context_die);
11296
#endif
11297
 
11298
  add_type_attribute (array_die, element_type, 0, 0, context_die);
11299
}
11300
 
11301
#if 0
11302
static void
11303
gen_entry_point_die (tree decl, dw_die_ref context_die)
11304
{
11305
  tree origin = decl_ultimate_origin (decl);
11306
  dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
11307
 
11308
  if (origin != NULL)
11309
    add_abstract_origin_attribute (decl_die, origin);
11310
  else
11311
    {
11312
      add_name_and_src_coords_attributes (decl_die, decl);
11313
      add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
11314
                          0, 0, context_die);
11315
    }
11316
 
11317
  if (DECL_ABSTRACT (decl))
11318
    equate_decl_number_to_die (decl, decl_die);
11319
  else
11320
    add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
11321
}
11322
#endif
11323
 
11324
/* Walk through the list of incomplete types again, trying once more to
11325
   emit full debugging info for them.  */
11326
 
11327
static void
11328
retry_incomplete_types (void)
11329
{
11330
  int i;
11331
 
11332
  for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
11333
    gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
11334
}
11335
 
11336
/* Generate a DIE to represent an inlined instance of an enumeration type.  */
11337
 
11338
static void
11339
gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
11340
{
11341
  dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
11342
 
11343
  /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11344
     be incomplete and such types are not marked.  */
11345
  add_abstract_origin_attribute (type_die, type);
11346
}
11347
 
11348
/* Generate a DIE to represent an inlined instance of a structure type.  */
11349
 
11350
static void
11351
gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
11352
{
11353
  dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
11354
 
11355
  /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11356
     be incomplete and such types are not marked.  */
11357
  add_abstract_origin_attribute (type_die, type);
11358
}
11359
 
11360
/* Generate a DIE to represent an inlined instance of a union type.  */
11361
 
11362
static void
11363
gen_inlined_union_type_die (tree type, dw_die_ref context_die)
11364
{
11365
  dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
11366
 
11367
  /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11368
     be incomplete and such types are not marked.  */
11369
  add_abstract_origin_attribute (type_die, type);
11370
}
11371
 
11372
/* Generate a DIE to represent an enumeration type.  Note that these DIEs
11373
   include all of the information about the enumeration values also. Each
11374
   enumerated type name/value is listed as a child of the enumerated type
11375
   DIE.  */
11376
 
11377
static dw_die_ref
11378
gen_enumeration_type_die (tree type, dw_die_ref context_die)
11379
{
11380
  dw_die_ref type_die = lookup_type_die (type);
11381
 
11382
  if (type_die == NULL)
11383
    {
11384
      type_die = new_die (DW_TAG_enumeration_type,
11385
                          scope_die_for (type, context_die), type);
11386
      equate_type_number_to_die (type, type_die);
11387
      add_name_attribute (type_die, type_tag (type));
11388
    }
11389
  else if (! TYPE_SIZE (type))
11390
    return type_die;
11391
  else
11392
    remove_AT (type_die, DW_AT_declaration);
11393
 
11394
  /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
11395
     given enum type is incomplete, do not generate the DW_AT_byte_size
11396
     attribute or the DW_AT_element_list attribute.  */
11397
  if (TYPE_SIZE (type))
11398
    {
11399
      tree link;
11400
 
11401
      TREE_ASM_WRITTEN (type) = 1;
11402
      add_byte_size_attribute (type_die, type);
11403
      if (TYPE_STUB_DECL (type) != NULL_TREE)
11404
        add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11405
 
11406
      /* If the first reference to this type was as the return type of an
11407
         inline function, then it may not have a parent.  Fix this now.  */
11408
      if (type_die->die_parent == NULL)
11409
        add_child_die (scope_die_for (type, context_die), type_die);
11410
 
11411
      for (link = TYPE_VALUES (type);
11412
           link != NULL; link = TREE_CHAIN (link))
11413
        {
11414
          dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
11415
          tree value = TREE_VALUE (link);
11416
 
11417
          add_name_attribute (enum_die,
11418
                              IDENTIFIER_POINTER (TREE_PURPOSE (link)));
11419
 
11420
          if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
11421
            /* DWARF2 does not provide a way of indicating whether or
11422
               not enumeration constants are signed or unsigned.  GDB
11423
               always assumes the values are signed, so we output all
11424
               values as if they were signed.  That means that
11425
               enumeration constants with very large unsigned values
11426
               will appear to have negative values in the debugger.  */
11427
            add_AT_int (enum_die, DW_AT_const_value,
11428
                        tree_low_cst (value, tree_int_cst_sgn (value) > 0));
11429
        }
11430
    }
11431
  else
11432
    add_AT_flag (type_die, DW_AT_declaration, 1);
11433
 
11434
  return type_die;
11435
}
11436
 
11437
/* Generate a DIE to represent either a real live formal parameter decl or to
11438
   represent just the type of some formal parameter position in some function
11439
   type.
11440
 
11441
   Note that this routine is a bit unusual because its argument may be a
11442
   ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
11443
   represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
11444
   node.  If it's the former then this function is being called to output a
11445
   DIE to represent a formal parameter object (or some inlining thereof).  If
11446
   it's the latter, then this function is only being called to output a
11447
   DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
11448
   argument type of some subprogram type.  */
11449
 
11450
static dw_die_ref
11451
gen_formal_parameter_die (tree node, dw_die_ref context_die)
11452
{
11453
  dw_die_ref parm_die
11454
    = new_die (DW_TAG_formal_parameter, context_die, node);
11455
  tree origin;
11456
 
11457
  switch (TREE_CODE_CLASS (TREE_CODE (node)))
11458
    {
11459
    case tcc_declaration:
11460
      origin = decl_ultimate_origin (node);
11461
      if (origin != NULL)
11462
        add_abstract_origin_attribute (parm_die, origin);
11463
      else
11464
        {
11465
          add_name_and_src_coords_attributes (parm_die, node);
11466
          add_type_attribute (parm_die, TREE_TYPE (node),
11467
                              TREE_READONLY (node),
11468
                              TREE_THIS_VOLATILE (node),
11469
                              context_die);
11470
          if (DECL_ARTIFICIAL (node))
11471
            add_AT_flag (parm_die, DW_AT_artificial, 1);
11472
        }
11473
 
11474
      equate_decl_number_to_die (node, parm_die);
11475
      if (! DECL_ABSTRACT (node))
11476
        add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
11477
 
11478
      break;
11479
 
11480
    case tcc_type:
11481
      /* We were called with some kind of a ..._TYPE node.  */
11482
      add_type_attribute (parm_die, node, 0, 0, context_die);
11483
      break;
11484
 
11485
    default:
11486
      gcc_unreachable ();
11487
    }
11488
 
11489
  return parm_die;
11490
}
11491
 
11492
/* Generate a special type of DIE used as a stand-in for a trailing ellipsis
11493
   at the end of an (ANSI prototyped) formal parameters list.  */
11494
 
11495
static void
11496
gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
11497
{
11498
  new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
11499
}
11500
 
11501
/* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
11502
   DW_TAG_unspecified_parameters DIE) to represent the types of the formal
11503
   parameters as specified in some function type specification (except for
11504
   those which appear as part of a function *definition*).  */
11505
 
11506
static void
11507
gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
11508
{
11509
  tree link;
11510
  tree formal_type = NULL;
11511
  tree first_parm_type;
11512
  tree arg;
11513
 
11514
  if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
11515
    {
11516
      arg = DECL_ARGUMENTS (function_or_method_type);
11517
      function_or_method_type = TREE_TYPE (function_or_method_type);
11518
    }
11519
  else
11520
    arg = NULL_TREE;
11521
 
11522
  first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
11523
 
11524
  /* Make our first pass over the list of formal parameter types and output a
11525
     DW_TAG_formal_parameter DIE for each one.  */
11526
  for (link = first_parm_type; link; )
11527
    {
11528
      dw_die_ref parm_die;
11529
 
11530
      formal_type = TREE_VALUE (link);
11531
      if (formal_type == void_type_node)
11532
        break;
11533
 
11534
      /* Output a (nameless) DIE to represent the formal parameter itself.  */
11535
      parm_die = gen_formal_parameter_die (formal_type, context_die);
11536
      if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
11537
           && link == first_parm_type)
11538
          || (arg && DECL_ARTIFICIAL (arg)))
11539
        add_AT_flag (parm_die, DW_AT_artificial, 1);
11540
 
11541
      link = TREE_CHAIN (link);
11542
      if (arg)
11543
        arg = TREE_CHAIN (arg);
11544
    }
11545
 
11546
  /* If this function type has an ellipsis, add a
11547
     DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
11548
  if (formal_type != void_type_node)
11549
    gen_unspecified_parameters_die (function_or_method_type, context_die);
11550
 
11551
  /* Make our second (and final) pass over the list of formal parameter types
11552
     and output DIEs to represent those types (as necessary).  */
11553
  for (link = TYPE_ARG_TYPES (function_or_method_type);
11554
       link && TREE_VALUE (link);
11555
       link = TREE_CHAIN (link))
11556
    gen_type_die (TREE_VALUE (link), context_die);
11557
}
11558
 
11559
/* We want to generate the DIE for TYPE so that we can generate the
11560
   die for MEMBER, which has been defined; we will need to refer back
11561
   to the member declaration nested within TYPE.  If we're trying to
11562
   generate minimal debug info for TYPE, processing TYPE won't do the
11563
   trick; we need to attach the member declaration by hand.  */
11564
 
11565
static void
11566
gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
11567
{
11568
  gen_type_die (type, context_die);
11569
 
11570
  /* If we're trying to avoid duplicate debug info, we may not have
11571
     emitted the member decl for this function.  Emit it now.  */
11572
  if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
11573
      && ! lookup_decl_die (member))
11574
    {
11575
      dw_die_ref type_die;
11576
      gcc_assert (!decl_ultimate_origin (member));
11577
 
11578
      push_decl_scope (type);
11579
      type_die = lookup_type_die (type);
11580
      if (TREE_CODE (member) == FUNCTION_DECL)
11581
        gen_subprogram_die (member, type_die);
11582
      else if (TREE_CODE (member) == FIELD_DECL)
11583
        {
11584
          /* Ignore the nameless fields that are used to skip bits but handle
11585
             C++ anonymous unions and structs.  */
11586
          if (DECL_NAME (member) != NULL_TREE
11587
              || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
11588
              || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
11589
            {
11590
              gen_type_die (member_declared_type (member), type_die);
11591
              gen_field_die (member, type_die);
11592
            }
11593
        }
11594
      else
11595
        gen_variable_die (member, type_die);
11596
 
11597
      pop_decl_scope ();
11598
    }
11599
}
11600
 
11601
/* Generate the DWARF2 info for the "abstract" instance of a function which we
11602
   may later generate inlined and/or out-of-line instances of.  */
11603
 
11604
static void
11605
dwarf2out_abstract_function (tree decl)
11606
{
11607
  dw_die_ref old_die;
11608
  tree save_fn;
11609
  struct function *save_cfun;
11610
  tree context;
11611
  int was_abstract = DECL_ABSTRACT (decl);
11612
 
11613
  /* Make sure we have the actual abstract inline, not a clone.  */
11614
  decl = DECL_ORIGIN (decl);
11615
 
11616
  old_die = lookup_decl_die (decl);
11617
  if (old_die && get_AT (old_die, DW_AT_inline))
11618
    /* We've already generated the abstract instance.  */
11619
    return;
11620
 
11621
  /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11622
     we don't get confused by DECL_ABSTRACT.  */
11623
  if (debug_info_level > DINFO_LEVEL_TERSE)
11624
    {
11625
      context = decl_class_context (decl);
11626
      if (context)
11627
        gen_type_die_for_member
11628
          (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11629
    }
11630
 
11631
  /* Pretend we've just finished compiling this function.  */
11632
  save_fn = current_function_decl;
11633
  save_cfun = cfun;
11634
  current_function_decl = decl;
11635
  cfun = DECL_STRUCT_FUNCTION (decl);
11636
 
11637
  set_decl_abstract_flags (decl, 1);
11638
  dwarf2out_decl (decl);
11639
  if (! was_abstract)
11640
    set_decl_abstract_flags (decl, 0);
11641
 
11642
  current_function_decl = save_fn;
11643
  cfun = save_cfun;
11644
}
11645
 
11646
/* Helper function of premark_used_types() which gets called through
11647
   htab_traverse_resize().
11648
 
11649
   Marks the DIE of a given type in *SLOT as perennial, so it never gets
11650
   marked as unused by prune_unused_types.  */
11651
static int
11652
premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
11653
{
11654
  tree type;
11655
  dw_die_ref die;
11656
 
11657
  type = *slot;
11658
  die = lookup_type_die (type);
11659
  if (die != NULL)
11660
    die->die_perennial_p = 1;
11661
  return 1;
11662
}
11663
 
11664
/* Mark all members of used_types_hash as perennial.  */
11665
static void
11666
premark_used_types (void)
11667
{
11668
  if (cfun && cfun->used_types_hash)
11669
    htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
11670
}
11671
 
11672
/* Generate a DIE to represent a declared function (either file-scope or
11673
   block-local).  */
11674
 
11675
static void
11676
gen_subprogram_die (tree decl, dw_die_ref context_die)
11677
{
11678
  char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11679
  tree origin = decl_ultimate_origin (decl);
11680
  dw_die_ref subr_die;
11681
  tree fn_arg_types;
11682
  tree outer_scope;
11683
  dw_die_ref old_die = lookup_decl_die (decl);
11684
  int declaration = (current_function_decl != decl
11685
                     || class_or_namespace_scope_p (context_die));
11686
 
11687
  premark_used_types ();
11688
 
11689
  /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11690
     started to generate the abstract instance of an inline, decided to output
11691
     its containing class, and proceeded to emit the declaration of the inline
11692
     from the member list for the class.  If so, DECLARATION takes priority;
11693
     we'll get back to the abstract instance when done with the class.  */
11694
 
11695
  /* The class-scope declaration DIE must be the primary DIE.  */
11696
  if (origin && declaration && class_or_namespace_scope_p (context_die))
11697
    {
11698
      origin = NULL;
11699
      gcc_assert (!old_die);
11700
    }
11701
 
11702
  /* Now that the C++ front end lazily declares artificial member fns, we
11703
     might need to retrofit the declaration into its class.  */
11704
  if (!declaration && !origin && !old_die
11705
      && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
11706
      && !class_or_namespace_scope_p (context_die)
11707
      && debug_info_level > DINFO_LEVEL_TERSE)
11708
    old_die = force_decl_die (decl);
11709
 
11710
  if (origin != NULL)
11711
    {
11712
      gcc_assert (!declaration || local_scope_p (context_die));
11713
 
11714
      /* Fixup die_parent for the abstract instance of a nested
11715
         inline function.  */
11716
      if (old_die && old_die->die_parent == NULL)
11717
        add_child_die (context_die, old_die);
11718
 
11719
      subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11720
      add_abstract_origin_attribute (subr_die, origin);
11721
    }
11722
  else if (old_die)
11723
    {
11724
      expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11725
      struct dwarf_file_data * file_index = lookup_filename (s.file);
11726
 
11727
      if (!get_AT_flag (old_die, DW_AT_declaration)
11728
          /* We can have a normal definition following an inline one in the
11729
             case of redefinition of GNU C extern inlines.
11730
             It seems reasonable to use AT_specification in this case.  */
11731
          && !get_AT (old_die, DW_AT_inline))
11732
        {
11733
          /* Detect and ignore this case, where we are trying to output
11734
             something we have already output.  */
11735
          return;
11736
        }
11737
 
11738
      /* If the definition comes from the same place as the declaration,
11739
         maybe use the old DIE.  We always want the DIE for this function
11740
         that has the *_pc attributes to be under comp_unit_die so the
11741
         debugger can find it.  We also need to do this for abstract
11742
         instances of inlines, since the spec requires the out-of-line copy
11743
         to have the same parent.  For local class methods, this doesn't
11744
         apply; we just use the old DIE.  */
11745
      if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11746
          && (DECL_ARTIFICIAL (decl)
11747
              || (get_AT_file (old_die, DW_AT_decl_file) == file_index
11748
                  && (get_AT_unsigned (old_die, DW_AT_decl_line)
11749
                      == (unsigned) s.line))))
11750
        {
11751
          subr_die = old_die;
11752
 
11753
          /* Clear out the declaration attribute and the formal parameters.
11754
             Do not remove all children, because it is possible that this
11755
             declaration die was forced using force_decl_die(). In such
11756
             cases die that forced declaration die (e.g. TAG_imported_module)
11757
             is one of the children that we do not want to remove.  */
11758
          remove_AT (subr_die, DW_AT_declaration);
11759
          remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11760
        }
11761
      else
11762
        {
11763
          subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11764
          add_AT_specification (subr_die, old_die);
11765
          if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
11766
            add_AT_file (subr_die, DW_AT_decl_file, file_index);
11767
          if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
11768
            add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
11769
        }
11770
    }
11771
  else
11772
    {
11773
      subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11774
 
11775
      if (TREE_PUBLIC (decl))
11776
        add_AT_flag (subr_die, DW_AT_external, 1);
11777
 
11778
      add_name_and_src_coords_attributes (subr_die, decl);
11779
      if (debug_info_level > DINFO_LEVEL_TERSE)
11780
        {
11781
          add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11782
          add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11783
                              0, 0, context_die);
11784
        }
11785
 
11786
      add_pure_or_virtual_attribute (subr_die, decl);
11787
      if (DECL_ARTIFICIAL (decl))
11788
        add_AT_flag (subr_die, DW_AT_artificial, 1);
11789
 
11790
      if (TREE_PROTECTED (decl))
11791
        add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11792
      else if (TREE_PRIVATE (decl))
11793
        add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11794
    }
11795
 
11796
  if (declaration)
11797
    {
11798
      if (!old_die || !get_AT (old_die, DW_AT_inline))
11799
        {
11800
          add_AT_flag (subr_die, DW_AT_declaration, 1);
11801
 
11802
          /* The first time we see a member function, it is in the context of
11803
             the class to which it belongs.  We make sure of this by emitting
11804
             the class first.  The next time is the definition, which is
11805
             handled above.  The two may come from the same source text.
11806
 
11807
             Note that force_decl_die() forces function declaration die. It is
11808
             later reused to represent definition.  */
11809
          equate_decl_number_to_die (decl, subr_die);
11810
        }
11811
    }
11812
  else if (DECL_ABSTRACT (decl))
11813
    {
11814
      if (DECL_DECLARED_INLINE_P (decl))
11815
        {
11816
          if (cgraph_function_possibly_inlined_p (decl))
11817
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11818
          else
11819
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11820
        }
11821
      else
11822
        {
11823
          if (cgraph_function_possibly_inlined_p (decl))
11824
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11825
          else
11826
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11827
        }
11828
 
11829
      equate_decl_number_to_die (decl, subr_die);
11830
    }
11831
  else if (!DECL_EXTERNAL (decl))
11832
    {
11833
      HOST_WIDE_INT cfa_fb_offset;
11834
 
11835
      if (!old_die || !get_AT (old_die, DW_AT_inline))
11836
        equate_decl_number_to_die (decl, subr_die);
11837
 
11838
      if (!flag_reorder_blocks_and_partition)
11839
        {
11840
          ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11841
                                       current_function_funcdef_no);
11842
          add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11843
          ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11844
                                       current_function_funcdef_no);
11845
          add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11846
 
11847
          add_pubname (decl, subr_die);
11848
          add_arange (decl, subr_die);
11849
        }
11850
      else
11851
        {  /* Do nothing for now; maybe need to duplicate die, one for
11852
              hot section and ond for cold section, then use the hot/cold
11853
              section begin/end labels to generate the aranges...  */
11854
          /*
11855
            add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
11856
            add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
11857
            add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
11858
            add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
11859
 
11860
            add_pubname (decl, subr_die);
11861
            add_arange (decl, subr_die);
11862
            add_arange (decl, subr_die);
11863
           */
11864
        }
11865
 
11866
#ifdef MIPS_DEBUGGING_INFO
11867
      /* Add a reference to the FDE for this routine.  */
11868
      add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11869
#endif
11870
 
11871
      cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
11872
 
11873
      /* We define the "frame base" as the function's CFA.  This is more
11874
         convenient for several reasons: (1) It's stable across the prologue
11875
         and epilogue, which makes it better than just a frame pointer,
11876
         (2) With dwarf3, there exists a one-byte encoding that allows us
11877
         to reference the .debug_frame data by proxy, but failing that,
11878
         (3) We can at least reuse the code inspection and interpretation
11879
         code that determines the CFA position at various points in the
11880
         function.  */
11881
      /* ??? Use some command-line or configury switch to enable the use
11882
         of dwarf3 DW_OP_call_frame_cfa.  At present there are no dwarf
11883
         consumers that understand it; fall back to "pure" dwarf2 and
11884
         convert the CFA data into a location list.  */
11885
      {
11886
        dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
11887
        if (list->dw_loc_next)
11888
          add_AT_loc_list (subr_die, DW_AT_frame_base, list);
11889
        else
11890
          add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
11891
      }
11892
 
11893
      /* Compute a displacement from the "steady-state frame pointer" to
11894
         the CFA.  The former is what all stack slots and argument slots
11895
         will reference in the rtl; the later is what we've told the
11896
         debugger about.  We'll need to adjust all frame_base references
11897
         by this displacement.  */
11898
      compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
11899
 
11900
      if (cfun->static_chain_decl)
11901
        add_AT_location_description (subr_die, DW_AT_static_link,
11902
                 loc_descriptor_from_tree (cfun->static_chain_decl));
11903
    }
11904
 
11905
  /* Now output descriptions of the arguments for this function. This gets
11906
     (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11907
     for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11908
     `...' at the end of the formal parameter list.  In order to find out if
11909
     there was a trailing ellipsis or not, we must instead look at the type
11910
     associated with the FUNCTION_DECL.  This will be a node of type
11911
     FUNCTION_TYPE. If the chain of type nodes hanging off of this
11912
     FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11913
     an ellipsis at the end.  */
11914
 
11915
  /* In the case where we are describing a mere function declaration, all we
11916
     need to do here (and all we *can* do here) is to describe the *types* of
11917
     its formal parameters.  */
11918
  if (debug_info_level <= DINFO_LEVEL_TERSE)
11919
    ;
11920
  else if (declaration)
11921
    gen_formal_types_die (decl, subr_die);
11922
  else
11923
    {
11924
      /* Generate DIEs to represent all known formal parameters.  */
11925
      tree arg_decls = DECL_ARGUMENTS (decl);
11926
      tree parm;
11927
 
11928
      /* When generating DIEs, generate the unspecified_parameters DIE
11929
         instead if we come across the arg "__builtin_va_alist" */
11930
      for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11931
        if (TREE_CODE (parm) == PARM_DECL)
11932
          {
11933
            if (DECL_NAME (parm)
11934
                && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11935
                            "__builtin_va_alist"))
11936
              gen_unspecified_parameters_die (parm, subr_die);
11937
            else
11938
              gen_decl_die (parm, subr_die);
11939
          }
11940
 
11941
      /* Decide whether we need an unspecified_parameters DIE at the end.
11942
         There are 2 more cases to do this for: 1) the ansi ... declaration -
11943
         this is detectable when the end of the arg list is not a
11944
         void_type_node 2) an unprototyped function declaration (not a
11945
         definition).  This just means that we have no info about the
11946
         parameters at all.  */
11947
      fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11948
      if (fn_arg_types != NULL)
11949
        {
11950
          /* This is the prototyped case, check for....  */
11951
          if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11952
            gen_unspecified_parameters_die (decl, subr_die);
11953
        }
11954
      else if (DECL_INITIAL (decl) == NULL_TREE)
11955
        gen_unspecified_parameters_die (decl, subr_die);
11956
    }
11957
 
11958
  /* Output Dwarf info for all of the stuff within the body of the function
11959
     (if it has one - it may be just a declaration).  */
11960
  outer_scope = DECL_INITIAL (decl);
11961
 
11962
  /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11963
     a function.  This BLOCK actually represents the outermost binding contour
11964
     for the function, i.e. the contour in which the function's formal
11965
     parameters and labels get declared. Curiously, it appears that the front
11966
     end doesn't actually put the PARM_DECL nodes for the current function onto
11967
     the BLOCK_VARS list for this outer scope, but are strung off of the
11968
     DECL_ARGUMENTS list for the function instead.
11969
 
11970
     The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11971
     the LABEL_DECL nodes for the function however, and we output DWARF info
11972
     for those in decls_for_scope.  Just within the `outer_scope' there will be
11973
     a BLOCK node representing the function's outermost pair of curly braces,
11974
     and any blocks used for the base and member initializers of a C++
11975
     constructor function.  */
11976
  if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11977
    {
11978
      /* Emit a DW_TAG_variable DIE for a named return value.  */
11979
      if (DECL_NAME (DECL_RESULT (decl)))
11980
        gen_decl_die (DECL_RESULT (decl), subr_die);
11981
 
11982
      current_function_has_inlines = 0;
11983
      decls_for_scope (outer_scope, subr_die, 0);
11984
 
11985
#if 0 && defined (MIPS_DEBUGGING_INFO)
11986
      if (current_function_has_inlines)
11987
        {
11988
          add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11989
          if (! comp_unit_has_inlines)
11990
            {
11991
              add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11992
              comp_unit_has_inlines = 1;
11993
            }
11994
        }
11995
#endif
11996
    }
11997
  /* Add the calling convention attribute if requested.  */
11998
  add_calling_convention_attribute (subr_die, TREE_TYPE (decl));
11999
 
12000
}
12001
 
12002
/* Generate a DIE to represent a declared data object.  */
12003
 
12004
static void
12005
gen_variable_die (tree decl, dw_die_ref context_die)
12006
{
12007
  tree origin = decl_ultimate_origin (decl);
12008
  dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
12009
 
12010
  dw_die_ref old_die = lookup_decl_die (decl);
12011
  int declaration = (DECL_EXTERNAL (decl)
12012
                     /* If DECL is COMDAT and has not actually been
12013
                        emitted, we cannot take its address; there
12014
                        might end up being no definition anywhere in
12015
                        the program.  For example, consider the C++
12016
                        test case:
12017
 
12018
                          template <class T>
12019
                          struct S { static const int i = 7; };
12020
 
12021
                          template <class T>
12022
                          const int S<T>::i;
12023
 
12024
                          int f() { return S<int>::i; }
12025
 
12026
                        Here, S<int>::i is not DECL_EXTERNAL, but no
12027
                        definition is required, so the compiler will
12028
                        not emit a definition.  */
12029
                     || (TREE_CODE (decl) == VAR_DECL
12030
                         && DECL_COMDAT (decl) && !TREE_ASM_WRITTEN (decl))
12031
                     || class_or_namespace_scope_p (context_die));
12032
 
12033
  if (origin != NULL)
12034
    add_abstract_origin_attribute (var_die, origin);
12035
 
12036
  /* Loop unrolling can create multiple blocks that refer to the same
12037
     static variable, so we must test for the DW_AT_declaration flag.
12038
 
12039
     ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
12040
     copy decls and set the DECL_ABSTRACT flag on them instead of
12041
     sharing them.
12042
 
12043
     ??? Duplicated blocks have been rewritten to use .debug_ranges.
12044
 
12045
     ??? The declare_in_namespace support causes us to get two DIEs for one
12046
     variable, both of which are declarations.  We want to avoid considering
12047
     one to be a specification, so we must test that this DIE is not a
12048
     declaration.  */
12049
  else if (old_die && TREE_STATIC (decl) && ! declaration
12050
           && get_AT_flag (old_die, DW_AT_declaration) == 1)
12051
    {
12052
      /* This is a definition of a C++ class level static.  */
12053
      add_AT_specification (var_die, old_die);
12054
      if (DECL_NAME (decl))
12055
        {
12056
          expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
12057
          struct dwarf_file_data * file_index = lookup_filename (s.file);
12058
 
12059
          if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
12060
            add_AT_file (var_die, DW_AT_decl_file, file_index);
12061
 
12062
          if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
12063
 
12064
            add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
12065
        }
12066
    }
12067
  else
12068
    {
12069
      add_name_and_src_coords_attributes (var_die, decl);
12070
      add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
12071
                          TREE_THIS_VOLATILE (decl), context_die);
12072
 
12073
      if (TREE_PUBLIC (decl))
12074
        add_AT_flag (var_die, DW_AT_external, 1);
12075
 
12076
      if (DECL_ARTIFICIAL (decl))
12077
        add_AT_flag (var_die, DW_AT_artificial, 1);
12078
 
12079
      if (TREE_PROTECTED (decl))
12080
        add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
12081
      else if (TREE_PRIVATE (decl))
12082
        add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
12083
    }
12084
 
12085
  if (declaration)
12086
    add_AT_flag (var_die, DW_AT_declaration, 1);
12087
 
12088
  if (DECL_ABSTRACT (decl) || declaration)
12089
    equate_decl_number_to_die (decl, var_die);
12090
 
12091
  if (! declaration && ! DECL_ABSTRACT (decl))
12092
    {
12093
      add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
12094
      add_pubname (decl, var_die);
12095
    }
12096
  else
12097
    tree_add_const_value_attribute (var_die, decl);
12098
}
12099
 
12100
/* Generate a DIE to represent a label identifier.  */
12101
 
12102
static void
12103
gen_label_die (tree decl, dw_die_ref context_die)
12104
{
12105
  tree origin = decl_ultimate_origin (decl);
12106
  dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
12107
  rtx insn;
12108
  char label[MAX_ARTIFICIAL_LABEL_BYTES];
12109
 
12110
  if (origin != NULL)
12111
    add_abstract_origin_attribute (lbl_die, origin);
12112
  else
12113
    add_name_and_src_coords_attributes (lbl_die, decl);
12114
 
12115
  if (DECL_ABSTRACT (decl))
12116
    equate_decl_number_to_die (decl, lbl_die);
12117
  else
12118
    {
12119
      insn = DECL_RTL_IF_SET (decl);
12120
 
12121
      /* Deleted labels are programmer specified labels which have been
12122
         eliminated because of various optimizations.  We still emit them
12123
         here so that it is possible to put breakpoints on them.  */
12124
      if (insn
12125
          && (LABEL_P (insn)
12126
              || ((NOTE_P (insn)
12127
                   && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
12128
        {
12129
          /* When optimization is enabled (via -O) some parts of the compiler
12130
             (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
12131
             represent source-level labels which were explicitly declared by
12132
             the user.  This really shouldn't be happening though, so catch
12133
             it if it ever does happen.  */
12134
          gcc_assert (!INSN_DELETED_P (insn));
12135
 
12136
          ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
12137
          add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
12138
        }
12139
    }
12140
}
12141
 
12142
/* A helper function for gen_inlined_subroutine_die.  Add source coordinate
12143
   attributes to the DIE for a block STMT, to describe where the inlined
12144
   function was called from.  This is similar to add_src_coords_attributes.  */
12145
 
12146
static inline void
12147
add_call_src_coords_attributes (tree stmt, dw_die_ref die)
12148
{
12149
  expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
12150
 
12151
  add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
12152
  add_AT_unsigned (die, DW_AT_call_line, s.line);
12153
}
12154
 
12155
/* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
12156
   Add low_pc and high_pc attributes to the DIE for a block STMT.  */
12157
 
12158
static inline void
12159
add_high_low_attributes (tree stmt, dw_die_ref die)
12160
{
12161
  char label[MAX_ARTIFICIAL_LABEL_BYTES];
12162
 
12163
  if (BLOCK_FRAGMENT_CHAIN (stmt))
12164
    {
12165
      tree chain;
12166
 
12167
      add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
12168
 
12169
      chain = BLOCK_FRAGMENT_CHAIN (stmt);
12170
      do
12171
        {
12172
          add_ranges (chain);
12173
          chain = BLOCK_FRAGMENT_CHAIN (chain);
12174
        }
12175
      while (chain);
12176
      add_ranges (NULL);
12177
    }
12178
  else
12179
    {
12180
      ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
12181
                                   BLOCK_NUMBER (stmt));
12182
      add_AT_lbl_id (die, DW_AT_low_pc, label);
12183
      ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
12184
                                   BLOCK_NUMBER (stmt));
12185
      add_AT_lbl_id (die, DW_AT_high_pc, label);
12186
    }
12187
}
12188
 
12189
/* Generate a DIE for a lexical block.  */
12190
 
12191
static void
12192
gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
12193
{
12194
  dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
12195
 
12196
  if (! BLOCK_ABSTRACT (stmt))
12197
    add_high_low_attributes (stmt, stmt_die);
12198
 
12199
  decls_for_scope (stmt, stmt_die, depth);
12200
}
12201
 
12202
/* Generate a DIE for an inlined subprogram.  */
12203
 
12204
static void
12205
gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
12206
{
12207
  tree decl = block_ultimate_origin (stmt);
12208
 
12209
  /* Emit info for the abstract instance first, if we haven't yet.  We
12210
     must emit this even if the block is abstract, otherwise when we
12211
     emit the block below (or elsewhere), we may end up trying to emit
12212
     a die whose origin die hasn't been emitted, and crashing.  */
12213
  dwarf2out_abstract_function (decl);
12214
 
12215
  if (! BLOCK_ABSTRACT (stmt))
12216
    {
12217
      dw_die_ref subr_die
12218
        = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
12219
 
12220
      add_abstract_origin_attribute (subr_die, decl);
12221
      add_high_low_attributes (stmt, subr_die);
12222
      add_call_src_coords_attributes (stmt, subr_die);
12223
 
12224
      decls_for_scope (stmt, subr_die, depth);
12225
      current_function_has_inlines = 1;
12226
    }
12227
  else
12228
    /* We may get here if we're the outer block of function A that was
12229
       inlined into function B that was inlined into function C.  When
12230
       generating debugging info for C, dwarf2out_abstract_function(B)
12231
       would mark all inlined blocks as abstract, including this one.
12232
       So, we wouldn't (and shouldn't) expect labels to be generated
12233
       for this one.  Instead, just emit debugging info for
12234
       declarations within the block.  This is particularly important
12235
       in the case of initializers of arguments passed from B to us:
12236
       if they're statement expressions containing declarations, we
12237
       wouldn't generate dies for their abstract variables, and then,
12238
       when generating dies for the real variables, we'd die (pun
12239
       intended :-)  */
12240
    gen_lexical_block_die (stmt, context_die, depth);
12241
}
12242
 
12243
/* Generate a DIE for a field in a record, or structure.  */
12244
 
12245
static void
12246
gen_field_die (tree decl, dw_die_ref context_die)
12247
{
12248
  dw_die_ref decl_die;
12249
 
12250
  if (TREE_TYPE (decl) == error_mark_node)
12251
    return;
12252
 
12253
  decl_die = new_die (DW_TAG_member, context_die, decl);
12254
  add_name_and_src_coords_attributes (decl_die, decl);
12255
  add_type_attribute (decl_die, member_declared_type (decl),
12256
                      TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
12257
                      context_die);
12258
 
12259
  if (DECL_BIT_FIELD_TYPE (decl))
12260
    {
12261
      add_byte_size_attribute (decl_die, decl);
12262
      add_bit_size_attribute (decl_die, decl);
12263
      add_bit_offset_attribute (decl_die, decl);
12264
    }
12265
 
12266
  if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
12267
    add_data_member_location_attribute (decl_die, decl);
12268
 
12269
  if (DECL_ARTIFICIAL (decl))
12270
    add_AT_flag (decl_die, DW_AT_artificial, 1);
12271
 
12272
  if (TREE_PROTECTED (decl))
12273
    add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
12274
  else if (TREE_PRIVATE (decl))
12275
    add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
12276
 
12277
  /* Equate decl number to die, so that we can look up this decl later on.  */
12278
  equate_decl_number_to_die (decl, decl_die);
12279
}
12280
 
12281
#if 0
12282
/* Don't generate either pointer_type DIEs or reference_type DIEs here.
12283
   Use modified_type_die instead.
12284
   We keep this code here just in case these types of DIEs may be needed to
12285
   represent certain things in other languages (e.g. Pascal) someday.  */
12286
 
12287
static void
12288
gen_pointer_type_die (tree type, dw_die_ref context_die)
12289
{
12290
  dw_die_ref ptr_die
12291
    = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
12292
 
12293
  equate_type_number_to_die (type, ptr_die);
12294
  add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12295
  add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12296
}
12297
 
12298
/* Don't generate either pointer_type DIEs or reference_type DIEs here.
12299
   Use modified_type_die instead.
12300
   We keep this code here just in case these types of DIEs may be needed to
12301
   represent certain things in other languages (e.g. Pascal) someday.  */
12302
 
12303
static void
12304
gen_reference_type_die (tree type, dw_die_ref context_die)
12305
{
12306
  dw_die_ref ref_die
12307
    = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
12308
 
12309
  equate_type_number_to_die (type, ref_die);
12310
  add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
12311
  add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12312
}
12313
#endif
12314
 
12315
/* Generate a DIE for a pointer to a member type.  */
12316
 
12317
static void
12318
gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
12319
{
12320
  dw_die_ref ptr_die
12321
    = new_die (DW_TAG_ptr_to_member_type,
12322
               scope_die_for (type, context_die), type);
12323
 
12324
  equate_type_number_to_die (type, ptr_die);
12325
  add_AT_die_ref (ptr_die, DW_AT_containing_type,
12326
                  lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
12327
  add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12328
}
12329
 
12330
/* Generate the DIE for the compilation unit.  */
12331
 
12332
static dw_die_ref
12333
gen_compile_unit_die (const char *filename)
12334
{
12335
  dw_die_ref die;
12336
  char producer[250];
12337
  const char *language_string = lang_hooks.name;
12338
  int language;
12339
 
12340
  die = new_die (DW_TAG_compile_unit, NULL, NULL);
12341
 
12342
  if (filename)
12343
    {
12344
      add_name_attribute (die, filename);
12345
      /* Don't add cwd for <built-in>.  */
12346
      if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
12347
        add_comp_dir_attribute (die);
12348
    }
12349
 
12350
  sprintf (producer, "%s %s", language_string, version_string);
12351
 
12352
#ifdef MIPS_DEBUGGING_INFO
12353
  /* The MIPS/SGI compilers place the 'cc' command line options in the producer
12354
     string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
12355
     not appear in the producer string, the debugger reaches the conclusion
12356
     that the object file is stripped and has no debugging information.
12357
     To get the MIPS/SGI debugger to believe that there is debugging
12358
     information in the object file, we add a -g to the producer string.  */
12359
  if (debug_info_level > DINFO_LEVEL_TERSE)
12360
    strcat (producer, " -g");
12361
#endif
12362
 
12363
  add_AT_string (die, DW_AT_producer, producer);
12364
 
12365
  if (strcmp (language_string, "GNU C++") == 0)
12366
    language = DW_LANG_C_plus_plus;
12367
  else if (strcmp (language_string, "GNU Ada") == 0)
12368
    language = DW_LANG_Ada95;
12369
  else if (strcmp (language_string, "GNU F77") == 0)
12370
    language = DW_LANG_Fortran77;
12371
  else if (strcmp (language_string, "GNU F95") == 0)
12372
    language = DW_LANG_Fortran95;
12373
  else if (strcmp (language_string, "GNU Pascal") == 0)
12374
    language = DW_LANG_Pascal83;
12375
  else if (strcmp (language_string, "GNU Java") == 0)
12376
    language = DW_LANG_Java;
12377
  else if (strcmp (language_string, "GNU Objective-C") == 0)
12378
    language = DW_LANG_ObjC;
12379
  else if (strcmp (language_string, "GNU Objective-C++") == 0)
12380
    language = DW_LANG_ObjC_plus_plus;
12381
  else
12382
    language = DW_LANG_C89;
12383
 
12384
  add_AT_unsigned (die, DW_AT_language, language);
12385
  return die;
12386
}
12387
 
12388
/* Generate the DIE for a base class.  */
12389
 
12390
static void
12391
gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
12392
{
12393
  dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
12394
 
12395
  add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
12396
  add_data_member_location_attribute (die, binfo);
12397
 
12398
  if (BINFO_VIRTUAL_P (binfo))
12399
    add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12400
 
12401
  if (access == access_public_node)
12402
    add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
12403
  else if (access == access_protected_node)
12404
    add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
12405
}
12406
 
12407
/* Generate a DIE for a class member.  */
12408
 
12409
static void
12410
gen_member_die (tree type, dw_die_ref context_die)
12411
{
12412
  tree member;
12413
  tree binfo = TYPE_BINFO (type);
12414
  dw_die_ref child;
12415
 
12416
  /* If this is not an incomplete type, output descriptions of each of its
12417
     members. Note that as we output the DIEs necessary to represent the
12418
     members of this record or union type, we will also be trying to output
12419
     DIEs to represent the *types* of those members. However the `type'
12420
     function (above) will specifically avoid generating type DIEs for member
12421
     types *within* the list of member DIEs for this (containing) type except
12422
     for those types (of members) which are explicitly marked as also being
12423
     members of this (containing) type themselves.  The g++ front- end can
12424
     force any given type to be treated as a member of some other (containing)
12425
     type by setting the TYPE_CONTEXT of the given (member) type to point to
12426
     the TREE node representing the appropriate (containing) type.  */
12427
 
12428
  /* First output info about the base classes.  */
12429
  if (binfo)
12430
    {
12431
      VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
12432
      int i;
12433
      tree base;
12434
 
12435
      for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
12436
        gen_inheritance_die (base,
12437
                             (accesses ? VEC_index (tree, accesses, i)
12438
                              : access_public_node), context_die);
12439
    }
12440
 
12441
  /* Now output info about the data members and type members.  */
12442
  for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
12443
    {
12444
      /* If we thought we were generating minimal debug info for TYPE
12445
         and then changed our minds, some of the member declarations
12446
         may have already been defined.  Don't define them again, but
12447
         do put them in the right order.  */
12448
 
12449
      child = lookup_decl_die (member);
12450
      if (child)
12451
        splice_child_die (context_die, child);
12452
      else
12453
        gen_decl_die (member, context_die);
12454
    }
12455
 
12456
  /* Now output info about the function members (if any).  */
12457
  for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
12458
    {
12459
      /* Don't include clones in the member list.  */
12460
      if (DECL_ABSTRACT_ORIGIN (member))
12461
        continue;
12462
 
12463
      child = lookup_decl_die (member);
12464
      if (child)
12465
        splice_child_die (context_die, child);
12466
      else
12467
        gen_decl_die (member, context_die);
12468
    }
12469
}
12470
 
12471
/* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
12472
   is set, we pretend that the type was never defined, so we only get the
12473
   member DIEs needed by later specification DIEs.  */
12474
 
12475
static void
12476
gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
12477
{
12478
  dw_die_ref type_die = lookup_type_die (type);
12479
  dw_die_ref scope_die = 0;
12480
  int nested = 0;
12481
  int complete = (TYPE_SIZE (type)
12482
                  && (! TYPE_STUB_DECL (type)
12483
                      || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
12484
  int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
12485
 
12486
  if (type_die && ! complete)
12487
    return;
12488
 
12489
  if (TYPE_CONTEXT (type) != NULL_TREE
12490
      && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12491
          || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
12492
    nested = 1;
12493
 
12494
  scope_die = scope_die_for (type, context_die);
12495
 
12496
  if (! type_die || (nested && scope_die == comp_unit_die))
12497
    /* First occurrence of type or toplevel definition of nested class.  */
12498
    {
12499
      dw_die_ref old_die = type_die;
12500
 
12501
      type_die = new_die (TREE_CODE (type) == RECORD_TYPE
12502
                          ? DW_TAG_structure_type : DW_TAG_union_type,
12503
                          scope_die, type);
12504
      equate_type_number_to_die (type, type_die);
12505
      if (old_die)
12506
        add_AT_specification (type_die, old_die);
12507
      else
12508
        add_name_attribute (type_die, type_tag (type));
12509
    }
12510
  else
12511
    remove_AT (type_die, DW_AT_declaration);
12512
 
12513
  /* If this type has been completed, then give it a byte_size attribute and
12514
     then give a list of members.  */
12515
  if (complete && !ns_decl)
12516
    {
12517
      /* Prevent infinite recursion in cases where the type of some member of
12518
         this type is expressed in terms of this type itself.  */
12519
      TREE_ASM_WRITTEN (type) = 1;
12520
      add_byte_size_attribute (type_die, type);
12521
      if (TYPE_STUB_DECL (type) != NULL_TREE)
12522
        add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
12523
 
12524
      /* If the first reference to this type was as the return type of an
12525
         inline function, then it may not have a parent.  Fix this now.  */
12526
      if (type_die->die_parent == NULL)
12527
        add_child_die (scope_die, type_die);
12528
 
12529
      push_decl_scope (type);
12530
      gen_member_die (type, type_die);
12531
      pop_decl_scope ();
12532
 
12533
      /* GNU extension: Record what type our vtable lives in.  */
12534
      if (TYPE_VFIELD (type))
12535
        {
12536
          tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
12537
 
12538
          gen_type_die (vtype, context_die);
12539
          add_AT_die_ref (type_die, DW_AT_containing_type,
12540
                          lookup_type_die (vtype));
12541
        }
12542
    }
12543
  else
12544
    {
12545
      add_AT_flag (type_die, DW_AT_declaration, 1);
12546
 
12547
      /* We don't need to do this for function-local types.  */
12548
      if (TYPE_STUB_DECL (type)
12549
          && ! decl_function_context (TYPE_STUB_DECL (type)))
12550
        VEC_safe_push (tree, gc, incomplete_types, type);
12551
    }
12552
}
12553
 
12554
/* Generate a DIE for a subroutine _type_.  */
12555
 
12556
static void
12557
gen_subroutine_type_die (tree type, dw_die_ref context_die)
12558
{
12559
  tree return_type = TREE_TYPE (type);
12560
  dw_die_ref subr_die
12561
    = new_die (DW_TAG_subroutine_type,
12562
               scope_die_for (type, context_die), type);
12563
 
12564
  equate_type_number_to_die (type, subr_die);
12565
  add_prototyped_attribute (subr_die, type);
12566
  add_type_attribute (subr_die, return_type, 0, 0, context_die);
12567
  gen_formal_types_die (type, subr_die);
12568
}
12569
 
12570
/* Generate a DIE for a type definition.  */
12571
 
12572
static void
12573
gen_typedef_die (tree decl, dw_die_ref context_die)
12574
{
12575
  dw_die_ref type_die;
12576
  tree origin;
12577
 
12578
  if (TREE_ASM_WRITTEN (decl))
12579
    return;
12580
 
12581
  TREE_ASM_WRITTEN (decl) = 1;
12582
  type_die = new_die (DW_TAG_typedef, context_die, decl);
12583
  origin = decl_ultimate_origin (decl);
12584
  if (origin != NULL)
12585
    add_abstract_origin_attribute (type_die, origin);
12586
  else
12587
    {
12588
      tree type;
12589
 
12590
      add_name_and_src_coords_attributes (type_die, decl);
12591
      if (DECL_ORIGINAL_TYPE (decl))
12592
        {
12593
          type = DECL_ORIGINAL_TYPE (decl);
12594
 
12595
          gcc_assert (type != TREE_TYPE (decl));
12596
          equate_type_number_to_die (TREE_TYPE (decl), type_die);
12597
        }
12598
      else
12599
        type = TREE_TYPE (decl);
12600
 
12601
      add_type_attribute (type_die, type, TREE_READONLY (decl),
12602
                          TREE_THIS_VOLATILE (decl), context_die);
12603
    }
12604
 
12605
  if (DECL_ABSTRACT (decl))
12606
    equate_decl_number_to_die (decl, type_die);
12607
}
12608
 
12609
/* Generate a type description DIE.  */
12610
 
12611
static void
12612
gen_type_die (tree type, dw_die_ref context_die)
12613
{
12614
  int need_pop;
12615
 
12616
  if (type == NULL_TREE || type == error_mark_node)
12617
    return;
12618
 
12619
  if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12620
      && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
12621
    {
12622
      if (TREE_ASM_WRITTEN (type))
12623
        return;
12624
 
12625
      /* Prevent broken recursion; we can't hand off to the same type.  */
12626
      gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
12627
 
12628
      TREE_ASM_WRITTEN (type) = 1;
12629
      gen_decl_die (TYPE_NAME (type), context_die);
12630
      return;
12631
    }
12632
 
12633
  /* We are going to output a DIE to represent the unqualified version
12634
     of this type (i.e. without any const or volatile qualifiers) so
12635
     get the main variant (i.e. the unqualified version) of this type
12636
     now.  (Vectors are special because the debugging info is in the
12637
     cloned type itself).  */
12638
  if (TREE_CODE (type) != VECTOR_TYPE)
12639
    type = type_main_variant (type);
12640
 
12641
  if (TREE_ASM_WRITTEN (type))
12642
    return;
12643
 
12644
  switch (TREE_CODE (type))
12645
    {
12646
    case ERROR_MARK:
12647
      break;
12648
 
12649
    case POINTER_TYPE:
12650
    case REFERENCE_TYPE:
12651
      /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
12652
         ensures that the gen_type_die recursion will terminate even if the
12653
         type is recursive.  Recursive types are possible in Ada.  */
12654
      /* ??? We could perhaps do this for all types before the switch
12655
         statement.  */
12656
      TREE_ASM_WRITTEN (type) = 1;
12657
 
12658
      /* For these types, all that is required is that we output a DIE (or a
12659
         set of DIEs) to represent the "basis" type.  */
12660
      gen_type_die (TREE_TYPE (type), context_die);
12661
      break;
12662
 
12663
    case OFFSET_TYPE:
12664
      /* This code is used for C++ pointer-to-data-member types.
12665
         Output a description of the relevant class type.  */
12666
      gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
12667
 
12668
      /* Output a description of the type of the object pointed to.  */
12669
      gen_type_die (TREE_TYPE (type), context_die);
12670
 
12671
      /* Now output a DIE to represent this pointer-to-data-member type
12672
         itself.  */
12673
      gen_ptr_to_mbr_type_die (type, context_die);
12674
      break;
12675
 
12676
    case FUNCTION_TYPE:
12677
      /* Force out return type (in case it wasn't forced out already).  */
12678
      gen_type_die (TREE_TYPE (type), context_die);
12679
      gen_subroutine_type_die (type, context_die);
12680
      break;
12681
 
12682
    case METHOD_TYPE:
12683
      /* Force out return type (in case it wasn't forced out already).  */
12684
      gen_type_die (TREE_TYPE (type), context_die);
12685
      gen_subroutine_type_die (type, context_die);
12686
      break;
12687
 
12688
    case ARRAY_TYPE:
12689
      gen_array_type_die (type, context_die);
12690
      break;
12691
 
12692
    case VECTOR_TYPE:
12693
      gen_array_type_die (type, context_die);
12694
      break;
12695
 
12696
    case ENUMERAL_TYPE:
12697
    case RECORD_TYPE:
12698
    case UNION_TYPE:
12699
    case QUAL_UNION_TYPE:
12700
      /* If this is a nested type whose containing class hasn't been written
12701
         out yet, writing it out will cover this one, too.  This does not apply
12702
         to instantiations of member class templates; they need to be added to
12703
         the containing class as they are generated.  FIXME: This hurts the
12704
         idea of combining type decls from multiple TUs, since we can't predict
12705
         what set of template instantiations we'll get.  */
12706
      if (TYPE_CONTEXT (type)
12707
          && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12708
          && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12709
        {
12710
          gen_type_die (TYPE_CONTEXT (type), context_die);
12711
 
12712
          if (TREE_ASM_WRITTEN (type))
12713
            return;
12714
 
12715
          /* If that failed, attach ourselves to the stub.  */
12716
          push_decl_scope (TYPE_CONTEXT (type));
12717
          context_die = lookup_type_die (TYPE_CONTEXT (type));
12718
          need_pop = 1;
12719
        }
12720
      else
12721
        {
12722
          declare_in_namespace (type, context_die);
12723
          need_pop = 0;
12724
        }
12725
 
12726
      if (TREE_CODE (type) == ENUMERAL_TYPE)
12727
        {
12728
          /* This might have been written out by the call to
12729
             declare_in_namespace.  */
12730
          if (!TREE_ASM_WRITTEN (type))
12731
            gen_enumeration_type_die (type, context_die);
12732
        }
12733
      else
12734
        gen_struct_or_union_type_die (type, context_die);
12735
 
12736
      if (need_pop)
12737
        pop_decl_scope ();
12738
 
12739
      /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12740
         it up if it is ever completed.  gen_*_type_die will set it for us
12741
         when appropriate.  */
12742
      return;
12743
 
12744
    case VOID_TYPE:
12745
    case INTEGER_TYPE:
12746
    case REAL_TYPE:
12747
    case COMPLEX_TYPE:
12748
    case BOOLEAN_TYPE:
12749
      /* No DIEs needed for fundamental types.  */
12750
      break;
12751
 
12752
    case LANG_TYPE:
12753
      /* No Dwarf representation currently defined.  */
12754
      break;
12755
 
12756
    default:
12757
      gcc_unreachable ();
12758
    }
12759
 
12760
  TREE_ASM_WRITTEN (type) = 1;
12761
}
12762
 
12763
/* Generate a DIE for a tagged type instantiation.  */
12764
 
12765
static void
12766
gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12767
{
12768
  if (type == NULL_TREE || type == error_mark_node)
12769
    return;
12770
 
12771
  /* We are going to output a DIE to represent the unqualified version of
12772
     this type (i.e. without any const or volatile qualifiers) so make sure
12773
     that we have the main variant (i.e. the unqualified version) of this
12774
     type now.  */
12775
  gcc_assert (type == type_main_variant (type));
12776
 
12777
  /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12778
     an instance of an unresolved type.  */
12779
 
12780
  switch (TREE_CODE (type))
12781
    {
12782
    case ERROR_MARK:
12783
      break;
12784
 
12785
    case ENUMERAL_TYPE:
12786
      gen_inlined_enumeration_type_die (type, context_die);
12787
      break;
12788
 
12789
    case RECORD_TYPE:
12790
      gen_inlined_structure_type_die (type, context_die);
12791
      break;
12792
 
12793
    case UNION_TYPE:
12794
    case QUAL_UNION_TYPE:
12795
      gen_inlined_union_type_die (type, context_die);
12796
      break;
12797
 
12798
    default:
12799
      gcc_unreachable ();
12800
    }
12801
}
12802
 
12803
/* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12804
   things which are local to the given block.  */
12805
 
12806
static void
12807
gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12808
{
12809
  int must_output_die = 0;
12810
  tree origin;
12811
  tree decl;
12812
  enum tree_code origin_code;
12813
 
12814
  /* Ignore blocks that are NULL.  */
12815
  if (stmt == NULL_TREE)
12816
    return;
12817
 
12818
  /* If the block is one fragment of a non-contiguous block, do not
12819
     process the variables, since they will have been done by the
12820
     origin block.  Do process subblocks.  */
12821
  if (BLOCK_FRAGMENT_ORIGIN (stmt))
12822
    {
12823
      tree sub;
12824
 
12825
      for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12826
        gen_block_die (sub, context_die, depth + 1);
12827
 
12828
      return;
12829
    }
12830
 
12831
  /* Determine the "ultimate origin" of this block.  This block may be an
12832
     inlined instance of an inlined instance of inline function, so we have
12833
     to trace all of the way back through the origin chain to find out what
12834
     sort of node actually served as the original seed for the creation of
12835
     the current block.  */
12836
  origin = block_ultimate_origin (stmt);
12837
  origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12838
 
12839
  /* Determine if we need to output any Dwarf DIEs at all to represent this
12840
     block.  */
12841
  if (origin_code == FUNCTION_DECL)
12842
    /* The outer scopes for inlinings *must* always be represented.  We
12843
       generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
12844
    must_output_die = 1;
12845
  else
12846
    {
12847
      /* In the case where the current block represents an inlining of the
12848
         "body block" of an inline function, we must *NOT* output any DIE for
12849
         this block because we have already output a DIE to represent the whole
12850
         inlined function scope and the "body block" of any function doesn't
12851
         really represent a different scope according to ANSI C rules.  So we
12852
         check here to make sure that this block does not represent a "body
12853
         block inlining" before trying to set the MUST_OUTPUT_DIE flag.  */
12854
      if (! is_body_block (origin ? origin : stmt))
12855
        {
12856
          /* Determine if this block directly contains any "significant"
12857
             local declarations which we will need to output DIEs for.  */
12858
          if (debug_info_level > DINFO_LEVEL_TERSE)
12859
            /* We are not in terse mode so *any* local declaration counts
12860
               as being a "significant" one.  */
12861
            must_output_die = (BLOCK_VARS (stmt) != NULL
12862
                               && (TREE_USED (stmt)
12863
                                   || TREE_ASM_WRITTEN (stmt)
12864
                                   || BLOCK_ABSTRACT (stmt)));
12865
          else
12866
            /* We are in terse mode, so only local (nested) function
12867
               definitions count as "significant" local declarations.  */
12868
            for (decl = BLOCK_VARS (stmt);
12869
                 decl != NULL; decl = TREE_CHAIN (decl))
12870
              if (TREE_CODE (decl) == FUNCTION_DECL
12871
                  && DECL_INITIAL (decl))
12872
                {
12873
                  must_output_die = 1;
12874
                  break;
12875
                }
12876
        }
12877
    }
12878
 
12879
  /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12880
     DIE for any block which contains no significant local declarations at
12881
     all.  Rather, in such cases we just call `decls_for_scope' so that any
12882
     needed Dwarf info for any sub-blocks will get properly generated. Note
12883
     that in terse mode, our definition of what constitutes a "significant"
12884
     local declaration gets restricted to include only inlined function
12885
     instances and local (nested) function definitions.  */
12886
  if (must_output_die)
12887
    {
12888
      if (origin_code == FUNCTION_DECL)
12889
        gen_inlined_subroutine_die (stmt, context_die, depth);
12890
      else
12891
        gen_lexical_block_die (stmt, context_die, depth);
12892
    }
12893
  else
12894
    decls_for_scope (stmt, context_die, depth);
12895
}
12896
 
12897
/* Generate all of the decls declared within a given scope and (recursively)
12898
   all of its sub-blocks.  */
12899
 
12900
static void
12901
decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12902
{
12903
  tree decl;
12904
  tree subblocks;
12905
 
12906
  /* Ignore NULL blocks.  */
12907
  if (stmt == NULL_TREE)
12908
    return;
12909
 
12910
  if (TREE_USED (stmt))
12911
    {
12912
      /* Output the DIEs to represent all of the data objects and typedefs
12913
         declared directly within this block but not within any nested
12914
         sub-blocks.  Also, nested function and tag DIEs have been
12915
         generated with a parent of NULL; fix that up now.  */
12916
      for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12917
        {
12918
          dw_die_ref die;
12919
 
12920
          if (TREE_CODE (decl) == FUNCTION_DECL)
12921
            die = lookup_decl_die (decl);
12922
          else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12923
            die = lookup_type_die (TREE_TYPE (decl));
12924
          else
12925
            die = NULL;
12926
 
12927
          if (die != NULL && die->die_parent == NULL)
12928
            add_child_die (context_die, die);
12929
          /* Do not produce debug information for static variables since
12930
             these might be optimized out.  We are called for these later
12931
             in cgraph_varpool_analyze_pending_decls. */
12932
          if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
12933
            ;
12934
          else
12935
            gen_decl_die (decl, context_die);
12936
        }
12937
    }
12938
 
12939
  /* If we're at -g1, we're not interested in subblocks.  */
12940
  if (debug_info_level <= DINFO_LEVEL_TERSE)
12941
    return;
12942
 
12943
  /* Output the DIEs to represent all sub-blocks (and the items declared
12944
     therein) of this block.  */
12945
  for (subblocks = BLOCK_SUBBLOCKS (stmt);
12946
       subblocks != NULL;
12947
       subblocks = BLOCK_CHAIN (subblocks))
12948
    gen_block_die (subblocks, context_die, depth + 1);
12949
}
12950
 
12951
/* Is this a typedef we can avoid emitting?  */
12952
 
12953
static inline int
12954
is_redundant_typedef (tree decl)
12955
{
12956
  if (TYPE_DECL_IS_STUB (decl))
12957
    return 1;
12958
 
12959
  if (DECL_ARTIFICIAL (decl)
12960
      && DECL_CONTEXT (decl)
12961
      && is_tagged_type (DECL_CONTEXT (decl))
12962
      && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12963
      && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12964
    /* Also ignore the artificial member typedef for the class name.  */
12965
    return 1;
12966
 
12967
  return 0;
12968
}
12969
 
12970
/* Returns the DIE for decl.  A DIE will always be returned.  */
12971
 
12972
static dw_die_ref
12973
force_decl_die (tree decl)
12974
{
12975
  dw_die_ref decl_die;
12976
  unsigned saved_external_flag;
12977
  tree save_fn = NULL_TREE;
12978
  decl_die = lookup_decl_die (decl);
12979
  if (!decl_die)
12980
    {
12981
      dw_die_ref context_die;
12982
      tree decl_context = DECL_CONTEXT (decl);
12983
      if (decl_context)
12984
        {
12985
          /* Find die that represents this context.  */
12986
          if (TYPE_P (decl_context))
12987
            context_die = force_type_die (decl_context);
12988
          else
12989
            context_die = force_decl_die (decl_context);
12990
        }
12991
      else
12992
        context_die = comp_unit_die;
12993
 
12994
      decl_die = lookup_decl_die (decl);
12995
      if (decl_die)
12996
        return decl_die;
12997
 
12998
      switch (TREE_CODE (decl))
12999
        {
13000
        case FUNCTION_DECL:
13001
          /* Clear current_function_decl, so that gen_subprogram_die thinks
13002
             that this is a declaration. At this point, we just want to force
13003
             declaration die.  */
13004
          save_fn = current_function_decl;
13005
          current_function_decl = NULL_TREE;
13006
          gen_subprogram_die (decl, context_die);
13007
          current_function_decl = save_fn;
13008
          break;
13009
 
13010
        case VAR_DECL:
13011
          /* Set external flag to force declaration die. Restore it after
13012
           gen_decl_die() call.  */
13013
          saved_external_flag = DECL_EXTERNAL (decl);
13014
          DECL_EXTERNAL (decl) = 1;
13015
          gen_decl_die (decl, context_die);
13016
          DECL_EXTERNAL (decl) = saved_external_flag;
13017
          break;
13018
 
13019
        case NAMESPACE_DECL:
13020
          dwarf2out_decl (decl);
13021
          break;
13022
 
13023
        default:
13024
          gcc_unreachable ();
13025
        }
13026
 
13027
      /* We should be able to find the DIE now.  */
13028
      if (!decl_die)
13029
        decl_die = lookup_decl_die (decl);
13030
      gcc_assert (decl_die);
13031
    }
13032
 
13033
  return decl_die;
13034
}
13035
 
13036
/* Returns the DIE for TYPE, that must not be a base type.  A DIE is
13037
   always returned.  */
13038
 
13039
static dw_die_ref
13040
force_type_die (tree type)
13041
{
13042
  dw_die_ref type_die;
13043
 
13044
  type_die = lookup_type_die (type);
13045
  if (!type_die)
13046
    {
13047
      dw_die_ref context_die;
13048
      if (TYPE_CONTEXT (type))
13049
        {
13050
          if (TYPE_P (TYPE_CONTEXT (type)))
13051
            context_die = force_type_die (TYPE_CONTEXT (type));
13052
          else
13053
            context_die = force_decl_die (TYPE_CONTEXT (type));
13054
        }
13055
      else
13056
        context_die = comp_unit_die;
13057
 
13058
      type_die = lookup_type_die (type);
13059
      if (type_die)
13060
        return type_die;
13061
      gen_type_die (type, context_die);
13062
      type_die = lookup_type_die (type);
13063
      gcc_assert (type_die);
13064
    }
13065
  return type_die;
13066
}
13067
 
13068
/* Force out any required namespaces to be able to output DECL,
13069
   and return the new context_die for it, if it's changed.  */
13070
 
13071
static dw_die_ref
13072
setup_namespace_context (tree thing, dw_die_ref context_die)
13073
{
13074
  tree context = (DECL_P (thing)
13075
                  ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
13076
  if (context && TREE_CODE (context) == NAMESPACE_DECL)
13077
    /* Force out the namespace.  */
13078
    context_die = force_decl_die (context);
13079
 
13080
  return context_die;
13081
}
13082
 
13083
/* Emit a declaration DIE for THING (which is either a DECL or a tagged
13084
   type) within its namespace, if appropriate.
13085
 
13086
   For compatibility with older debuggers, namespace DIEs only contain
13087
   declarations; all definitions are emitted at CU scope.  */
13088
 
13089
static void
13090
declare_in_namespace (tree thing, dw_die_ref context_die)
13091
{
13092
  dw_die_ref ns_context;
13093
 
13094
  if (debug_info_level <= DINFO_LEVEL_TERSE)
13095
    return;
13096
 
13097
  /* If this decl is from an inlined function, then don't try to emit it in its
13098
     namespace, as we will get confused.  It would have already been emitted
13099
     when the abstract instance of the inline function was emitted anyways.  */
13100
  if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
13101
    return;
13102
 
13103
  ns_context = setup_namespace_context (thing, context_die);
13104
 
13105
  if (ns_context != context_die)
13106
    {
13107
      if (DECL_P (thing))
13108
        gen_decl_die (thing, ns_context);
13109
      else
13110
        gen_type_die (thing, ns_context);
13111
    }
13112
}
13113
 
13114
/* Generate a DIE for a namespace or namespace alias.  */
13115
 
13116
static void
13117
gen_namespace_die (tree decl)
13118
{
13119
  dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
13120
 
13121
  /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
13122
     they are an alias of.  */
13123
  if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
13124
    {
13125
      /* Output a real namespace.  */
13126
      dw_die_ref namespace_die
13127
        = new_die (DW_TAG_namespace, context_die, decl);
13128
      add_name_and_src_coords_attributes (namespace_die, decl);
13129
      equate_decl_number_to_die (decl, namespace_die);
13130
    }
13131
  else
13132
    {
13133
      /* Output a namespace alias.  */
13134
 
13135
      /* Force out the namespace we are an alias of, if necessary.  */
13136
      dw_die_ref origin_die
13137
        = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
13138
 
13139
      /* Now create the namespace alias DIE.  */
13140
      dw_die_ref namespace_die
13141
        = new_die (DW_TAG_imported_declaration, context_die, decl);
13142
      add_name_and_src_coords_attributes (namespace_die, decl);
13143
      add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
13144
      equate_decl_number_to_die (decl, namespace_die);
13145
    }
13146
}
13147
 
13148
/* Generate Dwarf debug information for a decl described by DECL.  */
13149
 
13150
static void
13151
gen_decl_die (tree decl, dw_die_ref context_die)
13152
{
13153
  tree origin;
13154
 
13155
  if (DECL_P (decl) && DECL_IGNORED_P (decl))
13156
    return;
13157
 
13158
  switch (TREE_CODE (decl))
13159
    {
13160
    case ERROR_MARK:
13161
      break;
13162
 
13163
    case CONST_DECL:
13164
      /* The individual enumerators of an enum type get output when we output
13165
         the Dwarf representation of the relevant enum type itself.  */
13166
      break;
13167
 
13168
    case FUNCTION_DECL:
13169
      /* Don't output any DIEs to represent mere function declarations,
13170
         unless they are class members or explicit block externs.  */
13171
      if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
13172
          && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
13173
        break;
13174
 
13175
#if 0
13176
      /* FIXME */
13177
      /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
13178
         on local redeclarations of global functions.  That seems broken.  */
13179
      if (current_function_decl != decl)
13180
        /* This is only a declaration.  */;
13181
#endif
13182
 
13183
      /* If we're emitting a clone, emit info for the abstract instance.  */
13184
      if (DECL_ORIGIN (decl) != decl)
13185
        dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
13186
 
13187
      /* If we're emitting an out-of-line copy of an inline function,
13188
         emit info for the abstract instance and set up to refer to it.  */
13189
      else if (cgraph_function_possibly_inlined_p (decl)
13190
               && ! DECL_ABSTRACT (decl)
13191
               && ! class_or_namespace_scope_p (context_die)
13192
               /* dwarf2out_abstract_function won't emit a die if this is just
13193
                  a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
13194
                  that case, because that works only if we have a die.  */
13195
               && DECL_INITIAL (decl) != NULL_TREE)
13196
        {
13197
          dwarf2out_abstract_function (decl);
13198
          set_decl_origin_self (decl);
13199
        }
13200
 
13201
      /* Otherwise we're emitting the primary DIE for this decl.  */
13202
      else if (debug_info_level > DINFO_LEVEL_TERSE)
13203
        {
13204
          /* Before we describe the FUNCTION_DECL itself, make sure that we
13205
             have described its return type.  */
13206
          gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13207
 
13208
          /* And its virtual context.  */
13209
          if (DECL_VINDEX (decl) != NULL_TREE)
13210
            gen_type_die (DECL_CONTEXT (decl), context_die);
13211
 
13212
          /* And its containing type.  */
13213
          origin = decl_class_context (decl);
13214
          if (origin != NULL_TREE)
13215
            gen_type_die_for_member (origin, decl, context_die);
13216
 
13217
          /* And its containing namespace.  */
13218
          declare_in_namespace (decl, context_die);
13219
        }
13220
 
13221
      /* Now output a DIE to represent the function itself.  */
13222
      gen_subprogram_die (decl, context_die);
13223
      break;
13224
 
13225
    case TYPE_DECL:
13226
      /* If we are in terse mode, don't generate any DIEs to represent any
13227
         actual typedefs.  */
13228
      if (debug_info_level <= DINFO_LEVEL_TERSE)
13229
        break;
13230
 
13231
      /* In the special case of a TYPE_DECL node representing the declaration
13232
         of some type tag, if the given TYPE_DECL is marked as having been
13233
         instantiated from some other (original) TYPE_DECL node (e.g. one which
13234
         was generated within the original definition of an inline function) we
13235
         have to generate a special (abbreviated) DW_TAG_structure_type,
13236
         DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  */
13237
      if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE
13238
          && is_tagged_type (TREE_TYPE (decl)))
13239
        {
13240
          gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
13241
          break;
13242
        }
13243
 
13244
      if (is_redundant_typedef (decl))
13245
        gen_type_die (TREE_TYPE (decl), context_die);
13246
      else
13247
        /* Output a DIE to represent the typedef itself.  */
13248
        gen_typedef_die (decl, context_die);
13249
      break;
13250
 
13251
    case LABEL_DECL:
13252
      if (debug_info_level >= DINFO_LEVEL_NORMAL)
13253
        gen_label_die (decl, context_die);
13254
      break;
13255
 
13256
    case VAR_DECL:
13257
    case RESULT_DECL:
13258
      /* If we are in terse mode, don't generate any DIEs to represent any
13259
         variable declarations or definitions.  */
13260
      if (debug_info_level <= DINFO_LEVEL_TERSE)
13261
        break;
13262
 
13263
      /* Output any DIEs that are needed to specify the type of this data
13264
         object.  */
13265
      gen_type_die (TREE_TYPE (decl), context_die);
13266
 
13267
      /* And its containing type.  */
13268
      origin = decl_class_context (decl);
13269
      if (origin != NULL_TREE)
13270
        gen_type_die_for_member (origin, decl, context_die);
13271
 
13272
      /* And its containing namespace.  */
13273
      declare_in_namespace (decl, context_die);
13274
 
13275
      /* Now output the DIE to represent the data object itself.  This gets
13276
         complicated because of the possibility that the VAR_DECL really
13277
         represents an inlined instance of a formal parameter for an inline
13278
         function.  */
13279
      origin = decl_ultimate_origin (decl);
13280
      if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
13281
        gen_formal_parameter_die (decl, context_die);
13282
      else
13283
        gen_variable_die (decl, context_die);
13284
      break;
13285
 
13286
    case FIELD_DECL:
13287
      /* Ignore the nameless fields that are used to skip bits but handle C++
13288
         anonymous unions and structs.  */
13289
      if (DECL_NAME (decl) != NULL_TREE
13290
          || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
13291
          || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
13292
        {
13293
          gen_type_die (member_declared_type (decl), context_die);
13294
          gen_field_die (decl, context_die);
13295
        }
13296
      break;
13297
 
13298
    case PARM_DECL:
13299
      gen_type_die (TREE_TYPE (decl), context_die);
13300
      gen_formal_parameter_die (decl, context_die);
13301
      break;
13302
 
13303
    case NAMESPACE_DECL:
13304
      gen_namespace_die (decl);
13305
      break;
13306
 
13307
    default:
13308
      /* Probably some frontend-internal decl.  Assume we don't care.  */
13309
      gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
13310
      break;
13311
    }
13312
}
13313
 
13314
/* Output debug information for global decl DECL.  Called from toplev.c after
13315
   compilation proper has finished.  */
13316
 
13317
static void
13318
dwarf2out_global_decl (tree decl)
13319
{
13320
  /* Output DWARF2 information for file-scope tentative data object
13321
     declarations, file-scope (extern) function declarations (which had no
13322
     corresponding body) and file-scope tagged type declarations and
13323
     definitions which have not yet been forced out.  */
13324
  if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
13325
    dwarf2out_decl (decl);
13326
}
13327
 
13328
/* Output debug information for type decl DECL.  Called from toplev.c
13329
   and from language front ends (to record built-in types).  */
13330
static void
13331
dwarf2out_type_decl (tree decl, int local)
13332
{
13333
  if (!local)
13334
    dwarf2out_decl (decl);
13335
}
13336
 
13337
/* Output debug information for imported module or decl.  */
13338
 
13339
static void
13340
dwarf2out_imported_module_or_decl (tree decl, tree context)
13341
{
13342
  dw_die_ref imported_die, at_import_die;
13343
  dw_die_ref scope_die;
13344
  expanded_location xloc;
13345
 
13346
  if (debug_info_level <= DINFO_LEVEL_TERSE)
13347
    return;
13348
 
13349
  gcc_assert (decl);
13350
 
13351
  /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
13352
     We need decl DIE for reference and scope die. First, get DIE for the decl
13353
     itself.  */
13354
 
13355
  /* Get the scope die for decl context. Use comp_unit_die for global module
13356
     or decl. If die is not found for non globals, force new die.  */
13357
  if (!context)
13358
    scope_die = comp_unit_die;
13359
  else if (TYPE_P (context))
13360
    scope_die = force_type_die (context);
13361
  else
13362
    scope_die = force_decl_die (context);
13363
 
13364
  /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE.  */
13365
  if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
13366
    {
13367
      if (is_base_type (TREE_TYPE (decl)))
13368
        at_import_die = base_type_die (TREE_TYPE (decl));
13369
      else
13370
        at_import_die = force_type_die (TREE_TYPE (decl));
13371
    }
13372
  else
13373
    {
13374
      at_import_die = lookup_decl_die (decl);
13375
      if (!at_import_die)
13376
        {
13377
          /* If we're trying to avoid duplicate debug info, we may not have
13378
             emitted the member decl for this field.  Emit it now.  */
13379
          if (TREE_CODE (decl) == FIELD_DECL)
13380
            {
13381
              tree type = DECL_CONTEXT (decl);
13382
              dw_die_ref type_context_die;
13383
 
13384
              if (TYPE_CONTEXT (type))
13385
                if (TYPE_P (TYPE_CONTEXT (type)))
13386
                  type_context_die = force_type_die (TYPE_CONTEXT (type));
13387
              else
13388
                type_context_die = force_decl_die (TYPE_CONTEXT (type));
13389
              else
13390
                type_context_die = comp_unit_die;
13391
              gen_type_die_for_member (type, decl, type_context_die);
13392
            }
13393
          at_import_die = force_decl_die (decl);
13394
        }
13395
    }
13396
 
13397
  /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
13398
  if (TREE_CODE (decl) == NAMESPACE_DECL)
13399
    imported_die = new_die (DW_TAG_imported_module, scope_die, context);
13400
  else
13401
    imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
13402
 
13403
  xloc = expand_location (input_location);
13404
  add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
13405
  add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
13406
  add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
13407
}
13408
 
13409
/* Write the debugging output for DECL.  */
13410
 
13411
void
13412
dwarf2out_decl (tree decl)
13413
{
13414
  dw_die_ref context_die = comp_unit_die;
13415
 
13416
  switch (TREE_CODE (decl))
13417
    {
13418
    case ERROR_MARK:
13419
      return;
13420
 
13421
    case FUNCTION_DECL:
13422
      /* What we would really like to do here is to filter out all mere
13423
         file-scope declarations of file-scope functions which are never
13424
         referenced later within this translation unit (and keep all of ones
13425
         that *are* referenced later on) but we aren't clairvoyant, so we have
13426
         no idea which functions will be referenced in the future (i.e. later
13427
         on within the current translation unit). So here we just ignore all
13428
         file-scope function declarations which are not also definitions.  If
13429
         and when the debugger needs to know something about these functions,
13430
         it will have to hunt around and find the DWARF information associated
13431
         with the definition of the function.
13432
 
13433
         We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
13434
         nodes represent definitions and which ones represent mere
13435
         declarations.  We have to check DECL_INITIAL instead. That's because
13436
         the C front-end supports some weird semantics for "extern inline"
13437
         function definitions.  These can get inlined within the current
13438
         translation unit (and thus, we need to generate Dwarf info for their
13439
         abstract instances so that the Dwarf info for the concrete inlined
13440
         instances can have something to refer to) but the compiler never
13441
         generates any out-of-lines instances of such things (despite the fact
13442
         that they *are* definitions).
13443
 
13444
         The important point is that the C front-end marks these "extern
13445
         inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
13446
         them anyway. Note that the C++ front-end also plays some similar games
13447
         for inline function definitions appearing within include files which
13448
         also contain `#pragma interface' pragmas.  */
13449
      if (DECL_INITIAL (decl) == NULL_TREE)
13450
        return;
13451
 
13452
      /* If we're a nested function, initially use a parent of NULL; if we're
13453
         a plain function, this will be fixed up in decls_for_scope.  If
13454
         we're a method, it will be ignored, since we already have a DIE.  */
13455
      if (decl_function_context (decl)
13456
          /* But if we're in terse mode, we don't care about scope.  */
13457
          && debug_info_level > DINFO_LEVEL_TERSE)
13458
        context_die = NULL;
13459
      break;
13460
 
13461
    case VAR_DECL:
13462
      /* Ignore this VAR_DECL if it refers to a file-scope extern data object
13463
         declaration and if the declaration was never even referenced from
13464
         within this entire compilation unit.  We suppress these DIEs in
13465
         order to save space in the .debug section (by eliminating entries
13466
         which are probably useless).  Note that we must not suppress
13467
         block-local extern declarations (whether used or not) because that
13468
         would screw-up the debugger's name lookup mechanism and cause it to
13469
         miss things which really ought to be in scope at a given point.  */
13470
      if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
13471
        return;
13472
 
13473
      /* For local statics lookup proper context die.  */
13474
      if (TREE_STATIC (decl) && decl_function_context (decl))
13475
        context_die = lookup_decl_die (DECL_CONTEXT (decl));
13476
 
13477
      /* If we are in terse mode, don't generate any DIEs to represent any
13478
         variable declarations or definitions.  */
13479
      if (debug_info_level <= DINFO_LEVEL_TERSE)
13480
        return;
13481
      break;
13482
 
13483
    case NAMESPACE_DECL:
13484
      if (debug_info_level <= DINFO_LEVEL_TERSE)
13485
        return;
13486
      if (lookup_decl_die (decl) != NULL)
13487
        return;
13488
      break;
13489
 
13490
    case TYPE_DECL:
13491
      /* Don't emit stubs for types unless they are needed by other DIEs.  */
13492
      if (TYPE_DECL_SUPPRESS_DEBUG (decl))
13493
        return;
13494
 
13495
      /* Don't bother trying to generate any DIEs to represent any of the
13496
         normal built-in types for the language we are compiling.  */
13497
      if (DECL_IS_BUILTIN (decl))
13498
        {
13499
          /* OK, we need to generate one for `bool' so GDB knows what type
13500
             comparisons have.  */
13501
          if (is_cxx ()
13502
              && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
13503
              && ! DECL_IGNORED_P (decl))
13504
            modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
13505
 
13506
          return;
13507
        }
13508
 
13509
      /* If we are in terse mode, don't generate any DIEs for types.  */
13510
      if (debug_info_level <= DINFO_LEVEL_TERSE)
13511
        return;
13512
 
13513
      /* If we're a function-scope tag, initially use a parent of NULL;
13514
         this will be fixed up in decls_for_scope.  */
13515
      if (decl_function_context (decl))
13516
        context_die = NULL;
13517
 
13518
      break;
13519
 
13520
    default:
13521
      return;
13522
    }
13523
 
13524
  gen_decl_die (decl, context_die);
13525
}
13526
 
13527
/* Output a marker (i.e. a label) for the beginning of the generated code for
13528
   a lexical block.  */
13529
 
13530
static void
13531
dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
13532
                       unsigned int blocknum)
13533
{
13534
  switch_to_section (current_function_section ());
13535
  ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
13536
}
13537
 
13538
/* Output a marker (i.e. a label) for the end of the generated code for a
13539
   lexical block.  */
13540
 
13541
static void
13542
dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
13543
{
13544
  switch_to_section (current_function_section ());
13545
  ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
13546
}
13547
 
13548
/* Returns nonzero if it is appropriate not to emit any debugging
13549
   information for BLOCK, because it doesn't contain any instructions.
13550
 
13551
   Don't allow this for blocks with nested functions or local classes
13552
   as we would end up with orphans, and in the presence of scheduling
13553
   we may end up calling them anyway.  */
13554
 
13555
static bool
13556
dwarf2out_ignore_block (tree block)
13557
{
13558
  tree decl;
13559
 
13560
  for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
13561
    if (TREE_CODE (decl) == FUNCTION_DECL
13562
        || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
13563
      return 0;
13564
 
13565
  return 1;
13566
}
13567
 
13568
/* Hash table routines for file_hash.  */
13569
 
13570
static int
13571
file_table_eq (const void *p1_p, const void *p2_p)
13572
{
13573
  const struct dwarf_file_data * p1 = p1_p;
13574
  const char * p2 = p2_p;
13575
  return strcmp (p1->filename, p2) == 0;
13576
}
13577
 
13578
static hashval_t
13579
file_table_hash (const void *p_p)
13580
{
13581
  const struct dwarf_file_data * p = p_p;
13582
  return htab_hash_string (p->filename);
13583
}
13584
 
13585
/* Lookup FILE_NAME (in the list of filenames that we know about here in
13586
   dwarf2out.c) and return its "index".  The index of each (known) filename is
13587
   just a unique number which is associated with only that one filename.  We
13588
   need such numbers for the sake of generating labels (in the .debug_sfnames
13589
   section) and references to those files numbers (in the .debug_srcinfo
13590
   and.debug_macinfo sections).  If the filename given as an argument is not
13591
   found in our current list, add it to the list and assign it the next
13592
   available unique index number.  In order to speed up searches, we remember
13593
   the index of the filename was looked up last.  This handles the majority of
13594
   all searches.  */
13595
 
13596
static struct dwarf_file_data *
13597
lookup_filename (const char *file_name)
13598
{
13599
  void ** slot;
13600
  struct dwarf_file_data * created;
13601
 
13602
  /* Check to see if the file name that was searched on the previous
13603
     call matches this file name.  If so, return the index.  */
13604
  if (file_table_last_lookup
13605
      && (file_name == file_table_last_lookup->filename
13606
          || strcmp (file_table_last_lookup->filename, file_name) == 0))
13607
    return file_table_last_lookup;
13608
 
13609
  /* Didn't match the previous lookup, search the table.  */
13610
  slot = htab_find_slot_with_hash (file_table, file_name,
13611
                                   htab_hash_string (file_name), INSERT);
13612
  if (*slot)
13613
    return *slot;
13614
 
13615
  created = ggc_alloc (sizeof (struct dwarf_file_data));
13616
  created->filename = file_name;
13617
  created->emitted_number = 0;
13618
  *slot = created;
13619
  return created;
13620
}
13621
 
13622
/* If the assembler will construct the file table, then translate the compiler
13623
   internal file table number into the assembler file table number, and emit
13624
   a .file directive if we haven't already emitted one yet.  The file table
13625
   numbers are different because we prune debug info for unused variables and
13626
   types, which may include filenames.  */
13627
 
13628
static int
13629
maybe_emit_file (struct dwarf_file_data * fd)
13630
{
13631
  if (! fd->emitted_number)
13632
    {
13633
      if (last_emitted_file)
13634
        fd->emitted_number = last_emitted_file->emitted_number + 1;
13635
      else
13636
        fd->emitted_number = 1;
13637
      last_emitted_file = fd;
13638
 
13639
      if (DWARF2_ASM_LINE_DEBUG_INFO)
13640
        {
13641
          fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
13642
          output_quoted_string (asm_out_file, fd->filename);
13643
          fputc ('\n', asm_out_file);
13644
        }
13645
    }
13646
 
13647
  return fd->emitted_number;
13648
}
13649
 
13650
/* Called by the final INSN scan whenever we see a var location.  We
13651
   use it to drop labels in the right places, and throw the location in
13652
   our lookup table.  */
13653
 
13654
static void
13655
dwarf2out_var_location (rtx loc_note)
13656
{
13657
  char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
13658
  struct var_loc_node *newloc;
13659
  rtx prev_insn;
13660
  static rtx last_insn;
13661
  static const char *last_label;
13662
  tree decl;
13663
 
13664
  if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
13665
    return;
13666
  prev_insn = PREV_INSN (loc_note);
13667
 
13668
  newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
13669
  /* If the insn we processed last time is the previous insn
13670
     and it is also a var location note, use the label we emitted
13671
     last time.  */
13672
  if (last_insn != NULL_RTX
13673
      && last_insn == prev_insn
13674
      && NOTE_P (prev_insn)
13675
      && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
13676
    {
13677
      newloc->label = last_label;
13678
    }
13679
  else
13680
    {
13681
      ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
13682
      ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
13683
      loclabel_num++;
13684
      newloc->label = ggc_strdup (loclabel);
13685
    }
13686
  newloc->var_loc_note = loc_note;
13687
  newloc->next = NULL;
13688
 
13689
  if (cfun && in_cold_section_p)
13690
    newloc->section_label = cfun->cold_section_label;
13691
  else
13692
    newloc->section_label = text_section_label;
13693
 
13694
  last_insn = loc_note;
13695
  last_label = newloc->label;
13696
  decl = NOTE_VAR_LOCATION_DECL (loc_note);
13697
  add_var_loc_to_decl (decl, newloc);
13698
}
13699
 
13700
/* We need to reset the locations at the beginning of each
13701
   function. We can't do this in the end_function hook, because the
13702
   declarations that use the locations won't have been output when
13703
   that hook is called.  Also compute have_multiple_function_sections here.  */
13704
 
13705
static void
13706
dwarf2out_begin_function (tree fun)
13707
{
13708
  htab_empty (decl_loc_table);
13709
 
13710
  if (function_section (fun) != text_section)
13711
    have_multiple_function_sections = true;
13712
}
13713
 
13714
/* Output a label to mark the beginning of a source code line entry
13715
   and record information relating to this source line, in
13716
   'line_info_table' for later output of the .debug_line section.  */
13717
 
13718
static void
13719
dwarf2out_source_line (unsigned int line, const char *filename)
13720
{
13721
  if (debug_info_level >= DINFO_LEVEL_NORMAL
13722
      && line != 0)
13723
    {
13724
      int file_num = maybe_emit_file (lookup_filename (filename));
13725
 
13726
      switch_to_section (current_function_section ());
13727
 
13728
      /* If requested, emit something human-readable.  */
13729
      if (flag_debug_asm)
13730
        fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
13731
                 filename, line);
13732
 
13733
      if (DWARF2_ASM_LINE_DEBUG_INFO)
13734
        {
13735
          /* Emit the .loc directive understood by GNU as.  */
13736
          fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
13737
 
13738
          /* Indicate that line number info exists.  */
13739
          line_info_table_in_use++;
13740
        }
13741
      else if (function_section (current_function_decl) != text_section)
13742
        {
13743
          dw_separate_line_info_ref line_info;
13744
          targetm.asm_out.internal_label (asm_out_file,
13745
                                          SEPARATE_LINE_CODE_LABEL,
13746
                                          separate_line_info_table_in_use);
13747
 
13748
          /* Expand the line info table if necessary.  */
13749
          if (separate_line_info_table_in_use
13750
              == separate_line_info_table_allocated)
13751
            {
13752
              separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13753
              separate_line_info_table
13754
                = ggc_realloc (separate_line_info_table,
13755
                               separate_line_info_table_allocated
13756
                               * sizeof (dw_separate_line_info_entry));
13757
              memset (separate_line_info_table
13758
                       + separate_line_info_table_in_use,
13759
                      0,
13760
                      (LINE_INFO_TABLE_INCREMENT
13761
                       * sizeof (dw_separate_line_info_entry)));
13762
            }
13763
 
13764
          /* Add the new entry at the end of the line_info_table.  */
13765
          line_info
13766
            = &separate_line_info_table[separate_line_info_table_in_use++];
13767
          line_info->dw_file_num = file_num;
13768
          line_info->dw_line_num = line;
13769
          line_info->function = current_function_funcdef_no;
13770
        }
13771
      else
13772
        {
13773
          dw_line_info_ref line_info;
13774
 
13775
          targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
13776
                                     line_info_table_in_use);
13777
 
13778
          /* Expand the line info table if necessary.  */
13779
          if (line_info_table_in_use == line_info_table_allocated)
13780
            {
13781
              line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13782
              line_info_table
13783
                = ggc_realloc (line_info_table,
13784
                               (line_info_table_allocated
13785
                                * sizeof (dw_line_info_entry)));
13786
              memset (line_info_table + line_info_table_in_use, 0,
13787
                      LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
13788
            }
13789
 
13790
          /* Add the new entry at the end of the line_info_table.  */
13791
          line_info = &line_info_table[line_info_table_in_use++];
13792
          line_info->dw_file_num = file_num;
13793
          line_info->dw_line_num = line;
13794
        }
13795
    }
13796
}
13797
 
13798
/* Record the beginning of a new source file.  */
13799
 
13800
static void
13801
dwarf2out_start_source_file (unsigned int lineno, const char *filename)
13802
{
13803
  if (flag_eliminate_dwarf2_dups)
13804
    {
13805
      /* Record the beginning of the file for break_out_includes.  */
13806
      dw_die_ref bincl_die;
13807
 
13808
      bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
13809
      add_AT_string (bincl_die, DW_AT_name, filename);
13810
    }
13811
 
13812
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13813
    {
13814
      int file_num = maybe_emit_file (lookup_filename (filename));
13815
 
13816
      switch_to_section (debug_macinfo_section);
13817
      dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
13818
      dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
13819
                                   lineno);
13820
 
13821
      dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
13822
    }
13823
}
13824
 
13825
/* Record the end of a source file.  */
13826
 
13827
static void
13828
dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
13829
{
13830
  if (flag_eliminate_dwarf2_dups)
13831
    /* Record the end of the file for break_out_includes.  */
13832
    new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
13833
 
13834
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13835
    {
13836
      switch_to_section (debug_macinfo_section);
13837
      dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13838
    }
13839
}
13840
 
13841
/* Called from debug_define in toplev.c.  The `buffer' parameter contains
13842
   the tail part of the directive line, i.e. the part which is past the
13843
   initial whitespace, #, whitespace, directive-name, whitespace part.  */
13844
 
13845
static void
13846
dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13847
                  const char *buffer ATTRIBUTE_UNUSED)
13848
{
13849
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13850
    {
13851
      switch_to_section (debug_macinfo_section);
13852
      dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13853
      dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13854
      dw2_asm_output_nstring (buffer, -1, "The macro");
13855
    }
13856
}
13857
 
13858
/* Called from debug_undef in toplev.c.  The `buffer' parameter contains
13859
   the tail part of the directive line, i.e. the part which is past the
13860
   initial whitespace, #, whitespace, directive-name, whitespace part.  */
13861
 
13862
static void
13863
dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13864
                 const char *buffer ATTRIBUTE_UNUSED)
13865
{
13866
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13867
    {
13868
      switch_to_section (debug_macinfo_section);
13869
      dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13870
      dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13871
      dw2_asm_output_nstring (buffer, -1, "The macro");
13872
    }
13873
}
13874
 
13875
/* Set up for Dwarf output at the start of compilation.  */
13876
 
13877
static void
13878
dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13879
{
13880
  /* Allocate the file_table.  */
13881
  file_table = htab_create_ggc (50, file_table_hash,
13882
                                file_table_eq, NULL);
13883
 
13884
  /* Allocate the decl_die_table.  */
13885
  decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13886
                                    decl_die_table_eq, NULL);
13887
 
13888
  /* Allocate the decl_loc_table.  */
13889
  decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13890
                                    decl_loc_table_eq, NULL);
13891
 
13892
  /* Allocate the initial hunk of the decl_scope_table.  */
13893
  decl_scope_table = VEC_alloc (tree, gc, 256);
13894
 
13895
  /* Allocate the initial hunk of the abbrev_die_table.  */
13896
  abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13897
                                        * sizeof (dw_die_ref));
13898
  abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13899
  /* Zero-th entry is allocated, but unused.  */
13900
  abbrev_die_table_in_use = 1;
13901
 
13902
  /* Allocate the initial hunk of the line_info_table.  */
13903
  line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13904
                                       * sizeof (dw_line_info_entry));
13905
  line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13906
 
13907
  /* Zero-th entry is allocated, but unused.  */
13908
  line_info_table_in_use = 1;
13909
 
13910
  /* Generate the initial DIE for the .debug section.  Note that the (string)
13911
     value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13912
     will (typically) be a relative pathname and that this pathname should be
13913
     taken as being relative to the directory from which the compiler was
13914
     invoked when the given (base) source file was compiled.  We will fill
13915
     in this value in dwarf2out_finish.  */
13916
  comp_unit_die = gen_compile_unit_die (NULL);
13917
 
13918
  incomplete_types = VEC_alloc (tree, gc, 64);
13919
 
13920
  used_rtx_array = VEC_alloc (rtx, gc, 32);
13921
 
13922
  debug_info_section = get_section (DEBUG_INFO_SECTION,
13923
                                    SECTION_DEBUG, NULL);
13924
  debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
13925
                                      SECTION_DEBUG, NULL);
13926
  debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
13927
                                       SECTION_DEBUG, NULL);
13928
  debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
13929
                                       SECTION_DEBUG, NULL);
13930
  debug_line_section = get_section (DEBUG_LINE_SECTION,
13931
                                    SECTION_DEBUG, NULL);
13932
  debug_loc_section = get_section (DEBUG_LOC_SECTION,
13933
                                   SECTION_DEBUG, NULL);
13934
  debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
13935
                                        SECTION_DEBUG, NULL);
13936
  debug_str_section = get_section (DEBUG_STR_SECTION,
13937
                                   DEBUG_STR_SECTION_FLAGS, NULL);
13938
  debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
13939
                                      SECTION_DEBUG, NULL);
13940
  debug_frame_section = get_section (DEBUG_FRAME_SECTION,
13941
                                     SECTION_DEBUG, NULL);
13942
 
13943
  ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13944
  ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13945
                               DEBUG_ABBREV_SECTION_LABEL, 0);
13946
  ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13947
  ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
13948
                               COLD_TEXT_SECTION_LABEL, 0);
13949
  ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
13950
 
13951
  ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13952
                               DEBUG_INFO_SECTION_LABEL, 0);
13953
  ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13954
                               DEBUG_LINE_SECTION_LABEL, 0);
13955
  ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13956
                               DEBUG_RANGES_SECTION_LABEL, 0);
13957
  switch_to_section (debug_abbrev_section);
13958
  ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13959
  switch_to_section (debug_info_section);
13960
  ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13961
  switch_to_section (debug_line_section);
13962
  ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13963
 
13964
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13965
    {
13966
      switch_to_section (debug_macinfo_section);
13967
      ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13968
                                   DEBUG_MACINFO_SECTION_LABEL, 0);
13969
      ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13970
    }
13971
 
13972
  switch_to_section (text_section);
13973
  ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13974
  if (flag_reorder_blocks_and_partition)
13975
    {
13976
      switch_to_section (unlikely_text_section ());
13977
      ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
13978
    }
13979
}
13980
 
13981
/* A helper function for dwarf2out_finish called through
13982
   ht_forall.  Emit one queued .debug_str string.  */
13983
 
13984
static int
13985
output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13986
{
13987
  struct indirect_string_node *node = (struct indirect_string_node *) *h;
13988
 
13989
  if (node->form == DW_FORM_strp)
13990
    {
13991
      switch_to_section (debug_str_section);
13992
      ASM_OUTPUT_LABEL (asm_out_file, node->label);
13993
      assemble_string (node->str, strlen (node->str) + 1);
13994
    }
13995
 
13996
  return 1;
13997
}
13998
 
13999
#if ENABLE_ASSERT_CHECKING
14000
/* Verify that all marks are clear.  */
14001
 
14002
static void
14003
verify_marks_clear (dw_die_ref die)
14004
{
14005
  dw_die_ref c;
14006
 
14007
  gcc_assert (! die->die_mark);
14008
  FOR_EACH_CHILD (die, c, verify_marks_clear (c));
14009
}
14010
#endif /* ENABLE_ASSERT_CHECKING */
14011
 
14012
/* Clear the marks for a die and its children.
14013
   Be cool if the mark isn't set.  */
14014
 
14015
static void
14016
prune_unmark_dies (dw_die_ref die)
14017
{
14018
  dw_die_ref c;
14019
 
14020
  if (die->die_mark)
14021
    die->die_mark = 0;
14022
  FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
14023
}
14024
 
14025
/* Given DIE that we're marking as used, find any other dies
14026
   it references as attributes and mark them as used.  */
14027
 
14028
static void
14029
prune_unused_types_walk_attribs (dw_die_ref die)
14030
{
14031
  dw_attr_ref a;
14032
  unsigned ix;
14033
 
14034
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
14035
    {
14036
      if (a->dw_attr_val.val_class == dw_val_class_die_ref)
14037
        {
14038
          /* A reference to another DIE.
14039
             Make sure that it will get emitted.  */
14040
          prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
14041
        }
14042
      /* Set the string's refcount to 0 so that prune_unused_types_mark
14043
         accounts properly for it.  */
14044
      if (AT_class (a) == dw_val_class_str)
14045
        a->dw_attr_val.v.val_str->refcount = 0;
14046
    }
14047
}
14048
 
14049
 
14050
/* Mark DIE as being used.  If DOKIDS is true, then walk down
14051
   to DIE's children.  */
14052
 
14053
static void
14054
prune_unused_types_mark (dw_die_ref die, int dokids)
14055
{
14056
  dw_die_ref c;
14057
 
14058
  if (die->die_mark == 0)
14059
    {
14060
      /* We haven't done this node yet.  Mark it as used.  */
14061
      die->die_mark = 1;
14062
 
14063
      /* We also have to mark its parents as used.
14064
         (But we don't want to mark our parents' kids due to this.)  */
14065
      if (die->die_parent)
14066
        prune_unused_types_mark (die->die_parent, 0);
14067
 
14068
      /* Mark any referenced nodes.  */
14069
      prune_unused_types_walk_attribs (die);
14070
 
14071
      /* If this node is a specification,
14072
         also mark the definition, if it exists.  */
14073
      if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
14074
        prune_unused_types_mark (die->die_definition, 1);
14075
    }
14076
 
14077
  if (dokids && die->die_mark != 2)
14078
    {
14079
      /* We need to walk the children, but haven't done so yet.
14080
         Remember that we've walked the kids.  */
14081
      die->die_mark = 2;
14082
 
14083
      /* If this is an array type, we need to make sure our
14084
         kids get marked, even if they're types.  */
14085
      if (die->die_tag == DW_TAG_array_type)
14086
        FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
14087
      else
14088
        FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
14089
    }
14090
}
14091
 
14092
 
14093
/* Walk the tree DIE and mark types that we actually use.  */
14094
 
14095
static void
14096
prune_unused_types_walk (dw_die_ref die)
14097
{
14098
  dw_die_ref c;
14099
 
14100
  /* Don't do anything if this node is already marked.  */
14101
  if (die->die_mark)
14102
    return;
14103
 
14104
  switch (die->die_tag) {
14105
  case DW_TAG_const_type:
14106
  case DW_TAG_packed_type:
14107
  case DW_TAG_pointer_type:
14108
  case DW_TAG_reference_type:
14109
  case DW_TAG_volatile_type:
14110
  case DW_TAG_typedef:
14111
  case DW_TAG_array_type:
14112
  case DW_TAG_structure_type:
14113
  case DW_TAG_union_type:
14114
  case DW_TAG_class_type:
14115
  case DW_TAG_friend:
14116
  case DW_TAG_variant_part:
14117
  case DW_TAG_enumeration_type:
14118
  case DW_TAG_subroutine_type:
14119
  case DW_TAG_string_type:
14120
  case DW_TAG_set_type:
14121
  case DW_TAG_subrange_type:
14122
  case DW_TAG_ptr_to_member_type:
14123
  case DW_TAG_file_type:
14124
    if (die->die_perennial_p)
14125
      break;
14126
 
14127
    /* It's a type node --- don't mark it.  */
14128
    return;
14129
 
14130
  default:
14131
    /* Mark everything else.  */
14132
    break;
14133
  }
14134
 
14135
  die->die_mark = 1;
14136
 
14137
  /* Now, mark any dies referenced from here.  */
14138
  prune_unused_types_walk_attribs (die);
14139
 
14140
  /* Mark children.  */
14141
  FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
14142
}
14143
 
14144
/* Increment the string counts on strings referred to from DIE's
14145
   attributes.  */
14146
 
14147
static void
14148
prune_unused_types_update_strings (dw_die_ref die)
14149
{
14150
  dw_attr_ref a;
14151
  unsigned ix;
14152
 
14153
  for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
14154
    if (AT_class (a) == dw_val_class_str)
14155
      {
14156
        struct indirect_string_node *s = a->dw_attr_val.v.val_str;
14157
        s->refcount++;
14158
        /* Avoid unnecessarily putting strings that are used less than
14159
           twice in the hash table.  */
14160
        if (s->refcount
14161
            == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
14162
          {
14163
            void ** slot;
14164
            slot = htab_find_slot_with_hash (debug_str_hash, s->str,
14165
                                             htab_hash_string (s->str),
14166
                                             INSERT);
14167
            gcc_assert (*slot == NULL);
14168
            *slot = s;
14169
          }
14170
      }
14171
}
14172
 
14173
/* Remove from the tree DIE any dies that aren't marked.  */
14174
 
14175
static void
14176
prune_unused_types_prune (dw_die_ref die)
14177
{
14178
  dw_die_ref c;
14179
 
14180
  gcc_assert (die->die_mark);
14181
  prune_unused_types_update_strings (die);
14182
 
14183
  if (! die->die_child)
14184
    return;
14185
 
14186
  c = die->die_child;
14187
  do {
14188
    dw_die_ref prev = c;
14189
    for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
14190
      if (c == die->die_child)
14191
        {
14192
          /* No marked children between 'prev' and the end of the list.  */
14193
          if (prev == c)
14194
            /* No marked children at all.  */
14195
            die->die_child = NULL;
14196
          else
14197
            {
14198
              prev->die_sib = c->die_sib;
14199
              die->die_child = prev;
14200
            }
14201
          return;
14202
        }
14203
 
14204
    if (c != prev->die_sib)
14205
      prev->die_sib = c;
14206
    prune_unused_types_prune (c);
14207
  } while (c != die->die_child);
14208
}
14209
 
14210
 
14211
/* Remove dies representing declarations that we never use.  */
14212
 
14213
static void
14214
prune_unused_types (void)
14215
{
14216
  unsigned int i;
14217
  limbo_die_node *node;
14218
 
14219
#if ENABLE_ASSERT_CHECKING
14220
  /* All the marks should already be clear.  */
14221
  verify_marks_clear (comp_unit_die);
14222
  for (node = limbo_die_list; node; node = node->next)
14223
    verify_marks_clear (node->die);
14224
#endif /* ENABLE_ASSERT_CHECKING */
14225
 
14226
  /* Set the mark on nodes that are actually used.  */
14227
  prune_unused_types_walk (comp_unit_die);
14228
  for (node = limbo_die_list; node; node = node->next)
14229
    prune_unused_types_walk (node->die);
14230
 
14231
  /* Also set the mark on nodes referenced from the
14232
     pubname_table or arange_table.  */
14233
  for (i = 0; i < pubname_table_in_use; i++)
14234
    prune_unused_types_mark (pubname_table[i].die, 1);
14235
  for (i = 0; i < arange_table_in_use; i++)
14236
    prune_unused_types_mark (arange_table[i], 1);
14237
 
14238
  /* Get rid of nodes that aren't marked; and update the string counts.  */
14239
  if (debug_str_hash)
14240
    htab_empty (debug_str_hash);
14241
  prune_unused_types_prune (comp_unit_die);
14242
  for (node = limbo_die_list; node; node = node->next)
14243
    prune_unused_types_prune (node->die);
14244
 
14245
  /* Leave the marks clear.  */
14246
  prune_unmark_dies (comp_unit_die);
14247
  for (node = limbo_die_list; node; node = node->next)
14248
    prune_unmark_dies (node->die);
14249
}
14250
 
14251
/* Set the parameter to true if there are any relative pathnames in
14252
   the file table.  */
14253
static int
14254
file_table_relative_p (void ** slot, void *param)
14255
{
14256
  bool *p = param;
14257
  struct dwarf_file_data *d = *slot;
14258
  if (d->emitted_number && d->filename[0] != DIR_SEPARATOR)
14259
    {
14260
      *p = true;
14261
      return 0;
14262
    }
14263
  return 1;
14264
}
14265
 
14266
/* Output stuff that dwarf requires at the end of every file,
14267
   and generate the DWARF-2 debugging info.  */
14268
 
14269
static void
14270
dwarf2out_finish (const char *filename)
14271
{
14272
  limbo_die_node *node, *next_node;
14273
  dw_die_ref die = 0;
14274
 
14275
  /* Add the name for the main input file now.  We delayed this from
14276
     dwarf2out_init to avoid complications with PCH.  */
14277
  add_name_attribute (comp_unit_die, filename);
14278
  if (filename[0] != DIR_SEPARATOR)
14279
    add_comp_dir_attribute (comp_unit_die);
14280
  else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
14281
    {
14282
      bool p = false;
14283
      htab_traverse (file_table, file_table_relative_p, &p);
14284
      if (p)
14285
        add_comp_dir_attribute (comp_unit_die);
14286
    }
14287
 
14288
  /* Traverse the limbo die list, and add parent/child links.  The only
14289
     dies without parents that should be here are concrete instances of
14290
     inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
14291
     For concrete instances, we can get the parent die from the abstract
14292
     instance.  */
14293
  for (node = limbo_die_list; node; node = next_node)
14294
    {
14295
      next_node = node->next;
14296
      die = node->die;
14297
 
14298
      if (die->die_parent == NULL)
14299
        {
14300
          dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
14301
 
14302
          if (origin)
14303
            add_child_die (origin->die_parent, die);
14304
          else if (die == comp_unit_die)
14305
            ;
14306
          else if (errorcount > 0 || sorrycount > 0)
14307
            /* It's OK to be confused by errors in the input.  */
14308
            add_child_die (comp_unit_die, die);
14309
          else
14310
            {
14311
              /* In certain situations, the lexical block containing a
14312
                 nested function can be optimized away, which results
14313
                 in the nested function die being orphaned.  Likewise
14314
                 with the return type of that nested function.  Force
14315
                 this to be a child of the containing function.
14316
 
14317
                 It may happen that even the containing function got fully
14318
                 inlined and optimized out.  In that case we are lost and
14319
                 assign the empty child.  This should not be big issue as
14320
                 the function is likely unreachable too.  */
14321
              tree context = NULL_TREE;
14322
 
14323
              gcc_assert (node->created_for);
14324
 
14325
              if (DECL_P (node->created_for))
14326
                context = DECL_CONTEXT (node->created_for);
14327
              else if (TYPE_P (node->created_for))
14328
                context = TYPE_CONTEXT (node->created_for);
14329
 
14330
              gcc_assert (context
14331
                          && (TREE_CODE (context) == FUNCTION_DECL
14332
                              || TREE_CODE (context) == NAMESPACE_DECL));
14333
 
14334
              origin = lookup_decl_die (context);
14335
              if (origin)
14336
                add_child_die (origin, die);
14337
              else
14338
                add_child_die (comp_unit_die, die);
14339
            }
14340
        }
14341
    }
14342
 
14343
  limbo_die_list = NULL;
14344
 
14345
  /* Walk through the list of incomplete types again, trying once more to
14346
     emit full debugging info for them.  */
14347
  retry_incomplete_types ();
14348
 
14349
  if (flag_eliminate_unused_debug_types)
14350
    prune_unused_types ();
14351
 
14352
  /* Generate separate CUs for each of the include files we've seen.
14353
     They will go into limbo_die_list.  */
14354
  if (flag_eliminate_dwarf2_dups)
14355
    break_out_includes (comp_unit_die);
14356
 
14357
  /* Traverse the DIE's and add add sibling attributes to those DIE's
14358
     that have children.  */
14359
  add_sibling_attributes (comp_unit_die);
14360
  for (node = limbo_die_list; node; node = node->next)
14361
    add_sibling_attributes (node->die);
14362
 
14363
  /* Output a terminator label for the .text section.  */
14364
  switch_to_section (text_section);
14365
  targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
14366
  if (flag_reorder_blocks_and_partition)
14367
    {
14368
      switch_to_section (unlikely_text_section ());
14369
      targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
14370
    }
14371
 
14372
  /* We can only use the low/high_pc attributes if all of the code was
14373
     in .text.  */
14374
  if (!have_multiple_function_sections)
14375
    {
14376
      add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
14377
      add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
14378
    }
14379
 
14380
  /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
14381
     "base address".  Use zero so that these addresses become absolute.  */
14382
  else if (have_location_lists || ranges_table_in_use)
14383
    add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
14384
 
14385
  /* Output location list section if necessary.  */
14386
  if (have_location_lists)
14387
    {
14388
      /* Output the location lists info.  */
14389
      switch_to_section (debug_loc_section);
14390
      ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
14391
                                   DEBUG_LOC_SECTION_LABEL, 0);
14392
      ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
14393
      output_location_lists (die);
14394
    }
14395
 
14396
  if (debug_info_level >= DINFO_LEVEL_NORMAL)
14397
    add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
14398
                    debug_line_section_label);
14399
 
14400
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14401
    add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
14402
 
14403
  /* Output all of the compilation units.  We put the main one last so that
14404
     the offsets are available to output_pubnames.  */
14405
  for (node = limbo_die_list; node; node = node->next)
14406
    output_comp_unit (node->die, 0);
14407
 
14408
  output_comp_unit (comp_unit_die, 0);
14409
 
14410
  /* Output the abbreviation table.  */
14411
  switch_to_section (debug_abbrev_section);
14412
  output_abbrev_section ();
14413
 
14414
  /* Output public names table if necessary.  */
14415
  if (pubname_table_in_use)
14416
    {
14417
      switch_to_section (debug_pubnames_section);
14418
      output_pubnames ();
14419
    }
14420
 
14421
  /* Output the address range information.  We only put functions in the arange
14422
     table, so don't write it out if we don't have any.  */
14423
  if (fde_table_in_use)
14424
    {
14425
      switch_to_section (debug_aranges_section);
14426
      output_aranges ();
14427
    }
14428
 
14429
  /* Output ranges section if necessary.  */
14430
  if (ranges_table_in_use)
14431
    {
14432
      switch_to_section (debug_ranges_section);
14433
      ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
14434
      output_ranges ();
14435
    }
14436
 
14437
  /* Output the source line correspondence table.  We must do this
14438
     even if there is no line information.  Otherwise, on an empty
14439
     translation unit, we will generate a present, but empty,
14440
     .debug_info section.  IRIX 6.5 `nm' will then complain when
14441
     examining the file.  This is done late so that any filenames
14442
     used by the debug_info section are marked as 'used'.  */
14443
  if (! DWARF2_ASM_LINE_DEBUG_INFO)
14444
    {
14445
      switch_to_section (debug_line_section);
14446
      output_line_info ();
14447
    }
14448
 
14449
  /* Have to end the macro section.  */
14450
  if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14451
    {
14452
      switch_to_section (debug_macinfo_section);
14453
      dw2_asm_output_data (1, 0, "End compilation unit");
14454
    }
14455
 
14456
  /* If we emitted any DW_FORM_strp form attribute, output the string
14457
     table too.  */
14458
  if (debug_str_hash)
14459
    htab_traverse (debug_str_hash, output_indirect_string, NULL);
14460
}
14461
#else
14462
 
14463
/* This should never be used, but its address is needed for comparisons.  */
14464
const struct gcc_debug_hooks dwarf2_debug_hooks;
14465
 
14466
#endif /* DWARF2_DEBUGGING_INFO */
14467
 
14468
#include "gt-dwarf2out.h"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.