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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [gcc/] [dwarf2out.c] - Blame information for rev 20

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

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

powered by: WebSVN 2.1.0

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