1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005, 2006, 2007, 2008, 2009 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).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
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
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
24 /* TODO: Emit .debug_line header even when there are no functions, since
25 the file numbers are used by .debug_info. Alternately, leave
26 out locations for types and decls.
27 Avoid talking about ctors and op= for PODs.
28 Factor out common prologue sequences into multiple CIEs. */
30 /* The first part of this file deals with the DWARF 2 frame unwind
31 information, which is also used by the GCC efficient exception handling
32 mechanism. The second part, controlled only by an #ifdef
33 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
36 /* DWARF2 Abbreviation Glossary:
38 CFA = Canonical Frame Address
39 a fixed address on the stack which identifies a call frame.
40 We define it to be the value of SP just before the call insn.
41 The CFA register and offset, which may change during the course
42 of the function, are used to calculate its value at runtime.
44 CFI = Call Frame Instruction
45 an instruction for the DWARF2 abstract machine
47 CIE = Common Information Entry
48 information describing information common to one or more FDEs
50 DIE = Debugging Information Entry
52 FDE = Frame Description Entry
53 information describing the stack call frame, in particular,
54 how to restore registers
56 DW_CFA_... = DWARF2 CFA call frame instruction
57 DW_TAG_... = DWARF2 DIE tag */
61 #include "coretypes.h"
68 #include "hard-reg-set.h"
70 #include "insn-config.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
85 #include "diagnostic.h"
88 #include "langhooks.h"
93 #ifdef DWARF2_DEBUGGING_INFO
94 static void dwarf2out_source_line (unsigned int, const char *);
97 #ifndef DWARF2_FRAME_INFO
98 # ifdef DWARF2_DEBUGGING_INFO
99 # define DWARF2_FRAME_INFO \
100 (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
102 # define DWARF2_FRAME_INFO 0
106 /* Map register numbers held in the call frame info that gcc has
107 collected using DWARF_FRAME_REGNUM to those that should be output in
108 .debug_frame and .eh_frame. */
109 #ifndef DWARF2_FRAME_REG_OUT
110 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
113 /* Save the result of dwarf2out_do_frame across PCH. */
114 static GTY(()) bool saved_do_cfi_asm
= 0;
116 /* Decide whether we want to emit frame unwind information for the current
120 dwarf2out_do_frame (void)
122 /* We want to emit correct CFA location expressions or lists, so we
123 have to return true if we're going to output debug info, even if
124 we're not going to output frame or unwind info. */
125 return (write_symbols
== DWARF2_DEBUG
126 || write_symbols
== VMS_AND_DWARF2_DEBUG
127 || DWARF2_FRAME_INFO
|| saved_do_cfi_asm
128 #ifdef DWARF2_UNWIND_INFO
129 || (DWARF2_UNWIND_INFO
130 && (flag_unwind_tables
131 || (flag_exceptions
&& ! USING_SJLJ_EXCEPTIONS
)))
136 /* Decide whether to emit frame unwind via assembler directives. */
139 dwarf2out_do_cfi_asm (void)
143 #ifdef MIPS_DEBUGGING_INFO
146 if (!flag_dwarf2_cfi_asm
|| !dwarf2out_do_frame ())
148 if (saved_do_cfi_asm
|| !eh_personality_libfunc
)
150 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE
)
153 /* Make sure the personality encoding is one the assembler can support.
154 In particular, aligned addresses can't be handled. */
155 enc
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
156 if ((enc
& 0x70) != 0 && (enc
& 0x70) != DW_EH_PE_pcrel
)
158 enc
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
159 if ((enc
& 0x70) != 0 && (enc
& 0x70) != DW_EH_PE_pcrel
)
162 saved_do_cfi_asm
= true;
166 /* The size of the target's pointer type. */
168 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
171 /* Array of RTXes referenced by the debugging information, which therefore
172 must be kept around forever. */
173 static GTY(()) VEC(rtx
,gc
) *used_rtx_array
;
175 /* A pointer to the base of a list of incomplete types which might be
176 completed at some later time. incomplete_types_list needs to be a
177 VEC(tree,gc) because we want to tell the garbage collector about
179 static GTY(()) VEC(tree
,gc
) *incomplete_types
;
181 /* A pointer to the base of a table of references to declaration
182 scopes. This table is a display which tracks the nesting
183 of declaration scopes at the current scope and containing
184 scopes. This table is used to find the proper place to
185 define type declaration DIE's. */
186 static GTY(()) VEC(tree
,gc
) *decl_scope_table
;
188 /* Pointers to various DWARF2 sections. */
189 static GTY(()) section
*debug_info_section
;
190 static GTY(()) section
*debug_abbrev_section
;
191 static GTY(()) section
*debug_aranges_section
;
192 static GTY(()) section
*debug_macinfo_section
;
193 static GTY(()) section
*debug_line_section
;
194 static GTY(()) section
*debug_loc_section
;
195 static GTY(()) section
*debug_pubnames_section
;
196 static GTY(()) section
*debug_pubtypes_section
;
197 static GTY(()) section
*debug_str_section
;
198 static GTY(()) section
*debug_ranges_section
;
199 static GTY(()) section
*debug_frame_section
;
201 /* How to start an assembler comment. */
202 #ifndef ASM_COMMENT_START
203 #define ASM_COMMENT_START ";#"
206 typedef struct dw_cfi_struct
*dw_cfi_ref
;
207 typedef struct dw_fde_struct
*dw_fde_ref
;
208 typedef union dw_cfi_oprnd_struct
*dw_cfi_oprnd_ref
;
210 /* Call frames are described using a sequence of Call Frame
211 Information instructions. The register number, offset
212 and address fields are provided as possible operands;
213 their use is selected by the opcode field. */
215 enum dw_cfi_oprnd_type
{
217 dw_cfi_oprnd_reg_num
,
223 typedef union dw_cfi_oprnd_struct
GTY(())
225 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num
;
226 HOST_WIDE_INT
GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset
;
227 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr
;
228 struct dw_loc_descr_struct
* GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc
;
232 typedef struct dw_cfi_struct
GTY(())
234 dw_cfi_ref dw_cfi_next
;
235 enum dwarf_call_frame_info dw_cfi_opc
;
236 dw_cfi_oprnd
GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
238 dw_cfi_oprnd
GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
243 /* This is how we define the location of the CFA. We use to handle it
244 as REG + OFFSET all the time, but now it can be more complex.
245 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
246 Instead of passing around REG and OFFSET, we pass a copy
247 of this structure. */
248 typedef struct cfa_loc
GTY(())
250 HOST_WIDE_INT offset
;
251 HOST_WIDE_INT base_offset
;
253 int indirect
; /* 1 if CFA is accessed via a dereference. */
256 /* All call frame descriptions (FDE's) in the GCC generated DWARF
257 refer to a single Common Information Entry (CIE), defined at
258 the beginning of the .debug_frame section. This use of a single
259 CIE obviates the need to keep track of multiple CIE's
260 in the DWARF generation routines below. */
262 typedef struct dw_fde_struct
GTY(())
265 const char *dw_fde_begin
;
266 const char *dw_fde_current_label
;
267 const char *dw_fde_end
;
268 const char *dw_fde_hot_section_label
;
269 const char *dw_fde_hot_section_end_label
;
270 const char *dw_fde_unlikely_section_label
;
271 const char *dw_fde_unlikely_section_end_label
;
272 bool dw_fde_switched_sections
;
273 dw_cfi_ref dw_fde_cfi
;
274 unsigned funcdef_number
;
275 HOST_WIDE_INT stack_realignment
;
276 /* Dynamic realign argument pointer register. */
277 unsigned int drap_reg
;
278 /* Virtual dynamic realign argument pointer register. */
279 unsigned int vdrap_reg
;
280 unsigned all_throwers_are_sibcalls
: 1;
281 unsigned nothrow
: 1;
282 unsigned uses_eh_lsda
: 1;
283 /* Whether we did stack realign in this call frame. */
284 unsigned stack_realign
: 1;
285 /* Whether dynamic realign argument pointer register has been saved. */
286 unsigned drap_reg_saved
: 1;
290 /* Maximum size (in bytes) of an artificially generated label. */
291 #define MAX_ARTIFICIAL_LABEL_BYTES 30
293 /* The size of addresses as they appear in the Dwarf 2 data.
294 Some architectures use word addresses to refer to code locations,
295 but Dwarf 2 info always uses byte addresses. On such machines,
296 Dwarf 2 addresses need to be larger than the architecture's
298 #ifndef DWARF2_ADDR_SIZE
299 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
302 /* The size in bytes of a DWARF field indicating an offset or length
303 relative to a debug info section, specified to be 4 bytes in the
304 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
307 #ifndef DWARF_OFFSET_SIZE
308 #define DWARF_OFFSET_SIZE 4
311 /* According to the (draft) DWARF 3 specification, the initial length
312 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
313 bytes are 0xffffffff, followed by the length stored in the next 8
316 However, the SGI/MIPS ABI uses an initial length which is equal to
317 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
319 #ifndef DWARF_INITIAL_LENGTH_SIZE
320 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
323 #define DWARF_VERSION 2
325 /* Round SIZE up to the nearest BOUNDARY. */
326 #define DWARF_ROUND(SIZE,BOUNDARY) \
327 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
329 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
330 #ifndef DWARF_CIE_DATA_ALIGNMENT
331 #ifdef STACK_GROWS_DOWNWARD
332 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
334 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
338 /* CIE identifier. */
339 #if HOST_BITS_PER_WIDE_INT >= 64
340 #define DWARF_CIE_ID \
341 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
343 #define DWARF_CIE_ID DW_CIE_ID
346 /* A pointer to the base of a table that contains frame description
347 information for each routine. */
348 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table
;
350 /* Number of elements currently allocated for fde_table. */
351 static GTY(()) unsigned fde_table_allocated
;
353 /* Number of elements in fde_table currently in use. */
354 static GTY(()) unsigned fde_table_in_use
;
356 /* Size (in elements) of increments by which we may expand the
358 #define FDE_TABLE_INCREMENT 256
360 /* Get the current fde_table entry we should use. */
362 static inline dw_fde_ref
365 return fde_table_in_use
? &fde_table
[fde_table_in_use
- 1] : NULL
;
368 /* A list of call frame insns for the CIE. */
369 static GTY(()) dw_cfi_ref cie_cfi_head
;
371 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
372 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
373 attribute that accelerates the lookup of the FDE associated
374 with the subprogram. This variable holds the table index of the FDE
375 associated with the current function (body) definition. */
376 static unsigned current_funcdef_fde
;
379 struct indirect_string_node
GTY(())
382 unsigned int refcount
;
387 static GTY ((param_is (struct indirect_string_node
))) htab_t debug_str_hash
;
389 static GTY(()) int dw2_string_counter
;
390 static GTY(()) unsigned long dwarf2out_cfi_label_num
;
392 /* True if the compilation unit places functions in more than one section. */
393 static GTY(()) bool have_multiple_function_sections
= false;
395 /* Whether the default text and cold text sections have been used at all. */
397 static GTY(()) bool text_section_used
= false;
398 static GTY(()) bool cold_text_section_used
= false;
400 /* The default cold text section. */
401 static GTY(()) section
*cold_text_section
;
403 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
405 /* Forward declarations for functions defined in this file. */
407 static char *stripattributes (const char *);
408 static const char *dwarf_cfi_name (unsigned);
409 static dw_cfi_ref
new_cfi (void);
410 static void add_cfi (dw_cfi_ref
*, dw_cfi_ref
);
411 static void add_fde_cfi (const char *, dw_cfi_ref
);
412 static void lookup_cfa_1 (dw_cfi_ref
, dw_cfa_location
*);
413 static void lookup_cfa (dw_cfa_location
*);
414 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT
);
415 #ifdef DWARF2_UNWIND_INFO
416 static void initial_return_save (rtx
);
418 static HOST_WIDE_INT
stack_adjust_offset (const_rtx
, HOST_WIDE_INT
,
420 static void output_cfi (dw_cfi_ref
, dw_fde_ref
, int);
421 static void output_cfi_directive (dw_cfi_ref
);
422 static void output_call_frame_info (int);
423 static void dwarf2out_note_section_used (void);
424 static void dwarf2out_stack_adjust (rtx
, bool);
425 static void dwarf2out_args_size_adjust (HOST_WIDE_INT
, const char *);
426 static void flush_queued_reg_saves (void);
427 static bool clobbers_queued_reg_save (const_rtx
);
428 static void dwarf2out_frame_debug_expr (rtx
, const char *);
430 /* Support for complex CFA locations. */
431 static void output_cfa_loc (dw_cfi_ref
);
432 static void output_cfa_loc_raw (dw_cfi_ref
);
433 static void get_cfa_from_loc_descr (dw_cfa_location
*,
434 struct dw_loc_descr_struct
*);
435 static struct dw_loc_descr_struct
*build_cfa_loc
436 (dw_cfa_location
*, HOST_WIDE_INT
);
437 static struct dw_loc_descr_struct
*build_cfa_aligned_loc
438 (HOST_WIDE_INT
, HOST_WIDE_INT
);
439 static void def_cfa_1 (const char *, dw_cfa_location
*);
441 /* How to start an assembler comment. */
442 #ifndef ASM_COMMENT_START
443 #define ASM_COMMENT_START ";#"
446 /* Data and reference forms for relocatable data. */
447 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
448 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
450 #ifndef DEBUG_FRAME_SECTION
451 #define DEBUG_FRAME_SECTION ".debug_frame"
454 #ifndef FUNC_BEGIN_LABEL
455 #define FUNC_BEGIN_LABEL "LFB"
458 #ifndef FUNC_END_LABEL
459 #define FUNC_END_LABEL "LFE"
462 #ifndef FRAME_BEGIN_LABEL
463 #define FRAME_BEGIN_LABEL "Lframe"
465 #define CIE_AFTER_SIZE_LABEL "LSCIE"
466 #define CIE_END_LABEL "LECIE"
467 #define FDE_LABEL "LSFDE"
468 #define FDE_AFTER_SIZE_LABEL "LASFDE"
469 #define FDE_END_LABEL "LEFDE"
470 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
471 #define LINE_NUMBER_END_LABEL "LELT"
472 #define LN_PROLOG_AS_LABEL "LASLTP"
473 #define LN_PROLOG_END_LABEL "LELTP"
474 #define DIE_LABEL_PREFIX "DW"
476 /* The DWARF 2 CFA column which tracks the return address. Normally this
477 is the column for PC, or the first column after all of the hard
479 #ifndef DWARF_FRAME_RETURN_COLUMN
481 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
483 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
487 /* The mapping from gcc register number to DWARF 2 CFA column number. By
488 default, we just provide columns for all registers. */
489 #ifndef DWARF_FRAME_REGNUM
490 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
493 /* Hook used by __throw. */
496 expand_builtin_dwarf_sp_column (void)
498 unsigned int dwarf_regnum
= DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM
);
499 return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum
, 1));
502 /* Return a pointer to a copy of the section string name S with all
503 attributes stripped off, and an asterisk prepended (for assemble_name). */
506 stripattributes (const char *s
)
508 char *stripped
= XNEWVEC (char, strlen (s
) + 2);
513 while (*s
&& *s
!= ',')
520 /* MEM is a memory reference for the register size table, each element of
521 which has mode MODE. Initialize column C as a return address column. */
524 init_return_column_size (enum machine_mode mode
, rtx mem
, unsigned int c
)
526 HOST_WIDE_INT offset
= c
* GET_MODE_SIZE (mode
);
527 HOST_WIDE_INT size
= GET_MODE_SIZE (Pmode
);
528 emit_move_insn (adjust_address (mem
, mode
, offset
), GEN_INT (size
));
531 /* Generate code to initialize the register size table. */
534 expand_builtin_init_dwarf_reg_sizes (tree address
)
537 enum machine_mode mode
= TYPE_MODE (char_type_node
);
538 rtx addr
= expand_normal (address
);
539 rtx mem
= gen_rtx_MEM (BLKmode
, addr
);
540 bool wrote_return_column
= false;
542 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
544 int rnum
= DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i
), 1);
546 if (rnum
< DWARF_FRAME_REGISTERS
)
548 HOST_WIDE_INT offset
= rnum
* GET_MODE_SIZE (mode
);
549 enum machine_mode save_mode
= reg_raw_mode
[i
];
552 if (HARD_REGNO_CALL_PART_CLOBBERED (i
, save_mode
))
553 save_mode
= choose_hard_reg_mode (i
, 1, true);
554 if (DWARF_FRAME_REGNUM (i
) == DWARF_FRAME_RETURN_COLUMN
)
556 if (save_mode
== VOIDmode
)
558 wrote_return_column
= true;
560 size
= GET_MODE_SIZE (save_mode
);
564 emit_move_insn (adjust_address (mem
, mode
, offset
),
565 gen_int_mode (size
, mode
));
569 if (!wrote_return_column
)
570 init_return_column_size (mode
, mem
, DWARF_FRAME_RETURN_COLUMN
);
572 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
573 init_return_column_size (mode
, mem
, DWARF_ALT_FRAME_RETURN_COLUMN
);
576 targetm
.init_dwarf_reg_sizes_extra (address
);
579 /* Convert a DWARF call frame info. operation to its string name */
582 dwarf_cfi_name (unsigned int cfi_opc
)
586 case DW_CFA_advance_loc
:
587 return "DW_CFA_advance_loc";
589 return "DW_CFA_offset";
591 return "DW_CFA_restore";
595 return "DW_CFA_set_loc";
596 case DW_CFA_advance_loc1
:
597 return "DW_CFA_advance_loc1";
598 case DW_CFA_advance_loc2
:
599 return "DW_CFA_advance_loc2";
600 case DW_CFA_advance_loc4
:
601 return "DW_CFA_advance_loc4";
602 case DW_CFA_offset_extended
:
603 return "DW_CFA_offset_extended";
604 case DW_CFA_restore_extended
:
605 return "DW_CFA_restore_extended";
606 case DW_CFA_undefined
:
607 return "DW_CFA_undefined";
608 case DW_CFA_same_value
:
609 return "DW_CFA_same_value";
610 case DW_CFA_register
:
611 return "DW_CFA_register";
612 case DW_CFA_remember_state
:
613 return "DW_CFA_remember_state";
614 case DW_CFA_restore_state
:
615 return "DW_CFA_restore_state";
617 return "DW_CFA_def_cfa";
618 case DW_CFA_def_cfa_register
:
619 return "DW_CFA_def_cfa_register";
620 case DW_CFA_def_cfa_offset
:
621 return "DW_CFA_def_cfa_offset";
624 case DW_CFA_def_cfa_expression
:
625 return "DW_CFA_def_cfa_expression";
626 case DW_CFA_expression
:
627 return "DW_CFA_expression";
628 case DW_CFA_offset_extended_sf
:
629 return "DW_CFA_offset_extended_sf";
630 case DW_CFA_def_cfa_sf
:
631 return "DW_CFA_def_cfa_sf";
632 case DW_CFA_def_cfa_offset_sf
:
633 return "DW_CFA_def_cfa_offset_sf";
635 /* SGI/MIPS specific */
636 case DW_CFA_MIPS_advance_loc8
:
637 return "DW_CFA_MIPS_advance_loc8";
640 case DW_CFA_GNU_window_save
:
641 return "DW_CFA_GNU_window_save";
642 case DW_CFA_GNU_args_size
:
643 return "DW_CFA_GNU_args_size";
644 case DW_CFA_GNU_negative_offset_extended
:
645 return "DW_CFA_GNU_negative_offset_extended";
648 return "DW_CFA_<unknown>";
652 /* Return a pointer to a newly allocated Call Frame Instruction. */
654 static inline dw_cfi_ref
657 dw_cfi_ref cfi
= GGC_NEW (dw_cfi_node
);
659 cfi
->dw_cfi_next
= NULL
;
660 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= 0;
661 cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
= 0;
666 /* Add a Call Frame Instruction to list of instructions. */
669 add_cfi (dw_cfi_ref
*list_head
, dw_cfi_ref cfi
)
672 dw_fde_ref fde
= current_fde ();
674 /* When DRAP is used, CFA is defined with an expression. Redefine
675 CFA may lead to a different CFA value. */
676 if (fde
&& fde
->drap_reg
!= INVALID_REGNUM
)
677 switch (cfi
->dw_cfi_opc
)
679 case DW_CFA_def_cfa_register
:
680 case DW_CFA_def_cfa_offset
:
681 case DW_CFA_def_cfa_offset_sf
:
683 case DW_CFA_def_cfa_sf
:
690 /* Find the end of the chain. */
691 for (p
= list_head
; (*p
) != NULL
; p
= &(*p
)->dw_cfi_next
)
697 /* Generate a new label for the CFI info to refer to. FORCE is true
698 if a label needs to be output even when using .cfi_* directives. */
701 dwarf2out_cfi_label (bool force
)
703 static char label
[20];
705 if (!force
&& dwarf2out_do_cfi_asm ())
707 /* In this case, we will be emitting the asm directive instead of
708 the label, so just return a placeholder to keep the rest of the
710 strcpy (label
, "<do not output>");
714 ASM_GENERATE_INTERNAL_LABEL (label
, "LCFI", dwarf2out_cfi_label_num
++);
715 ASM_OUTPUT_LABEL (asm_out_file
, label
);
721 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
722 or to the CIE if LABEL is NULL. */
725 add_fde_cfi (const char *label
, dw_cfi_ref cfi
)
727 dw_cfi_ref
*list_head
= &cie_cfi_head
;
729 if (dwarf2out_do_cfi_asm ())
733 dw_fde_ref fde
= current_fde ();
735 gcc_assert (fde
!= NULL
);
737 /* We still have to add the cfi to the list so that
738 lookup_cfa works later on. When -g2 and above we
739 even need to force emitting of CFI labels and
740 add to list a DW_CFA_set_loc for convert_cfa_to_fb_loc_list
742 switch (cfi
->dw_cfi_opc
)
744 case DW_CFA_def_cfa_offset
:
745 case DW_CFA_def_cfa_offset_sf
:
746 case DW_CFA_def_cfa_register
:
748 case DW_CFA_def_cfa_sf
:
749 case DW_CFA_def_cfa_expression
:
750 case DW_CFA_restore_state
:
751 if (write_symbols
!= DWARF2_DEBUG
752 && write_symbols
!= VMS_AND_DWARF2_DEBUG
)
754 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
757 if (*label
== 0 || strcmp (label
, "<do not output>") == 0)
758 label
= dwarf2out_cfi_label (true);
760 if (fde
->dw_fde_current_label
== NULL
761 || strcmp (label
, fde
->dw_fde_current_label
) != 0)
765 label
= xstrdup (label
);
767 /* Set the location counter to the new label. */
769 /* It doesn't metter whether DW_CFA_set_loc
770 or DW_CFA_advance_loc4 is added here, those aren't
771 emitted into assembly, only looked up by
772 convert_cfa_to_fb_loc_list. */
773 xcfi
->dw_cfi_opc
= DW_CFA_set_loc
;
774 xcfi
->dw_cfi_oprnd1
.dw_cfi_addr
= label
;
775 add_cfi (&fde
->dw_fde_cfi
, xcfi
);
776 fde
->dw_fde_current_label
= label
;
783 output_cfi_directive (cfi
);
785 list_head
= &fde
->dw_fde_cfi
;
787 /* ??? If this is a CFI for the CIE, we don't emit. This
788 assumes that the standard CIE contents that the assembler
789 uses matches the standard CIE contents that the compiler
790 uses. This is probably a bad assumption. I'm not quite
791 sure how to address this for now. */
795 dw_fde_ref fde
= current_fde ();
797 gcc_assert (fde
!= NULL
);
800 label
= dwarf2out_cfi_label (false);
802 if (fde
->dw_fde_current_label
== NULL
803 || strcmp (label
, fde
->dw_fde_current_label
) != 0)
807 label
= xstrdup (label
);
809 /* Set the location counter to the new label. */
811 /* If we have a current label, advance from there, otherwise
812 set the location directly using set_loc. */
813 xcfi
->dw_cfi_opc
= fde
->dw_fde_current_label
814 ? DW_CFA_advance_loc4
816 xcfi
->dw_cfi_oprnd1
.dw_cfi_addr
= label
;
817 add_cfi (&fde
->dw_fde_cfi
, xcfi
);
819 fde
->dw_fde_current_label
= label
;
822 list_head
= &fde
->dw_fde_cfi
;
825 add_cfi (list_head
, cfi
);
828 /* Subroutine of lookup_cfa. */
831 lookup_cfa_1 (dw_cfi_ref cfi
, dw_cfa_location
*loc
)
833 switch (cfi
->dw_cfi_opc
)
835 case DW_CFA_def_cfa_offset
:
836 case DW_CFA_def_cfa_offset_sf
:
837 loc
->offset
= cfi
->dw_cfi_oprnd1
.dw_cfi_offset
;
839 case DW_CFA_def_cfa_register
:
840 loc
->reg
= cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
;
843 case DW_CFA_def_cfa_sf
:
844 loc
->reg
= cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
;
845 loc
->offset
= cfi
->dw_cfi_oprnd2
.dw_cfi_offset
;
847 case DW_CFA_def_cfa_expression
:
848 get_cfa_from_loc_descr (loc
, cfi
->dw_cfi_oprnd1
.dw_cfi_loc
);
855 /* Find the previous value for the CFA. */
858 lookup_cfa (dw_cfa_location
*loc
)
863 loc
->reg
= INVALID_REGNUM
;
866 loc
->base_offset
= 0;
868 for (cfi
= cie_cfi_head
; cfi
; cfi
= cfi
->dw_cfi_next
)
869 lookup_cfa_1 (cfi
, loc
);
871 fde
= current_fde ();
873 for (cfi
= fde
->dw_fde_cfi
; cfi
; cfi
= cfi
->dw_cfi_next
)
874 lookup_cfa_1 (cfi
, loc
);
877 /* The current rule for calculating the DWARF2 canonical frame address. */
878 static dw_cfa_location cfa
;
880 /* The register used for saving registers to the stack, and its offset
882 static dw_cfa_location cfa_store
;
884 /* The running total of the size of arguments pushed onto the stack. */
885 static HOST_WIDE_INT args_size
;
887 /* The last args_size we actually output. */
888 static HOST_WIDE_INT old_args_size
;
890 /* Entry point to update the canonical frame address (CFA).
891 LABEL is passed to add_fde_cfi. The value of CFA is now to be
892 calculated from REG+OFFSET. */
895 dwarf2out_def_cfa (const char *label
, unsigned int reg
, HOST_WIDE_INT offset
)
902 def_cfa_1 (label
, &loc
);
905 /* Determine if two dw_cfa_location structures define the same data. */
908 cfa_equal_p (const dw_cfa_location
*loc1
, const dw_cfa_location
*loc2
)
910 return (loc1
->reg
== loc2
->reg
911 && loc1
->offset
== loc2
->offset
912 && loc1
->indirect
== loc2
->indirect
913 && (loc1
->indirect
== 0
914 || loc1
->base_offset
== loc2
->base_offset
));
917 /* This routine does the actual work. The CFA is now calculated from
918 the dw_cfa_location structure. */
921 def_cfa_1 (const char *label
, dw_cfa_location
*loc_p
)
924 dw_cfa_location old_cfa
, loc
;
929 if (cfa_store
.reg
== loc
.reg
&& loc
.indirect
== 0)
930 cfa_store
.offset
= loc
.offset
;
932 loc
.reg
= DWARF_FRAME_REGNUM (loc
.reg
);
933 lookup_cfa (&old_cfa
);
935 /* If nothing changed, no need to issue any call frame instructions. */
936 if (cfa_equal_p (&loc
, &old_cfa
))
941 if (loc
.reg
== old_cfa
.reg
&& !loc
.indirect
)
943 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
944 the CFA register did not change but the offset did. The data
945 factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
946 in the assembler via the .cfi_def_cfa_offset directive. */
948 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_offset_sf
;
950 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_offset
;
951 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
= loc
.offset
;
954 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
955 else if (loc
.offset
== old_cfa
.offset
956 && old_cfa
.reg
!= INVALID_REGNUM
959 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
960 indicating the CFA register has changed to <register> but the
961 offset has not changed. */
962 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_register
;
963 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= loc
.reg
;
967 else if (loc
.indirect
== 0)
969 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
970 indicating the CFA register has changed to <register> with
971 the specified offset. The data factoring for DW_CFA_def_cfa_sf
972 happens in output_cfi, or in the assembler via the .cfi_def_cfa
975 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_sf
;
977 cfi
->dw_cfi_opc
= DW_CFA_def_cfa
;
978 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= loc
.reg
;
979 cfi
->dw_cfi_oprnd2
.dw_cfi_offset
= loc
.offset
;
983 /* Construct a DW_CFA_def_cfa_expression instruction to
984 calculate the CFA using a full location expression since no
985 register-offset pair is available. */
986 struct dw_loc_descr_struct
*loc_list
;
988 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_expression
;
989 loc_list
= build_cfa_loc (&loc
, 0);
990 cfi
->dw_cfi_oprnd1
.dw_cfi_loc
= loc_list
;
993 add_fde_cfi (label
, cfi
);
996 /* Add the CFI for saving a register. REG is the CFA column number.
997 LABEL is passed to add_fde_cfi.
998 If SREG is -1, the register is saved at OFFSET from the CFA;
999 otherwise it is saved in SREG. */
1002 reg_save (const char *label
, unsigned int reg
, unsigned int sreg
, HOST_WIDE_INT offset
)
1004 dw_cfi_ref cfi
= new_cfi ();
1005 dw_fde_ref fde
= current_fde ();
1007 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= reg
;
1009 /* When stack is aligned, store REG using DW_CFA_expression with
1012 && fde
->stack_realign
1013 && sreg
== INVALID_REGNUM
)
1015 cfi
->dw_cfi_opc
= DW_CFA_expression
;
1016 cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
= reg
;
1017 cfi
->dw_cfi_oprnd1
.dw_cfi_loc
1018 = build_cfa_aligned_loc (offset
, fde
->stack_realignment
);
1020 else if (sreg
== INVALID_REGNUM
)
1023 cfi
->dw_cfi_opc
= DW_CFA_offset_extended_sf
;
1024 else if (reg
& ~0x3f)
1025 cfi
->dw_cfi_opc
= DW_CFA_offset_extended
;
1027 cfi
->dw_cfi_opc
= DW_CFA_offset
;
1028 cfi
->dw_cfi_oprnd2
.dw_cfi_offset
= offset
;
1030 else if (sreg
== reg
)
1031 cfi
->dw_cfi_opc
= DW_CFA_same_value
;
1034 cfi
->dw_cfi_opc
= DW_CFA_register
;
1035 cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
= sreg
;
1038 add_fde_cfi (label
, cfi
);
1041 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
1042 This CFI tells the unwinder that it needs to restore the window registers
1043 from the previous frame's window save area.
1045 ??? Perhaps we should note in the CIE where windows are saved (instead of
1046 assuming 0(cfa)) and what registers are in the window. */
1049 dwarf2out_window_save (const char *label
)
1051 dw_cfi_ref cfi
= new_cfi ();
1053 cfi
->dw_cfi_opc
= DW_CFA_GNU_window_save
;
1054 add_fde_cfi (label
, cfi
);
1057 /* Add a CFI to update the running total of the size of arguments
1058 pushed onto the stack. */
1061 dwarf2out_args_size (const char *label
, HOST_WIDE_INT size
)
1065 if (size
== old_args_size
)
1068 old_args_size
= size
;
1071 cfi
->dw_cfi_opc
= DW_CFA_GNU_args_size
;
1072 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
= size
;
1073 add_fde_cfi (label
, cfi
);
1076 /* Entry point for saving a register to the stack. REG is the GCC register
1077 number. LABEL and OFFSET are passed to reg_save. */
1080 dwarf2out_reg_save (const char *label
, unsigned int reg
, HOST_WIDE_INT offset
)
1082 reg_save (label
, DWARF_FRAME_REGNUM (reg
), INVALID_REGNUM
, offset
);
1085 /* Entry point for saving the return address in the stack.
1086 LABEL and OFFSET are passed to reg_save. */
1089 dwarf2out_return_save (const char *label
, HOST_WIDE_INT offset
)
1091 reg_save (label
, DWARF_FRAME_RETURN_COLUMN
, INVALID_REGNUM
, offset
);
1094 /* Entry point for saving the return address in a register.
1095 LABEL and SREG are passed to reg_save. */
1098 dwarf2out_return_reg (const char *label
, unsigned int sreg
)
1100 reg_save (label
, DWARF_FRAME_RETURN_COLUMN
, DWARF_FRAME_REGNUM (sreg
), 0);
1103 #ifdef DWARF2_UNWIND_INFO
1104 /* Record the initial position of the return address. RTL is
1105 INCOMING_RETURN_ADDR_RTX. */
1108 initial_return_save (rtx rtl
)
1110 unsigned int reg
= INVALID_REGNUM
;
1111 HOST_WIDE_INT offset
= 0;
1113 switch (GET_CODE (rtl
))
1116 /* RA is in a register. */
1117 reg
= DWARF_FRAME_REGNUM (REGNO (rtl
));
1121 /* RA is on the stack. */
1122 rtl
= XEXP (rtl
, 0);
1123 switch (GET_CODE (rtl
))
1126 gcc_assert (REGNO (rtl
) == STACK_POINTER_REGNUM
);
1131 gcc_assert (REGNO (XEXP (rtl
, 0)) == STACK_POINTER_REGNUM
);
1132 offset
= INTVAL (XEXP (rtl
, 1));
1136 gcc_assert (REGNO (XEXP (rtl
, 0)) == STACK_POINTER_REGNUM
);
1137 offset
= -INTVAL (XEXP (rtl
, 1));
1147 /* The return address is at some offset from any value we can
1148 actually load. For instance, on the SPARC it is in %i7+8. Just
1149 ignore the offset for now; it doesn't matter for unwinding frames. */
1150 gcc_assert (GET_CODE (XEXP (rtl
, 1)) == CONST_INT
);
1151 initial_return_save (XEXP (rtl
, 0));
1158 if (reg
!= DWARF_FRAME_RETURN_COLUMN
)
1159 reg_save (NULL
, DWARF_FRAME_RETURN_COLUMN
, reg
, offset
- cfa
.offset
);
1163 /* Given a SET, calculate the amount of stack adjustment it
1166 static HOST_WIDE_INT
1167 stack_adjust_offset (const_rtx pattern
, HOST_WIDE_INT cur_args_size
,
1168 HOST_WIDE_INT cur_offset
)
1170 const_rtx src
= SET_SRC (pattern
);
1171 const_rtx dest
= SET_DEST (pattern
);
1172 HOST_WIDE_INT offset
= 0;
1175 if (dest
== stack_pointer_rtx
)
1177 code
= GET_CODE (src
);
1179 /* Assume (set (reg sp) (reg whatever)) sets args_size
1181 if (code
== REG
&& src
!= stack_pointer_rtx
)
1183 offset
= -cur_args_size
;
1184 #ifndef STACK_GROWS_DOWNWARD
1187 return offset
- cur_offset
;
1190 if (! (code
== PLUS
|| code
== MINUS
)
1191 || XEXP (src
, 0) != stack_pointer_rtx
1192 || GET_CODE (XEXP (src
, 1)) != CONST_INT
)
1195 /* (set (reg sp) (plus (reg sp) (const_int))) */
1196 offset
= INTVAL (XEXP (src
, 1));
1202 if (MEM_P (src
) && !MEM_P (dest
))
1206 /* (set (mem (pre_dec (reg sp))) (foo)) */
1207 src
= XEXP (dest
, 0);
1208 code
= GET_CODE (src
);
1214 if (XEXP (src
, 0) == stack_pointer_rtx
)
1216 rtx val
= XEXP (XEXP (src
, 1), 1);
1217 /* We handle only adjustments by constant amount. */
1218 gcc_assert (GET_CODE (XEXP (src
, 1)) == PLUS
1219 && GET_CODE (val
) == CONST_INT
);
1220 offset
= -INTVAL (val
);
1227 if (XEXP (src
, 0) == stack_pointer_rtx
)
1229 offset
= GET_MODE_SIZE (GET_MODE (dest
));
1236 if (XEXP (src
, 0) == stack_pointer_rtx
)
1238 offset
= -GET_MODE_SIZE (GET_MODE (dest
));
1253 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1254 indexed by INSN_UID. */
1256 static HOST_WIDE_INT
*barrier_args_size
;
1258 /* Helper function for compute_barrier_args_size. Handle one insn. */
1260 static HOST_WIDE_INT
1261 compute_barrier_args_size_1 (rtx insn
, HOST_WIDE_INT cur_args_size
,
1262 VEC (rtx
, heap
) **next
)
1264 HOST_WIDE_INT offset
= 0;
1267 if (! RTX_FRAME_RELATED_P (insn
))
1269 if (prologue_epilogue_contains (insn
)
1270 || sibcall_epilogue_contains (insn
))
1272 else if (GET_CODE (PATTERN (insn
)) == SET
)
1273 offset
= stack_adjust_offset (PATTERN (insn
), cur_args_size
, 0);
1274 else if (GET_CODE (PATTERN (insn
)) == PARALLEL
1275 || GET_CODE (PATTERN (insn
)) == SEQUENCE
)
1277 /* There may be stack adjustments inside compound insns. Search
1279 for (i
= XVECLEN (PATTERN (insn
), 0) - 1; i
>= 0; i
--)
1280 if (GET_CODE (XVECEXP (PATTERN (insn
), 0, i
)) == SET
)
1281 offset
+= stack_adjust_offset (XVECEXP (PATTERN (insn
), 0, i
),
1282 cur_args_size
, offset
);
1287 rtx expr
= find_reg_note (insn
, REG_FRAME_RELATED_EXPR
, NULL_RTX
);
1291 expr
= XEXP (expr
, 0);
1292 if (GET_CODE (expr
) == PARALLEL
1293 || GET_CODE (expr
) == SEQUENCE
)
1294 for (i
= 1; i
< XVECLEN (expr
, 0); i
++)
1296 rtx elem
= XVECEXP (expr
, 0, i
);
1298 if (GET_CODE (elem
) == SET
&& !RTX_FRAME_RELATED_P (elem
))
1299 offset
+= stack_adjust_offset (elem
, cur_args_size
, offset
);
1304 #ifndef STACK_GROWS_DOWNWARD
1308 cur_args_size
+= offset
;
1309 if (cur_args_size
< 0)
1314 rtx dest
= JUMP_LABEL (insn
);
1318 if (barrier_args_size
[INSN_UID (dest
)] < 0)
1320 barrier_args_size
[INSN_UID (dest
)] = cur_args_size
;
1321 VEC_safe_push (rtx
, heap
, *next
, dest
);
1326 return cur_args_size
;
1329 /* Walk the whole function and compute args_size on BARRIERs. */
1332 compute_barrier_args_size (void)
1334 int max_uid
= get_max_uid (), i
;
1336 VEC (rtx
, heap
) *worklist
, *next
, *tmp
;
1338 barrier_args_size
= XNEWVEC (HOST_WIDE_INT
, max_uid
);
1339 for (i
= 0; i
< max_uid
; i
++)
1340 barrier_args_size
[i
] = -1;
1342 worklist
= VEC_alloc (rtx
, heap
, 20);
1343 next
= VEC_alloc (rtx
, heap
, 20);
1344 insn
= get_insns ();
1345 barrier_args_size
[INSN_UID (insn
)] = 0;
1346 VEC_quick_push (rtx
, worklist
, insn
);
1349 while (!VEC_empty (rtx
, worklist
))
1351 rtx prev
, body
, first_insn
;
1352 HOST_WIDE_INT cur_args_size
;
1354 first_insn
= insn
= VEC_pop (rtx
, worklist
);
1355 cur_args_size
= barrier_args_size
[INSN_UID (insn
)];
1356 prev
= prev_nonnote_insn (insn
);
1357 if (prev
&& BARRIER_P (prev
))
1358 barrier_args_size
[INSN_UID (prev
)] = cur_args_size
;
1360 for (; insn
; insn
= NEXT_INSN (insn
))
1362 if (INSN_DELETED_P (insn
) || NOTE_P (insn
))
1364 if (BARRIER_P (insn
))
1369 if (insn
== first_insn
)
1371 else if (barrier_args_size
[INSN_UID (insn
)] < 0)
1373 barrier_args_size
[INSN_UID (insn
)] = cur_args_size
;
1378 /* The insns starting with this label have been
1379 already scanned or are in the worklist. */
1384 body
= PATTERN (insn
);
1385 if (GET_CODE (body
) == SEQUENCE
)
1387 HOST_WIDE_INT dest_args_size
= cur_args_size
;
1388 for (i
= 1; i
< XVECLEN (body
, 0); i
++)
1389 if (INSN_ANNULLED_BRANCH_P (XVECEXP (body
, 0, 0))
1390 && INSN_FROM_TARGET_P (XVECEXP (body
, 0, i
)))
1392 = compute_barrier_args_size_1 (XVECEXP (body
, 0, i
),
1393 dest_args_size
, &next
);
1396 = compute_barrier_args_size_1 (XVECEXP (body
, 0, i
),
1397 cur_args_size
, &next
);
1399 if (INSN_ANNULLED_BRANCH_P (XVECEXP (body
, 0, 0)))
1400 compute_barrier_args_size_1 (XVECEXP (body
, 0, 0),
1401 dest_args_size
, &next
);
1404 = compute_barrier_args_size_1 (XVECEXP (body
, 0, 0),
1405 cur_args_size
, &next
);
1409 = compute_barrier_args_size_1 (insn
, cur_args_size
, &next
);
1413 if (VEC_empty (rtx
, next
))
1416 /* Swap WORKLIST with NEXT and truncate NEXT for next iteration. */
1420 VEC_truncate (rtx
, next
, 0);
1423 VEC_free (rtx
, heap
, worklist
);
1424 VEC_free (rtx
, heap
, next
);
1428 /* Check INSN to see if it looks like a push or a stack adjustment, and
1429 make a note of it if it does. EH uses this information to find out how
1430 much extra space it needs to pop off the stack. */
1433 dwarf2out_stack_adjust (rtx insn
, bool after_p
)
1435 HOST_WIDE_INT offset
;
1439 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1440 with this function. Proper support would require all frame-related
1441 insns to be marked, and to be able to handle saving state around
1442 epilogues textually in the middle of the function. */
1443 if (prologue_epilogue_contains (insn
) || sibcall_epilogue_contains (insn
))
1446 /* If INSN is an instruction from target of an annulled branch, the
1447 effects are for the target only and so current argument size
1448 shouldn't change at all. */
1450 && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence
, 0, 0))
1451 && INSN_FROM_TARGET_P (insn
))
1454 /* If only calls can throw, and we have a frame pointer,
1455 save up adjustments until we see the CALL_INSN. */
1456 if (!flag_asynchronous_unwind_tables
&& cfa
.reg
!= STACK_POINTER_REGNUM
)
1458 if (CALL_P (insn
) && !after_p
)
1460 /* Extract the size of the args from the CALL rtx itself. */
1461 insn
= PATTERN (insn
);
1462 if (GET_CODE (insn
) == PARALLEL
)
1463 insn
= XVECEXP (insn
, 0, 0);
1464 if (GET_CODE (insn
) == SET
)
1465 insn
= SET_SRC (insn
);
1466 gcc_assert (GET_CODE (insn
) == CALL
);
1467 dwarf2out_args_size ("", INTVAL (XEXP (insn
, 1)));
1472 if (CALL_P (insn
) && !after_p
)
1474 if (!flag_asynchronous_unwind_tables
)
1475 dwarf2out_args_size ("", args_size
);
1478 else if (BARRIER_P (insn
))
1480 /* Don't call compute_barrier_args_size () if the only
1481 BARRIER is at the end of function. */
1482 if (barrier_args_size
== NULL
&& next_nonnote_insn (insn
))
1483 compute_barrier_args_size ();
1484 if (barrier_args_size
== NULL
)
1488 offset
= barrier_args_size
[INSN_UID (insn
)];
1493 offset
-= args_size
;
1494 #ifndef STACK_GROWS_DOWNWARD
1498 else if (GET_CODE (PATTERN (insn
)) == SET
)
1499 offset
= stack_adjust_offset (PATTERN (insn
), args_size
, 0);
1500 else if (GET_CODE (PATTERN (insn
)) == PARALLEL
1501 || GET_CODE (PATTERN (insn
)) == SEQUENCE
)
1503 /* There may be stack adjustments inside compound insns. Search
1505 for (offset
= 0, i
= XVECLEN (PATTERN (insn
), 0) - 1; i
>= 0; i
--)
1506 if (GET_CODE (XVECEXP (PATTERN (insn
), 0, i
)) == SET
)
1507 offset
+= stack_adjust_offset (XVECEXP (PATTERN (insn
), 0, i
),
1516 label
= dwarf2out_cfi_label (false);
1517 dwarf2out_args_size_adjust (offset
, label
);
1520 /* Adjust args_size based on stack adjustment OFFSET. */
1523 dwarf2out_args_size_adjust (HOST_WIDE_INT offset
, const char *label
)
1525 if (cfa
.reg
== STACK_POINTER_REGNUM
)
1526 cfa
.offset
+= offset
;
1528 if (cfa_store
.reg
== STACK_POINTER_REGNUM
)
1529 cfa_store
.offset
+= offset
;
1531 #ifndef STACK_GROWS_DOWNWARD
1535 args_size
+= offset
;
1539 def_cfa_1 (label
, &cfa
);
1540 if (flag_asynchronous_unwind_tables
)
1541 dwarf2out_args_size (label
, args_size
);
1546 /* We delay emitting a register save until either (a) we reach the end
1547 of the prologue or (b) the register is clobbered. This clusters
1548 register saves so that there are fewer pc advances. */
1550 struct queued_reg_save
GTY(())
1552 struct queued_reg_save
*next
;
1554 HOST_WIDE_INT cfa_offset
;
1558 static GTY(()) struct queued_reg_save
*queued_reg_saves
;
1560 /* The caller's ORIG_REG is saved in SAVED_IN_REG. */
1561 struct reg_saved_in_data
GTY(()) {
1566 /* A list of registers saved in other registers.
1567 The list intentionally has a small maximum capacity of 4; if your
1568 port needs more than that, you might consider implementing a
1569 more efficient data structure. */
1570 static GTY(()) struct reg_saved_in_data regs_saved_in_regs
[4];
1571 static GTY(()) size_t num_regs_saved_in_regs
;
1573 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1574 static const char *last_reg_save_label
;
1576 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1577 SREG, or if SREG is NULL then it is saved at OFFSET to the CFA. */
1580 queue_reg_save (const char *label
, rtx reg
, rtx sreg
, HOST_WIDE_INT offset
)
1582 struct queued_reg_save
*q
;
1584 /* Duplicates waste space, but it's also necessary to remove them
1585 for correctness, since the queue gets output in reverse
1587 for (q
= queued_reg_saves
; q
!= NULL
; q
= q
->next
)
1588 if (REGNO (q
->reg
) == REGNO (reg
))
1593 q
= GGC_NEW (struct queued_reg_save
);
1594 q
->next
= queued_reg_saves
;
1595 queued_reg_saves
= q
;
1599 q
->cfa_offset
= offset
;
1600 q
->saved_reg
= sreg
;
1602 last_reg_save_label
= label
;
1605 /* Output all the entries in QUEUED_REG_SAVES. */
1608 flush_queued_reg_saves (void)
1610 struct queued_reg_save
*q
;
1612 for (q
= queued_reg_saves
; q
; q
= q
->next
)
1615 unsigned int reg
, sreg
;
1617 for (i
= 0; i
< num_regs_saved_in_regs
; i
++)
1618 if (REGNO (regs_saved_in_regs
[i
].orig_reg
) == REGNO (q
->reg
))
1620 if (q
->saved_reg
&& i
== num_regs_saved_in_regs
)
1622 gcc_assert (i
!= ARRAY_SIZE (regs_saved_in_regs
));
1623 num_regs_saved_in_regs
++;
1625 if (i
!= num_regs_saved_in_regs
)
1627 regs_saved_in_regs
[i
].orig_reg
= q
->reg
;
1628 regs_saved_in_regs
[i
].saved_in_reg
= q
->saved_reg
;
1631 reg
= DWARF_FRAME_REGNUM (REGNO (q
->reg
));
1633 sreg
= DWARF_FRAME_REGNUM (REGNO (q
->saved_reg
));
1635 sreg
= INVALID_REGNUM
;
1636 reg_save (last_reg_save_label
, reg
, sreg
, q
->cfa_offset
);
1639 queued_reg_saves
= NULL
;
1640 last_reg_save_label
= NULL
;
1643 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1644 location for? Or, does it clobber a register which we've previously
1645 said that some other register is saved in, and for which we now
1646 have a new location for? */
1649 clobbers_queued_reg_save (const_rtx insn
)
1651 struct queued_reg_save
*q
;
1653 for (q
= queued_reg_saves
; q
; q
= q
->next
)
1656 if (modified_in_p (q
->reg
, insn
))
1658 for (i
= 0; i
< num_regs_saved_in_regs
; i
++)
1659 if (REGNO (q
->reg
) == REGNO (regs_saved_in_regs
[i
].orig_reg
)
1660 && modified_in_p (regs_saved_in_regs
[i
].saved_in_reg
, insn
))
1667 /* Entry point for saving the first register into the second. */
1670 dwarf2out_reg_save_reg (const char *label
, rtx reg
, rtx sreg
)
1673 unsigned int regno
, sregno
;
1675 for (i
= 0; i
< num_regs_saved_in_regs
; i
++)
1676 if (REGNO (regs_saved_in_regs
[i
].orig_reg
) == REGNO (reg
))
1678 if (i
== num_regs_saved_in_regs
)
1680 gcc_assert (i
!= ARRAY_SIZE (regs_saved_in_regs
));
1681 num_regs_saved_in_regs
++;
1683 regs_saved_in_regs
[i
].orig_reg
= reg
;
1684 regs_saved_in_regs
[i
].saved_in_reg
= sreg
;
1686 regno
= DWARF_FRAME_REGNUM (REGNO (reg
));
1687 sregno
= DWARF_FRAME_REGNUM (REGNO (sreg
));
1688 reg_save (label
, regno
, sregno
, 0);
1691 /* What register, if any, is currently saved in REG? */
1694 reg_saved_in (rtx reg
)
1696 unsigned int regn
= REGNO (reg
);
1698 struct queued_reg_save
*q
;
1700 for (q
= queued_reg_saves
; q
; q
= q
->next
)
1701 if (q
->saved_reg
&& regn
== REGNO (q
->saved_reg
))
1704 for (i
= 0; i
< num_regs_saved_in_regs
; i
++)
1705 if (regs_saved_in_regs
[i
].saved_in_reg
1706 && regn
== REGNO (regs_saved_in_regs
[i
].saved_in_reg
))
1707 return regs_saved_in_regs
[i
].orig_reg
;
1713 /* A temporary register holding an integral value used in adjusting SP
1714 or setting up the store_reg. The "offset" field holds the integer
1715 value, not an offset. */
1716 static dw_cfa_location cfa_temp
;
1718 /* Record call frame debugging information for an expression EXPR,
1719 which either sets SP or FP (adjusting how we calculate the frame
1720 address) or saves a register to the stack or another register.
1721 LABEL indicates the address of EXPR.
1723 This function encodes a state machine mapping rtxes to actions on
1724 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1725 users need not read the source code.
1727 The High-Level Picture
1729 Changes in the register we use to calculate the CFA: Currently we
1730 assume that if you copy the CFA register into another register, we
1731 should take the other one as the new CFA register; this seems to
1732 work pretty well. If it's wrong for some target, it's simple
1733 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1735 Changes in the register we use for saving registers to the stack:
1736 This is usually SP, but not always. Again, we deduce that if you
1737 copy SP into another register (and SP is not the CFA register),
1738 then the new register is the one we will be using for register
1739 saves. This also seems to work.
1741 Register saves: There's not much guesswork about this one; if
1742 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1743 register save, and the register used to calculate the destination
1744 had better be the one we think we're using for this purpose.
1745 It's also assumed that a copy from a call-saved register to another
1746 register is saving that register if RTX_FRAME_RELATED_P is set on
1747 that instruction. If the copy is from a call-saved register to
1748 the *same* register, that means that the register is now the same
1749 value as in the caller.
1751 Except: If the register being saved is the CFA register, and the
1752 offset is nonzero, we are saving the CFA, so we assume we have to
1753 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1754 the intent is to save the value of SP from the previous frame.
1756 In addition, if a register has previously been saved to a different
1759 Invariants / Summaries of Rules
1761 cfa current rule for calculating the CFA. It usually
1762 consists of a register and an offset.
1763 cfa_store register used by prologue code to save things to the stack
1764 cfa_store.offset is the offset from the value of
1765 cfa_store.reg to the actual CFA
1766 cfa_temp register holding an integral value. cfa_temp.offset
1767 stores the value, which will be used to adjust the
1768 stack pointer. cfa_temp is also used like cfa_store,
1769 to track stores to the stack via fp or a temp reg.
1771 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1772 with cfa.reg as the first operand changes the cfa.reg and its
1773 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1776 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1777 expression yielding a constant. This sets cfa_temp.reg
1778 and cfa_temp.offset.
1780 Rule 5: Create a new register cfa_store used to save items to the
1783 Rules 10-14: Save a register to the stack. Define offset as the
1784 difference of the original location and cfa_store's
1785 location (or cfa_temp's location if cfa_temp is used).
1787 Rules 16-20: If AND operation happens on sp in prologue, we assume
1788 stack is realigned. We will use a group of DW_OP_XXX
1789 expressions to represent the location of the stored
1790 register instead of CFA+offset.
1794 "{a,b}" indicates a choice of a xor b.
1795 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1798 (set <reg1> <reg2>:cfa.reg)
1799 effects: cfa.reg = <reg1>
1800 cfa.offset unchanged
1801 cfa_temp.reg = <reg1>
1802 cfa_temp.offset = cfa.offset
1805 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1806 {<const_int>,<reg>:cfa_temp.reg}))
1807 effects: cfa.reg = sp if fp used
1808 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1809 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1810 if cfa_store.reg==sp
1813 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1814 effects: cfa.reg = fp
1815 cfa_offset += +/- <const_int>
1818 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1819 constraints: <reg1> != fp
1821 effects: cfa.reg = <reg1>
1822 cfa_temp.reg = <reg1>
1823 cfa_temp.offset = cfa.offset
1826 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1827 constraints: <reg1> != fp
1829 effects: cfa_store.reg = <reg1>
1830 cfa_store.offset = cfa.offset - cfa_temp.offset
1833 (set <reg> <const_int>)
1834 effects: cfa_temp.reg = <reg>
1835 cfa_temp.offset = <const_int>
1838 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1839 effects: cfa_temp.reg = <reg1>
1840 cfa_temp.offset |= <const_int>
1843 (set <reg> (high <exp>))
1847 (set <reg> (lo_sum <exp> <const_int>))
1848 effects: cfa_temp.reg = <reg>
1849 cfa_temp.offset = <const_int>
1852 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1853 effects: cfa_store.offset -= <const_int>
1854 cfa.offset = cfa_store.offset if cfa.reg == sp
1856 cfa.base_offset = -cfa_store.offset
1859 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1860 effects: cfa_store.offset += -/+ mode_size(mem)
1861 cfa.offset = cfa_store.offset if cfa.reg == sp
1863 cfa.base_offset = -cfa_store.offset
1866 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1869 effects: cfa.reg = <reg1>
1870 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1873 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1874 effects: cfa.reg = <reg1>
1875 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1878 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1879 effects: cfa.reg = <reg1>
1880 cfa.base_offset = -cfa_temp.offset
1881 cfa_temp.offset -= mode_size(mem)
1884 (set <reg> {unspec, unspec_volatile})
1885 effects: target-dependent
1888 (set sp (and: sp <const_int>))
1889 constraints: cfa_store.reg == sp
1890 effects: current_fde.stack_realign = 1
1891 cfa_store.offset = 0
1892 fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
1895 (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
1896 effects: cfa_store.offset += -/+ mode_size(mem)
1899 (set (mem ({pre_inc, pre_dec} sp)) fp)
1900 constraints: fde->stack_realign == 1
1901 effects: cfa_store.offset = 0
1902 cfa.reg != HARD_FRAME_POINTER_REGNUM
1905 (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
1906 constraints: fde->stack_realign == 1
1908 && cfa.indirect == 0
1909 && cfa.reg != HARD_FRAME_POINTER_REGNUM
1910 effects: Use DW_CFA_def_cfa_expression to define cfa
1911 cfa.reg == fde->drap_reg
1914 (set reg fde->drap_reg)
1915 constraints: fde->vdrap_reg == INVALID_REGNUM
1916 effects: fde->vdrap_reg = reg.
1917 (set mem fde->drap_reg)
1918 constraints: fde->drap_reg_saved == 1
1922 dwarf2out_frame_debug_expr (rtx expr
, const char *label
)
1924 rtx src
, dest
, span
;
1925 HOST_WIDE_INT offset
;
1928 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1929 the PARALLEL independently. The first element is always processed if
1930 it is a SET. This is for backward compatibility. Other elements
1931 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1932 flag is set in them. */
1933 if (GET_CODE (expr
) == PARALLEL
|| GET_CODE (expr
) == SEQUENCE
)
1936 int limit
= XVECLEN (expr
, 0);
1939 /* PARALLELs have strict read-modify-write semantics, so we
1940 ought to evaluate every rvalue before changing any lvalue.
1941 It's cumbersome to do that in general, but there's an
1942 easy approximation that is enough for all current users:
1943 handle register saves before register assignments. */
1944 if (GET_CODE (expr
) == PARALLEL
)
1945 for (par_index
= 0; par_index
< limit
; par_index
++)
1947 elem
= XVECEXP (expr
, 0, par_index
);
1948 if (GET_CODE (elem
) == SET
1949 && MEM_P (SET_DEST (elem
))
1950 && (RTX_FRAME_RELATED_P (elem
) || par_index
== 0))
1951 dwarf2out_frame_debug_expr (elem
, label
);
1954 for (par_index
= 0; par_index
< limit
; par_index
++)
1956 elem
= XVECEXP (expr
, 0, par_index
);
1957 if (GET_CODE (elem
) == SET
1958 && (!MEM_P (SET_DEST (elem
)) || GET_CODE (expr
) == SEQUENCE
)
1959 && (RTX_FRAME_RELATED_P (elem
) || par_index
== 0))
1960 dwarf2out_frame_debug_expr (elem
, label
);
1961 else if (GET_CODE (elem
) == SET
1963 && !RTX_FRAME_RELATED_P (elem
))
1965 /* Stack adjustment combining might combine some post-prologue
1966 stack adjustment into a prologue stack adjustment. */
1967 HOST_WIDE_INT offset
= stack_adjust_offset (elem
, args_size
, 0);
1970 dwarf2out_args_size_adjust (offset
, label
);
1976 gcc_assert (GET_CODE (expr
) == SET
);
1978 src
= SET_SRC (expr
);
1979 dest
= SET_DEST (expr
);
1983 rtx rsi
= reg_saved_in (src
);
1988 fde
= current_fde ();
1990 if (GET_CODE (src
) == REG
1992 && fde
->drap_reg
== REGNO (src
)
1993 && (fde
->drap_reg_saved
1994 || GET_CODE (dest
) == REG
))
1997 /* If we are saving dynamic realign argument pointer to a
1998 register, the destination is virtual dynamic realign
1999 argument pointer. It may be used to access argument. */
2000 if (GET_CODE (dest
) == REG
)
2002 gcc_assert (fde
->vdrap_reg
== INVALID_REGNUM
);
2003 fde
->vdrap_reg
= REGNO (dest
);
2008 switch (GET_CODE (dest
))
2011 switch (GET_CODE (src
))
2013 /* Setting FP from SP. */
2015 if (cfa
.reg
== (unsigned) REGNO (src
))
2018 /* Update the CFA rule wrt SP or FP. Make sure src is
2019 relative to the current CFA register.
2021 We used to require that dest be either SP or FP, but the
2022 ARM copies SP to a temporary register, and from there to
2023 FP. So we just rely on the backends to only set
2024 RTX_FRAME_RELATED_P on appropriate insns. */
2025 cfa
.reg
= REGNO (dest
);
2026 cfa_temp
.reg
= cfa
.reg
;
2027 cfa_temp
.offset
= cfa
.offset
;
2031 /* Saving a register in a register. */
2032 gcc_assert (!fixed_regs
[REGNO (dest
)]
2033 /* For the SPARC and its register window. */
2034 || (DWARF_FRAME_REGNUM (REGNO (src
))
2035 == DWARF_FRAME_RETURN_COLUMN
));
2037 /* After stack is aligned, we can only save SP in FP
2038 if drap register is used. In this case, we have
2039 to restore stack pointer with the CFA value and we
2040 don't generate this DWARF information. */
2042 && fde
->stack_realign
2043 && REGNO (src
) == STACK_POINTER_REGNUM
)
2044 gcc_assert (REGNO (dest
) == HARD_FRAME_POINTER_REGNUM
2045 && fde
->drap_reg
!= INVALID_REGNUM
2046 && cfa
.reg
!= REGNO (src
));
2048 queue_reg_save (label
, src
, dest
, 0);
2055 if (dest
== stack_pointer_rtx
)
2059 switch (GET_CODE (XEXP (src
, 1)))
2062 offset
= INTVAL (XEXP (src
, 1));
2065 gcc_assert ((unsigned) REGNO (XEXP (src
, 1))
2067 offset
= cfa_temp
.offset
;
2073 if (XEXP (src
, 0) == hard_frame_pointer_rtx
)
2075 /* Restoring SP from FP in the epilogue. */
2076 gcc_assert (cfa
.reg
== (unsigned) HARD_FRAME_POINTER_REGNUM
);
2077 cfa
.reg
= STACK_POINTER_REGNUM
;
2079 else if (GET_CODE (src
) == LO_SUM
)
2080 /* Assume we've set the source reg of the LO_SUM from sp. */
2083 gcc_assert (XEXP (src
, 0) == stack_pointer_rtx
);
2085 if (GET_CODE (src
) != MINUS
)
2087 if (cfa
.reg
== STACK_POINTER_REGNUM
)
2088 cfa
.offset
+= offset
;
2089 if (cfa_store
.reg
== STACK_POINTER_REGNUM
)
2090 cfa_store
.offset
+= offset
;
2092 else if (dest
== hard_frame_pointer_rtx
)
2095 /* Either setting the FP from an offset of the SP,
2096 or adjusting the FP */
2097 gcc_assert (frame_pointer_needed
);
2099 gcc_assert (REG_P (XEXP (src
, 0))
2100 && (unsigned) REGNO (XEXP (src
, 0)) == cfa
.reg
2101 && GET_CODE (XEXP (src
, 1)) == CONST_INT
);
2102 offset
= INTVAL (XEXP (src
, 1));
2103 if (GET_CODE (src
) != MINUS
)
2105 cfa
.offset
+= offset
;
2106 cfa
.reg
= HARD_FRAME_POINTER_REGNUM
;
2110 gcc_assert (GET_CODE (src
) != MINUS
);
2113 if (REG_P (XEXP (src
, 0))
2114 && REGNO (XEXP (src
, 0)) == cfa
.reg
2115 && GET_CODE (XEXP (src
, 1)) == CONST_INT
)
2117 /* Setting a temporary CFA register that will be copied
2118 into the FP later on. */
2119 offset
= - INTVAL (XEXP (src
, 1));
2120 cfa
.offset
+= offset
;
2121 cfa
.reg
= REGNO (dest
);
2122 /* Or used to save regs to the stack. */
2123 cfa_temp
.reg
= cfa
.reg
;
2124 cfa_temp
.offset
= cfa
.offset
;
2128 else if (REG_P (XEXP (src
, 0))
2129 && REGNO (XEXP (src
, 0)) == cfa_temp
.reg
2130 && XEXP (src
, 1) == stack_pointer_rtx
)
2132 /* Setting a scratch register that we will use instead
2133 of SP for saving registers to the stack. */
2134 gcc_assert (cfa
.reg
== STACK_POINTER_REGNUM
);
2135 cfa_store
.reg
= REGNO (dest
);
2136 cfa_store
.offset
= cfa
.offset
- cfa_temp
.offset
;
2140 else if (GET_CODE (src
) == LO_SUM
2141 && GET_CODE (XEXP (src
, 1)) == CONST_INT
)
2143 cfa_temp
.reg
= REGNO (dest
);
2144 cfa_temp
.offset
= INTVAL (XEXP (src
, 1));
2153 cfa_temp
.reg
= REGNO (dest
);
2154 cfa_temp
.offset
= INTVAL (src
);
2159 gcc_assert (REG_P (XEXP (src
, 0))
2160 && (unsigned) REGNO (XEXP (src
, 0)) == cfa_temp
.reg
2161 && GET_CODE (XEXP (src
, 1)) == CONST_INT
);
2163 if ((unsigned) REGNO (dest
) != cfa_temp
.reg
)
2164 cfa_temp
.reg
= REGNO (dest
);
2165 cfa_temp
.offset
|= INTVAL (XEXP (src
, 1));
2168 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2169 which will fill in all of the bits. */
2176 case UNSPEC_VOLATILE
:
2177 gcc_assert (targetm
.dwarf_handle_frame_unspec
);
2178 targetm
.dwarf_handle_frame_unspec (label
, expr
, XINT (src
, 1));
2183 /* If this AND operation happens on stack pointer in prologue,
2184 we assume the stack is realigned and we extract the
2186 if (fde
&& XEXP (src
, 0) == stack_pointer_rtx
)
2188 gcc_assert (cfa_store
.reg
== REGNO (XEXP (src
, 0)));
2189 fde
->stack_realign
= 1;
2190 fde
->stack_realignment
= INTVAL (XEXP (src
, 1));
2191 cfa_store
.offset
= 0;
2193 if (cfa
.reg
!= STACK_POINTER_REGNUM
2194 && cfa
.reg
!= HARD_FRAME_POINTER_REGNUM
)
2195 fde
->drap_reg
= cfa
.reg
;
2203 def_cfa_1 (label
, &cfa
);
2208 /* Saving a register to the stack. Make sure dest is relative to the
2210 switch (GET_CODE (XEXP (dest
, 0)))
2215 /* We can't handle variable size modifications. */
2216 gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest
, 0), 1), 1))
2218 offset
= -INTVAL (XEXP (XEXP (XEXP (dest
, 0), 1), 1));
2220 gcc_assert (REGNO (XEXP (XEXP (dest
, 0), 0)) == STACK_POINTER_REGNUM
2221 && cfa_store
.reg
== STACK_POINTER_REGNUM
);
2223 cfa_store
.offset
+= offset
;
2224 if (cfa
.reg
== STACK_POINTER_REGNUM
)
2225 cfa
.offset
= cfa_store
.offset
;
2227 offset
= -cfa_store
.offset
;
2233 offset
= GET_MODE_SIZE (GET_MODE (dest
));
2234 if (GET_CODE (XEXP (dest
, 0)) == PRE_INC
)
2237 gcc_assert ((REGNO (XEXP (XEXP (dest
, 0), 0))
2238 == STACK_POINTER_REGNUM
)
2239 && cfa_store
.reg
== STACK_POINTER_REGNUM
);
2241 cfa_store
.offset
+= offset
;
2243 /* Rule 18: If stack is aligned, we will use FP as a
2244 reference to represent the address of the stored
2247 && fde
->stack_realign
2248 && src
== hard_frame_pointer_rtx
)
2250 gcc_assert (cfa
.reg
!= HARD_FRAME_POINTER_REGNUM
);
2251 cfa_store
.offset
= 0;
2254 if (cfa
.reg
== STACK_POINTER_REGNUM
)
2255 cfa
.offset
= cfa_store
.offset
;
2257 offset
= -cfa_store
.offset
;
2261 /* With an offset. */
2268 gcc_assert (GET_CODE (XEXP (XEXP (dest
, 0), 1)) == CONST_INT
2269 && REG_P (XEXP (XEXP (dest
, 0), 0)));
2270 offset
= INTVAL (XEXP (XEXP (dest
, 0), 1));
2271 if (GET_CODE (XEXP (dest
, 0)) == MINUS
)
2274 regno
= REGNO (XEXP (XEXP (dest
, 0), 0));
2276 if (cfa_store
.reg
== (unsigned) regno
)
2277 offset
-= cfa_store
.offset
;
2280 gcc_assert (cfa_temp
.reg
== (unsigned) regno
);
2281 offset
-= cfa_temp
.offset
;
2287 /* Without an offset. */
2290 int regno
= REGNO (XEXP (dest
, 0));
2292 if (cfa_store
.reg
== (unsigned) regno
)
2293 offset
= -cfa_store
.offset
;
2296 gcc_assert (cfa_temp
.reg
== (unsigned) regno
);
2297 offset
= -cfa_temp
.offset
;
2304 gcc_assert (cfa_temp
.reg
2305 == (unsigned) REGNO (XEXP (XEXP (dest
, 0), 0)));
2306 offset
= -cfa_temp
.offset
;
2307 cfa_temp
.offset
-= GET_MODE_SIZE (GET_MODE (dest
));
2315 /* If the source operand of this MEM operation is not a
2316 register, basically the source is return address. Here
2317 we only care how much stack grew and we don't save it. */
2321 if (REGNO (src
) != STACK_POINTER_REGNUM
2322 && REGNO (src
) != HARD_FRAME_POINTER_REGNUM
2323 && (unsigned) REGNO (src
) == cfa
.reg
)
2325 /* We're storing the current CFA reg into the stack. */
2327 if (cfa
.offset
== 0)
2330 /* If stack is aligned, putting CFA reg into stack means
2331 we can no longer use reg + offset to represent CFA.
2332 Here we use DW_CFA_def_cfa_expression instead. The
2333 result of this expression equals to the original CFA
2336 && fde
->stack_realign
2337 && cfa
.indirect
== 0
2338 && cfa
.reg
!= HARD_FRAME_POINTER_REGNUM
)
2340 dw_cfa_location cfa_exp
;
2342 gcc_assert (fde
->drap_reg
== cfa
.reg
);
2344 cfa_exp
.indirect
= 1;
2345 cfa_exp
.reg
= HARD_FRAME_POINTER_REGNUM
;
2346 cfa_exp
.base_offset
= offset
;
2349 fde
->drap_reg_saved
= 1;
2351 def_cfa_1 (label
, &cfa_exp
);
2355 /* If the source register is exactly the CFA, assume
2356 we're saving SP like any other register; this happens
2358 def_cfa_1 (label
, &cfa
);
2359 queue_reg_save (label
, stack_pointer_rtx
, NULL_RTX
, offset
);
2364 /* Otherwise, we'll need to look in the stack to
2365 calculate the CFA. */
2366 rtx x
= XEXP (dest
, 0);
2370 gcc_assert (REG_P (x
));
2372 cfa
.reg
= REGNO (x
);
2373 cfa
.base_offset
= offset
;
2375 def_cfa_1 (label
, &cfa
);
2380 def_cfa_1 (label
, &cfa
);
2382 span
= targetm
.dwarf_register_span (src
);
2385 queue_reg_save (label
, src
, NULL_RTX
, offset
);
2388 /* We have a PARALLEL describing where the contents of SRC
2389 live. Queue register saves for each piece of the
2393 HOST_WIDE_INT span_offset
= offset
;
2395 gcc_assert (GET_CODE (span
) == PARALLEL
);
2397 limit
= XVECLEN (span
, 0);
2398 for (par_index
= 0; par_index
< limit
; par_index
++)
2400 rtx elem
= XVECEXP (span
, 0, par_index
);
2402 queue_reg_save (label
, elem
, NULL_RTX
, span_offset
);
2403 span_offset
+= GET_MODE_SIZE (GET_MODE (elem
));
2414 /* Record call frame debugging information for INSN, which either
2415 sets SP or FP (adjusting how we calculate the frame address) or saves a
2416 register to the stack. If INSN is NULL_RTX, initialize our state.
2418 If AFTER_P is false, we're being called before the insn is emitted,
2419 otherwise after. Call instructions get invoked twice. */
2422 dwarf2out_frame_debug (rtx insn
, bool after_p
)
2427 if (insn
== NULL_RTX
)
2431 /* Flush any queued register saves. */
2432 flush_queued_reg_saves ();
2434 /* Set up state for generating call frame debug info. */
2437 == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM
));
2439 cfa
.reg
= STACK_POINTER_REGNUM
;
2442 cfa_temp
.offset
= 0;
2444 for (i
= 0; i
< num_regs_saved_in_regs
; i
++)
2446 regs_saved_in_regs
[i
].orig_reg
= NULL_RTX
;
2447 regs_saved_in_regs
[i
].saved_in_reg
= NULL_RTX
;
2449 num_regs_saved_in_regs
= 0;
2451 if (barrier_args_size
)
2453 XDELETEVEC (barrier_args_size
);
2454 barrier_args_size
= NULL
;
2459 if (!NONJUMP_INSN_P (insn
) || clobbers_queued_reg_save (insn
))
2460 flush_queued_reg_saves ();
2462 if (! RTX_FRAME_RELATED_P (insn
))
2464 if (!ACCUMULATE_OUTGOING_ARGS
)
2465 dwarf2out_stack_adjust (insn
, after_p
);
2469 label
= dwarf2out_cfi_label (false);
2470 src
= find_reg_note (insn
, REG_FRAME_RELATED_EXPR
, NULL_RTX
);
2472 insn
= XEXP (src
, 0);
2474 insn
= PATTERN (insn
);
2476 dwarf2out_frame_debug_expr (insn
, label
);
2481 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
2482 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2483 (enum dwarf_call_frame_info cfi
);
2485 static enum dw_cfi_oprnd_type
2486 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi
)
2491 case DW_CFA_GNU_window_save
:
2492 return dw_cfi_oprnd_unused
;
2494 case DW_CFA_set_loc
:
2495 case DW_CFA_advance_loc1
:
2496 case DW_CFA_advance_loc2
:
2497 case DW_CFA_advance_loc4
:
2498 case DW_CFA_MIPS_advance_loc8
:
2499 return dw_cfi_oprnd_addr
;
2502 case DW_CFA_offset_extended
:
2503 case DW_CFA_def_cfa
:
2504 case DW_CFA_offset_extended_sf
:
2505 case DW_CFA_def_cfa_sf
:
2506 case DW_CFA_restore_extended
:
2507 case DW_CFA_undefined
:
2508 case DW_CFA_same_value
:
2509 case DW_CFA_def_cfa_register
:
2510 case DW_CFA_register
:
2511 return dw_cfi_oprnd_reg_num
;
2513 case DW_CFA_def_cfa_offset
:
2514 case DW_CFA_GNU_args_size
:
2515 case DW_CFA_def_cfa_offset_sf
:
2516 return dw_cfi_oprnd_offset
;
2518 case DW_CFA_def_cfa_expression
:
2519 case DW_CFA_expression
:
2520 return dw_cfi_oprnd_loc
;
2527 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
2528 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2529 (enum dwarf_call_frame_info cfi
);
2531 static enum dw_cfi_oprnd_type
2532 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi
)
2536 case DW_CFA_def_cfa
:
2537 case DW_CFA_def_cfa_sf
:
2539 case DW_CFA_offset_extended_sf
:
2540 case DW_CFA_offset_extended
:
2541 return dw_cfi_oprnd_offset
;
2543 case DW_CFA_register
:
2544 return dw_cfi_oprnd_reg_num
;
2547 return dw_cfi_oprnd_unused
;
2551 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2553 /* Switch to eh_frame_section. If we don't have an eh_frame_section,
2554 switch to the data section instead, and write out a synthetic label
2558 switch_to_eh_frame_section (void)
2562 #ifdef EH_FRAME_SECTION_NAME
2563 if (eh_frame_section
== 0)
2567 if (EH_TABLES_CAN_BE_READ_ONLY
)
2573 fde_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2575 per_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2577 lsda_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2579 flags
= ((! flag_pic
2580 || ((fde_encoding
& 0x70) != DW_EH_PE_absptr
2581 && (fde_encoding
& 0x70) != DW_EH_PE_aligned
2582 && (per_encoding
& 0x70) != DW_EH_PE_absptr
2583 && (per_encoding
& 0x70) != DW_EH_PE_aligned
2584 && (lsda_encoding
& 0x70) != DW_EH_PE_absptr
2585 && (lsda_encoding
& 0x70) != DW_EH_PE_aligned
))
2586 ? 0 : SECTION_WRITE
);
2589 flags
= SECTION_WRITE
;
2590 eh_frame_section
= get_section (EH_FRAME_SECTION_NAME
, flags
, NULL
);
2594 if (eh_frame_section
)
2595 switch_to_section (eh_frame_section
);
2598 /* We have no special eh_frame section. Put the information in
2599 the data section and emit special labels to guide collect2. */
2600 switch_to_section (data_section
);
2601 label
= get_file_function_name ("F");
2602 ASM_OUTPUT_ALIGN (asm_out_file
, floor_log2 (PTR_SIZE
));
2603 targetm
.asm_out
.globalize_label (asm_out_file
,
2604 IDENTIFIER_POINTER (label
));
2605 ASM_OUTPUT_LABEL (asm_out_file
, IDENTIFIER_POINTER (label
));
2609 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder. */
2611 static HOST_WIDE_INT
2612 div_data_align (HOST_WIDE_INT off
)
2614 HOST_WIDE_INT r
= off
/ DWARF_CIE_DATA_ALIGNMENT
;
2615 gcc_assert (r
* DWARF_CIE_DATA_ALIGNMENT
== off
);
2619 /* Output a Call Frame Information opcode and its operand(s). */
2622 output_cfi (dw_cfi_ref cfi
, dw_fde_ref fde
, int for_eh
)
2627 if (cfi
->dw_cfi_opc
== DW_CFA_advance_loc
)
2628 dw2_asm_output_data (1, (cfi
->dw_cfi_opc
2629 | (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
& 0x3f)),
2630 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX
,
2631 ((unsigned HOST_WIDE_INT
)
2632 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
));
2633 else if (cfi
->dw_cfi_opc
== DW_CFA_offset
)
2635 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2636 dw2_asm_output_data (1, (cfi
->dw_cfi_opc
| (r
& 0x3f)),
2637 "DW_CFA_offset, column 0x%lx", r
);
2638 off
= div_data_align (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
);
2639 dw2_asm_output_data_uleb128 (off
, NULL
);
2641 else if (cfi
->dw_cfi_opc
== DW_CFA_restore
)
2643 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2644 dw2_asm_output_data (1, (cfi
->dw_cfi_opc
| (r
& 0x3f)),
2645 "DW_CFA_restore, column 0x%lx", r
);
2649 dw2_asm_output_data (1, cfi
->dw_cfi_opc
,
2650 "%s", dwarf_cfi_name (cfi
->dw_cfi_opc
));
2652 switch (cfi
->dw_cfi_opc
)
2654 case DW_CFA_set_loc
:
2656 dw2_asm_output_encoded_addr_rtx (
2657 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2658 gen_rtx_SYMBOL_REF (Pmode
, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
),
2661 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
2662 cfi
->dw_cfi_oprnd1
.dw_cfi_addr
, NULL
);
2663 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
2666 case DW_CFA_advance_loc1
:
2667 dw2_asm_output_delta (1, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
2668 fde
->dw_fde_current_label
, NULL
);
2669 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
2672 case DW_CFA_advance_loc2
:
2673 dw2_asm_output_delta (2, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
2674 fde
->dw_fde_current_label
, NULL
);
2675 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
2678 case DW_CFA_advance_loc4
:
2679 dw2_asm_output_delta (4, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
2680 fde
->dw_fde_current_label
, NULL
);
2681 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
2684 case DW_CFA_MIPS_advance_loc8
:
2685 dw2_asm_output_delta (8, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
2686 fde
->dw_fde_current_label
, NULL
);
2687 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
2690 case DW_CFA_offset_extended
:
2691 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2692 dw2_asm_output_data_uleb128 (r
, NULL
);
2693 off
= div_data_align (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
);
2694 dw2_asm_output_data_uleb128 (off
, NULL
);
2697 case DW_CFA_def_cfa
:
2698 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2699 dw2_asm_output_data_uleb128 (r
, NULL
);
2700 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
, NULL
);
2703 case DW_CFA_offset_extended_sf
:
2704 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2705 dw2_asm_output_data_uleb128 (r
, NULL
);
2706 off
= div_data_align (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
);
2707 dw2_asm_output_data_sleb128 (off
, NULL
);
2710 case DW_CFA_def_cfa_sf
:
2711 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2712 dw2_asm_output_data_uleb128 (r
, NULL
);
2713 off
= div_data_align (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
);
2714 dw2_asm_output_data_sleb128 (off
, NULL
);
2717 case DW_CFA_restore_extended
:
2718 case DW_CFA_undefined
:
2719 case DW_CFA_same_value
:
2720 case DW_CFA_def_cfa_register
:
2721 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2722 dw2_asm_output_data_uleb128 (r
, NULL
);
2725 case DW_CFA_register
:
2726 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, for_eh
);
2727 dw2_asm_output_data_uleb128 (r
, NULL
);
2728 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
, for_eh
);
2729 dw2_asm_output_data_uleb128 (r
, NULL
);
2732 case DW_CFA_def_cfa_offset
:
2733 case DW_CFA_GNU_args_size
:
2734 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
, NULL
);
2737 case DW_CFA_def_cfa_offset_sf
:
2738 off
= div_data_align (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
);
2739 dw2_asm_output_data_sleb128 (off
, NULL
);
2742 case DW_CFA_GNU_window_save
:
2745 case DW_CFA_def_cfa_expression
:
2746 case DW_CFA_expression
:
2747 output_cfa_loc (cfi
);
2750 case DW_CFA_GNU_negative_offset_extended
:
2751 /* Obsoleted by DW_CFA_offset_extended_sf. */
2760 /* Similar, but do it via assembler directives instead. */
2763 output_cfi_directive (dw_cfi_ref cfi
)
2765 unsigned long r
, r2
;
2767 switch (cfi
->dw_cfi_opc
)
2769 case DW_CFA_advance_loc
:
2770 case DW_CFA_advance_loc1
:
2771 case DW_CFA_advance_loc2
:
2772 case DW_CFA_advance_loc4
:
2773 case DW_CFA_MIPS_advance_loc8
:
2774 case DW_CFA_set_loc
:
2775 /* Should only be created by add_fde_cfi in a code path not
2776 followed when emitting via directives. The assembler is
2777 going to take care of this for us. */
2781 case DW_CFA_offset_extended
:
2782 case DW_CFA_offset_extended_sf
:
2783 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2784 fprintf (asm_out_file
, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC
"\n",
2785 r
, cfi
->dw_cfi_oprnd2
.dw_cfi_offset
);
2788 case DW_CFA_restore
:
2789 case DW_CFA_restore_extended
:
2790 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2791 fprintf (asm_out_file
, "\t.cfi_restore %lu\n", r
);
2794 case DW_CFA_undefined
:
2795 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2796 fprintf (asm_out_file
, "\t.cfi_undefined %lu\n", r
);
2799 case DW_CFA_same_value
:
2800 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2801 fprintf (asm_out_file
, "\t.cfi_same_value %lu\n", r
);
2804 case DW_CFA_def_cfa
:
2805 case DW_CFA_def_cfa_sf
:
2806 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2807 fprintf (asm_out_file
, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC
"\n",
2808 r
, cfi
->dw_cfi_oprnd2
.dw_cfi_offset
);
2811 case DW_CFA_def_cfa_register
:
2812 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2813 fprintf (asm_out_file
, "\t.cfi_def_cfa_register %lu\n", r
);
2816 case DW_CFA_register
:
2817 r
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
, 1);
2818 r2
= DWARF2_FRAME_REG_OUT (cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
, 1);
2819 fprintf (asm_out_file
, "\t.cfi_register %lu, %lu\n", r
, r2
);
2822 case DW_CFA_def_cfa_offset
:
2823 case DW_CFA_def_cfa_offset_sf
:
2824 fprintf (asm_out_file
, "\t.cfi_def_cfa_offset "
2825 HOST_WIDE_INT_PRINT_DEC
"\n",
2826 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
);
2829 case DW_CFA_GNU_args_size
:
2830 fprintf (asm_out_file
, "\t.cfi_escape 0x%x,", DW_CFA_GNU_args_size
);
2831 dw2_asm_output_data_uleb128_raw (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
);
2833 fprintf (asm_out_file
, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC
,
2834 ASM_COMMENT_START
, cfi
->dw_cfi_oprnd1
.dw_cfi_offset
);
2835 fputc ('\n', asm_out_file
);
2838 case DW_CFA_GNU_window_save
:
2839 fprintf (asm_out_file
, "\t.cfi_window_save\n");
2842 case DW_CFA_def_cfa_expression
:
2843 case DW_CFA_expression
:
2844 fprintf (asm_out_file
, "\t.cfi_escape 0x%x,", cfi
->dw_cfi_opc
);
2845 output_cfa_loc_raw (cfi
);
2846 fputc ('\n', asm_out_file
);
2854 /* Output the call frame information used to record information
2855 that relates to calculating the frame pointer, and records the
2856 location of saved registers. */
2859 output_call_frame_info (int for_eh
)
2864 char l1
[20], l2
[20], section_start_label
[20];
2865 bool any_lsda_needed
= false;
2866 char augmentation
[6];
2867 int augmentation_size
;
2868 int fde_encoding
= DW_EH_PE_absptr
;
2869 int per_encoding
= DW_EH_PE_absptr
;
2870 int lsda_encoding
= DW_EH_PE_absptr
;
2873 /* Don't emit a CIE if there won't be any FDEs. */
2874 if (fde_table_in_use
== 0)
2877 /* Nothing to do if the assembler's doing it all. */
2878 if (dwarf2out_do_cfi_asm ())
2881 /* If we make FDEs linkonce, we may have to emit an empty label for
2882 an FDE that wouldn't otherwise be emitted. We want to avoid
2883 having an FDE kept around when the function it refers to is
2884 discarded. Example where this matters: a primary function
2885 template in C++ requires EH information, but an explicit
2886 specialization doesn't. */
2887 if (TARGET_USES_WEAK_UNWIND_INFO
2888 && ! flag_asynchronous_unwind_tables
2891 for (i
= 0; i
< fde_table_in_use
; i
++)
2892 if ((fde_table
[i
].nothrow
|| fde_table
[i
].all_throwers_are_sibcalls
)
2893 && !fde_table
[i
].uses_eh_lsda
2894 && ! DECL_WEAK (fde_table
[i
].decl
))
2895 targetm
.asm_out
.unwind_label (asm_out_file
, fde_table
[i
].decl
,
2896 for_eh
, /* empty */ 1);
2898 /* If we don't have any functions we'll want to unwind out of, don't
2899 emit any EH unwind information. Note that if exceptions aren't
2900 enabled, we won't have collected nothrow information, and if we
2901 asked for asynchronous tables, we always want this info. */
2904 bool any_eh_needed
= !flag_exceptions
|| flag_asynchronous_unwind_tables
;
2906 for (i
= 0; i
< fde_table_in_use
; i
++)
2907 if (fde_table
[i
].uses_eh_lsda
)
2908 any_eh_needed
= any_lsda_needed
= true;
2909 else if (TARGET_USES_WEAK_UNWIND_INFO
&& DECL_WEAK (fde_table
[i
].decl
))
2910 any_eh_needed
= true;
2911 else if (! fde_table
[i
].nothrow
2912 && ! fde_table
[i
].all_throwers_are_sibcalls
)
2913 any_eh_needed
= true;
2915 if (! any_eh_needed
)
2919 /* We're going to be generating comments, so turn on app. */
2924 switch_to_eh_frame_section ();
2927 if (!debug_frame_section
)
2928 debug_frame_section
= get_section (DEBUG_FRAME_SECTION
,
2929 SECTION_DEBUG
, NULL
);
2930 switch_to_section (debug_frame_section
);
2933 ASM_GENERATE_INTERNAL_LABEL (section_start_label
, FRAME_BEGIN_LABEL
, for_eh
);
2934 ASM_OUTPUT_LABEL (asm_out_file
, section_start_label
);
2936 /* Output the CIE. */
2937 ASM_GENERATE_INTERNAL_LABEL (l1
, CIE_AFTER_SIZE_LABEL
, for_eh
);
2938 ASM_GENERATE_INTERNAL_LABEL (l2
, CIE_END_LABEL
, for_eh
);
2939 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4 && !for_eh
)
2940 dw2_asm_output_data (4, 0xffffffff,
2941 "Initial length escape value indicating 64-bit DWARF extension");
2942 dw2_asm_output_delta (for_eh
? 4 : DWARF_OFFSET_SIZE
, l2
, l1
,
2943 "Length of Common Information Entry");
2944 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
2946 /* Now that the CIE pointer is PC-relative for EH,
2947 use 0 to identify the CIE. */
2948 dw2_asm_output_data ((for_eh
? 4 : DWARF_OFFSET_SIZE
),
2949 (for_eh
? 0 : DWARF_CIE_ID
),
2950 "CIE Identifier Tag");
2952 dw2_asm_output_data (1, DW_CIE_VERSION
, "CIE Version");
2954 augmentation
[0] = 0;
2955 augmentation_size
= 0;
2961 z Indicates that a uleb128 is present to size the
2962 augmentation section.
2963 L Indicates the encoding (and thus presence) of
2964 an LSDA pointer in the FDE augmentation.
2965 R Indicates a non-default pointer encoding for
2967 P Indicates the presence of an encoding + language
2968 personality routine in the CIE augmentation. */
2970 fde_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2971 per_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2972 lsda_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2974 p
= augmentation
+ 1;
2975 if (eh_personality_libfunc
)
2978 augmentation_size
+= 1 + size_of_encoded_value (per_encoding
);
2979 assemble_external_libcall (eh_personality_libfunc
);
2981 if (any_lsda_needed
)
2984 augmentation_size
+= 1;
2986 if (fde_encoding
!= DW_EH_PE_absptr
)
2989 augmentation_size
+= 1;
2991 if (p
> augmentation
+ 1)
2993 augmentation
[0] = 'z';
2997 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2998 if (eh_personality_libfunc
&& per_encoding
== DW_EH_PE_aligned
)
3000 int offset
= ( 4 /* Length */
3002 + 1 /* CIE version */
3003 + strlen (augmentation
) + 1 /* Augmentation */
3004 + size_of_uleb128 (1) /* Code alignment */
3005 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT
)
3007 + 1 /* Augmentation size */
3008 + 1 /* Personality encoding */ );
3009 int pad
= -offset
& (PTR_SIZE
- 1);
3011 augmentation_size
+= pad
;
3013 /* Augmentations should be small, so there's scarce need to
3014 iterate for a solution. Die if we exceed one uleb128 byte. */
3015 gcc_assert (size_of_uleb128 (augmentation_size
) == 1);
3019 dw2_asm_output_nstring (augmentation
, -1, "CIE Augmentation");
3020 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3021 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT
,
3022 "CIE Data Alignment Factor");
3024 return_reg
= DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN
, for_eh
);
3025 if (DW_CIE_VERSION
== 1)
3026 dw2_asm_output_data (1, return_reg
, "CIE RA Column");
3028 dw2_asm_output_data_uleb128 (return_reg
, "CIE RA Column");
3030 if (augmentation
[0])
3032 dw2_asm_output_data_uleb128 (augmentation_size
, "Augmentation size");
3033 if (eh_personality_libfunc
)
3035 dw2_asm_output_data (1, per_encoding
, "Personality (%s)",
3036 eh_data_format_name (per_encoding
));
3037 dw2_asm_output_encoded_addr_rtx (per_encoding
,
3038 eh_personality_libfunc
,
3042 if (any_lsda_needed
)
3043 dw2_asm_output_data (1, lsda_encoding
, "LSDA Encoding (%s)",
3044 eh_data_format_name (lsda_encoding
));
3046 if (fde_encoding
!= DW_EH_PE_absptr
)
3047 dw2_asm_output_data (1, fde_encoding
, "FDE Encoding (%s)",
3048 eh_data_format_name (fde_encoding
));
3051 for (cfi
= cie_cfi_head
; cfi
!= NULL
; cfi
= cfi
->dw_cfi_next
)
3052 output_cfi (cfi
, NULL
, for_eh
);
3054 /* Pad the CIE out to an address sized boundary. */
3055 ASM_OUTPUT_ALIGN (asm_out_file
,
3056 floor_log2 (for_eh
? PTR_SIZE
: DWARF2_ADDR_SIZE
));
3057 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
3059 /* Loop through all of the FDE's. */
3060 for (i
= 0; i
< fde_table_in_use
; i
++)
3062 fde
= &fde_table
[i
];
3064 /* Don't emit EH unwind info for leaf functions that don't need it. */
3065 if (for_eh
&& !flag_asynchronous_unwind_tables
&& flag_exceptions
3066 && (fde
->nothrow
|| fde
->all_throwers_are_sibcalls
)
3067 && ! (TARGET_USES_WEAK_UNWIND_INFO
&& DECL_WEAK (fde_table
[i
].decl
))
3068 && !fde
->uses_eh_lsda
)
3071 targetm
.asm_out
.unwind_label (asm_out_file
, fde
->decl
, for_eh
, /* empty */ 0);
3072 targetm
.asm_out
.internal_label (asm_out_file
, FDE_LABEL
, for_eh
+ i
* 2);
3073 ASM_GENERATE_INTERNAL_LABEL (l1
, FDE_AFTER_SIZE_LABEL
, for_eh
+ i
* 2);
3074 ASM_GENERATE_INTERNAL_LABEL (l2
, FDE_END_LABEL
, for_eh
+ i
* 2);
3075 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4 && !for_eh
)
3076 dw2_asm_output_data (4, 0xffffffff,
3077 "Initial length escape value indicating 64-bit DWARF extension");
3078 dw2_asm_output_delta (for_eh
? 4 : DWARF_OFFSET_SIZE
, l2
, l1
,
3080 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
3083 dw2_asm_output_delta (4, l1
, section_start_label
, "FDE CIE offset");
3085 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, section_start_label
,
3086 debug_frame_section
, "FDE CIE offset");
3090 if (fde
->dw_fde_switched_sections
)
3092 rtx sym_ref2
= gen_rtx_SYMBOL_REF (Pmode
,
3093 fde
->dw_fde_unlikely_section_label
);
3094 rtx sym_ref3
= gen_rtx_SYMBOL_REF (Pmode
,
3095 fde
->dw_fde_hot_section_label
);
3096 SYMBOL_REF_FLAGS (sym_ref2
) |= SYMBOL_FLAG_LOCAL
;
3097 SYMBOL_REF_FLAGS (sym_ref3
) |= SYMBOL_FLAG_LOCAL
;
3098 dw2_asm_output_encoded_addr_rtx (fde_encoding
, sym_ref3
, false,
3099 "FDE initial location");
3100 dw2_asm_output_delta (size_of_encoded_value (fde_encoding
),
3101 fde
->dw_fde_hot_section_end_label
,
3102 fde
->dw_fde_hot_section_label
,
3103 "FDE address range");
3104 dw2_asm_output_encoded_addr_rtx (fde_encoding
, sym_ref2
, false,
3105 "FDE initial location");
3106 dw2_asm_output_delta (size_of_encoded_value (fde_encoding
),
3107 fde
->dw_fde_unlikely_section_end_label
,
3108 fde
->dw_fde_unlikely_section_label
,
3109 "FDE address range");
3113 rtx sym_ref
= gen_rtx_SYMBOL_REF (Pmode
, fde
->dw_fde_begin
);
3114 SYMBOL_REF_FLAGS (sym_ref
) |= SYMBOL_FLAG_LOCAL
;
3115 dw2_asm_output_encoded_addr_rtx (fde_encoding
,
3118 "FDE initial location");
3119 dw2_asm_output_delta (size_of_encoded_value (fde_encoding
),
3120 fde
->dw_fde_end
, fde
->dw_fde_begin
,
3121 "FDE address range");
3126 if (fde
->dw_fde_switched_sections
)
3128 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
3129 fde
->dw_fde_hot_section_label
,
3130 "FDE initial location");
3131 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
3132 fde
->dw_fde_hot_section_end_label
,
3133 fde
->dw_fde_hot_section_label
,
3134 "FDE address range");
3135 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
3136 fde
->dw_fde_unlikely_section_label
,
3137 "FDE initial location");
3138 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
3139 fde
->dw_fde_unlikely_section_end_label
,
3140 fde
->dw_fde_unlikely_section_label
,
3141 "FDE address range");
3145 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, fde
->dw_fde_begin
,
3146 "FDE initial location");
3147 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
3148 fde
->dw_fde_end
, fde
->dw_fde_begin
,
3149 "FDE address range");
3153 if (augmentation
[0])
3155 if (any_lsda_needed
)
3157 int size
= size_of_encoded_value (lsda_encoding
);
3159 if (lsda_encoding
== DW_EH_PE_aligned
)
3161 int offset
= ( 4 /* Length */
3162 + 4 /* CIE offset */
3163 + 2 * size_of_encoded_value (fde_encoding
)
3164 + 1 /* Augmentation size */ );
3165 int pad
= -offset
& (PTR_SIZE
- 1);
3168 gcc_assert (size_of_uleb128 (size
) == 1);
3171 dw2_asm_output_data_uleb128 (size
, "Augmentation size");
3173 if (fde
->uses_eh_lsda
)
3175 ASM_GENERATE_INTERNAL_LABEL (l1
, "LLSDA",
3176 fde
->funcdef_number
);
3177 dw2_asm_output_encoded_addr_rtx (
3178 lsda_encoding
, gen_rtx_SYMBOL_REF (Pmode
, l1
),
3179 false, "Language Specific Data Area");
3183 if (lsda_encoding
== DW_EH_PE_aligned
)
3184 ASM_OUTPUT_ALIGN (asm_out_file
, floor_log2 (PTR_SIZE
));
3186 (size_of_encoded_value (lsda_encoding
), 0,
3187 "Language Specific Data Area (none)");
3191 dw2_asm_output_data_uleb128 (0, "Augmentation size");
3194 /* Loop through the Call Frame Instructions associated with
3196 fde
->dw_fde_current_label
= fde
->dw_fde_begin
;
3197 for (cfi
= fde
->dw_fde_cfi
; cfi
!= NULL
; cfi
= cfi
->dw_cfi_next
)
3198 output_cfi (cfi
, fde
, for_eh
);
3200 /* Pad the FDE out to an address sized boundary. */
3201 ASM_OUTPUT_ALIGN (asm_out_file
,
3202 floor_log2 ((for_eh
? PTR_SIZE
: DWARF2_ADDR_SIZE
)));
3203 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
3206 if (for_eh
&& targetm
.terminate_dw2_eh_frame_info
)
3207 dw2_asm_output_data (4, 0, "End of Table");
3208 #ifdef MIPS_DEBUGGING_INFO
3209 /* Work around Irix 6 assembler bug whereby labels at the end of a section
3210 get a value of 0. Putting .align 0 after the label fixes it. */
3211 ASM_OUTPUT_ALIGN (asm_out_file
, 0);
3214 /* Turn off app to make assembly quicker. */
3219 /* Output a marker (i.e. a label) for the beginning of a function, before
3223 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED
,
3224 const char *file ATTRIBUTE_UNUSED
)
3226 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3230 current_function_func_begin_label
= NULL
;
3232 #ifdef TARGET_UNWIND_INFO
3233 /* ??? current_function_func_begin_label is also used by except.c
3234 for call-site information. We must emit this label if it might
3236 if ((! flag_exceptions
|| USING_SJLJ_EXCEPTIONS
)
3237 && ! dwarf2out_do_frame ())
3240 if (! dwarf2out_do_frame ())
3244 switch_to_section (function_section (current_function_decl
));
3245 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_BEGIN_LABEL
,
3246 current_function_funcdef_no
);
3247 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, FUNC_BEGIN_LABEL
,
3248 current_function_funcdef_no
);
3249 dup_label
= xstrdup (label
);
3250 current_function_func_begin_label
= dup_label
;
3252 #ifdef TARGET_UNWIND_INFO
3253 /* We can elide the fde allocation if we're not emitting debug info. */
3254 if (! dwarf2out_do_frame ())
3258 /* Expand the fde table if necessary. */
3259 if (fde_table_in_use
== fde_table_allocated
)
3261 fde_table_allocated
+= FDE_TABLE_INCREMENT
;
3262 fde_table
= GGC_RESIZEVEC (dw_fde_node
, fde_table
, fde_table_allocated
);
3263 memset (fde_table
+ fde_table_in_use
, 0,
3264 FDE_TABLE_INCREMENT
* sizeof (dw_fde_node
));
3267 /* Record the FDE associated with this function. */
3268 current_funcdef_fde
= fde_table_in_use
;
3270 /* Add the new FDE at the end of the fde_table. */
3271 fde
= &fde_table
[fde_table_in_use
++];
3272 fde
->decl
= current_function_decl
;
3273 fde
->dw_fde_begin
= dup_label
;
3274 fde
->dw_fde_current_label
= dup_label
;
3275 fde
->dw_fde_hot_section_label
= NULL
;
3276 fde
->dw_fde_hot_section_end_label
= NULL
;
3277 fde
->dw_fde_unlikely_section_label
= NULL
;
3278 fde
->dw_fde_unlikely_section_end_label
= NULL
;
3279 fde
->dw_fde_switched_sections
= false;
3280 fde
->dw_fde_end
= NULL
;
3281 fde
->dw_fde_cfi
= NULL
;
3282 fde
->funcdef_number
= current_function_funcdef_no
;
3283 fde
->nothrow
= TREE_NOTHROW (current_function_decl
);
3284 fde
->uses_eh_lsda
= crtl
->uses_eh_lsda
;
3285 fde
->all_throwers_are_sibcalls
= crtl
->all_throwers_are_sibcalls
;
3286 fde
->drap_reg
= INVALID_REGNUM
;
3287 fde
->vdrap_reg
= INVALID_REGNUM
;
3289 args_size
= old_args_size
= 0;
3291 /* We only want to output line number information for the genuine dwarf2
3292 prologue case, not the eh frame case. */
3293 #ifdef DWARF2_DEBUGGING_INFO
3295 dwarf2out_source_line (line
, file
);
3298 if (dwarf2out_do_cfi_asm ())
3303 fprintf (asm_out_file
, "\t.cfi_startproc\n");
3305 if (eh_personality_libfunc
)
3307 enc
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3308 ref
= eh_personality_libfunc
;
3310 /* ??? The GAS support isn't entirely consistent. We have to
3311 handle indirect support ourselves, but PC-relative is done
3312 in the assembler. Further, the assembler can't handle any
3313 of the weirder relocation types. */
3314 if (enc
& DW_EH_PE_indirect
)
3315 ref
= dw2_force_const_mem (ref
, true);
3317 fprintf (asm_out_file
, "\t.cfi_personality 0x%x,", enc
);
3318 output_addr_const (asm_out_file
, ref
);
3319 fputc ('\n', asm_out_file
);
3322 if (crtl
->uses_eh_lsda
)
3326 enc
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3327 ASM_GENERATE_INTERNAL_LABEL (lab
, "LLSDA",
3328 current_function_funcdef_no
);
3329 ref
= gen_rtx_SYMBOL_REF (Pmode
, lab
);
3330 SYMBOL_REF_FLAGS (ref
) = SYMBOL_FLAG_LOCAL
;
3332 if (enc
& DW_EH_PE_indirect
)
3333 ref
= dw2_force_const_mem (ref
, true);
3335 fprintf (asm_out_file
, "\t.cfi_lsda 0x%x,", enc
);
3336 output_addr_const (asm_out_file
, ref
);
3337 fputc ('\n', asm_out_file
);
3342 /* Output a marker (i.e. a label) for the absolute end of the generated code
3343 for a function definition. This gets called *after* the epilogue code has
3347 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED
,
3348 const char *file ATTRIBUTE_UNUSED
)
3351 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3353 if (dwarf2out_do_cfi_asm ())
3354 fprintf (asm_out_file
, "\t.cfi_endproc\n");
3356 /* Output a label to mark the endpoint of the code generated for this
3358 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_END_LABEL
,
3359 current_function_funcdef_no
);
3360 ASM_OUTPUT_LABEL (asm_out_file
, label
);
3361 fde
= current_fde ();
3362 gcc_assert (fde
!= NULL
);
3363 fde
->dw_fde_end
= xstrdup (label
);
3367 dwarf2out_frame_init (void)
3369 /* Allocate the initial hunk of the fde_table. */
3370 fde_table
= GGC_CNEWVEC (dw_fde_node
, FDE_TABLE_INCREMENT
);
3371 fde_table_allocated
= FDE_TABLE_INCREMENT
;
3372 fde_table_in_use
= 0;
3374 /* Generate the CFA instructions common to all FDE's. Do it now for the
3375 sake of lookup_cfa. */
3377 /* On entry, the Canonical Frame Address is at SP. */
3378 dwarf2out_def_cfa (NULL
, STACK_POINTER_REGNUM
, INCOMING_FRAME_SP_OFFSET
);
3380 #ifdef DWARF2_UNWIND_INFO
3381 if (DWARF2_UNWIND_INFO
|| DWARF2_FRAME_INFO
)
3382 initial_return_save (INCOMING_RETURN_ADDR_RTX
);
3387 dwarf2out_frame_finish (void)
3389 /* Output call frame information. */
3390 if (DWARF2_FRAME_INFO
)
3391 output_call_frame_info (0);
3393 #ifndef TARGET_UNWIND_INFO
3394 /* Output another copy for the unwinder. */
3395 if (! USING_SJLJ_EXCEPTIONS
&& (flag_unwind_tables
|| flag_exceptions
))
3396 output_call_frame_info (1);
3400 /* Note that the current function section is being used for code. */
3403 dwarf2out_note_section_used (void)
3405 section
*sec
= current_function_section ();
3406 if (sec
== text_section
)
3407 text_section_used
= true;
3408 else if (sec
== cold_text_section
)
3409 cold_text_section_used
= true;
3413 dwarf2out_switch_text_section (void)
3415 dw_fde_ref fde
= current_fde ();
3417 gcc_assert (cfun
&& fde
);
3419 fde
->dw_fde_switched_sections
= true;
3420 fde
->dw_fde_hot_section_label
= crtl
->subsections
.hot_section_label
;
3421 fde
->dw_fde_hot_section_end_label
= crtl
->subsections
.hot_section_end_label
;
3422 fde
->dw_fde_unlikely_section_label
= crtl
->subsections
.cold_section_label
;
3423 fde
->dw_fde_unlikely_section_end_label
= crtl
->subsections
.cold_section_end_label
;
3424 have_multiple_function_sections
= true;
3426 /* Reset the current label on switching text sections, so that we
3427 don't attempt to advance_loc4 between labels in different sections. */
3428 fde
->dw_fde_current_label
= NULL
;
3430 /* There is no need to mark used sections when not debugging. */
3431 if (cold_text_section
!= NULL
)
3432 dwarf2out_note_section_used ();
3436 /* And now, the subset of the debugging information support code necessary
3437 for emitting location expressions. */
3439 /* Data about a single source file. */
3440 struct dwarf_file_data
GTY(())
3442 const char * filename
;
3446 /* We need some way to distinguish DW_OP_addr with a direct symbol
3447 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
3448 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
3451 typedef struct dw_val_struct
*dw_val_ref
;
3452 typedef struct die_struct
*dw_die_ref
;
3453 typedef const struct die_struct
*const_dw_die_ref
;
3454 typedef struct dw_loc_descr_struct
*dw_loc_descr_ref
;
3455 typedef struct dw_loc_list_struct
*dw_loc_list_ref
;
3457 typedef struct deferred_locations_struct
GTY(())
3461 } deferred_locations
;
3463 DEF_VEC_O(deferred_locations
);
3464 DEF_VEC_ALLOC_O(deferred_locations
,gc
);
3466 static GTY(()) VEC(deferred_locations
, gc
) *deferred_locations_list
;
3468 /* Each DIE may have a series of attribute/value pairs. Values
3469 can take on several forms. The forms that are used in this
3470 implementation are listed below. */
3475 dw_val_class_offset
,
3477 dw_val_class_loc_list
,
3478 dw_val_class_range_list
,
3480 dw_val_class_unsigned_const
,
3481 dw_val_class_long_long
,
3484 dw_val_class_die_ref
,
3485 dw_val_class_fde_ref
,
3486 dw_val_class_lbl_id
,
3487 dw_val_class_lineptr
,
3489 dw_val_class_macptr
,
3493 /* Describe a double word constant value. */
3494 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
3496 typedef struct dw_long_long_struct
GTY(())
3503 /* Describe a floating point constant value, or a vector constant value. */
3505 typedef struct dw_vec_struct
GTY(())
3507 unsigned char * GTY((length ("%h.length"))) array
;
3513 /* The dw_val_node describes an attribute's value, as it is
3514 represented internally. */
3516 typedef struct dw_val_struct
GTY(())
3518 enum dw_val_class val_class
;
3519 union dw_val_struct_union
3521 rtx
GTY ((tag ("dw_val_class_addr"))) val_addr
;
3522 unsigned HOST_WIDE_INT
GTY ((tag ("dw_val_class_offset"))) val_offset
;
3523 dw_loc_list_ref
GTY ((tag ("dw_val_class_loc_list"))) val_loc_list
;
3524 dw_loc_descr_ref
GTY ((tag ("dw_val_class_loc"))) val_loc
;
3525 HOST_WIDE_INT
GTY ((default)) val_int
;
3526 unsigned HOST_WIDE_INT
GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned
;
3527 dw_long_long_const
GTY ((tag ("dw_val_class_long_long"))) val_long_long
;
3528 dw_vec_const
GTY ((tag ("dw_val_class_vec"))) val_vec
;
3529 struct dw_val_die_union
3533 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref
;
3534 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index
;
3535 struct indirect_string_node
* GTY ((tag ("dw_val_class_str"))) val_str
;
3536 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id
;
3537 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag
;
3538 struct dwarf_file_data
* GTY ((tag ("dw_val_class_file"))) val_file
;
3540 GTY ((desc ("%1.val_class"))) v
;
3544 /* Locations in memory are described using a sequence of stack machine
3547 typedef struct dw_loc_descr_struct
GTY(())
3549 dw_loc_descr_ref dw_loc_next
;
3550 enum dwarf_location_atom dw_loc_opc
;
3552 dw_val_node dw_loc_oprnd1
;
3553 dw_val_node dw_loc_oprnd2
;
3557 /* Location lists are ranges + location descriptions for that range,
3558 so you can track variables that are in different places over
3559 their entire life. */
3560 typedef struct dw_loc_list_struct
GTY(())
3562 dw_loc_list_ref dw_loc_next
;
3563 const char *begin
; /* Label for begin address of range */
3564 const char *end
; /* Label for end address of range */
3565 char *ll_symbol
; /* Label for beginning of location list.
3566 Only on head of list */
3567 const char *section
; /* Section this loclist is relative to */
3568 dw_loc_descr_ref expr
;
3571 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
3573 static dw_loc_descr_ref
int_loc_descriptor (HOST_WIDE_INT
);
3575 /* Convert a DWARF stack opcode into its string name. */
3578 dwarf_stack_op_name (unsigned int op
)
3583 case INTERNAL_DW_OP_tls_addr
:
3584 return "DW_OP_addr";
3586 return "DW_OP_deref";
3588 return "DW_OP_const1u";
3590 return "DW_OP_const1s";
3592 return "DW_OP_const2u";
3594 return "DW_OP_const2s";
3596 return "DW_OP_const4u";
3598 return "DW_OP_const4s";
3600 return "DW_OP_const8u";
3602 return "DW_OP_const8s";
3604 return "DW_OP_constu";
3606 return "DW_OP_consts";
3610 return "DW_OP_drop";
3612 return "DW_OP_over";
3614 return "DW_OP_pick";
3616 return "DW_OP_swap";
3620 return "DW_OP_xderef";
3628 return "DW_OP_minus";
3640 return "DW_OP_plus";
3641 case DW_OP_plus_uconst
:
3642 return "DW_OP_plus_uconst";
3648 return "DW_OP_shra";
3666 return "DW_OP_skip";
3668 return "DW_OP_lit0";
3670 return "DW_OP_lit1";
3672 return "DW_OP_lit2";
3674 return "DW_OP_lit3";
3676 return "DW_OP_lit4";
3678 return "DW_OP_lit5";
3680 return "DW_OP_lit6";
3682 return "DW_OP_lit7";
3684 return "DW_OP_lit8";
3686 return "DW_OP_lit9";
3688 return "DW_OP_lit10";
3690 return "DW_OP_lit11";
3692 return "DW_OP_lit12";
3694 return "DW_OP_lit13";
3696 return "DW_OP_lit14";
3698 return "DW_OP_lit15";
3700 return "DW_OP_lit16";
3702 return "DW_OP_lit17";
3704 return "DW_OP_lit18";
3706 return "DW_OP_lit19";
3708 return "DW_OP_lit20";
3710 return "DW_OP_lit21";
3712 return "DW_OP_lit22";
3714 return "DW_OP_lit23";
3716 return "DW_OP_lit24";
3718 return "DW_OP_lit25";
3720 return "DW_OP_lit26";
3722 return "DW_OP_lit27";
3724 return "DW_OP_lit28";
3726 return "DW_OP_lit29";
3728 return "DW_OP_lit30";
3730 return "DW_OP_lit31";
3732 return "DW_OP_reg0";
3734 return "DW_OP_reg1";
3736 return "DW_OP_reg2";
3738 return "DW_OP_reg3";
3740 return "DW_OP_reg4";
3742 return "DW_OP_reg5";
3744 return "DW_OP_reg6";
3746 return "DW_OP_reg7";
3748 return "DW_OP_reg8";
3750 return "DW_OP_reg9";
3752 return "DW_OP_reg10";
3754 return "DW_OP_reg11";
3756 return "DW_OP_reg12";
3758 return "DW_OP_reg13";
3760 return "DW_OP_reg14";
3762 return "DW_OP_reg15";
3764 return "DW_OP_reg16";
3766 return "DW_OP_reg17";
3768 return "DW_OP_reg18";
3770 return "DW_OP_reg19";
3772 return "DW_OP_reg20";
3774 return "DW_OP_reg21";
3776 return "DW_OP_reg22";
3778 return "DW_OP_reg23";
3780 return "DW_OP_reg24";
3782 return "DW_OP_reg25";
3784 return "DW_OP_reg26";
3786 return "DW_OP_reg27";
3788 return "DW_OP_reg28";
3790 return "DW_OP_reg29";
3792 return "DW_OP_reg30";
3794 return "DW_OP_reg31";
3796 return "DW_OP_breg0";
3798 return "DW_OP_breg1";
3800 return "DW_OP_breg2";
3802 return "DW_OP_breg3";
3804 return "DW_OP_breg4";
3806 return "DW_OP_breg5";
3808 return "DW_OP_breg6";
3810 return "DW_OP_breg7";
3812 return "DW_OP_breg8";
3814 return "DW_OP_breg9";
3816 return "DW_OP_breg10";
3818 return "DW_OP_breg11";
3820 return "DW_OP_breg12";
3822 return "DW_OP_breg13";
3824 return "DW_OP_breg14";
3826 return "DW_OP_breg15";
3828 return "DW_OP_breg16";
3830 return "DW_OP_breg17";
3832 return "DW_OP_breg18";
3834 return "DW_OP_breg19";
3836 return "DW_OP_breg20";
3838 return "DW_OP_breg21";
3840 return "DW_OP_breg22";
3842 return "DW_OP_breg23";
3844 return "DW_OP_breg24";
3846 return "DW_OP_breg25";
3848 return "DW_OP_breg26";
3850 return "DW_OP_breg27";
3852 return "DW_OP_breg28";
3854 return "DW_OP_breg29";
3856 return "DW_OP_breg30";
3858 return "DW_OP_breg31";
3860 return "DW_OP_regx";
3862 return "DW_OP_fbreg";
3864 return "DW_OP_bregx";
3866 return "DW_OP_piece";
3867 case DW_OP_deref_size
:
3868 return "DW_OP_deref_size";
3869 case DW_OP_xderef_size
:
3870 return "DW_OP_xderef_size";
3873 case DW_OP_push_object_address
:
3874 return "DW_OP_push_object_address";
3876 return "DW_OP_call2";
3878 return "DW_OP_call4";
3879 case DW_OP_call_ref
:
3880 return "DW_OP_call_ref";
3881 case DW_OP_GNU_push_tls_address
:
3882 return "DW_OP_GNU_push_tls_address";
3883 case DW_OP_GNU_uninit
:
3884 return "DW_OP_GNU_uninit";
3886 return "OP_<unknown>";
3890 /* Return a pointer to a newly allocated location description. Location
3891 descriptions are simple expression terms that can be strung
3892 together to form more complicated location (address) descriptions. */
3894 static inline dw_loc_descr_ref
3895 new_loc_descr (enum dwarf_location_atom op
, unsigned HOST_WIDE_INT oprnd1
,
3896 unsigned HOST_WIDE_INT oprnd2
)
3898 dw_loc_descr_ref descr
= GGC_CNEW (dw_loc_descr_node
);
3900 descr
->dw_loc_opc
= op
;
3901 descr
->dw_loc_oprnd1
.val_class
= dw_val_class_unsigned_const
;
3902 descr
->dw_loc_oprnd1
.v
.val_unsigned
= oprnd1
;
3903 descr
->dw_loc_oprnd2
.val_class
= dw_val_class_unsigned_const
;
3904 descr
->dw_loc_oprnd2
.v
.val_unsigned
= oprnd2
;
3909 /* Return a pointer to a newly allocated location description for
3912 static inline dw_loc_descr_ref
3913 new_reg_loc_descr (unsigned int reg
, unsigned HOST_WIDE_INT offset
)
3918 return new_loc_descr (DW_OP_breg0
+ reg
, offset
, 0);
3920 return new_loc_descr (DW_OP_bregx
, reg
, offset
);
3923 return new_loc_descr (DW_OP_reg0
+ reg
, 0, 0);
3925 return new_loc_descr (DW_OP_regx
, reg
, 0);
3928 /* Add a location description term to a location description expression. */
3931 add_loc_descr (dw_loc_descr_ref
*list_head
, dw_loc_descr_ref descr
)
3933 dw_loc_descr_ref
*d
;
3935 /* Find the end of the chain. */
3936 for (d
= list_head
; (*d
) != NULL
; d
= &(*d
)->dw_loc_next
)
3942 /* Return the size of a location descriptor. */
3944 static unsigned long
3945 size_of_loc_descr (dw_loc_descr_ref loc
)
3947 unsigned long size
= 1;
3949 switch (loc
->dw_loc_opc
)
3952 case INTERNAL_DW_OP_tls_addr
:
3953 size
+= DWARF2_ADDR_SIZE
;
3972 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
3975 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
3980 case DW_OP_plus_uconst
:
3981 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
4019 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
4022 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
4025 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
4028 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
4029 size
+= size_of_sleb128 (loc
->dw_loc_oprnd2
.v
.val_int
);
4032 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
4034 case DW_OP_deref_size
:
4035 case DW_OP_xderef_size
:
4044 case DW_OP_call_ref
:
4045 size
+= DWARF2_ADDR_SIZE
;
4054 /* Return the size of a series of location descriptors. */
4056 static unsigned long
4057 size_of_locs (dw_loc_descr_ref loc
)
4062 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4063 field, to avoid writing to a PCH file. */
4064 for (size
= 0, l
= loc
; l
!= NULL
; l
= l
->dw_loc_next
)
4066 if (l
->dw_loc_opc
== DW_OP_skip
|| l
->dw_loc_opc
== DW_OP_bra
)
4068 size
+= size_of_loc_descr (l
);
4073 for (size
= 0, l
= loc
; l
!= NULL
; l
= l
->dw_loc_next
)
4075 l
->dw_loc_addr
= size
;
4076 size
+= size_of_loc_descr (l
);
4082 /* Output location description stack opcode's operands (if any). */
4085 output_loc_operands (dw_loc_descr_ref loc
)
4087 dw_val_ref val1
= &loc
->dw_loc_oprnd1
;
4088 dw_val_ref val2
= &loc
->dw_loc_oprnd2
;
4090 switch (loc
->dw_loc_opc
)
4092 #ifdef DWARF2_DEBUGGING_INFO
4094 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, val1
->v
.val_addr
, NULL
);
4098 dw2_asm_output_data (2, val1
->v
.val_int
, NULL
);
4102 dw2_asm_output_data (4, val1
->v
.val_int
, NULL
);
4106 gcc_assert (HOST_BITS_PER_LONG
>= 64);
4107 dw2_asm_output_data (8, val1
->v
.val_int
, NULL
);
4114 gcc_assert (val1
->val_class
== dw_val_class_loc
);
4115 offset
= val1
->v
.val_loc
->dw_loc_addr
- (loc
->dw_loc_addr
+ 3);
4117 dw2_asm_output_data (2, offset
, NULL
);
4130 /* We currently don't make any attempt to make sure these are
4131 aligned properly like we do for the main unwind info, so
4132 don't support emitting things larger than a byte if we're
4133 only doing unwinding. */
4138 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
4141 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
4144 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
4147 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
4149 case DW_OP_plus_uconst
:
4150 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
4184 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
4187 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
4190 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
4193 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
4194 dw2_asm_output_data_sleb128 (val2
->v
.val_int
, NULL
);
4197 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
4199 case DW_OP_deref_size
:
4200 case DW_OP_xderef_size
:
4201 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
4204 case INTERNAL_DW_OP_tls_addr
:
4205 if (targetm
.asm_out
.output_dwarf_dtprel
)
4207 targetm
.asm_out
.output_dwarf_dtprel (asm_out_file
,
4210 fputc ('\n', asm_out_file
);
4217 /* Other codes have no operands. */
4222 /* Output a sequence of location operations. */
4225 output_loc_sequence (dw_loc_descr_ref loc
)
4227 for (; loc
!= NULL
; loc
= loc
->dw_loc_next
)
4229 /* Output the opcode. */
4230 dw2_asm_output_data (1, loc
->dw_loc_opc
,
4231 "%s", dwarf_stack_op_name (loc
->dw_loc_opc
));
4233 /* Output the operand(s) (if any). */
4234 output_loc_operands (loc
);
4238 /* Output location description stack opcode's operands (if any).
4239 The output is single bytes on a line, suitable for .cfi_escape. */
4242 output_loc_operands_raw (dw_loc_descr_ref loc
)
4244 dw_val_ref val1
= &loc
->dw_loc_oprnd1
;
4245 dw_val_ref val2
= &loc
->dw_loc_oprnd2
;
4247 switch (loc
->dw_loc_opc
)
4250 /* We cannot output addresses in .cfi_escape, only bytes. */
4256 case DW_OP_deref_size
:
4257 case DW_OP_xderef_size
:
4258 fputc (',', asm_out_file
);
4259 dw2_asm_output_data_raw (1, val1
->v
.val_int
);
4264 fputc (',', asm_out_file
);
4265 dw2_asm_output_data_raw (2, val1
->v
.val_int
);
4270 fputc (',', asm_out_file
);
4271 dw2_asm_output_data_raw (4, val1
->v
.val_int
);
4276 gcc_assert (HOST_BITS_PER_LONG
>= 64);
4277 fputc (',', asm_out_file
);
4278 dw2_asm_output_data_raw (8, val1
->v
.val_int
);
4286 gcc_assert (val1
->val_class
== dw_val_class_loc
);
4287 offset
= val1
->v
.val_loc
->dw_loc_addr
- (loc
->dw_loc_addr
+ 3);
4289 fputc (',', asm_out_file
);
4290 dw2_asm_output_data_raw (2, offset
);
4295 case DW_OP_plus_uconst
:
4298 fputc (',', asm_out_file
);
4299 dw2_asm_output_data_uleb128_raw (val1
->v
.val_unsigned
);
4336 fputc (',', asm_out_file
);
4337 dw2_asm_output_data_sleb128_raw (val1
->v
.val_int
);
4341 fputc (',', asm_out_file
);
4342 dw2_asm_output_data_uleb128_raw (val1
->v
.val_unsigned
);
4343 fputc (',', asm_out_file
);
4344 dw2_asm_output_data_sleb128_raw (val2
->v
.val_int
);
4347 case INTERNAL_DW_OP_tls_addr
:
4351 /* Other codes have no operands. */
4357 output_loc_sequence_raw (dw_loc_descr_ref loc
)
4361 /* Output the opcode. */
4362 fprintf (asm_out_file
, "0x%x", loc
->dw_loc_opc
);
4363 output_loc_operands_raw (loc
);
4365 if (!loc
->dw_loc_next
)
4367 loc
= loc
->dw_loc_next
;
4369 fputc (',', asm_out_file
);
4373 /* This routine will generate the correct assembly data for a location
4374 description based on a cfi entry with a complex address. */
4377 output_cfa_loc (dw_cfi_ref cfi
)
4379 dw_loc_descr_ref loc
;
4382 if (cfi
->dw_cfi_opc
== DW_CFA_expression
)
4383 dw2_asm_output_data (1, cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
, NULL
);
4385 /* Output the size of the block. */
4386 loc
= cfi
->dw_cfi_oprnd1
.dw_cfi_loc
;
4387 size
= size_of_locs (loc
);
4388 dw2_asm_output_data_uleb128 (size
, NULL
);
4390 /* Now output the operations themselves. */
4391 output_loc_sequence (loc
);
4394 /* Similar, but used for .cfi_escape. */
4397 output_cfa_loc_raw (dw_cfi_ref cfi
)
4399 dw_loc_descr_ref loc
;
4402 if (cfi
->dw_cfi_opc
== DW_CFA_expression
)
4403 fprintf (asm_out_file
, "0x%x,", cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
);
4405 /* Output the size of the block. */
4406 loc
= cfi
->dw_cfi_oprnd1
.dw_cfi_loc
;
4407 size
= size_of_locs (loc
);
4408 dw2_asm_output_data_uleb128_raw (size
);
4409 fputc (',', asm_out_file
);
4411 /* Now output the operations themselves. */
4412 output_loc_sequence_raw (loc
);
4415 /* This function builds a dwarf location descriptor sequence from a
4416 dw_cfa_location, adding the given OFFSET to the result of the
4419 static struct dw_loc_descr_struct
*
4420 build_cfa_loc (dw_cfa_location
*cfa
, HOST_WIDE_INT offset
)
4422 struct dw_loc_descr_struct
*head
, *tmp
;
4424 offset
+= cfa
->offset
;
4428 head
= new_reg_loc_descr (cfa
->reg
, cfa
->base_offset
);
4429 head
->dw_loc_oprnd1
.val_class
= dw_val_class_const
;
4430 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
4431 add_loc_descr (&head
, tmp
);
4434 tmp
= new_loc_descr (DW_OP_plus_uconst
, offset
, 0);
4435 add_loc_descr (&head
, tmp
);
4439 head
= new_reg_loc_descr (cfa
->reg
, offset
);
4444 /* This function builds a dwarf location descriptor sequence for
4445 the address at OFFSET from the CFA when stack is aligned to
4448 static struct dw_loc_descr_struct
*
4449 build_cfa_aligned_loc (HOST_WIDE_INT offset
, HOST_WIDE_INT alignment
)
4451 struct dw_loc_descr_struct
*head
;
4452 unsigned int dwarf_fp
4453 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM
);
4455 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
4456 if (cfa
.reg
== HARD_FRAME_POINTER_REGNUM
&& cfa
.indirect
== 0)
4458 head
= new_reg_loc_descr (dwarf_fp
, 0);
4459 add_loc_descr (&head
, int_loc_descriptor (alignment
));
4460 add_loc_descr (&head
, new_loc_descr (DW_OP_and
, 0, 0));
4462 add_loc_descr (&head
, int_loc_descriptor (offset
));
4463 add_loc_descr (&head
, new_loc_descr (DW_OP_plus
, 0, 0));
4466 head
= new_reg_loc_descr (dwarf_fp
, offset
);
4470 /* This function fills in aa dw_cfa_location structure from a dwarf location
4471 descriptor sequence. */
4474 get_cfa_from_loc_descr (dw_cfa_location
*cfa
, struct dw_loc_descr_struct
*loc
)
4476 struct dw_loc_descr_struct
*ptr
;
4478 cfa
->base_offset
= 0;
4482 for (ptr
= loc
; ptr
!= NULL
; ptr
= ptr
->dw_loc_next
)
4484 enum dwarf_location_atom op
= ptr
->dw_loc_opc
;
4520 cfa
->reg
= op
- DW_OP_reg0
;
4523 cfa
->reg
= ptr
->dw_loc_oprnd1
.v
.val_int
;
4557 cfa
->reg
= op
- DW_OP_breg0
;
4558 cfa
->base_offset
= ptr
->dw_loc_oprnd1
.v
.val_int
;
4561 cfa
->reg
= ptr
->dw_loc_oprnd1
.v
.val_int
;
4562 cfa
->base_offset
= ptr
->dw_loc_oprnd2
.v
.val_int
;
4567 case DW_OP_plus_uconst
:
4568 cfa
->offset
= ptr
->dw_loc_oprnd1
.v
.val_unsigned
;
4571 internal_error ("DW_LOC_OP %s not implemented",
4572 dwarf_stack_op_name (ptr
->dw_loc_opc
));
4576 #endif /* .debug_frame support */
4578 /* And now, the support for symbolic debugging information. */
4579 #ifdef DWARF2_DEBUGGING_INFO
4581 /* .debug_str support. */
4582 static int output_indirect_string (void **, void *);
4584 static void dwarf2out_init (const char *);
4585 static void dwarf2out_finish (const char *);
4586 static void dwarf2out_define (unsigned int, const char *);
4587 static void dwarf2out_undef (unsigned int, const char *);
4588 static void dwarf2out_start_source_file (unsigned, const char *);
4589 static void dwarf2out_end_source_file (unsigned);
4590 static void dwarf2out_begin_block (unsigned, unsigned);
4591 static void dwarf2out_end_block (unsigned, unsigned);
4592 static bool dwarf2out_ignore_block (const_tree
);
4593 static void dwarf2out_global_decl (tree
);
4594 static void dwarf2out_type_decl (tree
, int);
4595 static void dwarf2out_imported_module_or_decl (tree
, tree
, tree
, bool);
4596 static void dwarf2out_imported_module_or_decl_1 (tree
, tree
, tree
,
4598 static void dwarf2out_abstract_function (tree
);
4599 static void dwarf2out_var_location (rtx
);
4600 static void dwarf2out_begin_function (tree
);
4602 /* The debug hooks structure. */
4604 const struct gcc_debug_hooks dwarf2_debug_hooks
=
4610 dwarf2out_start_source_file
,
4611 dwarf2out_end_source_file
,
4612 dwarf2out_begin_block
,
4613 dwarf2out_end_block
,
4614 dwarf2out_ignore_block
,
4615 dwarf2out_source_line
,
4616 dwarf2out_begin_prologue
,
4617 debug_nothing_int_charstar
, /* end_prologue */
4618 dwarf2out_end_epilogue
,
4619 dwarf2out_begin_function
,
4620 debug_nothing_int
, /* end_function */
4621 dwarf2out_decl
, /* function_decl */
4622 dwarf2out_global_decl
,
4623 dwarf2out_type_decl
, /* type_decl */
4624 dwarf2out_imported_module_or_decl
,
4625 debug_nothing_tree
, /* deferred_inline_function */
4626 /* The DWARF 2 backend tries to reduce debugging bloat by not
4627 emitting the abstract description of inline functions until
4628 something tries to reference them. */
4629 dwarf2out_abstract_function
, /* outlining_inline_function */
4630 debug_nothing_rtx
, /* label */
4631 debug_nothing_int
, /* handle_pch */
4632 dwarf2out_var_location
,
4633 dwarf2out_switch_text_section
,
4634 1 /* start_end_main_source_file */
4638 /* NOTE: In the comments in this file, many references are made to
4639 "Debugging Information Entries". This term is abbreviated as `DIE'
4640 throughout the remainder of this file. */
4642 /* An internal representation of the DWARF output is built, and then
4643 walked to generate the DWARF debugging info. The walk of the internal
4644 representation is done after the entire program has been compiled.
4645 The types below are used to describe the internal representation. */
4647 /* Various DIE's use offsets relative to the beginning of the
4648 .debug_info section to refer to each other. */
4650 typedef long int dw_offset
;
4652 /* Define typedefs here to avoid circular dependencies. */
4654 typedef struct dw_attr_struct
*dw_attr_ref
;
4655 typedef struct dw_line_info_struct
*dw_line_info_ref
;
4656 typedef struct dw_separate_line_info_struct
*dw_separate_line_info_ref
;
4657 typedef struct pubname_struct
*pubname_ref
;
4658 typedef struct dw_ranges_struct
*dw_ranges_ref
;
4659 typedef struct dw_ranges_by_label_struct
*dw_ranges_by_label_ref
;
4661 /* Each entry in the line_info_table maintains the file and
4662 line number associated with the label generated for that
4663 entry. The label gives the PC value associated with
4664 the line number entry. */
4666 typedef struct dw_line_info_struct
GTY(())
4668 unsigned long dw_file_num
;
4669 unsigned long dw_line_num
;
4673 /* Line information for functions in separate sections; each one gets its
4675 typedef struct dw_separate_line_info_struct
GTY(())
4677 unsigned long dw_file_num
;
4678 unsigned long dw_line_num
;
4679 unsigned long function
;
4681 dw_separate_line_info_entry
;
4683 /* Each DIE attribute has a field specifying the attribute kind,
4684 a link to the next attribute in the chain, and an attribute value.
4685 Attributes are typically linked below the DIE they modify. */
4687 typedef struct dw_attr_struct
GTY(())
4689 enum dwarf_attribute dw_attr
;
4690 dw_val_node dw_attr_val
;
4694 DEF_VEC_O(dw_attr_node
);
4695 DEF_VEC_ALLOC_O(dw_attr_node
,gc
);
4697 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
4698 The children of each node form a circular list linked by
4699 die_sib. die_child points to the node *before* the "first" child node. */
4701 typedef struct die_struct
GTY((chain_circular ("%h.die_sib")))
4703 enum dwarf_tag die_tag
;
4705 VEC(dw_attr_node
,gc
) * die_attr
;
4706 dw_die_ref die_parent
;
4707 dw_die_ref die_child
;
4709 dw_die_ref die_definition
; /* ref from a specification to its definition */
4710 dw_offset die_offset
;
4711 unsigned long die_abbrev
;
4713 /* Die is used and must not be pruned as unused. */
4714 int die_perennial_p
;
4715 unsigned int decl_id
;
4719 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
4720 #define FOR_EACH_CHILD(die, c, expr) do { \
4721 c = die->die_child; \
4725 } while (c != die->die_child); \
4728 /* The pubname structure */
4730 typedef struct pubname_struct
GTY(())
4737 DEF_VEC_O(pubname_entry
);
4738 DEF_VEC_ALLOC_O(pubname_entry
, gc
);
4740 struct dw_ranges_struct
GTY(())
4742 /* If this is positive, it's a block number, otherwise it's a
4743 bitwise-negated index into dw_ranges_by_label. */
4747 struct dw_ranges_by_label_struct
GTY(())
4753 /* The limbo die list structure. */
4754 typedef struct limbo_die_struct
GTY(())
4758 struct limbo_die_struct
*next
;
4762 /* How to start an assembler comment. */
4763 #ifndef ASM_COMMENT_START
4764 #define ASM_COMMENT_START ";#"
4767 /* Define a macro which returns nonzero for a TYPE_DECL which was
4768 implicitly generated for a tagged type.
4770 Note that unlike the gcc front end (which generates a NULL named
4771 TYPE_DECL node for each complete tagged type, each array type, and
4772 each function type node created) the g++ front end generates a
4773 _named_ TYPE_DECL node for each tagged type node created.
4774 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
4775 generate a DW_TAG_typedef DIE for them. */
4777 #define TYPE_DECL_IS_STUB(decl) \
4778 (DECL_NAME (decl) == NULL_TREE \
4779 || (DECL_ARTIFICIAL (decl) \
4780 && is_tagged_type (TREE_TYPE (decl)) \
4781 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
4782 /* This is necessary for stub decls that \
4783 appear in nested inline functions. */ \
4784 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
4785 && (decl_ultimate_origin (decl) \
4786 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
4788 /* Information concerning the compilation unit's programming
4789 language, and compiler version. */
4791 /* Fixed size portion of the DWARF compilation unit header. */
4792 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
4793 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
4795 /* Fixed size portion of public names info. */
4796 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
4798 /* Fixed size portion of the address range info. */
4799 #define DWARF_ARANGES_HEADER_SIZE \
4800 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
4801 DWARF2_ADDR_SIZE * 2) \
4802 - DWARF_INITIAL_LENGTH_SIZE)
4804 /* Size of padding portion in the address range info. It must be
4805 aligned to twice the pointer size. */
4806 #define DWARF_ARANGES_PAD_SIZE \
4807 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
4808 DWARF2_ADDR_SIZE * 2) \
4809 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
4811 /* Use assembler line directives if available. */
4812 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
4813 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
4814 #define DWARF2_ASM_LINE_DEBUG_INFO 1
4816 #define DWARF2_ASM_LINE_DEBUG_INFO 0
4820 /* Minimum line offset in a special line info. opcode.
4821 This value was chosen to give a reasonable range of values. */
4822 #define DWARF_LINE_BASE -10
4824 /* First special line opcode - leave room for the standard opcodes. */
4825 #define DWARF_LINE_OPCODE_BASE 10
4827 /* Range of line offsets in a special line info. opcode. */
4828 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
4830 /* Flag that indicates the initial value of the is_stmt_start flag.
4831 In the present implementation, we do not mark any lines as
4832 the beginning of a source statement, because that information
4833 is not made available by the GCC front-end. */
4834 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
4836 #ifdef DWARF2_DEBUGGING_INFO
4837 /* This location is used by calc_die_sizes() to keep track
4838 the offset of each DIE within the .debug_info section. */
4839 static unsigned long next_die_offset
;
4842 /* Record the root of the DIE's built for the current compilation unit. */
4843 static GTY(()) dw_die_ref comp_unit_die
;
4845 /* A list of DIEs with a NULL parent waiting to be relocated. */
4846 static GTY(()) limbo_die_node
*limbo_die_list
;
4848 /* Filenames referenced by this compilation unit. */
4849 static GTY((param_is (struct dwarf_file_data
))) htab_t file_table
;
4851 /* A hash table of references to DIE's that describe declarations.
4852 The key is a DECL_UID() which is a unique number identifying each decl. */
4853 static GTY ((param_is (struct die_struct
))) htab_t decl_die_table
;
4855 /* A hash table of references to DIE's that describe COMMON blocks.
4856 The key is DECL_UID() ^ die_parent. */
4857 static GTY ((param_is (struct die_struct
))) htab_t common_block_die_table
;
4859 /* Node of the variable location list. */
4860 struct var_loc_node
GTY ((chain_next ("%h.next")))
4862 rtx
GTY (()) var_loc_note
;
4863 const char * GTY (()) label
;
4864 const char * GTY (()) section_label
;
4865 struct var_loc_node
* GTY (()) next
;
4868 /* Variable location list. */
4869 struct var_loc_list_def
GTY (())
4871 struct var_loc_node
* GTY (()) first
;
4873 /* Do not mark the last element of the chained list because
4874 it is marked through the chain. */
4875 struct var_loc_node
* GTY ((skip ("%h"))) last
;
4877 /* DECL_UID of the variable decl. */
4878 unsigned int decl_id
;
4880 typedef struct var_loc_list_def var_loc_list
;
4883 /* Table of decl location linked lists. */
4884 static GTY ((param_is (var_loc_list
))) htab_t decl_loc_table
;
4886 /* A pointer to the base of a list of references to DIE's that
4887 are uniquely identified by their tag, presence/absence of
4888 children DIE's, and list of attribute/value pairs. */
4889 static GTY((length ("abbrev_die_table_allocated")))
4890 dw_die_ref
*abbrev_die_table
;
4892 /* Number of elements currently allocated for abbrev_die_table. */
4893 static GTY(()) unsigned abbrev_die_table_allocated
;
4895 /* Number of elements in type_die_table currently in use. */
4896 static GTY(()) unsigned abbrev_die_table_in_use
;
4898 /* Size (in elements) of increments by which we may expand the
4899 abbrev_die_table. */
4900 #define ABBREV_DIE_TABLE_INCREMENT 256
4902 /* A pointer to the base of a table that contains line information
4903 for each source code line in .text in the compilation unit. */
4904 static GTY((length ("line_info_table_allocated")))
4905 dw_line_info_ref line_info_table
;
4907 /* Number of elements currently allocated for line_info_table. */
4908 static GTY(()) unsigned line_info_table_allocated
;
4910 /* Number of elements in line_info_table currently in use. */
4911 static GTY(()) unsigned line_info_table_in_use
;
4913 /* A pointer to the base of a table that contains line information
4914 for each source code line outside of .text in the compilation unit. */
4915 static GTY ((length ("separate_line_info_table_allocated")))
4916 dw_separate_line_info_ref separate_line_info_table
;
4918 /* Number of elements currently allocated for separate_line_info_table. */
4919 static GTY(()) unsigned separate_line_info_table_allocated
;
4921 /* Number of elements in separate_line_info_table currently in use. */
4922 static GTY(()) unsigned separate_line_info_table_in_use
;
4924 /* Size (in elements) of increments by which we may expand the
4926 #define LINE_INFO_TABLE_INCREMENT 1024
4928 /* A pointer to the base of a table that contains a list of publicly
4929 accessible names. */
4930 static GTY (()) VEC (pubname_entry
, gc
) * pubname_table
;
4932 /* A pointer to the base of a table that contains a list of publicly
4933 accessible types. */
4934 static GTY (()) VEC (pubname_entry
, gc
) * pubtype_table
;
4936 /* Array of dies for which we should generate .debug_arange info. */
4937 static GTY((length ("arange_table_allocated"))) dw_die_ref
*arange_table
;
4939 /* Number of elements currently allocated for arange_table. */
4940 static GTY(()) unsigned arange_table_allocated
;
4942 /* Number of elements in arange_table currently in use. */
4943 static GTY(()) unsigned arange_table_in_use
;
4945 /* Size (in elements) of increments by which we may expand the
4947 #define ARANGE_TABLE_INCREMENT 64
4949 /* Array of dies for which we should generate .debug_ranges info. */
4950 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table
;
4952 /* Number of elements currently allocated for ranges_table. */
4953 static GTY(()) unsigned ranges_table_allocated
;
4955 /* Number of elements in ranges_table currently in use. */
4956 static GTY(()) unsigned ranges_table_in_use
;
4958 /* Array of pairs of labels referenced in ranges_table. */
4959 static GTY ((length ("ranges_by_label_allocated")))
4960 dw_ranges_by_label_ref ranges_by_label
;
4962 /* Number of elements currently allocated for ranges_by_label. */
4963 static GTY(()) unsigned ranges_by_label_allocated
;
4965 /* Number of elements in ranges_by_label currently in use. */
4966 static GTY(()) unsigned ranges_by_label_in_use
;
4968 /* Size (in elements) of increments by which we may expand the
4970 #define RANGES_TABLE_INCREMENT 64
4972 /* Whether we have location lists that need outputting */
4973 static GTY(()) bool have_location_lists
;
4975 /* Unique label counter. */
4976 static GTY(()) unsigned int loclabel_num
;
4978 #ifdef DWARF2_DEBUGGING_INFO
4979 /* Record whether the function being analyzed contains inlined functions. */
4980 static int current_function_has_inlines
;
4982 #if 0 && defined (MIPS_DEBUGGING_INFO)
4983 static int comp_unit_has_inlines
;
4986 /* The last file entry emitted by maybe_emit_file(). */
4987 static GTY(()) struct dwarf_file_data
* last_emitted_file
;
4989 /* Number of internal labels generated by gen_internal_sym(). */
4990 static GTY(()) int label_num
;
4992 /* Cached result of previous call to lookup_filename. */
4993 static GTY(()) struct dwarf_file_data
* file_table_last_lookup
;
4995 #ifdef DWARF2_DEBUGGING_INFO
4997 /* Offset from the "steady-state frame pointer" to the frame base,
4998 within the current function. */
4999 static HOST_WIDE_INT frame_pointer_fb_offset
;
5001 /* Forward declarations for functions defined in this file. */
5003 static int is_pseudo_reg (const_rtx
);
5004 static tree
type_main_variant (tree
);
5005 static int is_tagged_type (const_tree
);
5006 static const char *dwarf_tag_name (unsigned);
5007 static const char *dwarf_attr_name (unsigned);
5008 static const char *dwarf_form_name (unsigned);
5009 static tree
decl_ultimate_origin (const_tree
);
5010 static tree
decl_class_context (tree
);
5011 static void add_dwarf_attr (dw_die_ref
, dw_attr_ref
);
5012 static inline enum dw_val_class
AT_class (dw_attr_ref
);
5013 static void add_AT_flag (dw_die_ref
, enum dwarf_attribute
, unsigned);
5014 static inline unsigned AT_flag (dw_attr_ref
);
5015 static void add_AT_int (dw_die_ref
, enum dwarf_attribute
, HOST_WIDE_INT
);
5016 static inline HOST_WIDE_INT
AT_int (dw_attr_ref
);
5017 static void add_AT_unsigned (dw_die_ref
, enum dwarf_attribute
, unsigned HOST_WIDE_INT
);
5018 static inline unsigned HOST_WIDE_INT
AT_unsigned (dw_attr_ref
);
5019 static void add_AT_long_long (dw_die_ref
, enum dwarf_attribute
, unsigned long,
5021 static inline void add_AT_vec (dw_die_ref
, enum dwarf_attribute
, unsigned int,
5022 unsigned int, unsigned char *);
5023 static hashval_t
debug_str_do_hash (const void *);
5024 static int debug_str_eq (const void *, const void *);
5025 static void add_AT_string (dw_die_ref
, enum dwarf_attribute
, const char *);
5026 static inline const char *AT_string (dw_attr_ref
);
5027 static int AT_string_form (dw_attr_ref
);
5028 static void add_AT_die_ref (dw_die_ref
, enum dwarf_attribute
, dw_die_ref
);
5029 static void add_AT_specification (dw_die_ref
, dw_die_ref
);
5030 static inline dw_die_ref
AT_ref (dw_attr_ref
);
5031 static inline int AT_ref_external (dw_attr_ref
);
5032 static inline void set_AT_ref_external (dw_attr_ref
, int);
5033 static void add_AT_fde_ref (dw_die_ref
, enum dwarf_attribute
, unsigned);
5034 static void add_AT_loc (dw_die_ref
, enum dwarf_attribute
, dw_loc_descr_ref
);
5035 static inline dw_loc_descr_ref
AT_loc (dw_attr_ref
);
5036 static void add_AT_loc_list (dw_die_ref
, enum dwarf_attribute
,
5038 static inline dw_loc_list_ref
AT_loc_list (dw_attr_ref
);
5039 static void add_AT_addr (dw_die_ref
, enum dwarf_attribute
, rtx
);
5040 static inline rtx
AT_addr (dw_attr_ref
);
5041 static void add_AT_lbl_id (dw_die_ref
, enum dwarf_attribute
, const char *);
5042 static void add_AT_lineptr (dw_die_ref
, enum dwarf_attribute
, const char *);
5043 static void add_AT_macptr (dw_die_ref
, enum dwarf_attribute
, const char *);
5044 static void add_AT_offset (dw_die_ref
, enum dwarf_attribute
,
5045 unsigned HOST_WIDE_INT
);
5046 static void add_AT_range_list (dw_die_ref
, enum dwarf_attribute
,
5048 static inline const char *AT_lbl (dw_attr_ref
);
5049 static dw_attr_ref
get_AT (dw_die_ref
, enum dwarf_attribute
);
5050 static const char *get_AT_low_pc (dw_die_ref
);
5051 static const char *get_AT_hi_pc (dw_die_ref
);
5052 static const char *get_AT_string (dw_die_ref
, enum dwarf_attribute
);
5053 static int get_AT_flag (dw_die_ref
, enum dwarf_attribute
);
5054 static unsigned get_AT_unsigned (dw_die_ref
, enum dwarf_attribute
);
5055 static inline dw_die_ref
get_AT_ref (dw_die_ref
, enum dwarf_attribute
);
5056 static bool is_c_family (void);
5057 static bool is_cxx (void);
5058 static bool is_java (void);
5059 static bool is_fortran (void);
5060 static bool is_ada (void);
5061 static void remove_AT (dw_die_ref
, enum dwarf_attribute
);
5062 static void remove_child_TAG (dw_die_ref
, enum dwarf_tag
);
5063 static void add_child_die (dw_die_ref
, dw_die_ref
);
5064 static dw_die_ref
new_die (enum dwarf_tag
, dw_die_ref
, tree
);
5065 static dw_die_ref
lookup_type_die (tree
);
5066 static void equate_type_number_to_die (tree
, dw_die_ref
);
5067 static hashval_t
decl_die_table_hash (const void *);
5068 static int decl_die_table_eq (const void *, const void *);
5069 static dw_die_ref
lookup_decl_die (tree
);
5070 static hashval_t
common_block_die_table_hash (const void *);
5071 static int common_block_die_table_eq (const void *, const void *);
5072 static hashval_t
decl_loc_table_hash (const void *);
5073 static int decl_loc_table_eq (const void *, const void *);
5074 static var_loc_list
*lookup_decl_loc (const_tree
);
5075 static void equate_decl_number_to_die (tree
, dw_die_ref
);
5076 static void add_var_loc_to_decl (tree
, struct var_loc_node
*);
5077 static void print_spaces (FILE *);
5078 static void print_die (dw_die_ref
, FILE *);
5079 static void print_dwarf_line_table (FILE *);
5080 static dw_die_ref
push_new_compile_unit (dw_die_ref
, dw_die_ref
);
5081 static dw_die_ref
pop_compile_unit (dw_die_ref
);
5082 static void loc_checksum (dw_loc_descr_ref
, struct md5_ctx
*);
5083 static void attr_checksum (dw_attr_ref
, struct md5_ctx
*, int *);
5084 static void die_checksum (dw_die_ref
, struct md5_ctx
*, int *);
5085 static int same_loc_p (dw_loc_descr_ref
, dw_loc_descr_ref
, int *);
5086 static int same_dw_val_p (const dw_val_node
*, const dw_val_node
*, int *);
5087 static int same_attr_p (dw_attr_ref
, dw_attr_ref
, int *);
5088 static int same_die_p (dw_die_ref
, dw_die_ref
, int *);
5089 static int same_die_p_wrap (dw_die_ref
, dw_die_ref
);
5090 static void compute_section_prefix (dw_die_ref
);
5091 static int is_type_die (dw_die_ref
);
5092 static int is_comdat_die (dw_die_ref
);
5093 static int is_symbol_die (dw_die_ref
);
5094 static void assign_symbol_names (dw_die_ref
);
5095 static void break_out_includes (dw_die_ref
);
5096 static hashval_t
htab_cu_hash (const void *);
5097 static int htab_cu_eq (const void *, const void *);
5098 static void htab_cu_del (void *);
5099 static int check_duplicate_cu (dw_die_ref
, htab_t
, unsigned *);
5100 static void record_comdat_symbol_number (dw_die_ref
, htab_t
, unsigned);
5101 static void add_sibling_attributes (dw_die_ref
);
5102 static void build_abbrev_table (dw_die_ref
);
5103 static void output_location_lists (dw_die_ref
);
5104 static int constant_size (unsigned HOST_WIDE_INT
);
5105 static unsigned long size_of_die (dw_die_ref
);
5106 static void calc_die_sizes (dw_die_ref
);
5107 static void mark_dies (dw_die_ref
);
5108 static void unmark_dies (dw_die_ref
);
5109 static void unmark_all_dies (dw_die_ref
);
5110 static unsigned long size_of_pubnames (VEC (pubname_entry
,gc
) *);
5111 static unsigned long size_of_aranges (void);
5112 static enum dwarf_form
value_format (dw_attr_ref
);
5113 static void output_value_format (dw_attr_ref
);
5114 static void output_abbrev_section (void);
5115 static void output_die_symbol (dw_die_ref
);
5116 static void output_die (dw_die_ref
);
5117 static void output_compilation_unit_header (void);
5118 static void output_comp_unit (dw_die_ref
, int);
5119 static const char *dwarf2_name (tree
, int);
5120 static void add_pubname (tree
, dw_die_ref
);
5121 static void add_pubname_string (const char *, dw_die_ref
);
5122 static void add_pubtype (tree
, dw_die_ref
);
5123 static void output_pubnames (VEC (pubname_entry
,gc
) *);
5124 static void add_arange (tree
, dw_die_ref
);
5125 static void output_aranges (void);
5126 static unsigned int add_ranges_num (int);
5127 static unsigned int add_ranges (const_tree
);
5128 static unsigned int add_ranges_by_labels (const char *, const char *);
5129 static void output_ranges (void);
5130 static void output_line_info (void);
5131 static void output_file_names (void);
5132 static dw_die_ref
base_type_die (tree
);
5133 static int is_base_type (tree
);
5134 static bool is_subrange_type (const_tree
);
5135 static dw_die_ref
subrange_type_die (tree
, dw_die_ref
);
5136 static dw_die_ref
modified_type_die (tree
, int, int, dw_die_ref
);
5137 static int type_is_enum (const_tree
);
5138 static unsigned int dbx_reg_number (const_rtx
);
5139 static void add_loc_descr_op_piece (dw_loc_descr_ref
*, int);
5140 static dw_loc_descr_ref
reg_loc_descriptor (rtx
, enum var_init_status
);
5141 static dw_loc_descr_ref
one_reg_loc_descriptor (unsigned int,
5142 enum var_init_status
);
5143 static dw_loc_descr_ref
multiple_reg_loc_descriptor (rtx
, rtx
,
5144 enum var_init_status
);
5145 static dw_loc_descr_ref
based_loc_descr (rtx
, HOST_WIDE_INT
,
5146 enum var_init_status
);
5147 static int is_based_loc (const_rtx
);
5148 static dw_loc_descr_ref
mem_loc_descriptor (rtx
, enum machine_mode mode
,
5149 enum var_init_status
);
5150 static dw_loc_descr_ref
concat_loc_descriptor (rtx
, rtx
,
5151 enum var_init_status
);
5152 static dw_loc_descr_ref
loc_descriptor (rtx
, enum var_init_status
);
5153 static dw_loc_descr_ref
loc_descriptor_from_tree_1 (tree
, int);
5154 static dw_loc_descr_ref
loc_descriptor_from_tree (tree
);
5155 static HOST_WIDE_INT
ceiling (HOST_WIDE_INT
, unsigned int);
5156 static tree
field_type (const_tree
);
5157 static unsigned int simple_type_align_in_bits (const_tree
);
5158 static unsigned int simple_decl_align_in_bits (const_tree
);
5159 static unsigned HOST_WIDE_INT
simple_type_size_in_bits (const_tree
);
5160 static HOST_WIDE_INT
field_byte_offset (const_tree
);
5161 static void add_AT_location_description (dw_die_ref
, enum dwarf_attribute
,
5163 static void add_data_member_location_attribute (dw_die_ref
, tree
);
5164 static void add_const_value_attribute (dw_die_ref
, rtx
);
5165 static void insert_int (HOST_WIDE_INT
, unsigned, unsigned char *);
5166 static HOST_WIDE_INT
extract_int (const unsigned char *, unsigned);
5167 static void insert_float (const_rtx
, unsigned char *);
5168 static rtx
rtl_for_decl_location (tree
);
5169 static void add_location_or_const_value_attribute (dw_die_ref
, tree
,
5170 enum dwarf_attribute
);
5171 static void tree_add_const_value_attribute (dw_die_ref
, tree
);
5172 static void add_name_attribute (dw_die_ref
, const char *);
5173 static void add_comp_dir_attribute (dw_die_ref
);
5174 static void add_bound_info (dw_die_ref
, enum dwarf_attribute
, tree
);
5175 static void add_subscript_info (dw_die_ref
, tree
, bool);
5176 static void add_byte_size_attribute (dw_die_ref
, tree
);
5177 static void add_bit_offset_attribute (dw_die_ref
, tree
);
5178 static void add_bit_size_attribute (dw_die_ref
, tree
);
5179 static void add_prototyped_attribute (dw_die_ref
, tree
);
5180 static dw_die_ref
add_abstract_origin_attribute (dw_die_ref
, tree
);
5181 static void add_pure_or_virtual_attribute (dw_die_ref
, tree
);
5182 static void add_src_coords_attributes (dw_die_ref
, tree
);
5183 static void add_name_and_src_coords_attributes (dw_die_ref
, tree
);
5184 static void push_decl_scope (tree
);
5185 static void pop_decl_scope (void);
5186 static dw_die_ref
scope_die_for (tree
, dw_die_ref
);
5187 static inline int local_scope_p (dw_die_ref
);
5188 static inline int class_or_namespace_scope_p (dw_die_ref
);
5189 static void add_type_attribute (dw_die_ref
, tree
, int, int, dw_die_ref
);
5190 static void add_calling_convention_attribute (dw_die_ref
, tree
);
5191 static const char *type_tag (const_tree
);
5192 static tree
member_declared_type (const_tree
);
5194 static const char *decl_start_label (tree
);
5196 static void gen_array_type_die (tree
, dw_die_ref
);
5197 static void gen_descr_array_type_die (tree
, struct array_descr_info
*, dw_die_ref
);
5199 static void gen_entry_point_die (tree
, dw_die_ref
);
5201 static dw_die_ref
gen_enumeration_type_die (tree
, dw_die_ref
);
5202 static dw_die_ref
gen_formal_parameter_die (tree
, tree
, dw_die_ref
);
5203 static void gen_unspecified_parameters_die (tree
, dw_die_ref
);
5204 static void gen_formal_types_die (tree
, dw_die_ref
);
5205 static void gen_subprogram_die (tree
, dw_die_ref
);
5206 static void gen_variable_die (tree
, tree
, dw_die_ref
);
5207 static void gen_const_die (tree
, dw_die_ref
);
5208 static void gen_label_die (tree
, dw_die_ref
);
5209 static void gen_lexical_block_die (tree
, dw_die_ref
, int);
5210 static void gen_inlined_subroutine_die (tree
, dw_die_ref
, int);
5211 static void gen_field_die (tree
, dw_die_ref
);
5212 static void gen_ptr_to_mbr_type_die (tree
, dw_die_ref
);
5213 static dw_die_ref
gen_compile_unit_die (const char *);
5214 static void gen_inheritance_die (tree
, tree
, dw_die_ref
);
5215 static void gen_member_die (tree
, dw_die_ref
);
5216 static void gen_struct_or_union_type_die (tree
, dw_die_ref
,
5217 enum debug_info_usage
);
5218 static void gen_subroutine_type_die (tree
, dw_die_ref
);
5219 static void gen_typedef_die (tree
, dw_die_ref
);
5220 static void gen_type_die (tree
, dw_die_ref
);
5221 static void gen_block_die (tree
, dw_die_ref
, int);
5222 static void decls_for_scope (tree
, dw_die_ref
, int);
5223 static int is_redundant_typedef (const_tree
);
5224 static void gen_namespace_die (tree
, dw_die_ref
);
5225 static void gen_decl_die (tree
, tree
, dw_die_ref
);
5226 static dw_die_ref
force_decl_die (tree
);
5227 static dw_die_ref
force_type_die (tree
);
5228 static dw_die_ref
setup_namespace_context (tree
, dw_die_ref
);
5229 static dw_die_ref
declare_in_namespace (tree
, dw_die_ref
);
5230 static struct dwarf_file_data
* lookup_filename (const char *);
5231 static void retry_incomplete_types (void);
5232 static void gen_type_die_for_member (tree
, tree
, dw_die_ref
);
5233 static void splice_child_die (dw_die_ref
, dw_die_ref
);
5234 static int file_info_cmp (const void *, const void *);
5235 static dw_loc_list_ref
new_loc_list (dw_loc_descr_ref
, const char *,
5236 const char *, const char *, unsigned);
5237 static void add_loc_descr_to_loc_list (dw_loc_list_ref
*, dw_loc_descr_ref
,
5238 const char *, const char *,
5240 static void output_loc_list (dw_loc_list_ref
);
5241 static char *gen_internal_sym (const char *);
5243 static void prune_unmark_dies (dw_die_ref
);
5244 static void prune_unused_types_mark (dw_die_ref
, int);
5245 static void prune_unused_types_walk (dw_die_ref
);
5246 static void prune_unused_types_walk_attribs (dw_die_ref
);
5247 static void prune_unused_types_prune (dw_die_ref
);
5248 static void prune_unused_types (void);
5249 static int maybe_emit_file (struct dwarf_file_data
*fd
);
5251 /* Section names used to hold DWARF debugging information. */
5252 #ifndef DEBUG_INFO_SECTION
5253 #define DEBUG_INFO_SECTION ".debug_info"
5255 #ifndef DEBUG_ABBREV_SECTION
5256 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
5258 #ifndef DEBUG_ARANGES_SECTION
5259 #define DEBUG_ARANGES_SECTION ".debug_aranges"
5261 #ifndef DEBUG_MACINFO_SECTION
5262 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
5264 #ifndef DEBUG_LINE_SECTION
5265 #define DEBUG_LINE_SECTION ".debug_line"
5267 #ifndef DEBUG_LOC_SECTION
5268 #define DEBUG_LOC_SECTION ".debug_loc"
5270 #ifndef DEBUG_PUBNAMES_SECTION
5271 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
5273 #ifndef DEBUG_STR_SECTION
5274 #define DEBUG_STR_SECTION ".debug_str"
5276 #ifndef DEBUG_RANGES_SECTION
5277 #define DEBUG_RANGES_SECTION ".debug_ranges"
5280 /* Standard ELF section names for compiled code and data. */
5281 #ifndef TEXT_SECTION_NAME
5282 #define TEXT_SECTION_NAME ".text"
5285 /* Section flags for .debug_str section. */
5286 #define DEBUG_STR_SECTION_FLAGS \
5287 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
5288 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
5291 /* Labels we insert at beginning sections we can reference instead of
5292 the section names themselves. */
5294 #ifndef TEXT_SECTION_LABEL
5295 #define TEXT_SECTION_LABEL "Ltext"
5297 #ifndef COLD_TEXT_SECTION_LABEL
5298 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
5300 #ifndef DEBUG_LINE_SECTION_LABEL
5301 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
5303 #ifndef DEBUG_INFO_SECTION_LABEL
5304 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
5306 #ifndef DEBUG_ABBREV_SECTION_LABEL
5307 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
5309 #ifndef DEBUG_LOC_SECTION_LABEL
5310 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
5312 #ifndef DEBUG_RANGES_SECTION_LABEL
5313 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
5315 #ifndef DEBUG_MACINFO_SECTION_LABEL
5316 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
5319 /* Definitions of defaults for formats and names of various special
5320 (artificial) labels which may be generated within this file (when the -g
5321 options is used and DWARF2_DEBUGGING_INFO is in effect.
5322 If necessary, these may be overridden from within the tm.h file, but
5323 typically, overriding these defaults is unnecessary. */
5325 static char text_end_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5326 static char text_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5327 static char cold_text_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5328 static char cold_end_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5329 static char abbrev_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5330 static char debug_info_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5331 static char debug_line_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5332 static char macinfo_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5333 static char loc_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
5334 static char ranges_section_label
[2 * MAX_ARTIFICIAL_LABEL_BYTES
];
5336 #ifndef TEXT_END_LABEL
5337 #define TEXT_END_LABEL "Letext"
5339 #ifndef COLD_END_LABEL
5340 #define COLD_END_LABEL "Letext_cold"
5342 #ifndef BLOCK_BEGIN_LABEL
5343 #define BLOCK_BEGIN_LABEL "LBB"
5345 #ifndef BLOCK_END_LABEL
5346 #define BLOCK_END_LABEL "LBE"
5348 #ifndef LINE_CODE_LABEL
5349 #define LINE_CODE_LABEL "LM"
5351 #ifndef SEPARATE_LINE_CODE_LABEL
5352 #define SEPARATE_LINE_CODE_LABEL "LSM"
5356 /* We allow a language front-end to designate a function that is to be
5357 called to "demangle" any name before it is put into a DIE. */
5359 static const char *(*demangle_name_func
) (const char *);
5362 dwarf2out_set_demangle_name_func (const char *(*func
) (const char *))
5364 demangle_name_func
= func
;
5367 /* Test if rtl node points to a pseudo register. */
5370 is_pseudo_reg (const_rtx rtl
)
5372 return ((REG_P (rtl
) && REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
5373 || (GET_CODE (rtl
) == SUBREG
5374 && REGNO (SUBREG_REG (rtl
)) >= FIRST_PSEUDO_REGISTER
));
5377 /* Return a reference to a type, with its const and volatile qualifiers
5381 type_main_variant (tree type
)
5383 type
= TYPE_MAIN_VARIANT (type
);
5385 /* ??? There really should be only one main variant among any group of
5386 variants of a given type (and all of the MAIN_VARIANT values for all
5387 members of the group should point to that one type) but sometimes the C
5388 front-end messes this up for array types, so we work around that bug
5390 if (TREE_CODE (type
) == ARRAY_TYPE
)
5391 while (type
!= TYPE_MAIN_VARIANT (type
))
5392 type
= TYPE_MAIN_VARIANT (type
);
5397 /* Return nonzero if the given type node represents a tagged type. */
5400 is_tagged_type (const_tree type
)
5402 enum tree_code code
= TREE_CODE (type
);
5404 return (code
== RECORD_TYPE
|| code
== UNION_TYPE
5405 || code
== QUAL_UNION_TYPE
|| code
== ENUMERAL_TYPE
);
5408 /* Convert a DIE tag into its string name. */
5411 dwarf_tag_name (unsigned int tag
)
5415 case DW_TAG_padding
:
5416 return "DW_TAG_padding";
5417 case DW_TAG_array_type
:
5418 return "DW_TAG_array_type";
5419 case DW_TAG_class_type
:
5420 return "DW_TAG_class_type";
5421 case DW_TAG_entry_point
:
5422 return "DW_TAG_entry_point";
5423 case DW_TAG_enumeration_type
:
5424 return "DW_TAG_enumeration_type";
5425 case DW_TAG_formal_parameter
:
5426 return "DW_TAG_formal_parameter";
5427 case DW_TAG_imported_declaration
:
5428 return "DW_TAG_imported_declaration";
5430 return "DW_TAG_label";
5431 case DW_TAG_lexical_block
:
5432 return "DW_TAG_lexical_block";
5434 return "DW_TAG_member";
5435 case DW_TAG_pointer_type
:
5436 return "DW_TAG_pointer_type";
5437 case DW_TAG_reference_type
:
5438 return "DW_TAG_reference_type";
5439 case DW_TAG_compile_unit
:
5440 return "DW_TAG_compile_unit";
5441 case DW_TAG_string_type
:
5442 return "DW_TAG_string_type";
5443 case DW_TAG_structure_type
:
5444 return "DW_TAG_structure_type";
5445 case DW_TAG_subroutine_type
:
5446 return "DW_TAG_subroutine_type";
5447 case DW_TAG_typedef
:
5448 return "DW_TAG_typedef";
5449 case DW_TAG_union_type
:
5450 return "DW_TAG_union_type";
5451 case DW_TAG_unspecified_parameters
:
5452 return "DW_TAG_unspecified_parameters";
5453 case DW_TAG_variant
:
5454 return "DW_TAG_variant";
5455 case DW_TAG_common_block
:
5456 return "DW_TAG_common_block";
5457 case DW_TAG_common_inclusion
:
5458 return "DW_TAG_common_inclusion";
5459 case DW_TAG_inheritance
:
5460 return "DW_TAG_inheritance";
5461 case DW_TAG_inlined_subroutine
:
5462 return "DW_TAG_inlined_subroutine";
5464 return "DW_TAG_module";
5465 case DW_TAG_ptr_to_member_type
:
5466 return "DW_TAG_ptr_to_member_type";
5467 case DW_TAG_set_type
:
5468 return "DW_TAG_set_type";
5469 case DW_TAG_subrange_type
:
5470 return "DW_TAG_subrange_type";
5471 case DW_TAG_with_stmt
:
5472 return "DW_TAG_with_stmt";
5473 case DW_TAG_access_declaration
:
5474 return "DW_TAG_access_declaration";
5475 case DW_TAG_base_type
:
5476 return "DW_TAG_base_type";
5477 case DW_TAG_catch_block
:
5478 return "DW_TAG_catch_block";
5479 case DW_TAG_const_type
:
5480 return "DW_TAG_const_type";
5481 case DW_TAG_constant
:
5482 return "DW_TAG_constant";
5483 case DW_TAG_enumerator
:
5484 return "DW_TAG_enumerator";
5485 case DW_TAG_file_type
:
5486 return "DW_TAG_file_type";
5488 return "DW_TAG_friend";
5489 case DW_TAG_namelist
:
5490 return "DW_TAG_namelist";
5491 case DW_TAG_namelist_item
:
5492 return "DW_TAG_namelist_item";
5493 case DW_TAG_packed_type
:
5494 return "DW_TAG_packed_type";
5495 case DW_TAG_subprogram
:
5496 return "DW_TAG_subprogram";
5497 case DW_TAG_template_type_param
:
5498 return "DW_TAG_template_type_param";
5499 case DW_TAG_template_value_param
:
5500 return "DW_TAG_template_value_param";
5501 case DW_TAG_thrown_type
:
5502 return "DW_TAG_thrown_type";
5503 case DW_TAG_try_block
:
5504 return "DW_TAG_try_block";
5505 case DW_TAG_variant_part
:
5506 return "DW_TAG_variant_part";
5507 case DW_TAG_variable
:
5508 return "DW_TAG_variable";
5509 case DW_TAG_volatile_type
:
5510 return "DW_TAG_volatile_type";
5511 case DW_TAG_dwarf_procedure
:
5512 return "DW_TAG_dwarf_procedure";
5513 case DW_TAG_restrict_type
:
5514 return "DW_TAG_restrict_type";
5515 case DW_TAG_interface_type
:
5516 return "DW_TAG_interface_type";
5517 case DW_TAG_namespace
:
5518 return "DW_TAG_namespace";
5519 case DW_TAG_imported_module
:
5520 return "DW_TAG_imported_module";
5521 case DW_TAG_unspecified_type
:
5522 return "DW_TAG_unspecified_type";
5523 case DW_TAG_partial_unit
:
5524 return "DW_TAG_partial_unit";
5525 case DW_TAG_imported_unit
:
5526 return "DW_TAG_imported_unit";
5527 case DW_TAG_condition
:
5528 return "DW_TAG_condition";
5529 case DW_TAG_shared_type
:
5530 return "DW_TAG_shared_type";
5531 case DW_TAG_MIPS_loop
:
5532 return "DW_TAG_MIPS_loop";
5533 case DW_TAG_format_label
:
5534 return "DW_TAG_format_label";
5535 case DW_TAG_function_template
:
5536 return "DW_TAG_function_template";
5537 case DW_TAG_class_template
:
5538 return "DW_TAG_class_template";
5539 case DW_TAG_GNU_BINCL
:
5540 return "DW_TAG_GNU_BINCL";
5541 case DW_TAG_GNU_EINCL
:
5542 return "DW_TAG_GNU_EINCL";
5544 return "DW_TAG_<unknown>";
5548 /* Convert a DWARF attribute code into its string name. */
5551 dwarf_attr_name (unsigned int attr
)
5556 return "DW_AT_sibling";
5557 case DW_AT_location
:
5558 return "DW_AT_location";
5560 return "DW_AT_name";
5561 case DW_AT_ordering
:
5562 return "DW_AT_ordering";
5563 case DW_AT_subscr_data
:
5564 return "DW_AT_subscr_data";
5565 case DW_AT_byte_size
:
5566 return "DW_AT_byte_size";
5567 case DW_AT_bit_offset
:
5568 return "DW_AT_bit_offset";
5569 case DW_AT_bit_size
:
5570 return "DW_AT_bit_size";
5571 case DW_AT_element_list
:
5572 return "DW_AT_element_list";
5573 case DW_AT_stmt_list
:
5574 return "DW_AT_stmt_list";
5576 return "DW_AT_low_pc";
5578 return "DW_AT_high_pc";
5579 case DW_AT_language
:
5580 return "DW_AT_language";
5582 return "DW_AT_member";
5584 return "DW_AT_discr";
5585 case DW_AT_discr_value
:
5586 return "DW_AT_discr_value";
5587 case DW_AT_visibility
:
5588 return "DW_AT_visibility";
5590 return "DW_AT_import";
5591 case DW_AT_string_length
:
5592 return "DW_AT_string_length";
5593 case DW_AT_common_reference
:
5594 return "DW_AT_common_reference";
5595 case DW_AT_comp_dir
:
5596 return "DW_AT_comp_dir";
5597 case DW_AT_const_value
:
5598 return "DW_AT_const_value";
5599 case DW_AT_containing_type
:
5600 return "DW_AT_containing_type";
5601 case DW_AT_default_value
:
5602 return "DW_AT_default_value";
5604 return "DW_AT_inline";
5605 case DW_AT_is_optional
:
5606 return "DW_AT_is_optional";
5607 case DW_AT_lower_bound
:
5608 return "DW_AT_lower_bound";
5609 case DW_AT_producer
:
5610 return "DW_AT_producer";
5611 case DW_AT_prototyped
:
5612 return "DW_AT_prototyped";
5613 case DW_AT_return_addr
:
5614 return "DW_AT_return_addr";
5615 case DW_AT_start_scope
:
5616 return "DW_AT_start_scope";
5617 case DW_AT_bit_stride
:
5618 return "DW_AT_bit_stride";
5619 case DW_AT_upper_bound
:
5620 return "DW_AT_upper_bound";
5621 case DW_AT_abstract_origin
:
5622 return "DW_AT_abstract_origin";
5623 case DW_AT_accessibility
:
5624 return "DW_AT_accessibility";
5625 case DW_AT_address_class
:
5626 return "DW_AT_address_class";
5627 case DW_AT_artificial
:
5628 return "DW_AT_artificial";
5629 case DW_AT_base_types
:
5630 return "DW_AT_base_types";
5631 case DW_AT_calling_convention
:
5632 return "DW_AT_calling_convention";
5634 return "DW_AT_count";
5635 case DW_AT_data_member_location
:
5636 return "DW_AT_data_member_location";
5637 case DW_AT_decl_column
:
5638 return "DW_AT_decl_column";
5639 case DW_AT_decl_file
:
5640 return "DW_AT_decl_file";
5641 case DW_AT_decl_line
:
5642 return "DW_AT_decl_line";
5643 case DW_AT_declaration
:
5644 return "DW_AT_declaration";
5645 case DW_AT_discr_list
:
5646 return "DW_AT_discr_list";
5647 case DW_AT_encoding
:
5648 return "DW_AT_encoding";
5649 case DW_AT_external
:
5650 return "DW_AT_external";
5651 case DW_AT_frame_base
:
5652 return "DW_AT_frame_base";
5654 return "DW_AT_friend";
5655 case DW_AT_identifier_case
:
5656 return "DW_AT_identifier_case";
5657 case DW_AT_macro_info
:
5658 return "DW_AT_macro_info";
5659 case DW_AT_namelist_items
:
5660 return "DW_AT_namelist_items";
5661 case DW_AT_priority
:
5662 return "DW_AT_priority";
5664 return "DW_AT_segment";
5665 case DW_AT_specification
:
5666 return "DW_AT_specification";
5667 case DW_AT_static_link
:
5668 return "DW_AT_static_link";
5670 return "DW_AT_type";
5671 case DW_AT_use_location
:
5672 return "DW_AT_use_location";
5673 case DW_AT_variable_parameter
:
5674 return "DW_AT_variable_parameter";
5675 case DW_AT_virtuality
:
5676 return "DW_AT_virtuality";
5677 case DW_AT_vtable_elem_location
:
5678 return "DW_AT_vtable_elem_location";
5680 case DW_AT_allocated
:
5681 return "DW_AT_allocated";
5682 case DW_AT_associated
:
5683 return "DW_AT_associated";
5684 case DW_AT_data_location
:
5685 return "DW_AT_data_location";
5686 case DW_AT_byte_stride
:
5687 return "DW_AT_byte_stride";
5688 case DW_AT_entry_pc
:
5689 return "DW_AT_entry_pc";
5690 case DW_AT_use_UTF8
:
5691 return "DW_AT_use_UTF8";
5692 case DW_AT_extension
:
5693 return "DW_AT_extension";
5695 return "DW_AT_ranges";
5696 case DW_AT_trampoline
:
5697 return "DW_AT_trampoline";
5698 case DW_AT_call_column
:
5699 return "DW_AT_call_column";
5700 case DW_AT_call_file
:
5701 return "DW_AT_call_file";
5702 case DW_AT_call_line
:
5703 return "DW_AT_call_line";
5705 case DW_AT_MIPS_fde
:
5706 return "DW_AT_MIPS_fde";
5707 case DW_AT_MIPS_loop_begin
:
5708 return "DW_AT_MIPS_loop_begin";
5709 case DW_AT_MIPS_tail_loop_begin
:
5710 return "DW_AT_MIPS_tail_loop_begin";
5711 case DW_AT_MIPS_epilog_begin
:
5712 return "DW_AT_MIPS_epilog_begin";
5713 case DW_AT_MIPS_loop_unroll_factor
:
5714 return "DW_AT_MIPS_loop_unroll_factor";
5715 case DW_AT_MIPS_software_pipeline_depth
:
5716 return "DW_AT_MIPS_software_pipeline_depth";
5717 case DW_AT_MIPS_linkage_name
:
5718 return "DW_AT_MIPS_linkage_name";
5719 case DW_AT_MIPS_stride
:
5720 return "DW_AT_MIPS_stride";
5721 case DW_AT_MIPS_abstract_name
:
5722 return "DW_AT_MIPS_abstract_name";
5723 case DW_AT_MIPS_clone_origin
:
5724 return "DW_AT_MIPS_clone_origin";
5725 case DW_AT_MIPS_has_inlines
:
5726 return "DW_AT_MIPS_has_inlines";
5728 case DW_AT_sf_names
:
5729 return "DW_AT_sf_names";
5730 case DW_AT_src_info
:
5731 return "DW_AT_src_info";
5732 case DW_AT_mac_info
:
5733 return "DW_AT_mac_info";
5734 case DW_AT_src_coords
:
5735 return "DW_AT_src_coords";
5736 case DW_AT_body_begin
:
5737 return "DW_AT_body_begin";
5738 case DW_AT_body_end
:
5739 return "DW_AT_body_end";
5740 case DW_AT_GNU_vector
:
5741 return "DW_AT_GNU_vector";
5743 case DW_AT_VMS_rtnbeg_pd_address
:
5744 return "DW_AT_VMS_rtnbeg_pd_address";
5747 return "DW_AT_<unknown>";
5751 /* Convert a DWARF value form code into its string name. */
5754 dwarf_form_name (unsigned int form
)
5759 return "DW_FORM_addr";
5760 case DW_FORM_block2
:
5761 return "DW_FORM_block2";
5762 case DW_FORM_block4
:
5763 return "DW_FORM_block4";
5765 return "DW_FORM_data2";
5767 return "DW_FORM_data4";
5769 return "DW_FORM_data8";
5770 case DW_FORM_string
:
5771 return "DW_FORM_string";
5773 return "DW_FORM_block";
5774 case DW_FORM_block1
:
5775 return "DW_FORM_block1";
5777 return "DW_FORM_data1";
5779 return "DW_FORM_flag";
5781 return "DW_FORM_sdata";
5783 return "DW_FORM_strp";
5785 return "DW_FORM_udata";
5786 case DW_FORM_ref_addr
:
5787 return "DW_FORM_ref_addr";
5789 return "DW_FORM_ref1";
5791 return "DW_FORM_ref2";
5793 return "DW_FORM_ref4";
5795 return "DW_FORM_ref8";
5796 case DW_FORM_ref_udata
:
5797 return "DW_FORM_ref_udata";
5798 case DW_FORM_indirect
:
5799 return "DW_FORM_indirect";
5801 return "DW_FORM_<unknown>";
5805 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
5806 instance of an inlined instance of a decl which is local to an inline
5807 function, so we have to trace all of the way back through the origin chain
5808 to find out what sort of node actually served as the original seed for the
5812 decl_ultimate_origin (const_tree decl
)
5814 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl
), TS_DECL_COMMON
))
5817 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
5818 nodes in the function to point to themselves; ignore that if
5819 we're trying to output the abstract instance of this function. */
5820 if (DECL_ABSTRACT (decl
) && DECL_ABSTRACT_ORIGIN (decl
) == decl
)
5823 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
5824 most distant ancestor, this should never happen. */
5825 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl
)));
5827 return DECL_ABSTRACT_ORIGIN (decl
);
5830 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
5831 of a virtual function may refer to a base class, so we check the 'this'
5835 decl_class_context (tree decl
)
5837 tree context
= NULL_TREE
;
5839 if (TREE_CODE (decl
) != FUNCTION_DECL
|| ! DECL_VINDEX (decl
))
5840 context
= DECL_CONTEXT (decl
);
5842 context
= TYPE_MAIN_VARIANT
5843 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl
)))));
5845 if (context
&& !TYPE_P (context
))
5846 context
= NULL_TREE
;
5851 /* Add an attribute/value pair to a DIE. */
5854 add_dwarf_attr (dw_die_ref die
, dw_attr_ref attr
)
5856 /* Maybe this should be an assert? */
5860 if (die
->die_attr
== NULL
)
5861 die
->die_attr
= VEC_alloc (dw_attr_node
, gc
, 1);
5862 VEC_safe_push (dw_attr_node
, gc
, die
->die_attr
, attr
);
5865 static inline enum dw_val_class
5866 AT_class (dw_attr_ref a
)
5868 return a
->dw_attr_val
.val_class
;
5871 /* Add a flag value attribute to a DIE. */
5874 add_AT_flag (dw_die_ref die
, enum dwarf_attribute attr_kind
, unsigned int flag
)
5878 attr
.dw_attr
= attr_kind
;
5879 attr
.dw_attr_val
.val_class
= dw_val_class_flag
;
5880 attr
.dw_attr_val
.v
.val_flag
= flag
;
5881 add_dwarf_attr (die
, &attr
);
5884 static inline unsigned
5885 AT_flag (dw_attr_ref a
)
5887 gcc_assert (a
&& AT_class (a
) == dw_val_class_flag
);
5888 return a
->dw_attr_val
.v
.val_flag
;
5891 /* Add a signed integer attribute value to a DIE. */
5894 add_AT_int (dw_die_ref die
, enum dwarf_attribute attr_kind
, HOST_WIDE_INT int_val
)
5898 attr
.dw_attr
= attr_kind
;
5899 attr
.dw_attr_val
.val_class
= dw_val_class_const
;
5900 attr
.dw_attr_val
.v
.val_int
= int_val
;
5901 add_dwarf_attr (die
, &attr
);
5904 static inline HOST_WIDE_INT
5905 AT_int (dw_attr_ref a
)
5907 gcc_assert (a
&& AT_class (a
) == dw_val_class_const
);
5908 return a
->dw_attr_val
.v
.val_int
;
5911 /* Add an unsigned integer attribute value to a DIE. */
5914 add_AT_unsigned (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5915 unsigned HOST_WIDE_INT unsigned_val
)
5919 attr
.dw_attr
= attr_kind
;
5920 attr
.dw_attr_val
.val_class
= dw_val_class_unsigned_const
;
5921 attr
.dw_attr_val
.v
.val_unsigned
= unsigned_val
;
5922 add_dwarf_attr (die
, &attr
);
5925 static inline unsigned HOST_WIDE_INT
5926 AT_unsigned (dw_attr_ref a
)
5928 gcc_assert (a
&& AT_class (a
) == dw_val_class_unsigned_const
);
5929 return a
->dw_attr_val
.v
.val_unsigned
;
5932 /* Add an unsigned double integer attribute value to a DIE. */
5935 add_AT_long_long (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5936 long unsigned int val_hi
, long unsigned int val_low
)
5940 attr
.dw_attr
= attr_kind
;
5941 attr
.dw_attr_val
.val_class
= dw_val_class_long_long
;
5942 attr
.dw_attr_val
.v
.val_long_long
.hi
= val_hi
;
5943 attr
.dw_attr_val
.v
.val_long_long
.low
= val_low
;
5944 add_dwarf_attr (die
, &attr
);
5947 /* Add a floating point attribute value to a DIE and return it. */
5950 add_AT_vec (dw_die_ref die
, enum dwarf_attribute attr_kind
,
5951 unsigned int length
, unsigned int elt_size
, unsigned char *array
)
5955 attr
.dw_attr
= attr_kind
;
5956 attr
.dw_attr_val
.val_class
= dw_val_class_vec
;
5957 attr
.dw_attr_val
.v
.val_vec
.length
= length
;
5958 attr
.dw_attr_val
.v
.val_vec
.elt_size
= elt_size
;
5959 attr
.dw_attr_val
.v
.val_vec
.array
= array
;
5960 add_dwarf_attr (die
, &attr
);
5963 /* Hash and equality functions for debug_str_hash. */
5966 debug_str_do_hash (const void *x
)
5968 return htab_hash_string (((const struct indirect_string_node
*)x
)->str
);
5972 debug_str_eq (const void *x1
, const void *x2
)
5974 return strcmp ((((const struct indirect_string_node
*)x1
)->str
),
5975 (const char *)x2
) == 0;
5978 /* Add a string attribute value to a DIE. */
5981 add_AT_string (dw_die_ref die
, enum dwarf_attribute attr_kind
, const char *str
)
5984 struct indirect_string_node
*node
;
5987 if (! debug_str_hash
)
5988 debug_str_hash
= htab_create_ggc (10, debug_str_do_hash
,
5989 debug_str_eq
, NULL
);
5991 slot
= htab_find_slot_with_hash (debug_str_hash
, str
,
5992 htab_hash_string (str
), INSERT
);
5995 node
= (struct indirect_string_node
*)
5996 ggc_alloc_cleared (sizeof (struct indirect_string_node
));
5997 node
->str
= ggc_strdup (str
);
6001 node
= (struct indirect_string_node
*) *slot
;
6005 attr
.dw_attr
= attr_kind
;
6006 attr
.dw_attr_val
.val_class
= dw_val_class_str
;
6007 attr
.dw_attr_val
.v
.val_str
= node
;
6008 add_dwarf_attr (die
, &attr
);
6011 static inline const char *
6012 AT_string (dw_attr_ref a
)
6014 gcc_assert (a
&& AT_class (a
) == dw_val_class_str
);
6015 return a
->dw_attr_val
.v
.val_str
->str
;
6018 /* Find out whether a string should be output inline in DIE
6019 or out-of-line in .debug_str section. */
6022 AT_string_form (dw_attr_ref a
)
6024 struct indirect_string_node
*node
;
6028 gcc_assert (a
&& AT_class (a
) == dw_val_class_str
);
6030 node
= a
->dw_attr_val
.v
.val_str
;
6034 len
= strlen (node
->str
) + 1;
6036 /* If the string is shorter or equal to the size of the reference, it is
6037 always better to put it inline. */
6038 if (len
<= DWARF_OFFSET_SIZE
|| node
->refcount
== 0)
6039 return node
->form
= DW_FORM_string
;
6041 /* If we cannot expect the linker to merge strings in .debug_str
6042 section, only put it into .debug_str if it is worth even in this
6044 if ((debug_str_section
->common
.flags
& SECTION_MERGE
) == 0
6045 && (len
- DWARF_OFFSET_SIZE
) * node
->refcount
<= len
)
6046 return node
->form
= DW_FORM_string
;
6048 ASM_GENERATE_INTERNAL_LABEL (label
, "LASF", dw2_string_counter
);
6049 ++dw2_string_counter
;
6050 node
->label
= xstrdup (label
);
6052 return node
->form
= DW_FORM_strp
;
6055 /* Add a DIE reference attribute value to a DIE. */
6058 add_AT_die_ref (dw_die_ref die
, enum dwarf_attribute attr_kind
, dw_die_ref targ_die
)
6062 attr
.dw_attr
= attr_kind
;
6063 attr
.dw_attr_val
.val_class
= dw_val_class_die_ref
;
6064 attr
.dw_attr_val
.v
.val_die_ref
.die
= targ_die
;
6065 attr
.dw_attr_val
.v
.val_die_ref
.external
= 0;
6066 add_dwarf_attr (die
, &attr
);
6069 /* Add an AT_specification attribute to a DIE, and also make the back
6070 pointer from the specification to the definition. */
6073 add_AT_specification (dw_die_ref die
, dw_die_ref targ_die
)
6075 add_AT_die_ref (die
, DW_AT_specification
, targ_die
);
6076 gcc_assert (!targ_die
->die_definition
);
6077 targ_die
->die_definition
= die
;
6080 static inline dw_die_ref
6081 AT_ref (dw_attr_ref a
)
6083 gcc_assert (a
&& AT_class (a
) == dw_val_class_die_ref
);
6084 return a
->dw_attr_val
.v
.val_die_ref
.die
;
6088 AT_ref_external (dw_attr_ref a
)
6090 if (a
&& AT_class (a
) == dw_val_class_die_ref
)
6091 return a
->dw_attr_val
.v
.val_die_ref
.external
;
6097 set_AT_ref_external (dw_attr_ref a
, int i
)
6099 gcc_assert (a
&& AT_class (a
) == dw_val_class_die_ref
);
6100 a
->dw_attr_val
.v
.val_die_ref
.external
= i
;
6103 /* Add an FDE reference attribute value to a DIE. */
6106 add_AT_fde_ref (dw_die_ref die
, enum dwarf_attribute attr_kind
, unsigned int targ_fde
)
6110 attr
.dw_attr
= attr_kind
;
6111 attr
.dw_attr_val
.val_class
= dw_val_class_fde_ref
;
6112 attr
.dw_attr_val
.v
.val_fde_index
= targ_fde
;
6113 add_dwarf_attr (die
, &attr
);
6116 /* Add a location description attribute value to a DIE. */
6119 add_AT_loc (dw_die_ref die
, enum dwarf_attribute attr_kind
, dw_loc_descr_ref loc
)
6123 attr
.dw_attr
= attr_kind
;
6124 attr
.dw_attr_val
.val_class
= dw_val_class_loc
;
6125 attr
.dw_attr_val
.v
.val_loc
= loc
;
6126 add_dwarf_attr (die
, &attr
);
6129 static inline dw_loc_descr_ref
6130 AT_loc (dw_attr_ref a
)
6132 gcc_assert (a
&& AT_class (a
) == dw_val_class_loc
);
6133 return a
->dw_attr_val
.v
.val_loc
;
6137 add_AT_loc_list (dw_die_ref die
, enum dwarf_attribute attr_kind
, dw_loc_list_ref loc_list
)
6141 attr
.dw_attr
= attr_kind
;
6142 attr
.dw_attr_val
.val_class
= dw_val_class_loc_list
;
6143 attr
.dw_attr_val
.v
.val_loc_list
= loc_list
;
6144 add_dwarf_attr (die
, &attr
);
6145 have_location_lists
= true;
6148 static inline dw_loc_list_ref
6149 AT_loc_list (dw_attr_ref a
)
6151 gcc_assert (a
&& AT_class (a
) == dw_val_class_loc_list
);
6152 return a
->dw_attr_val
.v
.val_loc_list
;
6155 /* Add an address constant attribute value to a DIE. */
6158 add_AT_addr (dw_die_ref die
, enum dwarf_attribute attr_kind
, rtx addr
)
6162 attr
.dw_attr
= attr_kind
;
6163 attr
.dw_attr_val
.val_class
= dw_val_class_addr
;
6164 attr
.dw_attr_val
.v
.val_addr
= addr
;
6165 add_dwarf_attr (die
, &attr
);
6168 /* Get the RTX from to an address DIE attribute. */
6171 AT_addr (dw_attr_ref a
)
6173 gcc_assert (a
&& AT_class (a
) == dw_val_class_addr
);
6174 return a
->dw_attr_val
.v
.val_addr
;
6177 /* Add a file attribute value to a DIE. */
6180 add_AT_file (dw_die_ref die
, enum dwarf_attribute attr_kind
,
6181 struct dwarf_file_data
*fd
)
6185 attr
.dw_attr
= attr_kind
;
6186 attr
.dw_attr_val
.val_class
= dw_val_class_file
;
6187 attr
.dw_attr_val
.v
.val_file
= fd
;
6188 add_dwarf_attr (die
, &attr
);
6191 /* Get the dwarf_file_data from a file DIE attribute. */
6193 static inline struct dwarf_file_data
*
6194 AT_file (dw_attr_ref a
)
6196 gcc_assert (a
&& AT_class (a
) == dw_val_class_file
);
6197 return a
->dw_attr_val
.v
.val_file
;
6200 /* Add a label identifier attribute value to a DIE. */
6203 add_AT_lbl_id (dw_die_ref die
, enum dwarf_attribute attr_kind
, const char *lbl_id
)
6207 attr
.dw_attr
= attr_kind
;
6208 attr
.dw_attr_val
.val_class
= dw_val_class_lbl_id
;
6209 attr
.dw_attr_val
.v
.val_lbl_id
= xstrdup (lbl_id
);
6210 add_dwarf_attr (die
, &attr
);
6213 /* Add a section offset attribute value to a DIE, an offset into the
6214 debug_line section. */
6217 add_AT_lineptr (dw_die_ref die
, enum dwarf_attribute attr_kind
,
6222 attr
.dw_attr
= attr_kind
;
6223 attr
.dw_attr_val
.val_class
= dw_val_class_lineptr
;
6224 attr
.dw_attr_val
.v
.val_lbl_id
= xstrdup (label
);
6225 add_dwarf_attr (die
, &attr
);
6228 /* Add a section offset attribute value to a DIE, an offset into the
6229 debug_macinfo section. */
6232 add_AT_macptr (dw_die_ref die
, enum dwarf_attribute attr_kind
,
6237 attr
.dw_attr
= attr_kind
;
6238 attr
.dw_attr_val
.val_class
= dw_val_class_macptr
;
6239 attr
.dw_attr_val
.v
.val_lbl_id
= xstrdup (label
);
6240 add_dwarf_attr (die
, &attr
);
6243 /* Add an offset attribute value to a DIE. */
6246 add_AT_offset (dw_die_ref die
, enum dwarf_attribute attr_kind
,
6247 unsigned HOST_WIDE_INT offset
)
6251 attr
.dw_attr
= attr_kind
;
6252 attr
.dw_attr_val
.val_class
= dw_val_class_offset
;
6253 attr
.dw_attr_val
.v
.val_offset
= offset
;
6254 add_dwarf_attr (die
, &attr
);
6257 /* Add an range_list attribute value to a DIE. */
6260 add_AT_range_list (dw_die_ref die
, enum dwarf_attribute attr_kind
,
6261 long unsigned int offset
)
6265 attr
.dw_attr
= attr_kind
;
6266 attr
.dw_attr_val
.val_class
= dw_val_class_range_list
;
6267 attr
.dw_attr_val
.v
.val_offset
= offset
;
6268 add_dwarf_attr (die
, &attr
);
6271 static inline const char *
6272 AT_lbl (dw_attr_ref a
)
6274 gcc_assert (a
&& (AT_class (a
) == dw_val_class_lbl_id
6275 || AT_class (a
) == dw_val_class_lineptr
6276 || AT_class (a
) == dw_val_class_macptr
));
6277 return a
->dw_attr_val
.v
.val_lbl_id
;
6280 /* Get the attribute of type attr_kind. */
6283 get_AT (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6287 dw_die_ref spec
= NULL
;
6292 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
6293 if (a
->dw_attr
== attr_kind
)
6295 else if (a
->dw_attr
== DW_AT_specification
6296 || a
->dw_attr
== DW_AT_abstract_origin
)
6300 return get_AT (spec
, attr_kind
);
6305 /* Return the "low pc" attribute value, typically associated with a subprogram
6306 DIE. Return null if the "low pc" attribute is either not present, or if it
6307 cannot be represented as an assembler label identifier. */
6309 static inline const char *
6310 get_AT_low_pc (dw_die_ref die
)
6312 dw_attr_ref a
= get_AT (die
, DW_AT_low_pc
);
6314 return a
? AT_lbl (a
) : NULL
;
6317 /* Return the "high pc" attribute value, typically associated with a subprogram
6318 DIE. Return null if the "high pc" attribute is either not present, or if it
6319 cannot be represented as an assembler label identifier. */
6321 static inline const char *
6322 get_AT_hi_pc (dw_die_ref die
)
6324 dw_attr_ref a
= get_AT (die
, DW_AT_high_pc
);
6326 return a
? AT_lbl (a
) : NULL
;
6329 /* Return the value of the string attribute designated by ATTR_KIND, or
6330 NULL if it is not present. */
6332 static inline const char *
6333 get_AT_string (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6335 dw_attr_ref a
= get_AT (die
, attr_kind
);
6337 return a
? AT_string (a
) : NULL
;
6340 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
6341 if it is not present. */
6344 get_AT_flag (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6346 dw_attr_ref a
= get_AT (die
, attr_kind
);
6348 return a
? AT_flag (a
) : 0;
6351 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
6352 if it is not present. */
6354 static inline unsigned
6355 get_AT_unsigned (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6357 dw_attr_ref a
= get_AT (die
, attr_kind
);
6359 return a
? AT_unsigned (a
) : 0;
6362 static inline dw_die_ref
6363 get_AT_ref (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6365 dw_attr_ref a
= get_AT (die
, attr_kind
);
6367 return a
? AT_ref (a
) : NULL
;
6370 static inline struct dwarf_file_data
*
6371 get_AT_file (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6373 dw_attr_ref a
= get_AT (die
, attr_kind
);
6375 return a
? AT_file (a
) : NULL
;
6378 /* Return TRUE if the language is C or C++. */
6383 unsigned int lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
6385 return (lang
== DW_LANG_C
|| lang
== DW_LANG_C89
|| lang
== DW_LANG_ObjC
6386 || lang
== DW_LANG_C99
6387 || lang
== DW_LANG_C_plus_plus
|| lang
== DW_LANG_ObjC_plus_plus
);
6390 /* Return TRUE if the language is C++. */
6395 unsigned int lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
6397 return lang
== DW_LANG_C_plus_plus
|| lang
== DW_LANG_ObjC_plus_plus
;
6400 /* Return TRUE if the language is Fortran. */
6405 unsigned int lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
6407 return (lang
== DW_LANG_Fortran77
6408 || lang
== DW_LANG_Fortran90
6409 || lang
== DW_LANG_Fortran95
);
6412 /* Return TRUE if the language is Java. */
6417 unsigned int lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
6419 return lang
== DW_LANG_Java
;
6422 /* Return TRUE if the language is Ada. */
6427 unsigned int lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
6429 return lang
== DW_LANG_Ada95
|| lang
== DW_LANG_Ada83
;
6432 /* Remove the specified attribute if present. */
6435 remove_AT (dw_die_ref die
, enum dwarf_attribute attr_kind
)
6443 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
6444 if (a
->dw_attr
== attr_kind
)
6446 if (AT_class (a
) == dw_val_class_str
)
6447 if (a
->dw_attr_val
.v
.val_str
->refcount
)
6448 a
->dw_attr_val
.v
.val_str
->refcount
--;
6450 /* VEC_ordered_remove should help reduce the number of abbrevs
6452 VEC_ordered_remove (dw_attr_node
, die
->die_attr
, ix
);
6457 /* Remove CHILD from its parent. PREV must have the property that
6458 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
6461 remove_child_with_prev (dw_die_ref child
, dw_die_ref prev
)
6463 gcc_assert (child
->die_parent
== prev
->die_parent
);
6464 gcc_assert (prev
->die_sib
== child
);
6467 gcc_assert (child
->die_parent
->die_child
== child
);
6471 prev
->die_sib
= child
->die_sib
;
6472 if (child
->die_parent
->die_child
== child
)
6473 child
->die_parent
->die_child
= prev
;
6476 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
6480 remove_child_TAG (dw_die_ref die
, enum dwarf_tag tag
)
6486 dw_die_ref prev
= c
;
6488 while (c
->die_tag
== tag
)
6490 remove_child_with_prev (c
, prev
);
6491 /* Might have removed every child. */
6492 if (c
== c
->die_sib
)
6496 } while (c
!= die
->die_child
);
6499 /* Add a CHILD_DIE as the last child of DIE. */
6502 add_child_die (dw_die_ref die
, dw_die_ref child_die
)
6504 /* FIXME this should probably be an assert. */
6505 if (! die
|| ! child_die
)
6507 gcc_assert (die
!= child_die
);
6509 child_die
->die_parent
= die
;
6512 child_die
->die_sib
= die
->die_child
->die_sib
;
6513 die
->die_child
->die_sib
= child_die
;
6516 child_die
->die_sib
= child_die
;
6517 die
->die_child
= child_die
;
6520 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
6521 is the specification, to the end of PARENT's list of children.
6522 This is done by removing and re-adding it. */
6525 splice_child_die (dw_die_ref parent
, dw_die_ref child
)
6529 /* We want the declaration DIE from inside the class, not the
6530 specification DIE at toplevel. */
6531 if (child
->die_parent
!= parent
)
6533 dw_die_ref tmp
= get_AT_ref (child
, DW_AT_specification
);
6539 gcc_assert (child
->die_parent
== parent
6540 || (child
->die_parent
6541 == get_AT_ref (parent
, DW_AT_specification
)));
6543 for (p
= child
->die_parent
->die_child
; ; p
= p
->die_sib
)
6544 if (p
->die_sib
== child
)
6546 remove_child_with_prev (child
, p
);
6550 add_child_die (parent
, child
);
6553 /* Return a pointer to a newly created DIE node. */
6555 static inline dw_die_ref
6556 new_die (enum dwarf_tag tag_value
, dw_die_ref parent_die
, tree t
)
6558 dw_die_ref die
= GGC_CNEW (die_node
);
6560 die
->die_tag
= tag_value
;
6562 if (parent_die
!= NULL
)
6563 add_child_die (parent_die
, die
);
6566 limbo_die_node
*limbo_node
;
6568 limbo_node
= GGC_CNEW (limbo_die_node
);
6569 limbo_node
->die
= die
;
6570 limbo_node
->created_for
= t
;
6571 limbo_node
->next
= limbo_die_list
;
6572 limbo_die_list
= limbo_node
;
6578 /* Return the DIE associated with the given type specifier. */
6580 static inline dw_die_ref
6581 lookup_type_die (tree type
)
6583 return TYPE_SYMTAB_DIE (type
);
6586 /* Equate a DIE to a given type specifier. */
6589 equate_type_number_to_die (tree type
, dw_die_ref type_die
)
6591 TYPE_SYMTAB_DIE (type
) = type_die
;
6594 /* Returns a hash value for X (which really is a die_struct). */
6597 decl_die_table_hash (const void *x
)
6599 return (hashval_t
) ((const_dw_die_ref
) x
)->decl_id
;
6602 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
6605 decl_die_table_eq (const void *x
, const void *y
)
6607 return (((const_dw_die_ref
) x
)->decl_id
== DECL_UID ((const_tree
) y
));
6610 /* Return the DIE associated with a given declaration. */
6612 static inline dw_die_ref
6613 lookup_decl_die (tree decl
)
6615 return (dw_die_ref
) htab_find_with_hash (decl_die_table
, decl
, DECL_UID (decl
));
6618 /* Returns a hash value for X (which really is a var_loc_list). */
6621 decl_loc_table_hash (const void *x
)
6623 return (hashval_t
) ((const var_loc_list
*) x
)->decl_id
;
6626 /* Return nonzero if decl_id of var_loc_list X is the same as
6630 decl_loc_table_eq (const void *x
, const void *y
)
6632 return (((const var_loc_list
*) x
)->decl_id
== DECL_UID ((const_tree
) y
));
6635 /* Return the var_loc list associated with a given declaration. */
6637 static inline var_loc_list
*
6638 lookup_decl_loc (const_tree decl
)
6640 return (var_loc_list
*)
6641 htab_find_with_hash (decl_loc_table
, decl
, DECL_UID (decl
));
6644 /* Equate a DIE to a particular declaration. */
6647 equate_decl_number_to_die (tree decl
, dw_die_ref decl_die
)
6649 unsigned int decl_id
= DECL_UID (decl
);
6652 slot
= htab_find_slot_with_hash (decl_die_table
, decl
, decl_id
, INSERT
);
6654 decl_die
->decl_id
= decl_id
;
6657 /* Add a variable location node to the linked list for DECL. */
6660 add_var_loc_to_decl (tree decl
, struct var_loc_node
*loc
)
6662 unsigned int decl_id
= DECL_UID (decl
);
6666 slot
= htab_find_slot_with_hash (decl_loc_table
, decl
, decl_id
, INSERT
);
6669 temp
= GGC_CNEW (var_loc_list
);
6670 temp
->decl_id
= decl_id
;
6674 temp
= (var_loc_list
*) *slot
;
6678 /* If the current location is the same as the end of the list,
6679 and either both or neither of the locations is uninitialized,
6680 we have nothing to do. */
6681 if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp
->last
->var_loc_note
),
6682 NOTE_VAR_LOCATION_LOC (loc
->var_loc_note
)))
6683 || ((NOTE_VAR_LOCATION_STATUS (temp
->last
->var_loc_note
)
6684 != NOTE_VAR_LOCATION_STATUS (loc
->var_loc_note
))
6685 && ((NOTE_VAR_LOCATION_STATUS (temp
->last
->var_loc_note
)
6686 == VAR_INIT_STATUS_UNINITIALIZED
)
6687 || (NOTE_VAR_LOCATION_STATUS (loc
->var_loc_note
)
6688 == VAR_INIT_STATUS_UNINITIALIZED
))))
6690 /* Add LOC to the end of list and update LAST. */
6691 temp
->last
->next
= loc
;
6695 /* Do not add empty location to the beginning of the list. */
6696 else if (NOTE_VAR_LOCATION_LOC (loc
->var_loc_note
) != NULL_RTX
)
6703 /* Keep track of the number of spaces used to indent the
6704 output of the debugging routines that print the structure of
6705 the DIE internal representation. */
6706 static int print_indent
;
6708 /* Indent the line the number of spaces given by print_indent. */
6711 print_spaces (FILE *outfile
)
6713 fprintf (outfile
, "%*s", print_indent
, "");
6716 /* Print the information associated with a given DIE, and its children.
6717 This routine is a debugging aid only. */
6720 print_die (dw_die_ref die
, FILE *outfile
)
6726 print_spaces (outfile
);
6727 fprintf (outfile
, "DIE %4ld: %s\n",
6728 die
->die_offset
, dwarf_tag_name (die
->die_tag
));
6729 print_spaces (outfile
);
6730 fprintf (outfile
, " abbrev id: %lu", die
->die_abbrev
);
6731 fprintf (outfile
, " offset: %ld\n", die
->die_offset
);
6733 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
6735 print_spaces (outfile
);
6736 fprintf (outfile
, " %s: ", dwarf_attr_name (a
->dw_attr
));
6738 switch (AT_class (a
))
6740 case dw_val_class_addr
:
6741 fprintf (outfile
, "address");
6743 case dw_val_class_offset
:
6744 fprintf (outfile
, "offset");
6746 case dw_val_class_loc
:
6747 fprintf (outfile
, "location descriptor");
6749 case dw_val_class_loc_list
:
6750 fprintf (outfile
, "location list -> label:%s",
6751 AT_loc_list (a
)->ll_symbol
);
6753 case dw_val_class_range_list
:
6754 fprintf (outfile
, "range list");
6756 case dw_val_class_const
:
6757 fprintf (outfile
, HOST_WIDE_INT_PRINT_DEC
, AT_int (a
));
6759 case dw_val_class_unsigned_const
:
6760 fprintf (outfile
, HOST_WIDE_INT_PRINT_UNSIGNED
, AT_unsigned (a
));
6762 case dw_val_class_long_long
:
6763 fprintf (outfile
, "constant (%lu,%lu)",
6764 a
->dw_attr_val
.v
.val_long_long
.hi
,
6765 a
->dw_attr_val
.v
.val_long_long
.low
);
6767 case dw_val_class_vec
:
6768 fprintf (outfile
, "floating-point or vector constant");
6770 case dw_val_class_flag
:
6771 fprintf (outfile
, "%u", AT_flag (a
));
6773 case dw_val_class_die_ref
:
6774 if (AT_ref (a
) != NULL
)
6776 if (AT_ref (a
)->die_symbol
)
6777 fprintf (outfile
, "die -> label: %s", AT_ref (a
)->die_symbol
);
6779 fprintf (outfile
, "die -> %ld", AT_ref (a
)->die_offset
);
6782 fprintf (outfile
, "die -> <null>");
6784 case dw_val_class_lbl_id
:
6785 case dw_val_class_lineptr
:
6786 case dw_val_class_macptr
:
6787 fprintf (outfile
, "label: %s", AT_lbl (a
));
6789 case dw_val_class_str
:
6790 if (AT_string (a
) != NULL
)
6791 fprintf (outfile
, "\"%s\"", AT_string (a
));
6793 fprintf (outfile
, "<null>");
6795 case dw_val_class_file
:
6796 fprintf (outfile
, "\"%s\" (%d)", AT_file (a
)->filename
,
6797 AT_file (a
)->emitted_number
);
6803 fprintf (outfile
, "\n");
6806 if (die
->die_child
!= NULL
)
6809 FOR_EACH_CHILD (die
, c
, print_die (c
, outfile
));
6812 if (print_indent
== 0)
6813 fprintf (outfile
, "\n");
6816 /* Print the contents of the source code line number correspondence table.
6817 This routine is a debugging aid only. */
6820 print_dwarf_line_table (FILE *outfile
)
6823 dw_line_info_ref line_info
;
6825 fprintf (outfile
, "\n\nDWARF source line information\n");
6826 for (i
= 1; i
< line_info_table_in_use
; i
++)
6828 line_info
= &line_info_table
[i
];
6829 fprintf (outfile
, "%5d: %4ld %6ld\n", i
,
6830 line_info
->dw_file_num
,
6831 line_info
->dw_line_num
);
6834 fprintf (outfile
, "\n\n");
6837 /* Print the information collected for a given DIE. */
6840 debug_dwarf_die (dw_die_ref die
)
6842 print_die (die
, stderr
);
6845 /* Print all DWARF information collected for the compilation unit.
6846 This routine is a debugging aid only. */
6852 print_die (comp_unit_die
, stderr
);
6853 if (! DWARF2_ASM_LINE_DEBUG_INFO
)
6854 print_dwarf_line_table (stderr
);
6857 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
6858 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
6859 DIE that marks the start of the DIEs for this include file. */
6862 push_new_compile_unit (dw_die_ref old_unit
, dw_die_ref bincl_die
)
6864 const char *filename
= get_AT_string (bincl_die
, DW_AT_name
);
6865 dw_die_ref new_unit
= gen_compile_unit_die (filename
);
6867 new_unit
->die_sib
= old_unit
;
6871 /* Close an include-file CU and reopen the enclosing one. */
6874 pop_compile_unit (dw_die_ref old_unit
)
6876 dw_die_ref new_unit
= old_unit
->die_sib
;
6878 old_unit
->die_sib
= NULL
;
6882 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6883 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
6885 /* Calculate the checksum of a location expression. */
6888 loc_checksum (dw_loc_descr_ref loc
, struct md5_ctx
*ctx
)
6890 CHECKSUM (loc
->dw_loc_opc
);
6891 CHECKSUM (loc
->dw_loc_oprnd1
);
6892 CHECKSUM (loc
->dw_loc_oprnd2
);
6895 /* Calculate the checksum of an attribute. */
6898 attr_checksum (dw_attr_ref at
, struct md5_ctx
*ctx
, int *mark
)
6900 dw_loc_descr_ref loc
;
6903 CHECKSUM (at
->dw_attr
);
6905 /* We don't care that this was compiled with a different compiler
6906 snapshot; if the output is the same, that's what matters. */
6907 if (at
->dw_attr
== DW_AT_producer
)
6910 switch (AT_class (at
))
6912 case dw_val_class_const
:
6913 CHECKSUM (at
->dw_attr_val
.v
.val_int
);
6915 case dw_val_class_unsigned_const
:
6916 CHECKSUM (at
->dw_attr_val
.v
.val_unsigned
);
6918 case dw_val_class_long_long
:
6919 CHECKSUM (at
->dw_attr_val
.v
.val_long_long
);
6921 case dw_val_class_vec
:
6922 CHECKSUM (at
->dw_attr_val
.v
.val_vec
);
6924 case dw_val_class_flag
:
6925 CHECKSUM (at
->dw_attr_val
.v
.val_flag
);
6927 case dw_val_class_str
:
6928 CHECKSUM_STRING (AT_string (at
));
6931 case dw_val_class_addr
:
6933 gcc_assert (GET_CODE (r
) == SYMBOL_REF
);
6934 CHECKSUM_STRING (XSTR (r
, 0));
6937 case dw_val_class_offset
:
6938 CHECKSUM (at
->dw_attr_val
.v
.val_offset
);
6941 case dw_val_class_loc
:
6942 for (loc
= AT_loc (at
); loc
; loc
= loc
->dw_loc_next
)
6943 loc_checksum (loc
, ctx
);
6946 case dw_val_class_die_ref
:
6947 die_checksum (AT_ref (at
), ctx
, mark
);
6950 case dw_val_class_fde_ref
:
6951 case dw_val_class_lbl_id
:
6952 case dw_val_class_lineptr
:
6953 case dw_val_class_macptr
:
6956 case dw_val_class_file
:
6957 CHECKSUM_STRING (AT_file (at
)->filename
);
6965 /* Calculate the checksum of a DIE. */
6968 die_checksum (dw_die_ref die
, struct md5_ctx
*ctx
, int *mark
)
6974 /* To avoid infinite recursion. */
6977 CHECKSUM (die
->die_mark
);
6980 die
->die_mark
= ++(*mark
);
6982 CHECKSUM (die
->die_tag
);
6984 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
6985 attr_checksum (a
, ctx
, mark
);
6987 FOR_EACH_CHILD (die
, c
, die_checksum (c
, ctx
, mark
));
6991 #undef CHECKSUM_STRING
6993 /* Do the location expressions look same? */
6995 same_loc_p (dw_loc_descr_ref loc1
, dw_loc_descr_ref loc2
, int *mark
)
6997 return loc1
->dw_loc_opc
== loc2
->dw_loc_opc
6998 && same_dw_val_p (&loc1
->dw_loc_oprnd1
, &loc2
->dw_loc_oprnd1
, mark
)
6999 && same_dw_val_p (&loc1
->dw_loc_oprnd2
, &loc2
->dw_loc_oprnd2
, mark
);
7002 /* Do the values look the same? */
7004 same_dw_val_p (const dw_val_node
*v1
, const dw_val_node
*v2
, int *mark
)
7006 dw_loc_descr_ref loc1
, loc2
;
7009 if (v1
->val_class
!= v2
->val_class
)
7012 switch (v1
->val_class
)
7014 case dw_val_class_const
:
7015 return v1
->v
.val_int
== v2
->v
.val_int
;
7016 case dw_val_class_unsigned_const
:
7017 return v1
->v
.val_unsigned
== v2
->v
.val_unsigned
;
7018 case dw_val_class_long_long
:
7019 return v1
->v
.val_long_long
.hi
== v2
->v
.val_long_long
.hi
7020 && v1
->v
.val_long_long
.low
== v2
->v
.val_long_long
.low
;
7021 case dw_val_class_vec
:
7022 if (v1
->v
.val_vec
.length
!= v2
->v
.val_vec
.length
7023 || v1
->v
.val_vec
.elt_size
!= v2
->v
.val_vec
.elt_size
)
7025 if (memcmp (v1
->v
.val_vec
.array
, v2
->v
.val_vec
.array
,
7026 v1
->v
.val_vec
.length
* v1
->v
.val_vec
.elt_size
))
7029 case dw_val_class_flag
:
7030 return v1
->v
.val_flag
== v2
->v
.val_flag
;
7031 case dw_val_class_str
:
7032 return !strcmp(v1
->v
.val_str
->str
, v2
->v
.val_str
->str
);
7034 case dw_val_class_addr
:
7035 r1
= v1
->v
.val_addr
;
7036 r2
= v2
->v
.val_addr
;
7037 if (GET_CODE (r1
) != GET_CODE (r2
))
7039 gcc_assert (GET_CODE (r1
) == SYMBOL_REF
);
7040 return !strcmp (XSTR (r1
, 0), XSTR (r2
, 0));
7042 case dw_val_class_offset
:
7043 return v1
->v
.val_offset
== v2
->v
.val_offset
;
7045 case dw_val_class_loc
:
7046 for (loc1
= v1
->v
.val_loc
, loc2
= v2
->v
.val_loc
;
7048 loc1
= loc1
->dw_loc_next
, loc2
= loc2
->dw_loc_next
)
7049 if (!same_loc_p (loc1
, loc2
, mark
))
7051 return !loc1
&& !loc2
;
7053 case dw_val_class_die_ref
:
7054 return same_die_p (v1
->v
.val_die_ref
.die
, v2
->v
.val_die_ref
.die
, mark
);
7056 case dw_val_class_fde_ref
:
7057 case dw_val_class_lbl_id
:
7058 case dw_val_class_lineptr
:
7059 case dw_val_class_macptr
:
7062 case dw_val_class_file
:
7063 return v1
->v
.val_file
== v2
->v
.val_file
;
7070 /* Do the attributes look the same? */
7073 same_attr_p (dw_attr_ref at1
, dw_attr_ref at2
, int *mark
)
7075 if (at1
->dw_attr
!= at2
->dw_attr
)
7078 /* We don't care that this was compiled with a different compiler
7079 snapshot; if the output is the same, that's what matters. */
7080 if (at1
->dw_attr
== DW_AT_producer
)
7083 return same_dw_val_p (&at1
->dw_attr_val
, &at2
->dw_attr_val
, mark
);
7086 /* Do the dies look the same? */
7089 same_die_p (dw_die_ref die1
, dw_die_ref die2
, int *mark
)
7095 /* To avoid infinite recursion. */
7097 return die1
->die_mark
== die2
->die_mark
;
7098 die1
->die_mark
= die2
->die_mark
= ++(*mark
);
7100 if (die1
->die_tag
!= die2
->die_tag
)
7103 if (VEC_length (dw_attr_node
, die1
->die_attr
)
7104 != VEC_length (dw_attr_node
, die2
->die_attr
))
7107 for (ix
= 0; VEC_iterate (dw_attr_node
, die1
->die_attr
, ix
, a1
); ix
++)
7108 if (!same_attr_p (a1
, VEC_index (dw_attr_node
, die2
->die_attr
, ix
), mark
))
7111 c1
= die1
->die_child
;
7112 c2
= die2
->die_child
;
7121 if (!same_die_p (c1
, c2
, mark
))
7125 if (c1
== die1
->die_child
)
7127 if (c2
== die2
->die_child
)
7137 /* Do the dies look the same? Wrapper around same_die_p. */
7140 same_die_p_wrap (dw_die_ref die1
, dw_die_ref die2
)
7143 int ret
= same_die_p (die1
, die2
, &mark
);
7145 unmark_all_dies (die1
);
7146 unmark_all_dies (die2
);
7151 /* The prefix to attach to symbols on DIEs in the current comdat debug
7153 static char *comdat_symbol_id
;
7155 /* The index of the current symbol within the current comdat CU. */
7156 static unsigned int comdat_symbol_number
;
7158 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
7159 children, and set comdat_symbol_id accordingly. */
7162 compute_section_prefix (dw_die_ref unit_die
)
7164 const char *die_name
= get_AT_string (unit_die
, DW_AT_name
);
7165 const char *base
= die_name
? lbasename (die_name
) : "anonymous";
7166 char *name
= XALLOCAVEC (char, strlen (base
) + 64);
7169 unsigned char checksum
[16];
7172 /* Compute the checksum of the DIE, then append part of it as hex digits to
7173 the name filename of the unit. */
7175 md5_init_ctx (&ctx
);
7177 die_checksum (unit_die
, &ctx
, &mark
);
7178 unmark_all_dies (unit_die
);
7179 md5_finish_ctx (&ctx
, checksum
);
7181 sprintf (name
, "%s.", base
);
7182 clean_symbol_name (name
);
7184 p
= name
+ strlen (name
);
7185 for (i
= 0; i
< 4; i
++)
7187 sprintf (p
, "%.2x", checksum
[i
]);
7191 comdat_symbol_id
= unit_die
->die_symbol
= xstrdup (name
);
7192 comdat_symbol_number
= 0;
7195 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
7198 is_type_die (dw_die_ref die
)
7200 switch (die
->die_tag
)
7202 case DW_TAG_array_type
:
7203 case DW_TAG_class_type
:
7204 case DW_TAG_interface_type
:
7205 case DW_TAG_enumeration_type
:
7206 case DW_TAG_pointer_type
:
7207 case DW_TAG_reference_type
:
7208 case DW_TAG_string_type
:
7209 case DW_TAG_structure_type
:
7210 case DW_TAG_subroutine_type
:
7211 case DW_TAG_union_type
:
7212 case DW_TAG_ptr_to_member_type
:
7213 case DW_TAG_set_type
:
7214 case DW_TAG_subrange_type
:
7215 case DW_TAG_base_type
:
7216 case DW_TAG_const_type
:
7217 case DW_TAG_file_type
:
7218 case DW_TAG_packed_type
:
7219 case DW_TAG_volatile_type
:
7220 case DW_TAG_typedef
:
7227 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
7228 Basically, we want to choose the bits that are likely to be shared between
7229 compilations (types) and leave out the bits that are specific to individual
7230 compilations (functions). */
7233 is_comdat_die (dw_die_ref c
)
7235 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
7236 we do for stabs. The advantage is a greater likelihood of sharing between
7237 objects that don't include headers in the same order (and therefore would
7238 put the base types in a different comdat). jason 8/28/00 */
7240 if (c
->die_tag
== DW_TAG_base_type
)
7243 if (c
->die_tag
== DW_TAG_pointer_type
7244 || c
->die_tag
== DW_TAG_reference_type
7245 || c
->die_tag
== DW_TAG_const_type
7246 || c
->die_tag
== DW_TAG_volatile_type
)
7248 dw_die_ref t
= get_AT_ref (c
, DW_AT_type
);
7250 return t
? is_comdat_die (t
) : 0;
7253 return is_type_die (c
);
7256 /* Returns 1 iff C is the sort of DIE that might be referred to from another
7257 compilation unit. */
7260 is_symbol_die (dw_die_ref c
)
7262 return (is_type_die (c
)
7263 || (get_AT (c
, DW_AT_declaration
)
7264 && !get_AT (c
, DW_AT_specification
))
7265 || c
->die_tag
== DW_TAG_namespace
7266 || c
->die_tag
== DW_TAG_module
);
7270 gen_internal_sym (const char *prefix
)
7274 ASM_GENERATE_INTERNAL_LABEL (buf
, prefix
, label_num
++);
7275 return xstrdup (buf
);
7278 /* Assign symbols to all worthy DIEs under DIE. */
7281 assign_symbol_names (dw_die_ref die
)
7285 if (is_symbol_die (die
))
7287 if (comdat_symbol_id
)
7289 char *p
= XALLOCAVEC (char, strlen (comdat_symbol_id
) + 64);
7291 sprintf (p
, "%s.%s.%x", DIE_LABEL_PREFIX
,
7292 comdat_symbol_id
, comdat_symbol_number
++);
7293 die
->die_symbol
= xstrdup (p
);
7296 die
->die_symbol
= gen_internal_sym ("LDIE");
7299 FOR_EACH_CHILD (die
, c
, assign_symbol_names (c
));
7302 struct cu_hash_table_entry
7305 unsigned min_comdat_num
, max_comdat_num
;
7306 struct cu_hash_table_entry
*next
;
7309 /* Routines to manipulate hash table of CUs. */
7311 htab_cu_hash (const void *of
)
7313 const struct cu_hash_table_entry
*const entry
=
7314 (const struct cu_hash_table_entry
*) of
;
7316 return htab_hash_string (entry
->cu
->die_symbol
);
7320 htab_cu_eq (const void *of1
, const void *of2
)
7322 const struct cu_hash_table_entry
*const entry1
=
7323 (const struct cu_hash_table_entry
*) of1
;
7324 const struct die_struct
*const entry2
= (const struct die_struct
*) of2
;
7326 return !strcmp (entry1
->cu
->die_symbol
, entry2
->die_symbol
);
7330 htab_cu_del (void *what
)
7332 struct cu_hash_table_entry
*next
,
7333 *entry
= (struct cu_hash_table_entry
*) what
;
7343 /* Check whether we have already seen this CU and set up SYM_NUM
7346 check_duplicate_cu (dw_die_ref cu
, htab_t htable
, unsigned int *sym_num
)
7348 struct cu_hash_table_entry dummy
;
7349 struct cu_hash_table_entry
**slot
, *entry
, *last
= &dummy
;
7351 dummy
.max_comdat_num
= 0;
7353 slot
= (struct cu_hash_table_entry
**)
7354 htab_find_slot_with_hash (htable
, cu
, htab_hash_string (cu
->die_symbol
),
7358 for (; entry
; last
= entry
, entry
= entry
->next
)
7360 if (same_die_p_wrap (cu
, entry
->cu
))
7366 *sym_num
= entry
->min_comdat_num
;
7370 entry
= XCNEW (struct cu_hash_table_entry
);
7372 entry
->min_comdat_num
= *sym_num
= last
->max_comdat_num
;
7373 entry
->next
= *slot
;
7379 /* Record SYM_NUM to record of CU in HTABLE. */
7381 record_comdat_symbol_number (dw_die_ref cu
, htab_t htable
, unsigned int sym_num
)
7383 struct cu_hash_table_entry
**slot
, *entry
;
7385 slot
= (struct cu_hash_table_entry
**)
7386 htab_find_slot_with_hash (htable
, cu
, htab_hash_string (cu
->die_symbol
),
7390 entry
->max_comdat_num
= sym_num
;
7393 /* Traverse the DIE (which is always comp_unit_die), and set up
7394 additional compilation units for each of the include files we see
7395 bracketed by BINCL/EINCL. */
7398 break_out_includes (dw_die_ref die
)
7401 dw_die_ref unit
= NULL
;
7402 limbo_die_node
*node
, **pnode
;
7403 htab_t cu_hash_table
;
7407 dw_die_ref prev
= c
;
7409 while (c
->die_tag
== DW_TAG_GNU_BINCL
|| c
->die_tag
== DW_TAG_GNU_EINCL
7410 || (unit
&& is_comdat_die (c
)))
7412 dw_die_ref next
= c
->die_sib
;
7414 /* This DIE is for a secondary CU; remove it from the main one. */
7415 remove_child_with_prev (c
, prev
);
7417 if (c
->die_tag
== DW_TAG_GNU_BINCL
)
7418 unit
= push_new_compile_unit (unit
, c
);
7419 else if (c
->die_tag
== DW_TAG_GNU_EINCL
)
7420 unit
= pop_compile_unit (unit
);
7422 add_child_die (unit
, c
);
7424 if (c
== die
->die_child
)
7427 } while (c
!= die
->die_child
);
7430 /* We can only use this in debugging, since the frontend doesn't check
7431 to make sure that we leave every include file we enter. */
7435 assign_symbol_names (die
);
7436 cu_hash_table
= htab_create (10, htab_cu_hash
, htab_cu_eq
, htab_cu_del
);
7437 for (node
= limbo_die_list
, pnode
= &limbo_die_list
;
7443 compute_section_prefix (node
->die
);
7444 is_dupl
= check_duplicate_cu (node
->die
, cu_hash_table
,
7445 &comdat_symbol_number
);
7446 assign_symbol_names (node
->die
);
7448 *pnode
= node
->next
;
7451 pnode
= &node
->next
;
7452 record_comdat_symbol_number (node
->die
, cu_hash_table
,
7453 comdat_symbol_number
);
7456 htab_delete (cu_hash_table
);
7459 /* Traverse the DIE and add a sibling attribute if it may have the
7460 effect of speeding up access to siblings. To save some space,
7461 avoid generating sibling attributes for DIE's without children. */
7464 add_sibling_attributes (dw_die_ref die
)
7468 if (! die
->die_child
)
7471 if (die
->die_parent
&& die
!= die
->die_parent
->die_child
)
7472 add_AT_die_ref (die
, DW_AT_sibling
, die
->die_sib
);
7474 FOR_EACH_CHILD (die
, c
, add_sibling_attributes (c
));
7477 /* Output all location lists for the DIE and its children. */
7480 output_location_lists (dw_die_ref die
)
7486 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
7487 if (AT_class (a
) == dw_val_class_loc_list
)
7488 output_loc_list (AT_loc_list (a
));
7490 FOR_EACH_CHILD (die
, c
, output_location_lists (c
));
7493 /* The format of each DIE (and its attribute value pairs) is encoded in an
7494 abbreviation table. This routine builds the abbreviation table and assigns
7495 a unique abbreviation id for each abbreviation entry. The children of each
7496 die are visited recursively. */
7499 build_abbrev_table (dw_die_ref die
)
7501 unsigned long abbrev_id
;
7502 unsigned int n_alloc
;
7507 /* Scan the DIE references, and mark as external any that refer to
7508 DIEs from other CUs (i.e. those which are not marked). */
7509 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
7510 if (AT_class (a
) == dw_val_class_die_ref
7511 && AT_ref (a
)->die_mark
== 0)
7513 gcc_assert (AT_ref (a
)->die_symbol
);
7515 set_AT_ref_external (a
, 1);
7518 for (abbrev_id
= 1; abbrev_id
< abbrev_die_table_in_use
; ++abbrev_id
)
7520 dw_die_ref abbrev
= abbrev_die_table
[abbrev_id
];
7521 dw_attr_ref die_a
, abbrev_a
;
7525 if (abbrev
->die_tag
!= die
->die_tag
)
7527 if ((abbrev
->die_child
!= NULL
) != (die
->die_child
!= NULL
))
7530 if (VEC_length (dw_attr_node
, abbrev
->die_attr
)
7531 != VEC_length (dw_attr_node
, die
->die_attr
))
7534 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, die_a
); ix
++)
7536 abbrev_a
= VEC_index (dw_attr_node
, abbrev
->die_attr
, ix
);
7537 if ((abbrev_a
->dw_attr
!= die_a
->dw_attr
)
7538 || (value_format (abbrev_a
) != value_format (die_a
)))
7548 if (abbrev_id
>= abbrev_die_table_in_use
)
7550 if (abbrev_die_table_in_use
>= abbrev_die_table_allocated
)
7552 n_alloc
= abbrev_die_table_allocated
+ ABBREV_DIE_TABLE_INCREMENT
;
7553 abbrev_die_table
= GGC_RESIZEVEC (dw_die_ref
, abbrev_die_table
,
7556 memset (&abbrev_die_table
[abbrev_die_table_allocated
], 0,
7557 (n_alloc
- abbrev_die_table_allocated
) * sizeof (dw_die_ref
));
7558 abbrev_die_table_allocated
= n_alloc
;
7561 ++abbrev_die_table_in_use
;
7562 abbrev_die_table
[abbrev_id
] = die
;
7565 die
->die_abbrev
= abbrev_id
;
7566 FOR_EACH_CHILD (die
, c
, build_abbrev_table (c
));
7569 /* Return the power-of-two number of bytes necessary to represent VALUE. */
7572 constant_size (unsigned HOST_WIDE_INT value
)
7579 log
= floor_log2 (value
);
7582 log
= 1 << (floor_log2 (log
) + 1);
7587 /* Return the size of a DIE as it is represented in the
7588 .debug_info section. */
7590 static unsigned long
7591 size_of_die (dw_die_ref die
)
7593 unsigned long size
= 0;
7597 size
+= size_of_uleb128 (die
->die_abbrev
);
7598 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
7600 switch (AT_class (a
))
7602 case dw_val_class_addr
:
7603 size
+= DWARF2_ADDR_SIZE
;
7605 case dw_val_class_offset
:
7606 size
+= DWARF_OFFSET_SIZE
;
7608 case dw_val_class_loc
:
7610 unsigned long lsize
= size_of_locs (AT_loc (a
));
7613 size
+= constant_size (lsize
);
7617 case dw_val_class_loc_list
:
7618 size
+= DWARF_OFFSET_SIZE
;
7620 case dw_val_class_range_list
:
7621 size
+= DWARF_OFFSET_SIZE
;
7623 case dw_val_class_const
:
7624 size
+= size_of_sleb128 (AT_int (a
));
7626 case dw_val_class_unsigned_const
:
7627 size
+= constant_size (AT_unsigned (a
));
7629 case dw_val_class_long_long
:
7630 size
+= 1 + 2*HOST_BITS_PER_LONG
/HOST_BITS_PER_CHAR
; /* block */
7632 case dw_val_class_vec
:
7633 size
+= constant_size (a
->dw_attr_val
.v
.val_vec
.length
7634 * a
->dw_attr_val
.v
.val_vec
.elt_size
)
7635 + a
->dw_attr_val
.v
.val_vec
.length
7636 * a
->dw_attr_val
.v
.val_vec
.elt_size
; /* block */
7638 case dw_val_class_flag
:
7641 case dw_val_class_die_ref
:
7642 if (AT_ref_external (a
))
7643 size
+= DWARF2_ADDR_SIZE
;
7645 size
+= DWARF_OFFSET_SIZE
;
7647 case dw_val_class_fde_ref
:
7648 size
+= DWARF_OFFSET_SIZE
;
7650 case dw_val_class_lbl_id
:
7651 size
+= DWARF2_ADDR_SIZE
;
7653 case dw_val_class_lineptr
:
7654 case dw_val_class_macptr
:
7655 size
+= DWARF_OFFSET_SIZE
;
7657 case dw_val_class_str
:
7658 if (AT_string_form (a
) == DW_FORM_strp
)
7659 size
+= DWARF_OFFSET_SIZE
;
7661 size
+= strlen (a
->dw_attr_val
.v
.val_str
->str
) + 1;
7663 case dw_val_class_file
:
7664 size
+= constant_size (maybe_emit_file (a
->dw_attr_val
.v
.val_file
));
7674 /* Size the debugging information associated with a given DIE. Visits the
7675 DIE's children recursively. Updates the global variable next_die_offset, on
7676 each time through. Uses the current value of next_die_offset to update the
7677 die_offset field in each DIE. */
7680 calc_die_sizes (dw_die_ref die
)
7684 die
->die_offset
= next_die_offset
;
7685 next_die_offset
+= size_of_die (die
);
7687 FOR_EACH_CHILD (die
, c
, calc_die_sizes (c
));
7689 if (die
->die_child
!= NULL
)
7690 /* Count the null byte used to terminate sibling lists. */
7691 next_die_offset
+= 1;
7694 /* Set the marks for a die and its children. We do this so
7695 that we know whether or not a reference needs to use FORM_ref_addr; only
7696 DIEs in the same CU will be marked. We used to clear out the offset
7697 and use that as the flag, but ran into ordering problems. */
7700 mark_dies (dw_die_ref die
)
7704 gcc_assert (!die
->die_mark
);
7707 FOR_EACH_CHILD (die
, c
, mark_dies (c
));
7710 /* Clear the marks for a die and its children. */
7713 unmark_dies (dw_die_ref die
)
7717 gcc_assert (die
->die_mark
);
7720 FOR_EACH_CHILD (die
, c
, unmark_dies (c
));
7723 /* Clear the marks for a die, its children and referred dies. */
7726 unmark_all_dies (dw_die_ref die
)
7736 FOR_EACH_CHILD (die
, c
, unmark_all_dies (c
));
7738 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
7739 if (AT_class (a
) == dw_val_class_die_ref
)
7740 unmark_all_dies (AT_ref (a
));
7743 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7744 generated for the compilation unit. */
7746 static unsigned long
7747 size_of_pubnames (VEC (pubname_entry
, gc
) * names
)
7753 size
= DWARF_PUBNAMES_HEADER_SIZE
;
7754 for (i
= 0; VEC_iterate (pubname_entry
, names
, i
, p
); i
++)
7755 if (names
!= pubtype_table
7756 || p
->die
->die_offset
!= 0
7757 || !flag_eliminate_unused_debug_types
)
7758 size
+= strlen (p
->name
) + DWARF_OFFSET_SIZE
+ 1;
7760 size
+= DWARF_OFFSET_SIZE
;
7764 /* Return the size of the information in the .debug_aranges section. */
7766 static unsigned long
7767 size_of_aranges (void)
7771 size
= DWARF_ARANGES_HEADER_SIZE
;
7773 /* Count the address/length pair for this compilation unit. */
7774 if (text_section_used
)
7775 size
+= 2 * DWARF2_ADDR_SIZE
;
7776 if (cold_text_section_used
)
7777 size
+= 2 * DWARF2_ADDR_SIZE
;
7778 size
+= 2 * DWARF2_ADDR_SIZE
* arange_table_in_use
;
7780 /* Count the two zero words used to terminated the address range table. */
7781 size
+= 2 * DWARF2_ADDR_SIZE
;
7785 /* Select the encoding of an attribute value. */
7787 static enum dwarf_form
7788 value_format (dw_attr_ref a
)
7790 switch (a
->dw_attr_val
.val_class
)
7792 case dw_val_class_addr
:
7793 return DW_FORM_addr
;
7794 case dw_val_class_range_list
:
7795 case dw_val_class_offset
:
7796 case dw_val_class_loc_list
:
7797 switch (DWARF_OFFSET_SIZE
)
7800 return DW_FORM_data4
;
7802 return DW_FORM_data8
;
7806 case dw_val_class_loc
:
7807 switch (constant_size (size_of_locs (AT_loc (a
))))
7810 return DW_FORM_block1
;
7812 return DW_FORM_block2
;
7816 case dw_val_class_const
:
7817 return DW_FORM_sdata
;
7818 case dw_val_class_unsigned_const
:
7819 switch (constant_size (AT_unsigned (a
)))
7822 return DW_FORM_data1
;
7824 return DW_FORM_data2
;
7826 return DW_FORM_data4
;
7828 return DW_FORM_data8
;
7832 case dw_val_class_long_long
:
7833 return DW_FORM_block1
;
7834 case dw_val_class_vec
:
7835 switch (constant_size (a
->dw_attr_val
.v
.val_vec
.length
7836 * a
->dw_attr_val
.v
.val_vec
.elt_size
))
7839 return DW_FORM_block1
;
7841 return DW_FORM_block2
;
7843 return DW_FORM_block4
;
7847 case dw_val_class_flag
:
7848 return DW_FORM_flag
;
7849 case dw_val_class_die_ref
:
7850 if (AT_ref_external (a
))
7851 return DW_FORM_ref_addr
;
7854 case dw_val_class_fde_ref
:
7855 return DW_FORM_data
;
7856 case dw_val_class_lbl_id
:
7857 return DW_FORM_addr
;
7858 case dw_val_class_lineptr
:
7859 case dw_val_class_macptr
:
7860 return DW_FORM_data
;
7861 case dw_val_class_str
:
7862 return AT_string_form (a
);
7863 case dw_val_class_file
:
7864 switch (constant_size (maybe_emit_file (a
->dw_attr_val
.v
.val_file
)))
7867 return DW_FORM_data1
;
7869 return DW_FORM_data2
;
7871 return DW_FORM_data4
;
7881 /* Output the encoding of an attribute value. */
7884 output_value_format (dw_attr_ref a
)
7886 enum dwarf_form form
= value_format (a
);
7888 dw2_asm_output_data_uleb128 (form
, "(%s)", dwarf_form_name (form
));
7891 /* Output the .debug_abbrev section which defines the DIE abbreviation
7895 output_abbrev_section (void)
7897 unsigned long abbrev_id
;
7899 for (abbrev_id
= 1; abbrev_id
< abbrev_die_table_in_use
; ++abbrev_id
)
7901 dw_die_ref abbrev
= abbrev_die_table
[abbrev_id
];
7905 dw2_asm_output_data_uleb128 (abbrev_id
, "(abbrev code)");
7906 dw2_asm_output_data_uleb128 (abbrev
->die_tag
, "(TAG: %s)",
7907 dwarf_tag_name (abbrev
->die_tag
));
7909 if (abbrev
->die_child
!= NULL
)
7910 dw2_asm_output_data (1, DW_children_yes
, "DW_children_yes");
7912 dw2_asm_output_data (1, DW_children_no
, "DW_children_no");
7914 for (ix
= 0; VEC_iterate (dw_attr_node
, abbrev
->die_attr
, ix
, a_attr
);
7917 dw2_asm_output_data_uleb128 (a_attr
->dw_attr
, "(%s)",
7918 dwarf_attr_name (a_attr
->dw_attr
));
7919 output_value_format (a_attr
);
7922 dw2_asm_output_data (1, 0, NULL
);
7923 dw2_asm_output_data (1, 0, NULL
);
7926 /* Terminate the table. */
7927 dw2_asm_output_data (1, 0, NULL
);
7930 /* Output a symbol we can use to refer to this DIE from another CU. */
7933 output_die_symbol (dw_die_ref die
)
7935 char *sym
= die
->die_symbol
;
7940 if (strncmp (sym
, DIE_LABEL_PREFIX
, sizeof (DIE_LABEL_PREFIX
) - 1) == 0)
7941 /* We make these global, not weak; if the target doesn't support
7942 .linkonce, it doesn't support combining the sections, so debugging
7944 targetm
.asm_out
.globalize_label (asm_out_file
, sym
);
7946 ASM_OUTPUT_LABEL (asm_out_file
, sym
);
7949 /* Return a new location list, given the begin and end range, and the
7950 expression. gensym tells us whether to generate a new internal symbol for
7951 this location list node, which is done for the head of the list only. */
7953 static inline dw_loc_list_ref
7954 new_loc_list (dw_loc_descr_ref expr
, const char *begin
, const char *end
,
7955 const char *section
, unsigned int gensym
)
7957 dw_loc_list_ref retlist
= GGC_CNEW (dw_loc_list_node
);
7959 retlist
->begin
= begin
;
7961 retlist
->expr
= expr
;
7962 retlist
->section
= section
;
7964 retlist
->ll_symbol
= gen_internal_sym ("LLST");
7969 /* Add a location description expression to a location list. */
7972 add_loc_descr_to_loc_list (dw_loc_list_ref
*list_head
, dw_loc_descr_ref descr
,
7973 const char *begin
, const char *end
,
7974 const char *section
)
7978 /* Find the end of the chain. */
7979 for (d
= list_head
; (*d
) != NULL
; d
= &(*d
)->dw_loc_next
)
7982 /* Add a new location list node to the list. */
7983 *d
= new_loc_list (descr
, begin
, end
, section
, 0);
7986 /* Output the location list given to us. */
7989 output_loc_list (dw_loc_list_ref list_head
)
7991 dw_loc_list_ref curr
= list_head
;
7993 ASM_OUTPUT_LABEL (asm_out_file
, list_head
->ll_symbol
);
7995 /* Walk the location list, and output each range + expression. */
7996 for (curr
= list_head
; curr
!= NULL
; curr
= curr
->dw_loc_next
)
7999 /* Don't output an entry that starts and ends at the same address. */
8000 if (strcmp (curr
->begin
, curr
->end
) == 0)
8002 if (!have_multiple_function_sections
)
8004 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, curr
->begin
, curr
->section
,
8005 "Location list begin address (%s)",
8006 list_head
->ll_symbol
);
8007 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, curr
->end
, curr
->section
,
8008 "Location list end address (%s)",
8009 list_head
->ll_symbol
);
8013 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->begin
,
8014 "Location list begin address (%s)",
8015 list_head
->ll_symbol
);
8016 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, curr
->end
,
8017 "Location list end address (%s)",
8018 list_head
->ll_symbol
);
8020 size
= size_of_locs (curr
->expr
);
8022 /* Output the block length for this list of location operations. */
8023 gcc_assert (size
<= 0xffff);
8024 dw2_asm_output_data (2, size
, "%s", "Location expression size");
8026 output_loc_sequence (curr
->expr
);
8029 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0,
8030 "Location list terminator begin (%s)",
8031 list_head
->ll_symbol
);
8032 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0,
8033 "Location list terminator end (%s)",
8034 list_head
->ll_symbol
);
8037 /* Output the DIE and its attributes. Called recursively to generate
8038 the definitions of each child DIE. */
8041 output_die (dw_die_ref die
)
8048 /* If someone in another CU might refer to us, set up a symbol for
8049 them to point to. */
8050 if (die
->die_symbol
)
8051 output_die_symbol (die
);
8053 dw2_asm_output_data_uleb128 (die
->die_abbrev
, "(DIE (0x%lx) %s)",
8054 (unsigned long)die
->die_offset
,
8055 dwarf_tag_name (die
->die_tag
));
8057 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
8059 const char *name
= dwarf_attr_name (a
->dw_attr
);
8061 switch (AT_class (a
))
8063 case dw_val_class_addr
:
8064 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, AT_addr (a
), "%s", name
);
8067 case dw_val_class_offset
:
8068 dw2_asm_output_data (DWARF_OFFSET_SIZE
, a
->dw_attr_val
.v
.val_offset
,
8072 case dw_val_class_range_list
:
8074 char *p
= strchr (ranges_section_label
, '\0');
8076 sprintf (p
, "+" HOST_WIDE_INT_PRINT_HEX
,
8077 a
->dw_attr_val
.v
.val_offset
);
8078 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, ranges_section_label
,
8079 debug_ranges_section
, "%s", name
);
8084 case dw_val_class_loc
:
8085 size
= size_of_locs (AT_loc (a
));
8087 /* Output the block length for this list of location operations. */
8088 dw2_asm_output_data (constant_size (size
), size
, "%s", name
);
8090 output_loc_sequence (AT_loc (a
));
8093 case dw_val_class_const
:
8094 /* ??? It would be slightly more efficient to use a scheme like is
8095 used for unsigned constants below, but gdb 4.x does not sign
8096 extend. Gdb 5.x does sign extend. */
8097 dw2_asm_output_data_sleb128 (AT_int (a
), "%s", name
);
8100 case dw_val_class_unsigned_const
:
8101 dw2_asm_output_data (constant_size (AT_unsigned (a
)),
8102 AT_unsigned (a
), "%s", name
);
8105 case dw_val_class_long_long
:
8107 unsigned HOST_WIDE_INT first
, second
;
8109 dw2_asm_output_data (1,
8110 2 * HOST_BITS_PER_LONG
/ HOST_BITS_PER_CHAR
,
8113 if (WORDS_BIG_ENDIAN
)
8115 first
= a
->dw_attr_val
.v
.val_long_long
.hi
;
8116 second
= a
->dw_attr_val
.v
.val_long_long
.low
;
8120 first
= a
->dw_attr_val
.v
.val_long_long
.low
;
8121 second
= a
->dw_attr_val
.v
.val_long_long
.hi
;
8124 dw2_asm_output_data (HOST_BITS_PER_LONG
/ HOST_BITS_PER_CHAR
,
8125 first
, "long long constant");
8126 dw2_asm_output_data (HOST_BITS_PER_LONG
/ HOST_BITS_PER_CHAR
,
8131 case dw_val_class_vec
:
8133 unsigned int elt_size
= a
->dw_attr_val
.v
.val_vec
.elt_size
;
8134 unsigned int len
= a
->dw_attr_val
.v
.val_vec
.length
;
8138 dw2_asm_output_data (constant_size (len
* elt_size
),
8139 len
* elt_size
, "%s", name
);
8140 if (elt_size
> sizeof (HOST_WIDE_INT
))
8145 for (i
= 0, p
= a
->dw_attr_val
.v
.val_vec
.array
;
8148 dw2_asm_output_data (elt_size
, extract_int (p
, elt_size
),
8149 "fp or vector constant word %u", i
);
8153 case dw_val_class_flag
:
8154 dw2_asm_output_data (1, AT_flag (a
), "%s", name
);
8157 case dw_val_class_loc_list
:
8159 char *sym
= AT_loc_list (a
)->ll_symbol
;
8162 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, sym
, debug_loc_section
,
8167 case dw_val_class_die_ref
:
8168 if (AT_ref_external (a
))
8170 char *sym
= AT_ref (a
)->die_symbol
;
8173 dw2_asm_output_offset (DWARF2_ADDR_SIZE
, sym
, debug_info_section
,
8178 gcc_assert (AT_ref (a
)->die_offset
);
8179 dw2_asm_output_data (DWARF_OFFSET_SIZE
, AT_ref (a
)->die_offset
,
8184 case dw_val_class_fde_ref
:
8188 ASM_GENERATE_INTERNAL_LABEL (l1
, FDE_LABEL
,
8189 a
->dw_attr_val
.v
.val_fde_index
* 2);
8190 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, l1
, debug_frame_section
,
8195 case dw_val_class_lbl_id
:
8196 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, AT_lbl (a
), "%s", name
);
8199 case dw_val_class_lineptr
:
8200 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, AT_lbl (a
),
8201 debug_line_section
, "%s", name
);
8204 case dw_val_class_macptr
:
8205 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, AT_lbl (a
),
8206 debug_macinfo_section
, "%s", name
);
8209 case dw_val_class_str
:
8210 if (AT_string_form (a
) == DW_FORM_strp
)
8211 dw2_asm_output_offset (DWARF_OFFSET_SIZE
,
8212 a
->dw_attr_val
.v
.val_str
->label
,
8214 "%s: \"%s\"", name
, AT_string (a
));
8216 dw2_asm_output_nstring (AT_string (a
), -1, "%s", name
);
8219 case dw_val_class_file
:
8221 int f
= maybe_emit_file (a
->dw_attr_val
.v
.val_file
);
8223 dw2_asm_output_data (constant_size (f
), f
, "%s (%s)", name
,
8224 a
->dw_attr_val
.v
.val_file
->filename
);
8233 FOR_EACH_CHILD (die
, c
, output_die (c
));
8235 /* Add null byte to terminate sibling list. */
8236 if (die
->die_child
!= NULL
)
8237 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
8238 (unsigned long) die
->die_offset
);
8241 /* Output the compilation unit that appears at the beginning of the
8242 .debug_info section, and precedes the DIE descriptions. */
8245 output_compilation_unit_header (void)
8247 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
8248 dw2_asm_output_data (4, 0xffffffff,
8249 "Initial length escape value indicating 64-bit DWARF extension");
8250 dw2_asm_output_data (DWARF_OFFSET_SIZE
,
8251 next_die_offset
- DWARF_INITIAL_LENGTH_SIZE
,
8252 "Length of Compilation Unit Info");
8253 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF version number");
8254 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, abbrev_section_label
,
8255 debug_abbrev_section
,
8256 "Offset Into Abbrev. Section");
8257 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Pointer Size (in bytes)");
8260 /* Output the compilation unit DIE and its children. */
8263 output_comp_unit (dw_die_ref die
, int output_if_empty
)
8265 const char *secname
;
8268 /* Unless we are outputting main CU, we may throw away empty ones. */
8269 if (!output_if_empty
&& die
->die_child
== NULL
)
8272 /* Even if there are no children of this DIE, we must output the information
8273 about the compilation unit. Otherwise, on an empty translation unit, we
8274 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
8275 will then complain when examining the file. First mark all the DIEs in
8276 this CU so we know which get local refs. */
8279 build_abbrev_table (die
);
8281 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
8282 next_die_offset
= DWARF_COMPILE_UNIT_HEADER_SIZE
;
8283 calc_die_sizes (die
);
8285 oldsym
= die
->die_symbol
;
8288 tmp
= XALLOCAVEC (char, strlen (oldsym
) + 24);
8290 sprintf (tmp
, ".gnu.linkonce.wi.%s", oldsym
);
8292 die
->die_symbol
= NULL
;
8293 switch_to_section (get_section (secname
, SECTION_DEBUG
, NULL
));
8296 switch_to_section (debug_info_section
);
8298 /* Output debugging information. */
8299 output_compilation_unit_header ();
8302 /* Leave the marks on the main CU, so we can check them in
8307 die
->die_symbol
= oldsym
;
8311 /* Return the DWARF2/3 pubname associated with a decl. */
8314 dwarf2_name (tree decl
, int scope
)
8316 return lang_hooks
.dwarf_name (decl
, scope
? 1 : 0);
8319 /* Add a new entry to .debug_pubnames if appropriate. */
8322 add_pubname_string (const char *str
, dw_die_ref die
)
8327 e
.name
= xstrdup (str
);
8328 VEC_safe_push (pubname_entry
, gc
, pubname_table
, &e
);
8332 add_pubname (tree decl
, dw_die_ref die
)
8335 if (TREE_PUBLIC (decl
))
8336 add_pubname_string (dwarf2_name (decl
, 1), die
);
8339 /* Add a new entry to .debug_pubtypes if appropriate. */
8342 add_pubtype (tree decl
, dw_die_ref die
)
8347 if ((TREE_PUBLIC (decl
)
8348 || die
->die_parent
== comp_unit_die
)
8349 && (die
->die_tag
== DW_TAG_typedef
|| COMPLETE_TYPE_P (decl
)))
8354 if (TYPE_NAME (decl
))
8356 if (TREE_CODE (TYPE_NAME (decl
)) == IDENTIFIER_NODE
)
8357 e
.name
= IDENTIFIER_POINTER (TYPE_NAME (decl
));
8358 else if (TREE_CODE (TYPE_NAME (decl
)) == TYPE_DECL
8359 && DECL_NAME (TYPE_NAME (decl
)))
8360 e
.name
= IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl
)));
8362 e
.name
= xstrdup ((const char *) get_AT_string (die
, DW_AT_name
));
8366 e
.name
= xstrdup (dwarf2_name (decl
, 1));
8368 /* If we don't have a name for the type, there's no point in adding
8370 if (e
.name
&& e
.name
[0] != '\0')
8371 VEC_safe_push (pubname_entry
, gc
, pubtype_table
, &e
);
8375 /* Output the public names table used to speed up access to externally
8376 visible names; or the public types table used to find type definitions. */
8379 output_pubnames (VEC (pubname_entry
, gc
) * names
)
8382 unsigned long pubnames_length
= size_of_pubnames (names
);
8385 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
8386 dw2_asm_output_data (4, 0xffffffff,
8387 "Initial length escape value indicating 64-bit DWARF extension");
8388 if (names
== pubname_table
)
8389 dw2_asm_output_data (DWARF_OFFSET_SIZE
, pubnames_length
,
8390 "Length of Public Names Info");
8392 dw2_asm_output_data (DWARF_OFFSET_SIZE
, pubnames_length
,
8393 "Length of Public Type Names Info");
8394 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF Version");
8395 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_info_section_label
,
8397 "Offset of Compilation Unit Info");
8398 dw2_asm_output_data (DWARF_OFFSET_SIZE
, next_die_offset
,
8399 "Compilation Unit Length");
8401 for (i
= 0; VEC_iterate (pubname_entry
, names
, i
, pub
); i
++)
8403 /* We shouldn't see pubnames for DIEs outside of the main CU. */
8404 if (names
== pubname_table
)
8405 gcc_assert (pub
->die
->die_mark
);
8407 if (names
!= pubtype_table
8408 || pub
->die
->die_offset
!= 0
8409 || !flag_eliminate_unused_debug_types
)
8411 dw2_asm_output_data (DWARF_OFFSET_SIZE
, pub
->die
->die_offset
,
8414 dw2_asm_output_nstring (pub
->name
, -1, "external name");
8418 dw2_asm_output_data (DWARF_OFFSET_SIZE
, 0, NULL
);
8421 /* Add a new entry to .debug_aranges if appropriate. */
8424 add_arange (tree decl
, dw_die_ref die
)
8426 if (! DECL_SECTION_NAME (decl
))
8429 if (arange_table_in_use
== arange_table_allocated
)
8431 arange_table_allocated
+= ARANGE_TABLE_INCREMENT
;
8432 arange_table
= GGC_RESIZEVEC (dw_die_ref
, arange_table
,
8433 arange_table_allocated
);
8434 memset (arange_table
+ arange_table_in_use
, 0,
8435 ARANGE_TABLE_INCREMENT
* sizeof (dw_die_ref
));
8438 arange_table
[arange_table_in_use
++] = die
;
8441 /* Output the information that goes into the .debug_aranges table.
8442 Namely, define the beginning and ending address range of the
8443 text section generated for this compilation unit. */
8446 output_aranges (void)
8449 unsigned long aranges_length
= size_of_aranges ();
8451 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
8452 dw2_asm_output_data (4, 0xffffffff,
8453 "Initial length escape value indicating 64-bit DWARF extension");
8454 dw2_asm_output_data (DWARF_OFFSET_SIZE
, aranges_length
,
8455 "Length of Address Ranges Info");
8456 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF Version");
8457 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_info_section_label
,
8459 "Offset of Compilation Unit Info");
8460 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Size of Address");
8461 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8463 /* We need to align to twice the pointer size here. */
8464 if (DWARF_ARANGES_PAD_SIZE
)
8466 /* Pad using a 2 byte words so that padding is correct for any
8468 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8469 2 * DWARF2_ADDR_SIZE
);
8470 for (i
= 2; i
< (unsigned) DWARF_ARANGES_PAD_SIZE
; i
+= 2)
8471 dw2_asm_output_data (2, 0, NULL
);
8474 /* It is necessary not to output these entries if the sections were
8475 not used; if the sections were not used, the length will be 0 and
8476 the address may end up as 0 if the section is discarded by ld
8477 --gc-sections, leaving an invalid (0, 0) entry that can be
8478 confused with the terminator. */
8479 if (text_section_used
)
8481 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, text_section_label
, "Address");
8482 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, text_end_label
,
8483 text_section_label
, "Length");
8485 if (cold_text_section_used
)
8487 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, cold_text_section_label
,
8489 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, cold_end_label
,
8490 cold_text_section_label
, "Length");
8493 for (i
= 0; i
< arange_table_in_use
; i
++)
8495 dw_die_ref die
= arange_table
[i
];
8497 /* We shouldn't see aranges for DIEs outside of the main CU. */
8498 gcc_assert (die
->die_mark
);
8500 if (die
->die_tag
== DW_TAG_subprogram
)
8502 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, get_AT_low_pc (die
),
8504 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, get_AT_hi_pc (die
),
8505 get_AT_low_pc (die
), "Length");
8509 /* A static variable; extract the symbol from DW_AT_location.
8510 Note that this code isn't currently hit, as we only emit
8511 aranges for functions (jason 9/23/99). */
8512 dw_attr_ref a
= get_AT (die
, DW_AT_location
);
8513 dw_loc_descr_ref loc
;
8515 gcc_assert (a
&& AT_class (a
) == dw_val_class_loc
);
8518 gcc_assert (loc
->dw_loc_opc
== DW_OP_addr
);
8520 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
,
8521 loc
->dw_loc_oprnd1
.v
.val_addr
, "Address");
8522 dw2_asm_output_data (DWARF2_ADDR_SIZE
,
8523 get_AT_unsigned (die
, DW_AT_byte_size
),
8528 /* Output the terminator words. */
8529 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
8530 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
8533 /* Add a new entry to .debug_ranges. Return the offset at which it
8537 add_ranges_num (int num
)
8539 unsigned int in_use
= ranges_table_in_use
;
8541 if (in_use
== ranges_table_allocated
)
8543 ranges_table_allocated
+= RANGES_TABLE_INCREMENT
;
8544 ranges_table
= GGC_RESIZEVEC (struct dw_ranges_struct
, ranges_table
,
8545 ranges_table_allocated
);
8546 memset (ranges_table
+ ranges_table_in_use
, 0,
8547 RANGES_TABLE_INCREMENT
* sizeof (struct dw_ranges_struct
));
8550 ranges_table
[in_use
].num
= num
;
8551 ranges_table_in_use
= in_use
+ 1;
8553 return in_use
* 2 * DWARF2_ADDR_SIZE
;
8556 /* Add a new entry to .debug_ranges corresponding to a block, or a
8557 range terminator if BLOCK is NULL. */
8560 add_ranges (const_tree block
)
8562 return add_ranges_num (block
? BLOCK_NUMBER (block
) : 0);
8565 /* Add a new entry to .debug_ranges corresponding to a pair of
8569 add_ranges_by_labels (const char *begin
, const char *end
)
8571 unsigned int in_use
= ranges_by_label_in_use
;
8573 if (in_use
== ranges_by_label_allocated
)
8575 ranges_by_label_allocated
+= RANGES_TABLE_INCREMENT
;
8576 ranges_by_label
= GGC_RESIZEVEC (struct dw_ranges_by_label_struct
,
8578 ranges_by_label_allocated
);
8579 memset (ranges_by_label
+ ranges_by_label_in_use
, 0,
8580 RANGES_TABLE_INCREMENT
8581 * sizeof (struct dw_ranges_by_label_struct
));
8584 ranges_by_label
[in_use
].begin
= begin
;
8585 ranges_by_label
[in_use
].end
= end
;
8586 ranges_by_label_in_use
= in_use
+ 1;
8588 return add_ranges_num (-(int)in_use
- 1);
8592 output_ranges (void)
8595 static const char *const start_fmt
= "Offset 0x%x";
8596 const char *fmt
= start_fmt
;
8598 for (i
= 0; i
< ranges_table_in_use
; i
++)
8600 int block_num
= ranges_table
[i
].num
;
8604 char blabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
8605 char elabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
8607 ASM_GENERATE_INTERNAL_LABEL (blabel
, BLOCK_BEGIN_LABEL
, block_num
);
8608 ASM_GENERATE_INTERNAL_LABEL (elabel
, BLOCK_END_LABEL
, block_num
);
8610 /* If all code is in the text section, then the compilation
8611 unit base address defaults to DW_AT_low_pc, which is the
8612 base of the text section. */
8613 if (!have_multiple_function_sections
)
8615 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, blabel
,
8617 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
8618 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, elabel
,
8619 text_section_label
, NULL
);
8622 /* Otherwise, the compilation unit base address is zero,
8623 which allows us to use absolute addresses, and not worry
8624 about whether the target supports cross-section
8628 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
8629 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
8630 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, elabel
, NULL
);
8636 /* Negative block_num stands for an index into ranges_by_label. */
8637 else if (block_num
< 0)
8639 int lab_idx
= - block_num
- 1;
8641 if (!have_multiple_function_sections
)
8645 /* If we ever use add_ranges_by_labels () for a single
8646 function section, all we have to do is to take out
8648 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
8649 ranges_by_label
[lab_idx
].begin
,
8651 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
8652 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
8653 ranges_by_label
[lab_idx
].end
,
8654 text_section_label
, NULL
);
8659 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
8660 ranges_by_label
[lab_idx
].begin
,
8661 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
8662 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
8663 ranges_by_label
[lab_idx
].end
,
8669 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
8670 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
8676 /* Data structure containing information about input files. */
8679 const char *path
; /* Complete file name. */
8680 const char *fname
; /* File name part. */
8681 int length
; /* Length of entire string. */
8682 struct dwarf_file_data
* file_idx
; /* Index in input file table. */
8683 int dir_idx
; /* Index in directory table. */
8686 /* Data structure containing information about directories with source
8690 const char *path
; /* Path including directory name. */
8691 int length
; /* Path length. */
8692 int prefix
; /* Index of directory entry which is a prefix. */
8693 int count
; /* Number of files in this directory. */
8694 int dir_idx
; /* Index of directory used as base. */
8697 /* Callback function for file_info comparison. We sort by looking at
8698 the directories in the path. */
8701 file_info_cmp (const void *p1
, const void *p2
)
8703 const struct file_info
*const s1
= (const struct file_info
*) p1
;
8704 const struct file_info
*const s2
= (const struct file_info
*) p2
;
8705 const unsigned char *cp1
;
8706 const unsigned char *cp2
;
8708 /* Take care of file names without directories. We need to make sure that
8709 we return consistent values to qsort since some will get confused if
8710 we return the same value when identical operands are passed in opposite
8711 orders. So if neither has a directory, return 0 and otherwise return
8712 1 or -1 depending on which one has the directory. */
8713 if ((s1
->path
== s1
->fname
|| s2
->path
== s2
->fname
))
8714 return (s2
->path
== s2
->fname
) - (s1
->path
== s1
->fname
);
8716 cp1
= (const unsigned char *) s1
->path
;
8717 cp2
= (const unsigned char *) s2
->path
;
8723 /* Reached the end of the first path? If so, handle like above. */
8724 if ((cp1
== (const unsigned char *) s1
->fname
)
8725 || (cp2
== (const unsigned char *) s2
->fname
))
8726 return ((cp2
== (const unsigned char *) s2
->fname
)
8727 - (cp1
== (const unsigned char *) s1
->fname
));
8729 /* Character of current path component the same? */
8730 else if (*cp1
!= *cp2
)
8735 struct file_name_acquire_data
8737 struct file_info
*files
;
8742 /* Traversal function for the hash table. */
8745 file_name_acquire (void ** slot
, void *data
)
8747 struct file_name_acquire_data
*fnad
= (struct file_name_acquire_data
*) data
;
8748 struct dwarf_file_data
*d
= (struct dwarf_file_data
*) *slot
;
8749 struct file_info
*fi
;
8752 gcc_assert (fnad
->max_files
>= d
->emitted_number
);
8754 if (! d
->emitted_number
)
8757 gcc_assert (fnad
->max_files
!= fnad
->used_files
);
8759 fi
= fnad
->files
+ fnad
->used_files
++;
8761 /* Skip all leading "./". */
8763 while (f
[0] == '.' && IS_DIR_SEPARATOR (f
[1]))
8766 /* Create a new array entry. */
8768 fi
->length
= strlen (f
);
8771 /* Search for the file name part. */
8772 f
= strrchr (f
, DIR_SEPARATOR
);
8773 #if defined (DIR_SEPARATOR_2)
8775 char *g
= strrchr (fi
->path
, DIR_SEPARATOR_2
);
8779 if (f
== NULL
|| f
< g
)
8785 fi
->fname
= f
== NULL
? fi
->path
: f
+ 1;
8789 /* Output the directory table and the file name table. We try to minimize
8790 the total amount of memory needed. A heuristic is used to avoid large
8791 slowdowns with many input files. */
8794 output_file_names (void)
8796 struct file_name_acquire_data fnad
;
8798 struct file_info
*files
;
8799 struct dir_info
*dirs
;
8808 if (!last_emitted_file
)
8810 dw2_asm_output_data (1, 0, "End directory table");
8811 dw2_asm_output_data (1, 0, "End file name table");
8815 numfiles
= last_emitted_file
->emitted_number
;
8817 /* Allocate the various arrays we need. */
8818 files
= XALLOCAVEC (struct file_info
, numfiles
);
8819 dirs
= XALLOCAVEC (struct dir_info
, numfiles
);
8822 fnad
.used_files
= 0;
8823 fnad
.max_files
= numfiles
;
8824 htab_traverse (file_table
, file_name_acquire
, &fnad
);
8825 gcc_assert (fnad
.used_files
== fnad
.max_files
);
8827 qsort (files
, numfiles
, sizeof (files
[0]), file_info_cmp
);
8829 /* Find all the different directories used. */
8830 dirs
[0].path
= files
[0].path
;
8831 dirs
[0].length
= files
[0].fname
- files
[0].path
;
8832 dirs
[0].prefix
= -1;
8834 dirs
[0].dir_idx
= 0;
8835 files
[0].dir_idx
= 0;
8838 for (i
= 1; i
< numfiles
; i
++)
8839 if (files
[i
].fname
- files
[i
].path
== dirs
[ndirs
- 1].length
8840 && memcmp (dirs
[ndirs
- 1].path
, files
[i
].path
,
8841 dirs
[ndirs
- 1].length
) == 0)
8843 /* Same directory as last entry. */
8844 files
[i
].dir_idx
= ndirs
- 1;
8845 ++dirs
[ndirs
- 1].count
;
8851 /* This is a new directory. */
8852 dirs
[ndirs
].path
= files
[i
].path
;
8853 dirs
[ndirs
].length
= files
[i
].fname
- files
[i
].path
;
8854 dirs
[ndirs
].count
= 1;
8855 dirs
[ndirs
].dir_idx
= ndirs
;
8856 files
[i
].dir_idx
= ndirs
;
8858 /* Search for a prefix. */
8859 dirs
[ndirs
].prefix
= -1;
8860 for (j
= 0; j
< ndirs
; j
++)
8861 if (dirs
[j
].length
< dirs
[ndirs
].length
8862 && dirs
[j
].length
> 1
8863 && (dirs
[ndirs
].prefix
== -1
8864 || dirs
[j
].length
> dirs
[dirs
[ndirs
].prefix
].length
)
8865 && memcmp (dirs
[j
].path
, dirs
[ndirs
].path
, dirs
[j
].length
) == 0)
8866 dirs
[ndirs
].prefix
= j
;
8871 /* Now to the actual work. We have to find a subset of the directories which
8872 allow expressing the file name using references to the directory table
8873 with the least amount of characters. We do not do an exhaustive search
8874 where we would have to check out every combination of every single
8875 possible prefix. Instead we use a heuristic which provides nearly optimal
8876 results in most cases and never is much off. */
8877 saved
= XALLOCAVEC (int, ndirs
);
8878 savehere
= XALLOCAVEC (int, ndirs
);
8880 memset (saved
, '\0', ndirs
* sizeof (saved
[0]));
8881 for (i
= 0; i
< ndirs
; i
++)
8886 /* We can always save some space for the current directory. But this
8887 does not mean it will be enough to justify adding the directory. */
8888 savehere
[i
] = dirs
[i
].length
;
8889 total
= (savehere
[i
] - saved
[i
]) * dirs
[i
].count
;
8891 for (j
= i
+ 1; j
< ndirs
; j
++)
8894 if (saved
[j
] < dirs
[i
].length
)
8896 /* Determine whether the dirs[i] path is a prefix of the
8901 while (k
!= -1 && k
!= (int) i
)
8906 /* Yes it is. We can possibly save some memory by
8907 writing the filenames in dirs[j] relative to
8909 savehere
[j
] = dirs
[i
].length
;
8910 total
+= (savehere
[j
] - saved
[j
]) * dirs
[j
].count
;
8915 /* Check whether we can save enough to justify adding the dirs[i]
8917 if (total
> dirs
[i
].length
+ 1)
8919 /* It's worthwhile adding. */
8920 for (j
= i
; j
< ndirs
; j
++)
8921 if (savehere
[j
] > 0)
8923 /* Remember how much we saved for this directory so far. */
8924 saved
[j
] = savehere
[j
];
8926 /* Remember the prefix directory. */
8927 dirs
[j
].dir_idx
= i
;
8932 /* Emit the directory name table. */
8934 idx_offset
= dirs
[0].length
> 0 ? 1 : 0;
8935 for (i
= 1 - idx_offset
; i
< ndirs
; i
++)
8936 dw2_asm_output_nstring (dirs
[i
].path
, dirs
[i
].length
- 1,
8937 "Directory Entry: 0x%x", i
+ idx_offset
);
8939 dw2_asm_output_data (1, 0, "End directory table");
8941 /* We have to emit them in the order of emitted_number since that's
8942 used in the debug info generation. To do this efficiently we
8943 generate a back-mapping of the indices first. */
8944 backmap
= XALLOCAVEC (int, numfiles
);
8945 for (i
= 0; i
< numfiles
; i
++)
8946 backmap
[files
[i
].file_idx
->emitted_number
- 1] = i
;
8948 /* Now write all the file names. */
8949 for (i
= 0; i
< numfiles
; i
++)
8951 int file_idx
= backmap
[i
];
8952 int dir_idx
= dirs
[files
[file_idx
].dir_idx
].dir_idx
;
8954 dw2_asm_output_nstring (files
[file_idx
].path
+ dirs
[dir_idx
].length
, -1,
8955 "File Entry: 0x%x", (unsigned) i
+ 1);
8957 /* Include directory index. */
8958 dw2_asm_output_data_uleb128 (dir_idx
+ idx_offset
, NULL
);
8960 /* Modification time. */
8961 dw2_asm_output_data_uleb128 (0, NULL
);
8963 /* File length in bytes. */
8964 dw2_asm_output_data_uleb128 (0, NULL
);
8967 dw2_asm_output_data (1, 0, "End file name table");
8971 /* Output the source line number correspondence information. This
8972 information goes into the .debug_line section. */
8975 output_line_info (void)
8977 char l1
[20], l2
[20], p1
[20], p2
[20];
8978 char line_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
8979 char prev_line_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
8982 unsigned long lt_index
;
8983 unsigned long current_line
;
8986 unsigned long current_file
;
8987 unsigned long function
;
8989 ASM_GENERATE_INTERNAL_LABEL (l1
, LINE_NUMBER_BEGIN_LABEL
, 0);
8990 ASM_GENERATE_INTERNAL_LABEL (l2
, LINE_NUMBER_END_LABEL
, 0);
8991 ASM_GENERATE_INTERNAL_LABEL (p1
, LN_PROLOG_AS_LABEL
, 0);
8992 ASM_GENERATE_INTERNAL_LABEL (p2
, LN_PROLOG_END_LABEL
, 0);
8994 if (DWARF_INITIAL_LENGTH_SIZE
- DWARF_OFFSET_SIZE
== 4)
8995 dw2_asm_output_data (4, 0xffffffff,
8996 "Initial length escape value indicating 64-bit DWARF extension");
8997 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, l2
, l1
,
8998 "Length of Source Line Info");
8999 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
9001 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF Version");
9002 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, p2
, p1
, "Prolog Length");
9003 ASM_OUTPUT_LABEL (asm_out_file
, p1
);
9005 /* Define the architecture-dependent minimum instruction length (in
9006 bytes). In this implementation of DWARF, this field is used for
9007 information purposes only. Since GCC generates assembly language,
9008 we have no a priori knowledge of how many instruction bytes are
9009 generated for each source line, and therefore can use only the
9010 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
9011 commands. Accordingly, we fix this as `1', which is "correct
9012 enough" for all architectures, and don't let the target override. */
9013 dw2_asm_output_data (1, 1,
9014 "Minimum Instruction Length");
9016 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START
,
9017 "Default is_stmt_start flag");
9018 dw2_asm_output_data (1, DWARF_LINE_BASE
,
9019 "Line Base Value (Special Opcodes)");
9020 dw2_asm_output_data (1, DWARF_LINE_RANGE
,
9021 "Line Range Value (Special Opcodes)");
9022 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
,
9023 "Special Opcode Base");
9025 for (opc
= 1; opc
< DWARF_LINE_OPCODE_BASE
; opc
++)
9029 case DW_LNS_advance_pc
:
9030 case DW_LNS_advance_line
:
9031 case DW_LNS_set_file
:
9032 case DW_LNS_set_column
:
9033 case DW_LNS_fixed_advance_pc
:
9041 dw2_asm_output_data (1, n_op_args
, "opcode: 0x%x has %d args",
9045 /* Write out the information about the files we use. */
9046 output_file_names ();
9047 ASM_OUTPUT_LABEL (asm_out_file
, p2
);
9049 /* We used to set the address register to the first location in the text
9050 section here, but that didn't accomplish anything since we already
9051 have a line note for the opening brace of the first function. */
9053 /* Generate the line number to PC correspondence table, encoded as
9054 a series of state machine operations. */
9058 if (cfun
&& in_cold_section_p
)
9059 strcpy (prev_line_label
, crtl
->subsections
.cold_section_label
);
9061 strcpy (prev_line_label
, text_section_label
);
9062 for (lt_index
= 1; lt_index
< line_info_table_in_use
; ++lt_index
)
9064 dw_line_info_ref line_info
= &line_info_table
[lt_index
];
9067 /* Disable this optimization for now; GDB wants to see two line notes
9068 at the beginning of a function so it can find the end of the
9071 /* Don't emit anything for redundant notes. Just updating the
9072 address doesn't accomplish anything, because we already assume
9073 that anything after the last address is this line. */
9074 if (line_info
->dw_line_num
== current_line
9075 && line_info
->dw_file_num
== current_file
)
9079 /* Emit debug info for the address of the current line.
9081 Unfortunately, we have little choice here currently, and must always
9082 use the most general form. GCC does not know the address delta
9083 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
9084 attributes which will give an upper bound on the address range. We
9085 could perhaps use length attributes to determine when it is safe to
9086 use DW_LNS_fixed_advance_pc. */
9088 ASM_GENERATE_INTERNAL_LABEL (line_label
, LINE_CODE_LABEL
, lt_index
);
9091 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
9092 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
9093 "DW_LNS_fixed_advance_pc");
9094 dw2_asm_output_delta (2, line_label
, prev_line_label
, NULL
);
9098 /* This can handle any delta. This takes
9099 4+DWARF2_ADDR_SIZE bytes. */
9100 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9101 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
9102 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
9103 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
9106 strcpy (prev_line_label
, line_label
);
9108 /* Emit debug info for the source file of the current line, if
9109 different from the previous line. */
9110 if (line_info
->dw_file_num
!= current_file
)
9112 current_file
= line_info
->dw_file_num
;
9113 dw2_asm_output_data (1, DW_LNS_set_file
, "DW_LNS_set_file");
9114 dw2_asm_output_data_uleb128 (current_file
, "%lu", current_file
);
9117 /* Emit debug info for the current line number, choosing the encoding
9118 that uses the least amount of space. */
9119 if (line_info
->dw_line_num
!= current_line
)
9121 line_offset
= line_info
->dw_line_num
- current_line
;
9122 line_delta
= line_offset
- DWARF_LINE_BASE
;
9123 current_line
= line_info
->dw_line_num
;
9124 if (line_delta
>= 0 && line_delta
< (DWARF_LINE_RANGE
- 1))
9125 /* This can handle deltas from -10 to 234, using the current
9126 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
9128 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
+ line_delta
,
9129 "line %lu", current_line
);
9132 /* This can handle any delta. This takes at least 4 bytes,
9133 depending on the value being encoded. */
9134 dw2_asm_output_data (1, DW_LNS_advance_line
,
9135 "advance to line %lu", current_line
);
9136 dw2_asm_output_data_sleb128 (line_offset
, NULL
);
9137 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
9141 /* We still need to start a new row, so output a copy insn. */
9142 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
9145 /* Emit debug info for the address of the end of the function. */
9148 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
9149 "DW_LNS_fixed_advance_pc");
9150 dw2_asm_output_delta (2, text_end_label
, prev_line_label
, NULL
);
9154 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9155 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
9156 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
9157 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, text_end_label
, NULL
);
9160 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
9161 dw2_asm_output_data_uleb128 (1, NULL
);
9162 dw2_asm_output_data (1, DW_LNE_end_sequence
, NULL
);
9167 for (lt_index
= 0; lt_index
< separate_line_info_table_in_use
;)
9169 dw_separate_line_info_ref line_info
9170 = &separate_line_info_table
[lt_index
];
9173 /* Don't emit anything for redundant notes. */
9174 if (line_info
->dw_line_num
== current_line
9175 && line_info
->dw_file_num
== current_file
9176 && line_info
->function
== function
)
9180 /* Emit debug info for the address of the current line. If this is
9181 a new function, or the first line of a function, then we need
9182 to handle it differently. */
9183 ASM_GENERATE_INTERNAL_LABEL (line_label
, SEPARATE_LINE_CODE_LABEL
,
9185 if (function
!= line_info
->function
)
9187 function
= line_info
->function
;
9189 /* Set the address register to the first line in the function. */
9190 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9191 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
9192 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
9193 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
9197 /* ??? See the DW_LNS_advance_pc comment above. */
9200 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
9201 "DW_LNS_fixed_advance_pc");
9202 dw2_asm_output_delta (2, line_label
, prev_line_label
, NULL
);
9206 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9207 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
9208 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
9209 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
9213 strcpy (prev_line_label
, line_label
);
9215 /* Emit debug info for the source file of the current line, if
9216 different from the previous line. */
9217 if (line_info
->dw_file_num
!= current_file
)
9219 current_file
= line_info
->dw_file_num
;
9220 dw2_asm_output_data (1, DW_LNS_set_file
, "DW_LNS_set_file");
9221 dw2_asm_output_data_uleb128 (current_file
, "%lu", current_file
);
9224 /* Emit debug info for the current line number, choosing the encoding
9225 that uses the least amount of space. */
9226 if (line_info
->dw_line_num
!= current_line
)
9228 line_offset
= line_info
->dw_line_num
- current_line
;
9229 line_delta
= line_offset
- DWARF_LINE_BASE
;
9230 current_line
= line_info
->dw_line_num
;
9231 if (line_delta
>= 0 && line_delta
< (DWARF_LINE_RANGE
- 1))
9232 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
+ line_delta
,
9233 "line %lu", current_line
);
9236 dw2_asm_output_data (1, DW_LNS_advance_line
,
9237 "advance to line %lu", current_line
);
9238 dw2_asm_output_data_sleb128 (line_offset
, NULL
);
9239 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
9243 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
9251 /* If we're done with a function, end its sequence. */
9252 if (lt_index
== separate_line_info_table_in_use
9253 || separate_line_info_table
[lt_index
].function
!= function
)
9258 /* Emit debug info for the address of the end of the function. */
9259 ASM_GENERATE_INTERNAL_LABEL (line_label
, FUNC_END_LABEL
, function
);
9262 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
9263 "DW_LNS_fixed_advance_pc");
9264 dw2_asm_output_delta (2, line_label
, prev_line_label
, NULL
);
9268 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9269 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
9270 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
9271 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
9274 /* Output the marker for the end of this sequence. */
9275 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
9276 dw2_asm_output_data_uleb128 (1, NULL
);
9277 dw2_asm_output_data (1, DW_LNE_end_sequence
, NULL
);
9281 /* Output the marker for the end of the line number info. */
9282 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
9285 /* Given a pointer to a tree node for some base type, return a pointer to
9286 a DIE that describes the given type.
9288 This routine must only be called for GCC type nodes that correspond to
9289 Dwarf base (fundamental) types. */
9292 base_type_die (tree type
)
9294 dw_die_ref base_type_result
;
9295 enum dwarf_type encoding
;
9297 if (TREE_CODE (type
) == ERROR_MARK
|| TREE_CODE (type
) == VOID_TYPE
)
9300 switch (TREE_CODE (type
))
9303 if (TYPE_STRING_FLAG (type
))
9305 if (TYPE_UNSIGNED (type
))
9306 encoding
= DW_ATE_unsigned_char
;
9308 encoding
= DW_ATE_signed_char
;
9310 else if (TYPE_UNSIGNED (type
))
9311 encoding
= DW_ATE_unsigned
;
9313 encoding
= DW_ATE_signed
;
9317 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type
)))
9318 encoding
= DW_ATE_decimal_float
;
9320 encoding
= DW_ATE_float
;
9323 case FIXED_POINT_TYPE
:
9324 if (TYPE_UNSIGNED (type
))
9325 encoding
= DW_ATE_unsigned_fixed
;
9327 encoding
= DW_ATE_signed_fixed
;
9330 /* Dwarf2 doesn't know anything about complex ints, so use
9331 a user defined type for it. */
9333 if (TREE_CODE (TREE_TYPE (type
)) == REAL_TYPE
)
9334 encoding
= DW_ATE_complex_float
;
9336 encoding
= DW_ATE_lo_user
;
9340 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
9341 encoding
= DW_ATE_boolean
;
9345 /* No other TREE_CODEs are Dwarf fundamental types. */
9349 base_type_result
= new_die (DW_TAG_base_type
, comp_unit_die
, type
);
9351 /* This probably indicates a bug. */
9352 if (! TYPE_NAME (type
))
9353 add_name_attribute (base_type_result
, "__unknown__");
9355 add_AT_unsigned (base_type_result
, DW_AT_byte_size
,
9356 int_size_in_bytes (type
));
9357 add_AT_unsigned (base_type_result
, DW_AT_encoding
, encoding
);
9359 return base_type_result
;
9362 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9363 given input type is a Dwarf "fundamental" type. Otherwise return null. */
9366 is_base_type (tree type
)
9368 switch (TREE_CODE (type
))
9374 case FIXED_POINT_TYPE
:
9382 case QUAL_UNION_TYPE
:
9387 case REFERENCE_TYPE
:
9400 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9401 node, return the size in bits for the type if it is a constant, or else
9402 return the alignment for the type if the type's size is not constant, or
9403 else return BITS_PER_WORD if the type actually turns out to be an
9406 static inline unsigned HOST_WIDE_INT
9407 simple_type_size_in_bits (const_tree type
)
9409 if (TREE_CODE (type
) == ERROR_MARK
)
9410 return BITS_PER_WORD
;
9411 else if (TYPE_SIZE (type
) == NULL_TREE
)
9413 else if (host_integerp (TYPE_SIZE (type
), 1))
9414 return tree_low_cst (TYPE_SIZE (type
), 1);
9416 return TYPE_ALIGN (type
);
9419 /* Return true if the debug information for the given type should be
9420 emitted as a subrange type. */
9423 is_subrange_type (const_tree type
)
9425 tree subtype
= TREE_TYPE (type
);
9427 /* Subrange types are identified by the fact that they are integer
9428 types, and that they have a subtype which is either an integer type
9429 or an enumeral type. */
9431 if (TREE_CODE (type
) != INTEGER_TYPE
9432 || subtype
== NULL_TREE
)
9435 if (TREE_CODE (subtype
) != INTEGER_TYPE
9436 && TREE_CODE (subtype
) != ENUMERAL_TYPE
9437 && TREE_CODE (subtype
) != BOOLEAN_TYPE
)
9440 if (TREE_CODE (type
) == TREE_CODE (subtype
)
9441 && int_size_in_bytes (type
) == int_size_in_bytes (subtype
)
9442 && TYPE_MIN_VALUE (type
) != NULL
9443 && TYPE_MIN_VALUE (subtype
) != NULL
9444 && tree_int_cst_equal (TYPE_MIN_VALUE (type
), TYPE_MIN_VALUE (subtype
))
9445 && TYPE_MAX_VALUE (type
) != NULL
9446 && TYPE_MAX_VALUE (subtype
) != NULL
9447 && tree_int_cst_equal (TYPE_MAX_VALUE (type
), TYPE_MAX_VALUE (subtype
)))
9449 /* The type and its subtype have the same representation. If in
9450 addition the two types also have the same name, then the given
9451 type is not a subrange type, but rather a plain base type. */
9452 /* FIXME: brobecker/2004-03-22:
9453 Sizetype INTEGER_CSTs nodes are canonicalized. It should
9454 therefore be sufficient to check the TYPE_SIZE node pointers
9455 rather than checking the actual size. Unfortunately, we have
9456 found some cases, such as in the Ada "integer" type, where
9457 this is not the case. Until this problem is solved, we need to
9458 keep checking the actual size. */
9459 tree type_name
= TYPE_NAME (type
);
9460 tree subtype_name
= TYPE_NAME (subtype
);
9462 if (type_name
!= NULL
&& TREE_CODE (type_name
) == TYPE_DECL
)
9463 type_name
= DECL_NAME (type_name
);
9465 if (subtype_name
!= NULL
&& TREE_CODE (subtype_name
) == TYPE_DECL
)
9466 subtype_name
= DECL_NAME (subtype_name
);
9468 if (type_name
== subtype_name
)
9475 /* Given a pointer to a tree node for a subrange type, return a pointer
9476 to a DIE that describes the given type. */
9479 subrange_type_die (tree type
, dw_die_ref context_die
)
9481 dw_die_ref subrange_die
;
9482 const HOST_WIDE_INT size_in_bytes
= int_size_in_bytes (type
);
9484 if (context_die
== NULL
)
9485 context_die
= comp_unit_die
;
9487 subrange_die
= new_die (DW_TAG_subrange_type
, context_die
, type
);
9489 if (int_size_in_bytes (TREE_TYPE (type
)) != size_in_bytes
)
9491 /* The size of the subrange type and its base type do not match,
9492 so we need to generate a size attribute for the subrange type. */
9493 add_AT_unsigned (subrange_die
, DW_AT_byte_size
, size_in_bytes
);
9496 if (TYPE_MIN_VALUE (type
) != NULL
)
9497 add_bound_info (subrange_die
, DW_AT_lower_bound
,
9498 TYPE_MIN_VALUE (type
));
9499 if (TYPE_MAX_VALUE (type
) != NULL
)
9500 add_bound_info (subrange_die
, DW_AT_upper_bound
,
9501 TYPE_MAX_VALUE (type
));
9503 return subrange_die
;
9506 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9507 entry that chains various modifiers in front of the given type. */
9510 modified_type_die (tree type
, int is_const_type
, int is_volatile_type
,
9511 dw_die_ref context_die
)
9513 enum tree_code code
= TREE_CODE (type
);
9514 dw_die_ref mod_type_die
;
9515 dw_die_ref sub_die
= NULL
;
9516 tree item_type
= NULL
;
9517 tree qualified_type
;
9520 if (code
== ERROR_MARK
)
9523 /* See if we already have the appropriately qualified variant of
9526 = get_qualified_type (type
,
9527 ((is_const_type
? TYPE_QUAL_CONST
: 0)
9528 | (is_volatile_type
? TYPE_QUAL_VOLATILE
: 0)));
9530 /* If we do, then we can just use its DIE, if it exists. */
9533 mod_type_die
= lookup_type_die (qualified_type
);
9535 return mod_type_die
;
9538 name
= qualified_type
? TYPE_NAME (qualified_type
) : NULL
;
9540 /* Handle C typedef types. */
9541 if (name
&& TREE_CODE (name
) == TYPE_DECL
&& DECL_ORIGINAL_TYPE (name
))
9543 tree dtype
= TREE_TYPE (name
);
9545 if (qualified_type
== dtype
)
9547 /* For a named type, use the typedef. */
9548 gen_type_die (qualified_type
, context_die
);
9549 return lookup_type_die (qualified_type
);
9551 else if (is_const_type
< TYPE_READONLY (dtype
)
9552 || is_volatile_type
< TYPE_VOLATILE (dtype
)
9553 || (is_const_type
<= TYPE_READONLY (dtype
)
9554 && is_volatile_type
<= TYPE_VOLATILE (dtype
)
9555 && DECL_ORIGINAL_TYPE (name
) != type
))
9556 /* cv-unqualified version of named type. Just use the unnamed
9557 type to which it refers. */
9558 return modified_type_die (DECL_ORIGINAL_TYPE (name
),
9559 is_const_type
, is_volatile_type
,
9561 /* Else cv-qualified version of named type; fall through. */
9566 mod_type_die
= new_die (DW_TAG_const_type
, comp_unit_die
, type
);
9567 sub_die
= modified_type_die (type
, 0, is_volatile_type
, context_die
);
9569 else if (is_volatile_type
)
9571 mod_type_die
= new_die (DW_TAG_volatile_type
, comp_unit_die
, type
);
9572 sub_die
= modified_type_die (type
, 0, 0, context_die
);
9574 else if (code
== POINTER_TYPE
)
9576 mod_type_die
= new_die (DW_TAG_pointer_type
, comp_unit_die
, type
);
9577 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
,
9578 simple_type_size_in_bits (type
) / BITS_PER_UNIT
);
9579 item_type
= TREE_TYPE (type
);
9581 else if (code
== REFERENCE_TYPE
)
9583 mod_type_die
= new_die (DW_TAG_reference_type
, comp_unit_die
, type
);
9584 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
,
9585 simple_type_size_in_bits (type
) / BITS_PER_UNIT
);
9586 item_type
= TREE_TYPE (type
);
9588 else if (is_subrange_type (type
))
9590 mod_type_die
= subrange_type_die (type
, context_die
);
9591 item_type
= TREE_TYPE (type
);
9593 else if (is_base_type (type
))
9594 mod_type_die
= base_type_die (type
);
9597 gen_type_die (type
, context_die
);
9599 /* We have to get the type_main_variant here (and pass that to the
9600 `lookup_type_die' routine) because the ..._TYPE node we have
9601 might simply be a *copy* of some original type node (where the
9602 copy was created to help us keep track of typedef names) and
9603 that copy might have a different TYPE_UID from the original
9605 if (TREE_CODE (type
) != VECTOR_TYPE
)
9606 return lookup_type_die (type_main_variant (type
));
9608 /* Vectors have the debugging information in the type,
9609 not the main variant. */
9610 return lookup_type_die (type
);
9613 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
9614 don't output a DW_TAG_typedef, since there isn't one in the
9615 user's program; just attach a DW_AT_name to the type. */
9617 && (TREE_CODE (name
) != TYPE_DECL
9618 || (TREE_TYPE (name
) == qualified_type
&& DECL_NAME (name
))))
9620 if (TREE_CODE (name
) == TYPE_DECL
)
9621 /* Could just call add_name_and_src_coords_attributes here,
9622 but since this is a builtin type it doesn't have any
9623 useful source coordinates anyway. */
9624 name
= DECL_NAME (name
);
9625 add_name_attribute (mod_type_die
, IDENTIFIER_POINTER (name
));
9629 equate_type_number_to_die (qualified_type
, mod_type_die
);
9632 /* We must do this after the equate_type_number_to_die call, in case
9633 this is a recursive type. This ensures that the modified_type_die
9634 recursion will terminate even if the type is recursive. Recursive
9635 types are possible in Ada. */
9636 sub_die
= modified_type_die (item_type
,
9637 TYPE_READONLY (item_type
),
9638 TYPE_VOLATILE (item_type
),
9641 if (sub_die
!= NULL
)
9642 add_AT_die_ref (mod_type_die
, DW_AT_type
, sub_die
);
9644 return mod_type_die
;
9647 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
9648 an enumerated type. */
9651 type_is_enum (const_tree type
)
9653 return TREE_CODE (type
) == ENUMERAL_TYPE
;
9656 /* Return the DBX register number described by a given RTL node. */
9659 dbx_reg_number (const_rtx rtl
)
9661 unsigned regno
= REGNO (rtl
);
9663 gcc_assert (regno
< FIRST_PSEUDO_REGISTER
);
9665 #ifdef LEAF_REG_REMAP
9666 if (current_function_uses_only_leaf_regs
)
9668 int leaf_reg
= LEAF_REG_REMAP (regno
);
9670 regno
= (unsigned) leaf_reg
;
9674 return DBX_REGISTER_NUMBER (regno
);
9677 /* Optionally add a DW_OP_piece term to a location description expression.
9678 DW_OP_piece is only added if the location description expression already
9679 doesn't end with DW_OP_piece. */
9682 add_loc_descr_op_piece (dw_loc_descr_ref
*list_head
, int size
)
9684 dw_loc_descr_ref loc
;
9686 if (*list_head
!= NULL
)
9688 /* Find the end of the chain. */
9689 for (loc
= *list_head
; loc
->dw_loc_next
!= NULL
; loc
= loc
->dw_loc_next
)
9692 if (loc
->dw_loc_opc
!= DW_OP_piece
)
9693 loc
->dw_loc_next
= new_loc_descr (DW_OP_piece
, size
, 0);
9697 /* Return a location descriptor that designates a machine register or
9698 zero if there is none. */
9700 static dw_loc_descr_ref
9701 reg_loc_descriptor (rtx rtl
, enum var_init_status initialized
)
9705 if (REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
9708 regs
= targetm
.dwarf_register_span (rtl
);
9710 if (hard_regno_nregs
[REGNO (rtl
)][GET_MODE (rtl
)] > 1 || regs
)
9711 return multiple_reg_loc_descriptor (rtl
, regs
, initialized
);
9713 return one_reg_loc_descriptor (dbx_reg_number (rtl
), initialized
);
9716 /* Return a location descriptor that designates a machine register for
9717 a given hard register number. */
9719 static dw_loc_descr_ref
9720 one_reg_loc_descriptor (unsigned int regno
, enum var_init_status initialized
)
9722 dw_loc_descr_ref reg_loc_descr
= new_reg_loc_descr (regno
, 0);
9724 if (initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
9725 add_loc_descr (®_loc_descr
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
9727 return reg_loc_descr
;
9730 /* Given an RTL of a register, return a location descriptor that
9731 designates a value that spans more than one register. */
9733 static dw_loc_descr_ref
9734 multiple_reg_loc_descriptor (rtx rtl
, rtx regs
,
9735 enum var_init_status initialized
)
9739 dw_loc_descr_ref loc_result
= NULL
;
9742 #ifdef LEAF_REG_REMAP
9743 if (current_function_uses_only_leaf_regs
)
9745 int leaf_reg
= LEAF_REG_REMAP (reg
);
9747 reg
= (unsigned) leaf_reg
;
9750 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg
) == dbx_reg_number (rtl
));
9751 nregs
= hard_regno_nregs
[REGNO (rtl
)][GET_MODE (rtl
)];
9753 /* Simple, contiguous registers. */
9754 if (regs
== NULL_RTX
)
9756 size
= GET_MODE_SIZE (GET_MODE (rtl
)) / nregs
;
9763 t
= one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg
),
9764 VAR_INIT_STATUS_INITIALIZED
);
9765 add_loc_descr (&loc_result
, t
);
9766 add_loc_descr_op_piece (&loc_result
, size
);
9772 /* Now onto stupid register sets in non contiguous locations. */
9774 gcc_assert (GET_CODE (regs
) == PARALLEL
);
9776 size
= GET_MODE_SIZE (GET_MODE (XVECEXP (regs
, 0, 0)));
9779 for (i
= 0; i
< XVECLEN (regs
, 0); ++i
)
9783 t
= one_reg_loc_descriptor (REGNO (XVECEXP (regs
, 0, i
)),
9784 VAR_INIT_STATUS_INITIALIZED
);
9785 add_loc_descr (&loc_result
, t
);
9786 size
= GET_MODE_SIZE (GET_MODE (XVECEXP (regs
, 0, 0)));
9787 add_loc_descr_op_piece (&loc_result
, size
);
9790 if (loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
9791 add_loc_descr (&loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
9795 #endif /* DWARF2_DEBUGGING_INFO */
9797 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
9799 /* Return a location descriptor that designates a constant. */
9801 static dw_loc_descr_ref
9802 int_loc_descriptor (HOST_WIDE_INT i
)
9804 enum dwarf_location_atom op
;
9806 /* Pick the smallest representation of a constant, rather than just
9807 defaulting to the LEB encoding. */
9811 op
= DW_OP_lit0
+ i
;
9814 else if (i
<= 0xffff)
9816 else if (HOST_BITS_PER_WIDE_INT
== 32
9826 else if (i
>= -0x8000)
9828 else if (HOST_BITS_PER_WIDE_INT
== 32
9829 || i
>= -0x80000000)
9835 return new_loc_descr (op
, i
, 0);
9839 #ifdef DWARF2_DEBUGGING_INFO
9841 /* Return a location descriptor that designates a base+offset location. */
9843 static dw_loc_descr_ref
9844 based_loc_descr (rtx reg
, HOST_WIDE_INT offset
,
9845 enum var_init_status initialized
)
9848 dw_loc_descr_ref result
;
9849 dw_fde_ref fde
= current_fde ();
9851 /* We only use "frame base" when we're sure we're talking about the
9852 post-prologue local stack frame. We do this by *not* running
9853 register elimination until this point, and recognizing the special
9854 argument pointer and soft frame pointer rtx's. */
9855 if (reg
== arg_pointer_rtx
|| reg
== frame_pointer_rtx
)
9857 rtx elim
= eliminate_regs (reg
, VOIDmode
, NULL_RTX
);
9861 if (GET_CODE (elim
) == PLUS
)
9863 offset
+= INTVAL (XEXP (elim
, 1));
9864 elim
= XEXP (elim
, 0);
9866 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
9867 && (elim
== hard_frame_pointer_rtx
9868 || elim
== stack_pointer_rtx
))
9869 || elim
== (frame_pointer_needed
9870 ? hard_frame_pointer_rtx
9871 : stack_pointer_rtx
));
9873 /* If drap register is used to align stack, use frame
9874 pointer + offset to access stack variables. If stack
9875 is aligned without drap, use stack pointer + offset to
9876 access stack variables. */
9877 if (crtl
->stack_realign_tried
9878 && cfa
.reg
== HARD_FRAME_POINTER_REGNUM
9879 && reg
== frame_pointer_rtx
)
9882 = DWARF_FRAME_REGNUM (cfa
.indirect
9883 ? HARD_FRAME_POINTER_REGNUM
9884 : STACK_POINTER_REGNUM
);
9885 return new_reg_loc_descr (base_reg
, offset
);
9888 offset
+= frame_pointer_fb_offset
;
9889 return new_loc_descr (DW_OP_fbreg
, offset
, 0);
9893 && fde
->drap_reg
!= INVALID_REGNUM
9894 && (fde
->drap_reg
== REGNO (reg
)
9895 || fde
->vdrap_reg
== REGNO (reg
)))
9897 /* Use cfa+offset to represent the location of arguments passed
9898 on stack when drap is used to align stack. */
9899 return new_loc_descr (DW_OP_fbreg
, offset
, 0);
9902 regno
= dbx_reg_number (reg
);
9904 result
= new_loc_descr (DW_OP_breg0
+ regno
, offset
, 0);
9906 result
= new_loc_descr (DW_OP_bregx
, regno
, offset
);
9908 if (initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
9909 add_loc_descr (&result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
9914 /* Return true if this RTL expression describes a base+offset calculation. */
9917 is_based_loc (const_rtx rtl
)
9919 return (GET_CODE (rtl
) == PLUS
9920 && ((REG_P (XEXP (rtl
, 0))
9921 && REGNO (XEXP (rtl
, 0)) < FIRST_PSEUDO_REGISTER
9922 && GET_CODE (XEXP (rtl
, 1)) == CONST_INT
)));
9925 /* Return a descriptor that describes the concatenation of N locations
9926 used to form the address of a memory location. */
9928 static dw_loc_descr_ref
9929 concatn_mem_loc_descriptor (rtx concatn
, enum machine_mode mode
,
9930 enum var_init_status initialized
)
9933 dw_loc_descr_ref cc_loc_result
= NULL
;
9934 unsigned int n
= XVECLEN (concatn
, 0);
9936 for (i
= 0; i
< n
; ++i
)
9938 dw_loc_descr_ref ref
;
9939 rtx x
= XVECEXP (concatn
, 0, i
);
9941 ref
= mem_loc_descriptor (x
, mode
, VAR_INIT_STATUS_INITIALIZED
);
9945 add_loc_descr (&cc_loc_result
, ref
);
9946 add_loc_descr_op_piece (&cc_loc_result
, GET_MODE_SIZE (GET_MODE (x
)));
9949 if (cc_loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
9950 add_loc_descr (&cc_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
9952 return cc_loc_result
;
9955 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
9958 static dw_loc_descr_ref
9959 tls_mem_loc_descriptor (rtx mem
)
9962 dw_loc_descr_ref loc_result
, loc_result2
;
9964 if (MEM_EXPR (mem
) == NULL_TREE
|| MEM_OFFSET (mem
) == NULL_RTX
)
9967 base
= get_base_address (MEM_EXPR (mem
));
9969 || TREE_CODE (base
) != VAR_DECL
9970 || !DECL_THREAD_LOCAL_P (base
))
9973 loc_result
= loc_descriptor_from_tree_1 (MEM_EXPR (mem
), 2);
9974 if (loc_result
== NULL
)
9977 if (INTVAL (MEM_OFFSET (mem
)))
9979 if (INTVAL (MEM_OFFSET (mem
)) >= 0)
9980 add_loc_descr (&loc_result
,
9981 new_loc_descr (DW_OP_plus_uconst
,
9982 INTVAL (MEM_OFFSET (mem
)), 0));
9985 loc_result2
= mem_loc_descriptor (MEM_OFFSET (mem
), GET_MODE (mem
),
9986 VAR_INIT_STATUS_INITIALIZED
);
9987 if (loc_result2
== 0)
9989 add_loc_descr (&loc_result
, loc_result2
);
9990 add_loc_descr (&loc_result
, new_loc_descr (DW_OP_plus
, 0, 0));
9997 /* The following routine converts the RTL for a variable or parameter
9998 (resident in memory) into an equivalent Dwarf representation of a
9999 mechanism for getting the address of that same variable onto the top of a
10000 hypothetical "address evaluation" stack.
10002 When creating memory location descriptors, we are effectively transforming
10003 the RTL for a memory-resident object into its Dwarf postfix expression
10004 equivalent. This routine recursively descends an RTL tree, turning
10005 it into Dwarf postfix code as it goes.
10007 MODE is the mode of the memory reference, needed to handle some
10008 autoincrement addressing modes.
10010 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
10011 location list for RTL.
10013 Return 0 if we can't represent the location. */
10015 static dw_loc_descr_ref
10016 mem_loc_descriptor (rtx rtl
, enum machine_mode mode
,
10017 enum var_init_status initialized
)
10019 dw_loc_descr_ref mem_loc_result
= NULL
;
10020 enum dwarf_location_atom op
;
10022 /* Note that for a dynamically sized array, the location we will generate a
10023 description of here will be the lowest numbered location which is
10024 actually within the array. That's *not* necessarily the same as the
10025 zeroth element of the array. */
10027 rtl
= targetm
.delegitimize_address (rtl
);
10029 switch (GET_CODE (rtl
))
10034 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
10035 just fall into the SUBREG code. */
10037 /* ... fall through ... */
10040 /* The case of a subreg may arise when we have a local (register)
10041 variable or a formal (register) parameter which doesn't quite fill
10042 up an entire register. For now, just assume that it is
10043 legitimate to make the Dwarf info refer to the whole register which
10044 contains the given subreg. */
10045 rtl
= XEXP (rtl
, 0);
10047 /* ... fall through ... */
10050 /* Whenever a register number forms a part of the description of the
10051 method for calculating the (dynamic) address of a memory resident
10052 object, DWARF rules require the register number be referred to as
10053 a "base register". This distinction is not based in any way upon
10054 what category of register the hardware believes the given register
10055 belongs to. This is strictly DWARF terminology we're dealing with
10056 here. Note that in cases where the location of a memory-resident
10057 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
10058 OP_CONST (0)) the actual DWARF location descriptor that we generate
10059 may just be OP_BASEREG (basereg). This may look deceptively like
10060 the object in question was allocated to a register (rather than in
10061 memory) so DWARF consumers need to be aware of the subtle
10062 distinction between OP_REG and OP_BASEREG. */
10063 if (REGNO (rtl
) < FIRST_PSEUDO_REGISTER
)
10064 mem_loc_result
= based_loc_descr (rtl
, 0, VAR_INIT_STATUS_INITIALIZED
);
10065 else if (stack_realign_drap
10067 && crtl
->args
.internal_arg_pointer
== rtl
10068 && REGNO (crtl
->drap_reg
) < FIRST_PSEUDO_REGISTER
)
10070 /* If RTL is internal_arg_pointer, which has been optimized
10071 out, use DRAP instead. */
10072 mem_loc_result
= based_loc_descr (crtl
->drap_reg
, 0,
10073 VAR_INIT_STATUS_INITIALIZED
);
10078 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), GET_MODE (rtl
),
10079 VAR_INIT_STATUS_INITIALIZED
);
10080 if (mem_loc_result
== NULL
)
10081 mem_loc_result
= tls_mem_loc_descriptor (rtl
);
10082 if (mem_loc_result
!= 0)
10083 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_deref
, 0, 0));
10087 rtl
= XEXP (rtl
, 1);
10089 /* ... fall through ... */
10092 /* Some ports can transform a symbol ref into a label ref, because
10093 the symbol ref is too far away and has to be dumped into a constant
10097 /* Alternatively, the symbol in the constant pool might be referenced
10098 by a different symbol. */
10099 if (GET_CODE (rtl
) == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (rtl
))
10102 rtx tmp
= get_pool_constant_mark (rtl
, &marked
);
10104 if (GET_CODE (tmp
) == SYMBOL_REF
)
10107 if (CONSTANT_POOL_ADDRESS_P (tmp
))
10108 get_pool_constant_mark (tmp
, &marked
);
10113 /* If all references to this pool constant were optimized away,
10114 it was not output and thus we can't represent it.
10115 FIXME: might try to use DW_OP_const_value here, though
10116 DW_OP_piece complicates it. */
10121 mem_loc_result
= new_loc_descr (DW_OP_addr
, 0, 0);
10122 mem_loc_result
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
10123 mem_loc_result
->dw_loc_oprnd1
.v
.val_addr
= rtl
;
10124 VEC_safe_push (rtx
, gc
, used_rtx_array
, rtl
);
10128 /* Extract the PLUS expression nested inside and fall into
10129 PLUS code below. */
10130 rtl
= XEXP (rtl
, 1);
10135 /* Turn these into a PLUS expression and fall into the PLUS code
10137 rtl
= gen_rtx_PLUS (word_mode
, XEXP (rtl
, 0),
10138 GEN_INT (GET_CODE (rtl
) == PRE_INC
10139 ? GET_MODE_UNIT_SIZE (mode
)
10140 : -GET_MODE_UNIT_SIZE (mode
)));
10142 /* ... fall through ... */
10146 if (is_based_loc (rtl
))
10147 mem_loc_result
= based_loc_descr (XEXP (rtl
, 0),
10148 INTVAL (XEXP (rtl
, 1)),
10149 VAR_INIT_STATUS_INITIALIZED
);
10152 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), mode
,
10153 VAR_INIT_STATUS_INITIALIZED
);
10154 if (mem_loc_result
== 0)
10157 if (GET_CODE (XEXP (rtl
, 1)) == CONST_INT
10158 && INTVAL (XEXP (rtl
, 1)) >= 0)
10159 add_loc_descr (&mem_loc_result
,
10160 new_loc_descr (DW_OP_plus_uconst
,
10161 INTVAL (XEXP (rtl
, 1)), 0));
10164 dw_loc_descr_ref mem_loc_result2
10165 = mem_loc_descriptor (XEXP (rtl
, 1), mode
,
10166 VAR_INIT_STATUS_INITIALIZED
);
10167 if (mem_loc_result2
== 0)
10169 add_loc_descr (&mem_loc_result
, mem_loc_result2
);
10170 add_loc_descr (&mem_loc_result
,
10171 new_loc_descr (DW_OP_plus
, 0, 0));
10176 /* If a pseudo-reg is optimized away, it is possible for it to
10177 be replaced with a MEM containing a multiply or shift. */
10196 dw_loc_descr_ref op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
,
10197 VAR_INIT_STATUS_INITIALIZED
);
10198 dw_loc_descr_ref op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
,
10199 VAR_INIT_STATUS_INITIALIZED
);
10201 if (op0
== 0 || op1
== 0)
10204 mem_loc_result
= op0
;
10205 add_loc_descr (&mem_loc_result
, op1
);
10206 add_loc_descr (&mem_loc_result
, new_loc_descr (op
, 0, 0));
10211 mem_loc_result
= int_loc_descriptor (INTVAL (rtl
));
10215 mem_loc_result
= concatn_mem_loc_descriptor (rtl
, mode
,
10216 VAR_INIT_STATUS_INITIALIZED
);
10220 /* If delegitimize_address couldn't do anything with the UNSPEC, we
10221 can't express it in the debug info. This can happen e.g. with some
10226 gcc_unreachable ();
10229 if (mem_loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
10230 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
10232 return mem_loc_result
;
10235 /* Return a descriptor that describes the concatenation of two locations.
10236 This is typically a complex variable. */
10238 static dw_loc_descr_ref
10239 concat_loc_descriptor (rtx x0
, rtx x1
, enum var_init_status initialized
)
10241 dw_loc_descr_ref cc_loc_result
= NULL
;
10242 dw_loc_descr_ref x0_ref
= loc_descriptor (x0
, VAR_INIT_STATUS_INITIALIZED
);
10243 dw_loc_descr_ref x1_ref
= loc_descriptor (x1
, VAR_INIT_STATUS_INITIALIZED
);
10245 if (x0_ref
== 0 || x1_ref
== 0)
10248 cc_loc_result
= x0_ref
;
10249 add_loc_descr_op_piece (&cc_loc_result
, GET_MODE_SIZE (GET_MODE (x0
)));
10251 add_loc_descr (&cc_loc_result
, x1_ref
);
10252 add_loc_descr_op_piece (&cc_loc_result
, GET_MODE_SIZE (GET_MODE (x1
)));
10254 if (initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
10255 add_loc_descr (&cc_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
10257 return cc_loc_result
;
10260 /* Return a descriptor that describes the concatenation of N
10263 static dw_loc_descr_ref
10264 concatn_loc_descriptor (rtx concatn
, enum var_init_status initialized
)
10267 dw_loc_descr_ref cc_loc_result
= NULL
;
10268 unsigned int n
= XVECLEN (concatn
, 0);
10270 for (i
= 0; i
< n
; ++i
)
10272 dw_loc_descr_ref ref
;
10273 rtx x
= XVECEXP (concatn
, 0, i
);
10275 ref
= loc_descriptor (x
, VAR_INIT_STATUS_INITIALIZED
);
10279 add_loc_descr (&cc_loc_result
, ref
);
10280 add_loc_descr_op_piece (&cc_loc_result
, GET_MODE_SIZE (GET_MODE (x
)));
10283 if (cc_loc_result
&& initialized
== VAR_INIT_STATUS_UNINITIALIZED
)
10284 add_loc_descr (&cc_loc_result
, new_loc_descr (DW_OP_GNU_uninit
, 0, 0));
10286 return cc_loc_result
;
10289 /* Output a proper Dwarf location descriptor for a variable or parameter
10290 which is either allocated in a register or in a memory location. For a
10291 register, we just generate an OP_REG and the register number. For a
10292 memory location we provide a Dwarf postfix expression describing how to
10293 generate the (dynamic) address of the object onto the address stack.
10295 If we don't know how to describe it, return 0. */
10297 static dw_loc_descr_ref
10298 loc_descriptor (rtx rtl
, enum var_init_status initialized
)
10300 dw_loc_descr_ref loc_result
= NULL
;
10302 switch (GET_CODE (rtl
))
10305 /* The case of a subreg may arise when we have a local (register)
10306 variable or a formal (register) parameter which doesn't quite fill
10307 up an entire register. For now, just assume that it is
10308 legitimate to make the Dwarf info refer to the whole register which
10309 contains the given subreg. */
10310 rtl
= SUBREG_REG (rtl
);
10312 /* ... fall through ... */
10315 loc_result
= reg_loc_descriptor (rtl
, initialized
);
10319 loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), GET_MODE (rtl
),
10321 if (loc_result
== NULL
)
10322 loc_result
= tls_mem_loc_descriptor (rtl
);
10326 loc_result
= concat_loc_descriptor (XEXP (rtl
, 0), XEXP (rtl
, 1),
10331 loc_result
= concatn_loc_descriptor (rtl
, initialized
);
10336 if (GET_CODE (XEXP (rtl
, 1)) != PARALLEL
)
10338 loc_result
= loc_descriptor (XEXP (XEXP (rtl
, 1), 0), initialized
);
10342 rtl
= XEXP (rtl
, 1);
10347 rtvec par_elems
= XVEC (rtl
, 0);
10348 int num_elem
= GET_NUM_ELEM (par_elems
);
10349 enum machine_mode mode
;
10352 /* Create the first one, so we have something to add to. */
10353 loc_result
= loc_descriptor (XEXP (RTVEC_ELT (par_elems
, 0), 0),
10355 if (loc_result
== NULL
)
10357 mode
= GET_MODE (XEXP (RTVEC_ELT (par_elems
, 0), 0));
10358 add_loc_descr_op_piece (&loc_result
, GET_MODE_SIZE (mode
));
10359 for (i
= 1; i
< num_elem
; i
++)
10361 dw_loc_descr_ref temp
;
10363 temp
= loc_descriptor (XEXP (RTVEC_ELT (par_elems
, i
), 0),
10367 add_loc_descr (&loc_result
, temp
);
10368 mode
= GET_MODE (XEXP (RTVEC_ELT (par_elems
, i
), 0));
10369 add_loc_descr_op_piece (&loc_result
, GET_MODE_SIZE (mode
));
10375 gcc_unreachable ();
10381 /* Similar, but generate the descriptor from trees instead of rtl. This comes
10382 up particularly with variable length arrays. WANT_ADDRESS is 2 if this is
10383 a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
10384 top-level invocation, and we require the address of LOC; is 0 if we require
10385 the value of LOC. */
10387 static dw_loc_descr_ref
10388 loc_descriptor_from_tree_1 (tree loc
, int want_address
)
10390 dw_loc_descr_ref ret
, ret1
;
10391 int have_address
= 0;
10392 enum dwarf_location_atom op
;
10394 /* ??? Most of the time we do not take proper care for sign/zero
10395 extending the values properly. Hopefully this won't be a real
10398 switch (TREE_CODE (loc
))
10403 case PLACEHOLDER_EXPR
:
10404 /* This case involves extracting fields from an object to determine the
10405 position of other fields. We don't try to encode this here. The
10406 only user of this is Ada, which encodes the needed information using
10407 the names of types. */
10413 case PREINCREMENT_EXPR
:
10414 case PREDECREMENT_EXPR
:
10415 case POSTINCREMENT_EXPR
:
10416 case POSTDECREMENT_EXPR
:
10417 /* There are no opcodes for these operations. */
10421 /* If we already want an address, there's nothing we can do. */
10425 /* Otherwise, process the argument and look for the address. */
10426 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), 1);
10429 if (DECL_THREAD_LOCAL_P (loc
))
10433 unsigned second_op
;
10435 if (targetm
.have_tls
)
10437 /* If this is not defined, we have no way to emit the
10439 if (!targetm
.asm_out
.output_dwarf_dtprel
)
10442 /* The way DW_OP_GNU_push_tls_address is specified, we
10443 can only look up addresses of objects in the current
10445 if (DECL_EXTERNAL (loc
) && !targetm
.binds_local_p (loc
))
10447 first_op
= INTERNAL_DW_OP_tls_addr
;
10448 second_op
= DW_OP_GNU_push_tls_address
;
10452 if (!targetm
.emutls
.debug_form_tls_address
)
10454 loc
= emutls_decl (loc
);
10455 first_op
= DW_OP_addr
;
10456 second_op
= DW_OP_form_tls_address
;
10459 rtl
= rtl_for_decl_location (loc
);
10460 if (rtl
== NULL_RTX
)
10465 rtl
= XEXP (rtl
, 0);
10466 if (! CONSTANT_P (rtl
))
10469 ret
= new_loc_descr (first_op
, 0, 0);
10470 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
10471 ret
->dw_loc_oprnd1
.v
.val_addr
= rtl
;
10473 ret1
= new_loc_descr (second_op
, 0, 0);
10474 add_loc_descr (&ret
, ret1
);
10482 if (DECL_HAS_VALUE_EXPR_P (loc
))
10483 return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc
),
10488 case FUNCTION_DECL
:
10490 rtx rtl
= rtl_for_decl_location (loc
);
10492 if (rtl
== NULL_RTX
)
10494 else if (GET_CODE (rtl
) == CONST_INT
)
10496 HOST_WIDE_INT val
= INTVAL (rtl
);
10497 if (TYPE_UNSIGNED (TREE_TYPE (loc
)))
10498 val
&= GET_MODE_MASK (DECL_MODE (loc
));
10499 ret
= int_loc_descriptor (val
);
10501 else if (GET_CODE (rtl
) == CONST_STRING
)
10503 else if (CONSTANT_P (rtl
))
10505 ret
= new_loc_descr (DW_OP_addr
, 0, 0);
10506 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
10507 ret
->dw_loc_oprnd1
.v
.val_addr
= rtl
;
10511 enum machine_mode mode
;
10513 /* Certain constructs can only be represented at top-level. */
10514 if (want_address
== 2)
10515 return loc_descriptor (rtl
, VAR_INIT_STATUS_INITIALIZED
);
10517 mode
= GET_MODE (rtl
);
10520 rtl
= XEXP (rtl
, 0);
10523 ret
= mem_loc_descriptor (rtl
, mode
, VAR_INIT_STATUS_INITIALIZED
);
10529 ret
= loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), 0);
10533 case COMPOUND_EXPR
:
10534 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 1), want_address
);
10537 case VIEW_CONVERT_EXPR
:
10540 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), want_address
);
10542 case COMPONENT_REF
:
10543 case BIT_FIELD_REF
:
10545 case ARRAY_RANGE_REF
:
10548 HOST_WIDE_INT bitsize
, bitpos
, bytepos
;
10549 enum machine_mode mode
;
10551 int unsignedp
= TYPE_UNSIGNED (TREE_TYPE (loc
));
10553 obj
= get_inner_reference (loc
, &bitsize
, &bitpos
, &offset
, &mode
,
10554 &unsignedp
, &volatilep
, false);
10559 ret
= loc_descriptor_from_tree_1 (obj
, 1);
10561 || bitpos
% BITS_PER_UNIT
!= 0 || bitsize
% BITS_PER_UNIT
!= 0)
10564 if (offset
!= NULL_TREE
)
10566 /* Variable offset. */
10567 ret1
= loc_descriptor_from_tree_1 (offset
, 0);
10570 add_loc_descr (&ret
, ret1
);
10571 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus
, 0, 0));
10574 bytepos
= bitpos
/ BITS_PER_UNIT
;
10576 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus_uconst
, bytepos
, 0));
10577 else if (bytepos
< 0)
10579 add_loc_descr (&ret
, int_loc_descriptor (bytepos
));
10580 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus
, 0, 0));
10588 if (host_integerp (loc
, 0))
10589 ret
= int_loc_descriptor (tree_low_cst (loc
, 0));
10596 /* Get an RTL for this, if something has been emitted. */
10597 rtx rtl
= lookup_constant_def (loc
);
10598 enum machine_mode mode
;
10600 if (!rtl
|| !MEM_P (rtl
))
10602 mode
= GET_MODE (rtl
);
10603 rtl
= XEXP (rtl
, 0);
10604 ret
= mem_loc_descriptor (rtl
, mode
, VAR_INIT_STATUS_INITIALIZED
);
10609 case TRUTH_AND_EXPR
:
10610 case TRUTH_ANDIF_EXPR
:
10615 case TRUTH_XOR_EXPR
:
10620 case TRUTH_OR_EXPR
:
10621 case TRUTH_ORIF_EXPR
:
10626 case FLOOR_DIV_EXPR
:
10627 case CEIL_DIV_EXPR
:
10628 case ROUND_DIV_EXPR
:
10629 case TRUNC_DIV_EXPR
:
10637 case FLOOR_MOD_EXPR
:
10638 case CEIL_MOD_EXPR
:
10639 case ROUND_MOD_EXPR
:
10640 case TRUNC_MOD_EXPR
:
10653 op
= (TYPE_UNSIGNED (TREE_TYPE (loc
)) ? DW_OP_shr
: DW_OP_shra
);
10656 case POINTER_PLUS_EXPR
:
10658 if (TREE_CODE (TREE_OPERAND (loc
, 1)) == INTEGER_CST
10659 && host_integerp (TREE_OPERAND (loc
, 1), 0))
10661 ret
= loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), 0);
10665 add_loc_descr (&ret
,
10666 new_loc_descr (DW_OP_plus_uconst
,
10667 tree_low_cst (TREE_OPERAND (loc
, 1),
10677 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
10684 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
10691 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
10698 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
10713 ret
= loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), 0);
10714 ret1
= loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 1), 0);
10715 if (ret
== 0 || ret1
== 0)
10718 add_loc_descr (&ret
, ret1
);
10719 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
10722 case TRUTH_NOT_EXPR
:
10736 ret
= loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), 0);
10740 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
10746 const enum tree_code code
=
10747 TREE_CODE (loc
) == MIN_EXPR
? GT_EXPR
: LT_EXPR
;
10749 loc
= build3 (COND_EXPR
, TREE_TYPE (loc
),
10750 build2 (code
, integer_type_node
,
10751 TREE_OPERAND (loc
, 0), TREE_OPERAND (loc
, 1)),
10752 TREE_OPERAND (loc
, 1), TREE_OPERAND (loc
, 0));
10755 /* ... fall through ... */
10759 dw_loc_descr_ref lhs
10760 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 1), 0);
10761 dw_loc_descr_ref rhs
10762 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 2), 0);
10763 dw_loc_descr_ref bra_node
, jump_node
, tmp
;
10765 ret
= loc_descriptor_from_tree_1 (TREE_OPERAND (loc
, 0), 0);
10766 if (ret
== 0 || lhs
== 0 || rhs
== 0)
10769 bra_node
= new_loc_descr (DW_OP_bra
, 0, 0);
10770 add_loc_descr (&ret
, bra_node
);
10772 add_loc_descr (&ret
, rhs
);
10773 jump_node
= new_loc_descr (DW_OP_skip
, 0, 0);
10774 add_loc_descr (&ret
, jump_node
);
10776 add_loc_descr (&ret
, lhs
);
10777 bra_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
10778 bra_node
->dw_loc_oprnd1
.v
.val_loc
= lhs
;
10780 /* ??? Need a node to point the skip at. Use a nop. */
10781 tmp
= new_loc_descr (DW_OP_nop
, 0, 0);
10782 add_loc_descr (&ret
, tmp
);
10783 jump_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
10784 jump_node
->dw_loc_oprnd1
.v
.val_loc
= tmp
;
10788 case FIX_TRUNC_EXPR
:
10792 /* Leave front-end specific codes as simply unknown. This comes
10793 up, for instance, with the C STMT_EXPR. */
10794 if ((unsigned int) TREE_CODE (loc
)
10795 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE
)
10798 #ifdef ENABLE_CHECKING
10799 /* Otherwise this is a generic code; we should just lists all of
10800 these explicitly. We forgot one. */
10801 gcc_unreachable ();
10803 /* In a release build, we want to degrade gracefully: better to
10804 generate incomplete debugging information than to crash. */
10809 /* Show if we can't fill the request for an address. */
10810 if (want_address
&& !have_address
)
10813 /* If we've got an address and don't want one, dereference. */
10814 if (!want_address
&& have_address
&& ret
)
10816 HOST_WIDE_INT size
= int_size_in_bytes (TREE_TYPE (loc
));
10818 if (size
> DWARF2_ADDR_SIZE
|| size
== -1)
10820 else if (size
== DWARF2_ADDR_SIZE
)
10823 op
= DW_OP_deref_size
;
10825 add_loc_descr (&ret
, new_loc_descr (op
, size
, 0));
10831 static inline dw_loc_descr_ref
10832 loc_descriptor_from_tree (tree loc
)
10834 return loc_descriptor_from_tree_1 (loc
, 2);
10837 /* Given a value, round it up to the lowest multiple of `boundary'
10838 which is not less than the value itself. */
10840 static inline HOST_WIDE_INT
10841 ceiling (HOST_WIDE_INT value
, unsigned int boundary
)
10843 return (((value
+ boundary
- 1) / boundary
) * boundary
);
10846 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
10847 pointer to the declared type for the relevant field variable, or return
10848 `integer_type_node' if the given node turns out to be an
10849 ERROR_MARK node. */
10852 field_type (const_tree decl
)
10856 if (TREE_CODE (decl
) == ERROR_MARK
)
10857 return integer_type_node
;
10859 type
= DECL_BIT_FIELD_TYPE (decl
);
10860 if (type
== NULL_TREE
)
10861 type
= TREE_TYPE (decl
);
10866 /* Given a pointer to a tree node, return the alignment in bits for
10867 it, or else return BITS_PER_WORD if the node actually turns out to
10868 be an ERROR_MARK node. */
10870 static inline unsigned
10871 simple_type_align_in_bits (const_tree type
)
10873 return (TREE_CODE (type
) != ERROR_MARK
) ? TYPE_ALIGN (type
) : BITS_PER_WORD
;
10876 static inline unsigned
10877 simple_decl_align_in_bits (const_tree decl
)
10879 return (TREE_CODE (decl
) != ERROR_MARK
) ? DECL_ALIGN (decl
) : BITS_PER_WORD
;
10882 /* Return the result of rounding T up to ALIGN. */
10884 static inline HOST_WIDE_INT
10885 round_up_to_align (HOST_WIDE_INT t
, unsigned int align
)
10887 /* We must be careful if T is negative because HOST_WIDE_INT can be
10888 either "above" or "below" unsigned int as per the C promotion
10889 rules, depending on the host, thus making the signedness of the
10890 direct multiplication and division unpredictable. */
10891 unsigned HOST_WIDE_INT u
= (unsigned HOST_WIDE_INT
) t
;
10897 return (HOST_WIDE_INT
) u
;
10900 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
10901 lowest addressed byte of the "containing object" for the given FIELD_DECL,
10902 or return 0 if we are unable to determine what that offset is, either
10903 because the argument turns out to be a pointer to an ERROR_MARK node, or
10904 because the offset is actually variable. (We can't handle the latter case
10907 static HOST_WIDE_INT
10908 field_byte_offset (const_tree decl
)
10910 HOST_WIDE_INT object_offset_in_bits
;
10911 HOST_WIDE_INT bitpos_int
;
10913 if (TREE_CODE (decl
) == ERROR_MARK
)
10916 gcc_assert (TREE_CODE (decl
) == FIELD_DECL
);
10918 /* We cannot yet cope with fields whose positions are variable, so
10919 for now, when we see such things, we simply return 0. Someday, we may
10920 be able to handle such cases, but it will be damn difficult. */
10921 if (! host_integerp (bit_position (decl
), 0))
10924 bitpos_int
= int_bit_position (decl
);
10926 #ifdef PCC_BITFIELD_TYPE_MATTERS
10927 if (PCC_BITFIELD_TYPE_MATTERS
)
10930 tree field_size_tree
;
10931 HOST_WIDE_INT deepest_bitpos
;
10932 unsigned HOST_WIDE_INT field_size_in_bits
;
10933 unsigned int type_align_in_bits
;
10934 unsigned int decl_align_in_bits
;
10935 unsigned HOST_WIDE_INT type_size_in_bits
;
10937 type
= field_type (decl
);
10938 field_size_tree
= DECL_SIZE (decl
);
10940 /* The size could be unspecified if there was an error, or for
10941 a flexible array member. */
10942 if (! field_size_tree
)
10943 field_size_tree
= bitsize_zero_node
;
10945 /* If we don't know the size of the field, pretend it's a full word. */
10946 if (host_integerp (field_size_tree
, 1))
10947 field_size_in_bits
= tree_low_cst (field_size_tree
, 1);
10949 field_size_in_bits
= BITS_PER_WORD
;
10951 type_size_in_bits
= simple_type_size_in_bits (type
);
10952 type_align_in_bits
= simple_type_align_in_bits (type
);
10953 decl_align_in_bits
= simple_decl_align_in_bits (decl
);
10955 /* The GCC front-end doesn't make any attempt to keep track of the
10956 starting bit offset (relative to the start of the containing
10957 structure type) of the hypothetical "containing object" for a
10958 bit-field. Thus, when computing the byte offset value for the
10959 start of the "containing object" of a bit-field, we must deduce
10960 this information on our own. This can be rather tricky to do in
10961 some cases. For example, handling the following structure type
10962 definition when compiling for an i386/i486 target (which only
10963 aligns long long's to 32-bit boundaries) can be very tricky:
10965 struct S { int field1; long long field2:31; };
10967 Fortunately, there is a simple rule-of-thumb which can be used
10968 in such cases. When compiling for an i386/i486, GCC will
10969 allocate 8 bytes for the structure shown above. It decides to
10970 do this based upon one simple rule for bit-field allocation.
10971 GCC allocates each "containing object" for each bit-field at
10972 the first (i.e. lowest addressed) legitimate alignment boundary
10973 (based upon the required minimum alignment for the declared
10974 type of the field) which it can possibly use, subject to the
10975 condition that there is still enough available space remaining
10976 in the containing object (when allocated at the selected point)
10977 to fully accommodate all of the bits of the bit-field itself.
10979 This simple rule makes it obvious why GCC allocates 8 bytes for
10980 each object of the structure type shown above. When looking
10981 for a place to allocate the "containing object" for `field2',
10982 the compiler simply tries to allocate a 64-bit "containing
10983 object" at each successive 32-bit boundary (starting at zero)
10984 until it finds a place to allocate that 64- bit field such that
10985 at least 31 contiguous (and previously unallocated) bits remain
10986 within that selected 64 bit field. (As it turns out, for the
10987 example above, the compiler finds it is OK to allocate the
10988 "containing object" 64-bit field at bit-offset zero within the
10991 Here we attempt to work backwards from the limited set of facts
10992 we're given, and we try to deduce from those facts, where GCC
10993 must have believed that the containing object started (within
10994 the structure type). The value we deduce is then used (by the
10995 callers of this routine) to generate DW_AT_location and
10996 DW_AT_bit_offset attributes for fields (both bit-fields and, in
10997 the case of DW_AT_location, regular fields as well). */
10999 /* Figure out the bit-distance from the start of the structure to
11000 the "deepest" bit of the bit-field. */
11001 deepest_bitpos
= bitpos_int
+ field_size_in_bits
;
11003 /* This is the tricky part. Use some fancy footwork to deduce
11004 where the lowest addressed bit of the containing object must
11006 object_offset_in_bits
= deepest_bitpos
- type_size_in_bits
;
11008 /* Round up to type_align by default. This works best for
11010 object_offset_in_bits
11011 = round_up_to_align (object_offset_in_bits
, type_align_in_bits
);
11013 if (object_offset_in_bits
> bitpos_int
)
11015 object_offset_in_bits
= deepest_bitpos
- type_size_in_bits
;
11017 /* Round up to decl_align instead. */
11018 object_offset_in_bits
11019 = round_up_to_align (object_offset_in_bits
, decl_align_in_bits
);
11024 object_offset_in_bits
= bitpos_int
;
11026 return object_offset_in_bits
/ BITS_PER_UNIT
;
11029 /* The following routines define various Dwarf attributes and any data
11030 associated with them. */
11032 /* Add a location description attribute value to a DIE.
11034 This emits location attributes suitable for whole variables and
11035 whole parameters. Note that the location attributes for struct fields are
11036 generated by the routine `data_member_location_attribute' below. */
11039 add_AT_location_description (dw_die_ref die
, enum dwarf_attribute attr_kind
,
11040 dw_loc_descr_ref descr
)
11043 add_AT_loc (die
, attr_kind
, descr
);
11046 /* Attach the specialized form of location attribute used for data members of
11047 struct and union types. In the special case of a FIELD_DECL node which
11048 represents a bit-field, the "offset" part of this special location
11049 descriptor must indicate the distance in bytes from the lowest-addressed
11050 byte of the containing struct or union type to the lowest-addressed byte of
11051 the "containing object" for the bit-field. (See the `field_byte_offset'
11054 For any given bit-field, the "containing object" is a hypothetical object
11055 (of some integral or enum type) within which the given bit-field lives. The
11056 type of this hypothetical "containing object" is always the same as the
11057 declared type of the individual bit-field itself (for GCC anyway... the
11058 DWARF spec doesn't actually mandate this). Note that it is the size (in
11059 bytes) of the hypothetical "containing object" which will be given in the
11060 DW_AT_byte_size attribute for this bit-field. (See the
11061 `byte_size_attribute' function below.) It is also used when calculating the
11062 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
11063 function below.) */
11066 add_data_member_location_attribute (dw_die_ref die
, tree decl
)
11068 HOST_WIDE_INT offset
;
11069 dw_loc_descr_ref loc_descr
= 0;
11071 if (TREE_CODE (decl
) == TREE_BINFO
)
11073 /* We're working on the TAG_inheritance for a base class. */
11074 if (BINFO_VIRTUAL_P (decl
) && is_cxx ())
11076 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
11077 aren't at a fixed offset from all (sub)objects of the same
11078 type. We need to extract the appropriate offset from our
11079 vtable. The following dwarf expression means
11081 BaseAddr = ObAddr + *((*ObAddr) - Offset)
11083 This is specific to the V3 ABI, of course. */
11085 dw_loc_descr_ref tmp
;
11087 /* Make a copy of the object address. */
11088 tmp
= new_loc_descr (DW_OP_dup
, 0, 0);
11089 add_loc_descr (&loc_descr
, tmp
);
11091 /* Extract the vtable address. */
11092 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
11093 add_loc_descr (&loc_descr
, tmp
);
11095 /* Calculate the address of the offset. */
11096 offset
= tree_low_cst (BINFO_VPTR_FIELD (decl
), 0);
11097 gcc_assert (offset
< 0);
11099 tmp
= int_loc_descriptor (-offset
);
11100 add_loc_descr (&loc_descr
, tmp
);
11101 tmp
= new_loc_descr (DW_OP_minus
, 0, 0);
11102 add_loc_descr (&loc_descr
, tmp
);
11104 /* Extract the offset. */
11105 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
11106 add_loc_descr (&loc_descr
, tmp
);
11108 /* Add it to the object address. */
11109 tmp
= new_loc_descr (DW_OP_plus
, 0, 0);
11110 add_loc_descr (&loc_descr
, tmp
);
11113 offset
= tree_low_cst (BINFO_OFFSET (decl
), 0);
11116 offset
= field_byte_offset (decl
);
11120 enum dwarf_location_atom op
;
11122 /* The DWARF2 standard says that we should assume that the structure
11123 address is already on the stack, so we can specify a structure field
11124 address by using DW_OP_plus_uconst. */
11126 #ifdef MIPS_DEBUGGING_INFO
11127 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
11128 operator correctly. It works only if we leave the offset on the
11132 op
= DW_OP_plus_uconst
;
11135 loc_descr
= new_loc_descr (op
, offset
, 0);
11138 add_AT_loc (die
, DW_AT_data_member_location
, loc_descr
);
11141 /* Writes integer values to dw_vec_const array. */
11144 insert_int (HOST_WIDE_INT val
, unsigned int size
, unsigned char *dest
)
11148 *dest
++ = val
& 0xff;
11154 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
11156 static HOST_WIDE_INT
11157 extract_int (const unsigned char *src
, unsigned int size
)
11159 HOST_WIDE_INT val
= 0;
11165 val
|= *--src
& 0xff;
11171 /* Writes floating point values to dw_vec_const array. */
11174 insert_float (const_rtx rtl
, unsigned char *array
)
11176 REAL_VALUE_TYPE rv
;
11180 REAL_VALUE_FROM_CONST_DOUBLE (rv
, rtl
);
11181 real_to_target (val
, &rv
, GET_MODE (rtl
));
11183 /* real_to_target puts 32-bit pieces in each long. Pack them. */
11184 for (i
= 0; i
< GET_MODE_SIZE (GET_MODE (rtl
)) / 4; i
++)
11186 insert_int (val
[i
], 4, array
);
11191 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
11192 does not have a "location" either in memory or in a register. These
11193 things can arise in GNU C when a constant is passed as an actual parameter
11194 to an inlined function. They can also arise in C++ where declared
11195 constants do not necessarily get memory "homes". */
11198 add_const_value_attribute (dw_die_ref die
, rtx rtl
)
11200 switch (GET_CODE (rtl
))
11204 HOST_WIDE_INT val
= INTVAL (rtl
);
11207 add_AT_int (die
, DW_AT_const_value
, val
);
11209 add_AT_unsigned (die
, DW_AT_const_value
, (unsigned HOST_WIDE_INT
) val
);
11214 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
11215 floating-point constant. A CONST_DOUBLE is used whenever the
11216 constant requires more than one word in order to be adequately
11217 represented. We output CONST_DOUBLEs as blocks. */
11219 enum machine_mode mode
= GET_MODE (rtl
);
11221 if (SCALAR_FLOAT_MODE_P (mode
))
11223 unsigned int length
= GET_MODE_SIZE (mode
);
11224 unsigned char *array
= GGC_NEWVEC (unsigned char, length
);
11226 insert_float (rtl
, array
);
11227 add_AT_vec (die
, DW_AT_const_value
, length
/ 4, 4, array
);
11231 /* ??? We really should be using HOST_WIDE_INT throughout. */
11232 gcc_assert (HOST_BITS_PER_LONG
== HOST_BITS_PER_WIDE_INT
);
11234 add_AT_long_long (die
, DW_AT_const_value
,
11235 CONST_DOUBLE_HIGH (rtl
), CONST_DOUBLE_LOW (rtl
));
11242 enum machine_mode mode
= GET_MODE (rtl
);
11243 unsigned int elt_size
= GET_MODE_UNIT_SIZE (mode
);
11244 unsigned int length
= CONST_VECTOR_NUNITS (rtl
);
11245 unsigned char *array
= GGC_NEWVEC (unsigned char, length
* elt_size
);
11249 switch (GET_MODE_CLASS (mode
))
11251 case MODE_VECTOR_INT
:
11252 for (i
= 0, p
= array
; i
< length
; i
++, p
+= elt_size
)
11254 rtx elt
= CONST_VECTOR_ELT (rtl
, i
);
11255 HOST_WIDE_INT lo
, hi
;
11257 switch (GET_CODE (elt
))
11265 lo
= CONST_DOUBLE_LOW (elt
);
11266 hi
= CONST_DOUBLE_HIGH (elt
);
11270 gcc_unreachable ();
11273 if (elt_size
<= sizeof (HOST_WIDE_INT
))
11274 insert_int (lo
, elt_size
, p
);
11277 unsigned char *p0
= p
;
11278 unsigned char *p1
= p
+ sizeof (HOST_WIDE_INT
);
11280 gcc_assert (elt_size
== 2 * sizeof (HOST_WIDE_INT
));
11281 if (WORDS_BIG_ENDIAN
)
11286 insert_int (lo
, sizeof (HOST_WIDE_INT
), p0
);
11287 insert_int (hi
, sizeof (HOST_WIDE_INT
), p1
);
11292 case MODE_VECTOR_FLOAT
:
11293 for (i
= 0, p
= array
; i
< length
; i
++, p
+= elt_size
)
11295 rtx elt
= CONST_VECTOR_ELT (rtl
, i
);
11296 insert_float (elt
, p
);
11301 gcc_unreachable ();
11304 add_AT_vec (die
, DW_AT_const_value
, length
, elt_size
, array
);
11309 add_AT_string (die
, DW_AT_const_value
, XSTR (rtl
, 0));
11315 add_AT_addr (die
, DW_AT_const_value
, rtl
);
11316 VEC_safe_push (rtx
, gc
, used_rtx_array
, rtl
);
11320 /* In cases where an inlined instance of an inline function is passed
11321 the address of an `auto' variable (which is local to the caller) we
11322 can get a situation where the DECL_RTL of the artificial local
11323 variable (for the inlining) which acts as a stand-in for the
11324 corresponding formal parameter (of the inline function) will look
11325 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
11326 exactly a compile-time constant expression, but it isn't the address
11327 of the (artificial) local variable either. Rather, it represents the
11328 *value* which the artificial local variable always has during its
11329 lifetime. We currently have no way to represent such quasi-constant
11330 values in Dwarf, so for now we just punt and generate nothing. */
11334 /* No other kinds of rtx should be possible here. */
11335 gcc_unreachable ();
11340 /* Determine whether the evaluation of EXPR references any variables
11341 or functions which aren't otherwise used (and therefore may not be
11344 reference_to_unused (tree
* tp
, int * walk_subtrees
,
11345 void * data ATTRIBUTE_UNUSED
)
11347 if (! EXPR_P (*tp
) && ! CONSTANT_CLASS_P (*tp
))
11348 *walk_subtrees
= 0;
11350 if (DECL_P (*tp
) && ! TREE_PUBLIC (*tp
) && ! TREE_USED (*tp
)
11351 && ! TREE_ASM_WRITTEN (*tp
))
11353 /* ??? The C++ FE emits debug information for using decls, so
11354 putting gcc_unreachable here falls over. See PR31899. For now
11355 be conservative. */
11356 else if (!cgraph_global_info_ready
11357 && (TREE_CODE (*tp
) == VAR_DECL
|| TREE_CODE (*tp
) == FUNCTION_DECL
))
11359 else if (DECL_P (*tp
) && TREE_CODE (*tp
) == VAR_DECL
)
11361 struct varpool_node
*node
= varpool_node (*tp
);
11365 else if (DECL_P (*tp
) && TREE_CODE (*tp
) == FUNCTION_DECL
11366 && (!DECL_EXTERNAL (*tp
) || DECL_DECLARED_INLINE_P (*tp
)))
11368 struct cgraph_node
*node
= cgraph_node (*tp
);
11372 else if (TREE_CODE (*tp
) == STRING_CST
&& !TREE_ASM_WRITTEN (*tp
))
11378 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
11379 for use in a later add_const_value_attribute call. */
11382 rtl_for_decl_init (tree init
, tree type
)
11384 rtx rtl
= NULL_RTX
;
11386 /* If a variable is initialized with a string constant without embedded
11387 zeros, build CONST_STRING. */
11388 if (TREE_CODE (init
) == STRING_CST
&& TREE_CODE (type
) == ARRAY_TYPE
)
11390 tree enttype
= TREE_TYPE (type
);
11391 tree domain
= TYPE_DOMAIN (type
);
11392 enum machine_mode mode
= TYPE_MODE (enttype
);
11394 if (GET_MODE_CLASS (mode
) == MODE_INT
&& GET_MODE_SIZE (mode
) == 1
11396 && integer_zerop (TYPE_MIN_VALUE (domain
))
11397 && compare_tree_int (TYPE_MAX_VALUE (domain
),
11398 TREE_STRING_LENGTH (init
) - 1) == 0
11399 && ((size_t) TREE_STRING_LENGTH (init
)
11400 == strlen (TREE_STRING_POINTER (init
)) + 1))
11401 rtl
= gen_rtx_CONST_STRING (VOIDmode
,
11402 ggc_strdup (TREE_STRING_POINTER (init
)));
11404 /* Other aggregates, and complex values, could be represented using
11406 else if (AGGREGATE_TYPE_P (type
) || TREE_CODE (type
) == COMPLEX_TYPE
)
11408 /* Vectors only work if their mode is supported by the target.
11409 FIXME: generic vectors ought to work too. */
11410 else if (TREE_CODE (type
) == VECTOR_TYPE
&& TYPE_MODE (type
) == BLKmode
)
11412 /* If the initializer is something that we know will expand into an
11413 immediate RTL constant, expand it now. We must be careful not to
11414 reference variables which won't be output. */
11415 else if (initializer_constant_valid_p (init
, type
)
11416 && ! walk_tree (&init
, reference_to_unused
, NULL
, NULL
))
11418 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
11420 if (TREE_CODE (type
) == VECTOR_TYPE
)
11421 switch (TREE_CODE (init
))
11426 if (TREE_CONSTANT (init
))
11428 VEC(constructor_elt
,gc
) *elts
= CONSTRUCTOR_ELTS (init
);
11429 bool constant_p
= true;
11431 unsigned HOST_WIDE_INT ix
;
11433 /* Even when ctor is constant, it might contain non-*_CST
11434 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
11435 belong into VECTOR_CST nodes. */
11436 FOR_EACH_CONSTRUCTOR_VALUE (elts
, ix
, value
)
11437 if (!CONSTANT_CLASS_P (value
))
11439 constant_p
= false;
11445 init
= build_vector_from_ctor (type
, elts
);
11455 rtl
= expand_expr (init
, NULL_RTX
, VOIDmode
, EXPAND_INITIALIZER
);
11457 /* If expand_expr returns a MEM, it wasn't immediate. */
11458 gcc_assert (!rtl
|| !MEM_P (rtl
));
11464 /* Generate RTL for the variable DECL to represent its location. */
11467 rtl_for_decl_location (tree decl
)
11471 /* Here we have to decide where we are going to say the parameter "lives"
11472 (as far as the debugger is concerned). We only have a couple of
11473 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
11475 DECL_RTL normally indicates where the parameter lives during most of the
11476 activation of the function. If optimization is enabled however, this
11477 could be either NULL or else a pseudo-reg. Both of those cases indicate
11478 that the parameter doesn't really live anywhere (as far as the code
11479 generation parts of GCC are concerned) during most of the function's
11480 activation. That will happen (for example) if the parameter is never
11481 referenced within the function.
11483 We could just generate a location descriptor here for all non-NULL
11484 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
11485 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
11486 where DECL_RTL is NULL or is a pseudo-reg.
11488 Note however that we can only get away with using DECL_INCOMING_RTL as
11489 a backup substitute for DECL_RTL in certain limited cases. In cases
11490 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
11491 we can be sure that the parameter was passed using the same type as it is
11492 declared to have within the function, and that its DECL_INCOMING_RTL
11493 points us to a place where a value of that type is passed.
11495 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
11496 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
11497 because in these cases DECL_INCOMING_RTL points us to a value of some
11498 type which is *different* from the type of the parameter itself. Thus,
11499 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
11500 such cases, the debugger would end up (for example) trying to fetch a
11501 `float' from a place which actually contains the first part of a
11502 `double'. That would lead to really incorrect and confusing
11503 output at debug-time.
11505 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
11506 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
11507 are a couple of exceptions however. On little-endian machines we can
11508 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
11509 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
11510 an integral type that is smaller than TREE_TYPE (decl). These cases arise
11511 when (on a little-endian machine) a non-prototyped function has a
11512 parameter declared to be of type `short' or `char'. In such cases,
11513 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
11514 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
11515 passed `int' value. If the debugger then uses that address to fetch
11516 a `short' or a `char' (on a little-endian machine) the result will be
11517 the correct data, so we allow for such exceptional cases below.
11519 Note that our goal here is to describe the place where the given formal
11520 parameter lives during most of the function's activation (i.e. between the
11521 end of the prologue and the start of the epilogue). We'll do that as best
11522 as we can. Note however that if the given formal parameter is modified
11523 sometime during the execution of the function, then a stack backtrace (at
11524 debug-time) will show the function as having been called with the *new*
11525 value rather than the value which was originally passed in. This happens
11526 rarely enough that it is not a major problem, but it *is* a problem, and
11527 I'd like to fix it.
11529 A future version of dwarf2out.c may generate two additional attributes for
11530 any given DW_TAG_formal_parameter DIE which will describe the "passed
11531 type" and the "passed location" for the given formal parameter in addition
11532 to the attributes we now generate to indicate the "declared type" and the
11533 "active location" for each parameter. This additional set of attributes
11534 could be used by debuggers for stack backtraces. Separately, note that
11535 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
11536 This happens (for example) for inlined-instances of inline function formal
11537 parameters which are never referenced. This really shouldn't be
11538 happening. All PARM_DECL nodes should get valid non-NULL
11539 DECL_INCOMING_RTL values. FIXME. */
11541 /* Use DECL_RTL as the "location" unless we find something better. */
11542 rtl
= DECL_RTL_IF_SET (decl
);
11544 /* When generating abstract instances, ignore everything except
11545 constants, symbols living in memory, and symbols living in
11546 fixed registers. */
11547 if (! reload_completed
)
11550 && (CONSTANT_P (rtl
)
11552 && CONSTANT_P (XEXP (rtl
, 0)))
11554 && TREE_CODE (decl
) == VAR_DECL
11555 && TREE_STATIC (decl
))))
11557 rtl
= targetm
.delegitimize_address (rtl
);
11562 else if (TREE_CODE (decl
) == PARM_DECL
)
11564 if (rtl
== NULL_RTX
|| is_pseudo_reg (rtl
))
11566 tree declared_type
= TREE_TYPE (decl
);
11567 tree passed_type
= DECL_ARG_TYPE (decl
);
11568 enum machine_mode dmode
= TYPE_MODE (declared_type
);
11569 enum machine_mode pmode
= TYPE_MODE (passed_type
);
11571 /* This decl represents a formal parameter which was optimized out.
11572 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
11573 all cases where (rtl == NULL_RTX) just below. */
11574 if (dmode
== pmode
)
11575 rtl
= DECL_INCOMING_RTL (decl
);
11576 else if (SCALAR_INT_MODE_P (dmode
)
11577 && GET_MODE_SIZE (dmode
) <= GET_MODE_SIZE (pmode
)
11578 && DECL_INCOMING_RTL (decl
))
11580 rtx inc
= DECL_INCOMING_RTL (decl
);
11583 else if (MEM_P (inc
))
11585 if (BYTES_BIG_ENDIAN
)
11586 rtl
= adjust_address_nv (inc
, dmode
,
11587 GET_MODE_SIZE (pmode
)
11588 - GET_MODE_SIZE (dmode
));
11595 /* If the parm was passed in registers, but lives on the stack, then
11596 make a big endian correction if the mode of the type of the
11597 parameter is not the same as the mode of the rtl. */
11598 /* ??? This is the same series of checks that are made in dbxout.c before
11599 we reach the big endian correction code there. It isn't clear if all
11600 of these checks are necessary here, but keeping them all is the safe
11602 else if (MEM_P (rtl
)
11603 && XEXP (rtl
, 0) != const0_rtx
11604 && ! CONSTANT_P (XEXP (rtl
, 0))
11605 /* Not passed in memory. */
11606 && !MEM_P (DECL_INCOMING_RTL (decl
))
11607 /* Not passed by invisible reference. */
11608 && (!REG_P (XEXP (rtl
, 0))
11609 || REGNO (XEXP (rtl
, 0)) == HARD_FRAME_POINTER_REGNUM
11610 || REGNO (XEXP (rtl
, 0)) == STACK_POINTER_REGNUM
11611 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
11612 || REGNO (XEXP (rtl
, 0)) == ARG_POINTER_REGNUM
11615 /* Big endian correction check. */
11616 && BYTES_BIG_ENDIAN
11617 && TYPE_MODE (TREE_TYPE (decl
)) != GET_MODE (rtl
)
11618 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
)))
11621 int offset
= (UNITS_PER_WORD
11622 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
))));
11624 rtl
= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl
)),
11625 plus_constant (XEXP (rtl
, 0), offset
));
11628 else if (TREE_CODE (decl
) == VAR_DECL
11631 && GET_MODE (rtl
) != TYPE_MODE (TREE_TYPE (decl
))
11632 && BYTES_BIG_ENDIAN
)
11634 int rsize
= GET_MODE_SIZE (GET_MODE (rtl
));
11635 int dsize
= GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
)));
11637 /* If a variable is declared "register" yet is smaller than
11638 a register, then if we store the variable to memory, it
11639 looks like we're storing a register-sized value, when in
11640 fact we are not. We need to adjust the offset of the
11641 storage location to reflect the actual value's bytes,
11642 else gdb will not be able to display it. */
11644 rtl
= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl
)),
11645 plus_constant (XEXP (rtl
, 0), rsize
-dsize
));
11648 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
11649 and will have been substituted directly into all expressions that use it.
11650 C does not have such a concept, but C++ and other languages do. */
11651 if (!rtl
&& TREE_CODE (decl
) == VAR_DECL
&& DECL_INITIAL (decl
))
11652 rtl
= rtl_for_decl_init (DECL_INITIAL (decl
), TREE_TYPE (decl
));
11655 rtl
= targetm
.delegitimize_address (rtl
);
11657 /* If we don't look past the constant pool, we risk emitting a
11658 reference to a constant pool entry that isn't referenced from
11659 code, and thus is not emitted. */
11661 rtl
= avoid_constant_pool_reference (rtl
);
11666 /* We need to figure out what section we should use as the base for the
11667 address ranges where a given location is valid.
11668 1. If this particular DECL has a section associated with it, use that.
11669 2. If this function has a section associated with it, use that.
11670 3. Otherwise, use the text section.
11671 XXX: If you split a variable across multiple sections, we won't notice. */
11673 static const char *
11674 secname_for_decl (const_tree decl
)
11676 const char *secname
;
11678 if (VAR_OR_FUNCTION_DECL_P (decl
) && DECL_SECTION_NAME (decl
))
11680 tree sectree
= DECL_SECTION_NAME (decl
);
11681 secname
= TREE_STRING_POINTER (sectree
);
11683 else if (current_function_decl
&& DECL_SECTION_NAME (current_function_decl
))
11685 tree sectree
= DECL_SECTION_NAME (current_function_decl
);
11686 secname
= TREE_STRING_POINTER (sectree
);
11688 else if (cfun
&& in_cold_section_p
)
11689 secname
= crtl
->subsections
.cold_section_label
;
11691 secname
= text_section_label
;
11696 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
11697 returned. If so, the decl for the COMMON block is returned, and the
11698 value is the offset into the common block for the symbol. */
11701 fortran_common (tree decl
, HOST_WIDE_INT
*value
)
11703 tree val_expr
, cvar
;
11704 enum machine_mode mode
;
11705 HOST_WIDE_INT bitsize
, bitpos
;
11707 int volatilep
= 0, unsignedp
= 0;
11709 /* If the decl isn't a VAR_DECL, or if it isn't public or static, or if
11710 it does not have a value (the offset into the common area), or if it
11711 is thread local (as opposed to global) then it isn't common, and shouldn't
11712 be handled as such. */
11713 if (TREE_CODE (decl
) != VAR_DECL
11714 || !TREE_PUBLIC (decl
)
11715 || !TREE_STATIC (decl
)
11716 || !DECL_HAS_VALUE_EXPR_P (decl
)
11720 val_expr
= DECL_VALUE_EXPR (decl
);
11721 if (TREE_CODE (val_expr
) != COMPONENT_REF
)
11724 cvar
= get_inner_reference (val_expr
, &bitsize
, &bitpos
, &offset
,
11725 &mode
, &unsignedp
, &volatilep
, true);
11727 if (cvar
== NULL_TREE
11728 || TREE_CODE (cvar
) != VAR_DECL
11729 || DECL_ARTIFICIAL (cvar
)
11730 || !TREE_PUBLIC (cvar
))
11734 if (offset
!= NULL
)
11736 if (!host_integerp (offset
, 0))
11738 *value
= tree_low_cst (offset
, 0);
11741 *value
+= bitpos
/ BITS_PER_UNIT
;
11746 /* Dereference a location expression LOC if DECL is passed by invisible
11749 static dw_loc_descr_ref
11750 loc_by_reference (dw_loc_descr_ref loc
, tree decl
)
11752 HOST_WIDE_INT size
;
11753 enum dwarf_location_atom op
;
11758 if ((TREE_CODE (decl
) != PARM_DECL
&& TREE_CODE (decl
) != RESULT_DECL
)
11759 || !DECL_BY_REFERENCE (decl
))
11762 size
= int_size_in_bytes (TREE_TYPE (decl
));
11763 if (size
> DWARF2_ADDR_SIZE
|| size
== -1)
11765 else if (size
== DWARF2_ADDR_SIZE
)
11768 op
= DW_OP_deref_size
;
11769 add_loc_descr (&loc
, new_loc_descr (op
, size
, 0));
11773 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
11774 data attribute for a variable or a parameter. We generate the
11775 DW_AT_const_value attribute only in those cases where the given variable
11776 or parameter does not have a true "location" either in memory or in a
11777 register. This can happen (for example) when a constant is passed as an
11778 actual argument in a call to an inline function. (It's possible that
11779 these things can crop up in other ways also.) Note that one type of
11780 constant value which can be passed into an inlined function is a constant
11781 pointer. This can happen for example if an actual argument in an inlined
11782 function call evaluates to a compile-time constant address. */
11785 add_location_or_const_value_attribute (dw_die_ref die
, tree decl
,
11786 enum dwarf_attribute attr
)
11789 dw_loc_descr_ref descr
;
11790 var_loc_list
*loc_list
;
11791 struct var_loc_node
*node
;
11792 if (TREE_CODE (decl
) == ERROR_MARK
)
11795 gcc_assert (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == PARM_DECL
11796 || TREE_CODE (decl
) == RESULT_DECL
);
11798 /* See if we possibly have multiple locations for this variable. */
11799 loc_list
= lookup_decl_loc (decl
);
11801 /* If it truly has multiple locations, the first and last node will
11803 if (loc_list
&& loc_list
->first
!= loc_list
->last
)
11805 const char *endname
, *secname
;
11806 dw_loc_list_ref list
;
11808 enum var_init_status initialized
;
11810 /* Now that we know what section we are using for a base,
11811 actually construct the list of locations.
11812 The first location information is what is passed to the
11813 function that creates the location list, and the remaining
11814 locations just get added on to that list.
11815 Note that we only know the start address for a location
11816 (IE location changes), so to build the range, we use
11817 the range [current location start, next location start].
11818 This means we have to special case the last node, and generate
11819 a range of [last location start, end of function label]. */
11821 node
= loc_list
->first
;
11822 varloc
= NOTE_VAR_LOCATION (node
->var_loc_note
);
11823 secname
= secname_for_decl (decl
);
11825 if (NOTE_VAR_LOCATION_LOC (node
->var_loc_note
))
11826 initialized
= NOTE_VAR_LOCATION_STATUS (node
->var_loc_note
);
11828 initialized
= VAR_INIT_STATUS_INITIALIZED
;
11830 descr
= loc_by_reference (loc_descriptor (varloc
, initialized
), decl
);
11831 list
= new_loc_list (descr
, node
->label
, node
->next
->label
, secname
, 1);
11834 for (; node
->next
; node
= node
->next
)
11835 if (NOTE_VAR_LOCATION_LOC (node
->var_loc_note
) != NULL_RTX
)
11837 /* The variable has a location between NODE->LABEL and
11838 NODE->NEXT->LABEL. */
11839 enum var_init_status initialized
=
11840 NOTE_VAR_LOCATION_STATUS (node
->var_loc_note
);
11841 varloc
= NOTE_VAR_LOCATION (node
->var_loc_note
);
11842 descr
= loc_by_reference (loc_descriptor (varloc
, initialized
),
11844 add_loc_descr_to_loc_list (&list
, descr
,
11845 node
->label
, node
->next
->label
, secname
);
11848 /* If the variable has a location at the last label
11849 it keeps its location until the end of function. */
11850 if (NOTE_VAR_LOCATION_LOC (node
->var_loc_note
) != NULL_RTX
)
11852 char label_id
[MAX_ARTIFICIAL_LABEL_BYTES
];
11853 enum var_init_status initialized
=
11854 NOTE_VAR_LOCATION_STATUS (node
->var_loc_note
);
11856 varloc
= NOTE_VAR_LOCATION (node
->var_loc_note
);
11857 if (!current_function_decl
)
11858 endname
= text_end_label
;
11861 ASM_GENERATE_INTERNAL_LABEL (label_id
, FUNC_END_LABEL
,
11862 current_function_funcdef_no
);
11863 endname
= ggc_strdup (label_id
);
11865 descr
= loc_by_reference (loc_descriptor (varloc
, initialized
),
11867 add_loc_descr_to_loc_list (&list
, descr
,
11868 node
->label
, endname
, secname
);
11871 /* Finally, add the location list to the DIE, and we are done. */
11872 add_AT_loc_list (die
, attr
, list
);
11876 /* Try to get some constant RTL for this decl, and use that as the value of
11879 rtl
= rtl_for_decl_location (decl
);
11880 if (rtl
&& (CONSTANT_P (rtl
) || GET_CODE (rtl
) == CONST_STRING
))
11882 add_const_value_attribute (die
, rtl
);
11886 /* If we have tried to generate the location otherwise, and it
11887 didn't work out (we wouldn't be here if we did), and we have a one entry
11888 location list, try generating a location from that. */
11889 if (loc_list
&& loc_list
->first
)
11891 enum var_init_status status
;
11892 node
= loc_list
->first
;
11893 status
= NOTE_VAR_LOCATION_STATUS (node
->var_loc_note
);
11894 descr
= loc_descriptor (NOTE_VAR_LOCATION (node
->var_loc_note
), status
);
11897 descr
= loc_by_reference (descr
, decl
);
11898 add_AT_location_description (die
, attr
, descr
);
11903 /* We couldn't get any rtl, so try directly generating the location
11904 description from the tree. */
11905 descr
= loc_descriptor_from_tree (decl
);
11908 descr
= loc_by_reference (descr
, decl
);
11909 add_AT_location_description (die
, attr
, descr
);
11912 /* None of that worked, so it must not really have a location;
11913 try adding a constant value attribute from the DECL_INITIAL. */
11914 tree_add_const_value_attribute (die
, decl
);
11917 /* Add VARIABLE and DIE into deferred locations list. */
11920 defer_location (tree variable
, dw_die_ref die
)
11922 deferred_locations entry
;
11923 entry
.variable
= variable
;
11925 VEC_safe_push (deferred_locations
, gc
, deferred_locations_list
, &entry
);
11928 /* Helper function for tree_add_const_value_attribute. Natively encode
11929 initializer INIT into an array. Return true if successful. */
11932 native_encode_initializer (tree init
, unsigned char *array
, int size
)
11936 if (init
== NULL_TREE
)
11940 switch (TREE_CODE (init
))
11943 type
= TREE_TYPE (init
);
11944 if (TREE_CODE (type
) == ARRAY_TYPE
)
11946 tree enttype
= TREE_TYPE (type
);
11947 enum machine_mode mode
= TYPE_MODE (enttype
);
11949 if (GET_MODE_CLASS (mode
) != MODE_INT
|| GET_MODE_SIZE (mode
) != 1)
11951 if (int_size_in_bytes (type
) != size
)
11953 if (size
> TREE_STRING_LENGTH (init
))
11955 memcpy (array
, TREE_STRING_POINTER (init
),
11956 TREE_STRING_LENGTH (init
));
11957 memset (array
+ TREE_STRING_LENGTH (init
),
11958 '\0', size
- TREE_STRING_LENGTH (init
));
11961 memcpy (array
, TREE_STRING_POINTER (init
), size
);
11966 type
= TREE_TYPE (init
);
11967 if (int_size_in_bytes (type
) != size
)
11969 if (TREE_CODE (type
) == ARRAY_TYPE
)
11971 HOST_WIDE_INT min_index
;
11972 unsigned HOST_WIDE_INT cnt
;
11973 int curpos
= 0, fieldsize
;
11974 constructor_elt
*ce
;
11976 if (TYPE_DOMAIN (type
) == NULL_TREE
11977 || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)), 0))
11980 fieldsize
= int_size_in_bytes (TREE_TYPE (type
));
11981 if (fieldsize
<= 0)
11984 min_index
= tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type
)), 0);
11985 memset (array
, '\0', size
);
11987 VEC_iterate (constructor_elt
, CONSTRUCTOR_ELTS (init
), cnt
, ce
);
11990 tree val
= ce
->value
;
11991 tree index
= ce
->index
;
11993 if (index
&& TREE_CODE (index
) == RANGE_EXPR
)
11994 pos
= (tree_low_cst (TREE_OPERAND (index
, 0), 0) - min_index
)
11997 pos
= (tree_low_cst (index
, 0) - min_index
) * fieldsize
;
12002 if (!native_encode_initializer (val
, array
+ pos
, fieldsize
))
12005 curpos
= pos
+ fieldsize
;
12006 if (index
&& TREE_CODE (index
) == RANGE_EXPR
)
12008 int count
= tree_low_cst (TREE_OPERAND (index
, 1), 0)
12009 - tree_low_cst (TREE_OPERAND (index
, 0), 0);
12013 memcpy (array
+ curpos
, array
+ pos
, fieldsize
);
12014 curpos
+= fieldsize
;
12017 gcc_assert (curpos
<= size
);
12021 else if (TREE_CODE (type
) == RECORD_TYPE
12022 || TREE_CODE (type
) == UNION_TYPE
)
12024 tree field
= NULL_TREE
;
12025 unsigned HOST_WIDE_INT cnt
;
12026 constructor_elt
*ce
;
12028 if (int_size_in_bytes (type
) != size
)
12031 if (TREE_CODE (type
) == RECORD_TYPE
)
12032 field
= TYPE_FIELDS (type
);
12035 VEC_iterate (constructor_elt
, CONSTRUCTOR_ELTS (init
), cnt
, ce
);
12036 cnt
++, field
= field
? TREE_CHAIN (field
) : 0)
12038 tree val
= ce
->value
;
12039 int pos
, fieldsize
;
12041 if (ce
->index
!= 0)
12047 if (field
== NULL_TREE
|| DECL_BIT_FIELD (field
))
12050 if (TREE_CODE (TREE_TYPE (field
)) == ARRAY_TYPE
12051 && TYPE_DOMAIN (TREE_TYPE (field
))
12052 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field
))))
12054 else if (DECL_SIZE_UNIT (field
) == NULL_TREE
12055 || !host_integerp (DECL_SIZE_UNIT (field
), 0))
12057 fieldsize
= tree_low_cst (DECL_SIZE_UNIT (field
), 0);
12058 pos
= int_byte_position (field
);
12059 gcc_assert (pos
+ fieldsize
<= size
);
12061 && !native_encode_initializer (val
, array
+ pos
, fieldsize
))
12067 case VIEW_CONVERT_EXPR
:
12068 case NON_LVALUE_EXPR
:
12069 return native_encode_initializer (TREE_OPERAND (init
, 0), array
, size
);
12071 return native_encode_expr (init
, array
, size
) == size
;
12075 /* If we don't have a copy of this variable in memory for some reason (such
12076 as a C++ member constant that doesn't have an out-of-line definition),
12077 we should tell the debugger about the constant value. */
12080 tree_add_const_value_attribute (dw_die_ref var_die
, tree decl
)
12083 tree type
= TREE_TYPE (decl
);
12086 if (TREE_CODE (decl
) != VAR_DECL
&& TREE_CODE (decl
) != CONST_DECL
)
12089 init
= DECL_INITIAL (decl
);
12090 if (TREE_READONLY (decl
) && ! TREE_THIS_VOLATILE (decl
) && init
)
12095 rtl
= rtl_for_decl_init (init
, type
);
12097 add_const_value_attribute (var_die
, rtl
);
12098 /* If the host and target are sane, try harder. */
12099 else if (CHAR_BIT
== 8 && BITS_PER_UNIT
== 8
12100 && initializer_constant_valid_p (init
, type
))
12102 HOST_WIDE_INT size
= int_size_in_bytes (TREE_TYPE (init
));
12103 if (size
> 0 && (int) size
== size
)
12105 unsigned char *array
= GGC_CNEWVEC (unsigned char, size
);
12107 if (native_encode_initializer (init
, array
, size
))
12108 add_AT_vec (var_die
, DW_AT_const_value
, size
, 1, array
);
12113 /* Convert the CFI instructions for the current function into a
12114 location list. This is used for DW_AT_frame_base when we targeting
12115 a dwarf2 consumer that does not support the dwarf3
12116 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
12119 static dw_loc_list_ref
12120 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset
)
12123 dw_loc_list_ref list
, *list_tail
;
12125 dw_cfa_location last_cfa
, next_cfa
;
12126 const char *start_label
, *last_label
, *section
;
12128 fde
= current_fde ();
12129 gcc_assert (fde
!= NULL
);
12131 section
= secname_for_decl (current_function_decl
);
12135 next_cfa
.reg
= INVALID_REGNUM
;
12136 next_cfa
.offset
= 0;
12137 next_cfa
.indirect
= 0;
12138 next_cfa
.base_offset
= 0;
12140 start_label
= fde
->dw_fde_begin
;
12142 /* ??? Bald assumption that the CIE opcode list does not contain
12143 advance opcodes. */
12144 for (cfi
= cie_cfi_head
; cfi
; cfi
= cfi
->dw_cfi_next
)
12145 lookup_cfa_1 (cfi
, &next_cfa
);
12147 last_cfa
= next_cfa
;
12148 last_label
= start_label
;
12150 for (cfi
= fde
->dw_fde_cfi
; cfi
; cfi
= cfi
->dw_cfi_next
)
12151 switch (cfi
->dw_cfi_opc
)
12153 case DW_CFA_set_loc
:
12154 case DW_CFA_advance_loc1
:
12155 case DW_CFA_advance_loc2
:
12156 case DW_CFA_advance_loc4
:
12157 if (!cfa_equal_p (&last_cfa
, &next_cfa
))
12159 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
12160 start_label
, last_label
, section
,
12163 list_tail
= &(*list_tail
)->dw_loc_next
;
12164 last_cfa
= next_cfa
;
12165 start_label
= last_label
;
12167 last_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
12170 case DW_CFA_advance_loc
:
12171 /* The encoding is complex enough that we should never emit this. */
12172 case DW_CFA_remember_state
:
12173 case DW_CFA_restore_state
:
12174 /* We don't handle these two in this function. It would be possible
12175 if it were to be required. */
12176 gcc_unreachable ();
12179 lookup_cfa_1 (cfi
, &next_cfa
);
12183 if (!cfa_equal_p (&last_cfa
, &next_cfa
))
12185 *list_tail
= new_loc_list (build_cfa_loc (&last_cfa
, offset
),
12186 start_label
, last_label
, section
,
12188 list_tail
= &(*list_tail
)->dw_loc_next
;
12189 start_label
= last_label
;
12191 *list_tail
= new_loc_list (build_cfa_loc (&next_cfa
, offset
),
12192 start_label
, fde
->dw_fde_end
, section
,
12198 /* Compute a displacement from the "steady-state frame pointer" to the
12199 frame base (often the same as the CFA), and store it in
12200 frame_pointer_fb_offset. OFFSET is added to the displacement
12201 before the latter is negated. */
12204 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset
)
12208 #ifdef FRAME_POINTER_CFA_OFFSET
12209 reg
= frame_pointer_rtx
;
12210 offset
+= FRAME_POINTER_CFA_OFFSET (current_function_decl
);
12212 reg
= arg_pointer_rtx
;
12213 offset
+= ARG_POINTER_CFA_OFFSET (current_function_decl
);
12216 elim
= eliminate_regs (reg
, VOIDmode
, NULL_RTX
);
12217 if (GET_CODE (elim
) == PLUS
)
12219 offset
+= INTVAL (XEXP (elim
, 1));
12220 elim
= XEXP (elim
, 0);
12223 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12224 && (elim
== hard_frame_pointer_rtx
12225 || elim
== stack_pointer_rtx
))
12226 || elim
== (frame_pointer_needed
12227 ? hard_frame_pointer_rtx
12228 : stack_pointer_rtx
));
12230 frame_pointer_fb_offset
= -offset
;
12233 /* Generate a DW_AT_name attribute given some string value to be included as
12234 the value of the attribute. */
12237 add_name_attribute (dw_die_ref die
, const char *name_string
)
12239 if (name_string
!= NULL
&& *name_string
!= 0)
12241 if (demangle_name_func
)
12242 name_string
= (*demangle_name_func
) (name_string
);
12244 add_AT_string (die
, DW_AT_name
, name_string
);
12248 /* Generate a DW_AT_comp_dir attribute for DIE. */
12251 add_comp_dir_attribute (dw_die_ref die
)
12253 const char *wd
= get_src_pwd ();
12255 add_AT_string (die
, DW_AT_comp_dir
, remap_debug_filename (wd
));
12258 /* Given a tree node describing an array bound (either lower or upper) output
12259 a representation for that bound. */
12262 add_bound_info (dw_die_ref subrange_die
, enum dwarf_attribute bound_attr
, tree bound
)
12264 switch (TREE_CODE (bound
))
12269 /* All fixed-bounds are represented by INTEGER_CST nodes. */
12271 if (! host_integerp (bound
, 0)
12272 || (bound_attr
== DW_AT_lower_bound
12273 && (((is_c_family () || is_java ()) && integer_zerop (bound
))
12274 || (is_fortran () && integer_onep (bound
)))))
12275 /* Use the default. */
12278 add_AT_unsigned (subrange_die
, bound_attr
, tree_low_cst (bound
, 0));
12282 case VIEW_CONVERT_EXPR
:
12283 add_bound_info (subrange_die
, bound_attr
, TREE_OPERAND (bound
, 0));
12293 dw_die_ref decl_die
= lookup_decl_die (bound
);
12294 dw_loc_descr_ref loc
;
12296 /* ??? Can this happen, or should the variable have been bound
12297 first? Probably it can, since I imagine that we try to create
12298 the types of parameters in the order in which they exist in
12299 the list, and won't have created a forward reference to a
12300 later parameter. */
12301 if (decl_die
!= NULL
)
12302 add_AT_die_ref (subrange_die
, bound_attr
, decl_die
);
12305 loc
= loc_descriptor_from_tree_1 (bound
, 0);
12306 add_AT_location_description (subrange_die
, bound_attr
, loc
);
12313 /* Otherwise try to create a stack operation procedure to
12314 evaluate the value of the array bound. */
12316 dw_die_ref ctx
, decl_die
;
12317 dw_loc_descr_ref loc
;
12319 loc
= loc_descriptor_from_tree (bound
);
12323 if (current_function_decl
== 0)
12324 ctx
= comp_unit_die
;
12326 ctx
= lookup_decl_die (current_function_decl
);
12328 decl_die
= new_die (DW_TAG_variable
, ctx
, bound
);
12329 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
12330 add_type_attribute (decl_die
, TREE_TYPE (bound
), 1, 0, ctx
);
12331 add_AT_loc (decl_die
, DW_AT_location
, loc
);
12333 add_AT_die_ref (subrange_die
, bound_attr
, decl_die
);
12339 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
12340 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
12341 Note that the block of subscript information for an array type also
12342 includes information about the element type of the given array type. */
12345 add_subscript_info (dw_die_ref type_die
, tree type
, bool collapse_p
)
12347 unsigned dimension_number
;
12349 dw_die_ref subrange_die
;
12351 for (dimension_number
= 0;
12352 TREE_CODE (type
) == ARRAY_TYPE
&& (dimension_number
== 0 || collapse_p
);
12353 type
= TREE_TYPE (type
), dimension_number
++)
12355 tree domain
= TYPE_DOMAIN (type
);
12357 if (TYPE_STRING_FLAG (type
) && is_fortran () && dimension_number
> 0)
12360 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
12361 and (in GNU C only) variable bounds. Handle all three forms
12363 subrange_die
= new_die (DW_TAG_subrange_type
, type_die
, NULL
);
12366 /* We have an array type with specified bounds. */
12367 lower
= TYPE_MIN_VALUE (domain
);
12368 upper
= TYPE_MAX_VALUE (domain
);
12370 /* Define the index type. */
12371 if (TREE_TYPE (domain
))
12373 /* ??? This is probably an Ada unnamed subrange type. Ignore the
12374 TREE_TYPE field. We can't emit debug info for this
12375 because it is an unnamed integral type. */
12376 if (TREE_CODE (domain
) == INTEGER_TYPE
12377 && TYPE_NAME (domain
) == NULL_TREE
12378 && TREE_CODE (TREE_TYPE (domain
)) == INTEGER_TYPE
12379 && TYPE_NAME (TREE_TYPE (domain
)) == NULL_TREE
)
12382 add_type_attribute (subrange_die
, TREE_TYPE (domain
), 0, 0,
12386 /* ??? If upper is NULL, the array has unspecified length,
12387 but it does have a lower bound. This happens with Fortran
12389 Since the debugger is definitely going to need to know N
12390 to produce useful results, go ahead and output the lower
12391 bound solo, and hope the debugger can cope. */
12393 add_bound_info (subrange_die
, DW_AT_lower_bound
, lower
);
12395 add_bound_info (subrange_die
, DW_AT_upper_bound
, upper
);
12398 /* Otherwise we have an array type with an unspecified length. The
12399 DWARF-2 spec does not say how to handle this; let's just leave out the
12405 add_byte_size_attribute (dw_die_ref die
, tree tree_node
)
12409 switch (TREE_CODE (tree_node
))
12414 case ENUMERAL_TYPE
:
12417 case QUAL_UNION_TYPE
:
12418 size
= int_size_in_bytes (tree_node
);
12421 /* For a data member of a struct or union, the DW_AT_byte_size is
12422 generally given as the number of bytes normally allocated for an
12423 object of the *declared* type of the member itself. This is true
12424 even for bit-fields. */
12425 size
= simple_type_size_in_bits (field_type (tree_node
)) / BITS_PER_UNIT
;
12428 gcc_unreachable ();
12431 /* Note that `size' might be -1 when we get to this point. If it is, that
12432 indicates that the byte size of the entity in question is variable. We
12433 have no good way of expressing this fact in Dwarf at the present time,
12434 so just let the -1 pass on through. */
12435 add_AT_unsigned (die
, DW_AT_byte_size
, size
);
12438 /* For a FIELD_DECL node which represents a bit-field, output an attribute
12439 which specifies the distance in bits from the highest order bit of the
12440 "containing object" for the bit-field to the highest order bit of the
12443 For any given bit-field, the "containing object" is a hypothetical object
12444 (of some integral or enum type) within which the given bit-field lives. The
12445 type of this hypothetical "containing object" is always the same as the
12446 declared type of the individual bit-field itself. The determination of the
12447 exact location of the "containing object" for a bit-field is rather
12448 complicated. It's handled by the `field_byte_offset' function (above).
12450 Note that it is the size (in bytes) of the hypothetical "containing object"
12451 which will be given in the DW_AT_byte_size attribute for this bit-field.
12452 (See `byte_size_attribute' above). */
12455 add_bit_offset_attribute (dw_die_ref die
, tree decl
)
12457 HOST_WIDE_INT object_offset_in_bytes
= field_byte_offset (decl
);
12458 tree type
= DECL_BIT_FIELD_TYPE (decl
);
12459 HOST_WIDE_INT bitpos_int
;
12460 HOST_WIDE_INT highest_order_object_bit_offset
;
12461 HOST_WIDE_INT highest_order_field_bit_offset
;
12462 HOST_WIDE_INT
unsigned bit_offset
;
12464 /* Must be a field and a bit field. */
12465 gcc_assert (type
&& TREE_CODE (decl
) == FIELD_DECL
);
12467 /* We can't yet handle bit-fields whose offsets are variable, so if we
12468 encounter such things, just return without generating any attribute
12469 whatsoever. Likewise for variable or too large size. */
12470 if (! host_integerp (bit_position (decl
), 0)
12471 || ! host_integerp (DECL_SIZE (decl
), 1))
12474 bitpos_int
= int_bit_position (decl
);
12476 /* Note that the bit offset is always the distance (in bits) from the
12477 highest-order bit of the "containing object" to the highest-order bit of
12478 the bit-field itself. Since the "high-order end" of any object or field
12479 is different on big-endian and little-endian machines, the computation
12480 below must take account of these differences. */
12481 highest_order_object_bit_offset
= object_offset_in_bytes
* BITS_PER_UNIT
;
12482 highest_order_field_bit_offset
= bitpos_int
;
12484 if (! BYTES_BIG_ENDIAN
)
12486 highest_order_field_bit_offset
+= tree_low_cst (DECL_SIZE (decl
), 0);
12487 highest_order_object_bit_offset
+= simple_type_size_in_bits (type
);
12491 = (! BYTES_BIG_ENDIAN
12492 ? highest_order_object_bit_offset
- highest_order_field_bit_offset
12493 : highest_order_field_bit_offset
- highest_order_object_bit_offset
);
12495 add_AT_unsigned (die
, DW_AT_bit_offset
, bit_offset
);
12498 /* For a FIELD_DECL node which represents a bit field, output an attribute
12499 which specifies the length in bits of the given field. */
12502 add_bit_size_attribute (dw_die_ref die
, tree decl
)
12504 /* Must be a field and a bit field. */
12505 gcc_assert (TREE_CODE (decl
) == FIELD_DECL
12506 && DECL_BIT_FIELD_TYPE (decl
));
12508 if (host_integerp (DECL_SIZE (decl
), 1))
12509 add_AT_unsigned (die
, DW_AT_bit_size
, tree_low_cst (DECL_SIZE (decl
), 1));
12512 /* If the compiled language is ANSI C, then add a 'prototyped'
12513 attribute, if arg types are given for the parameters of a function. */
12516 add_prototyped_attribute (dw_die_ref die
, tree func_type
)
12518 if (get_AT_unsigned (comp_unit_die
, DW_AT_language
) == DW_LANG_C89
12519 && TYPE_ARG_TYPES (func_type
) != NULL
)
12520 add_AT_flag (die
, DW_AT_prototyped
, 1);
12523 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
12524 by looking in either the type declaration or object declaration
12527 static inline dw_die_ref
12528 add_abstract_origin_attribute (dw_die_ref die
, tree origin
)
12530 dw_die_ref origin_die
= NULL
;
12532 if (TREE_CODE (origin
) != FUNCTION_DECL
)
12534 /* We may have gotten separated from the block for the inlined
12535 function, if we're in an exception handler or some such; make
12536 sure that the abstract function has been written out.
12538 Doing this for nested functions is wrong, however; functions are
12539 distinct units, and our context might not even be inline. */
12543 fn
= TYPE_STUB_DECL (fn
);
12545 fn
= decl_function_context (fn
);
12547 dwarf2out_abstract_function (fn
);
12550 if (DECL_P (origin
))
12551 origin_die
= lookup_decl_die (origin
);
12552 else if (TYPE_P (origin
))
12553 origin_die
= lookup_type_die (origin
);
12555 /* XXX: Functions that are never lowered don't always have correct block
12556 trees (in the case of java, they simply have no block tree, in some other
12557 languages). For these functions, there is nothing we can really do to
12558 output correct debug info for inlined functions in all cases. Rather
12559 than die, we'll just produce deficient debug info now, in that we will
12560 have variables without a proper abstract origin. In the future, when all
12561 functions are lowered, we should re-add a gcc_assert (origin_die)
12565 add_AT_die_ref (die
, DW_AT_abstract_origin
, origin_die
);
12569 /* We do not currently support the pure_virtual attribute. */
12572 add_pure_or_virtual_attribute (dw_die_ref die
, tree func_decl
)
12574 if (DECL_VINDEX (func_decl
))
12576 add_AT_unsigned (die
, DW_AT_virtuality
, DW_VIRTUALITY_virtual
);
12578 if (host_integerp (DECL_VINDEX (func_decl
), 0))
12579 add_AT_loc (die
, DW_AT_vtable_elem_location
,
12580 new_loc_descr (DW_OP_constu
,
12581 tree_low_cst (DECL_VINDEX (func_decl
), 0),
12584 /* GNU extension: Record what type this method came from originally. */
12585 if (debug_info_level
> DINFO_LEVEL_TERSE
)
12586 add_AT_die_ref (die
, DW_AT_containing_type
,
12587 lookup_type_die (DECL_CONTEXT (func_decl
)));
12591 /* Add source coordinate attributes for the given decl. */
12594 add_src_coords_attributes (dw_die_ref die
, tree decl
)
12596 expanded_location s
= expand_location (DECL_SOURCE_LOCATION (decl
));
12598 add_AT_file (die
, DW_AT_decl_file
, lookup_filename (s
.file
));
12599 add_AT_unsigned (die
, DW_AT_decl_line
, s
.line
);
12602 /* Add a DW_AT_name attribute and source coordinate attribute for the
12603 given decl, but only if it actually has a name. */
12606 add_name_and_src_coords_attributes (dw_die_ref die
, tree decl
)
12610 decl_name
= DECL_NAME (decl
);
12611 if (decl_name
!= NULL
&& IDENTIFIER_POINTER (decl_name
) != NULL
)
12613 add_name_attribute (die
, dwarf2_name (decl
, 0));
12614 if (! DECL_ARTIFICIAL (decl
))
12615 add_src_coords_attributes (die
, decl
);
12617 if ((TREE_CODE (decl
) == FUNCTION_DECL
|| TREE_CODE (decl
) == VAR_DECL
)
12618 && TREE_PUBLIC (decl
)
12619 && DECL_ASSEMBLER_NAME (decl
) != DECL_NAME (decl
)
12620 && !DECL_ABSTRACT (decl
)
12621 && !(TREE_CODE (decl
) == VAR_DECL
&& DECL_REGISTER (decl
))
12623 add_AT_string (die
, DW_AT_MIPS_linkage_name
,
12624 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl
)));
12627 #ifdef VMS_DEBUGGING_INFO
12628 /* Get the function's name, as described by its RTL. This may be different
12629 from the DECL_NAME name used in the source file. */
12630 if (TREE_CODE (decl
) == FUNCTION_DECL
&& TREE_ASM_WRITTEN (decl
))
12632 add_AT_addr (die
, DW_AT_VMS_rtnbeg_pd_address
,
12633 XEXP (DECL_RTL (decl
), 0));
12634 VEC_safe_push (tree
, gc
, used_rtx_array
, XEXP (DECL_RTL (decl
), 0));
12639 /* Push a new declaration scope. */
12642 push_decl_scope (tree scope
)
12644 VEC_safe_push (tree
, gc
, decl_scope_table
, scope
);
12647 /* Pop a declaration scope. */
12650 pop_decl_scope (void)
12652 VEC_pop (tree
, decl_scope_table
);
12655 /* Return the DIE for the scope that immediately contains this type.
12656 Non-named types get global scope. Named types nested in other
12657 types get their containing scope if it's open, or global scope
12658 otherwise. All other types (i.e. function-local named types) get
12659 the current active scope. */
12662 scope_die_for (tree t
, dw_die_ref context_die
)
12664 dw_die_ref scope_die
= NULL
;
12665 tree containing_scope
;
12668 /* Non-types always go in the current scope. */
12669 gcc_assert (TYPE_P (t
));
12671 containing_scope
= TYPE_CONTEXT (t
);
12673 /* Use the containing namespace if it was passed in (for a declaration). */
12674 if (containing_scope
&& TREE_CODE (containing_scope
) == NAMESPACE_DECL
)
12676 if (context_die
== lookup_decl_die (containing_scope
))
12679 containing_scope
= NULL_TREE
;
12682 /* Ignore function type "scopes" from the C frontend. They mean that
12683 a tagged type is local to a parmlist of a function declarator, but
12684 that isn't useful to DWARF. */
12685 if (containing_scope
&& TREE_CODE (containing_scope
) == FUNCTION_TYPE
)
12686 containing_scope
= NULL_TREE
;
12688 if (containing_scope
== NULL_TREE
)
12689 scope_die
= comp_unit_die
;
12690 else if (TYPE_P (containing_scope
))
12692 /* For types, we can just look up the appropriate DIE. But
12693 first we check to see if we're in the middle of emitting it
12694 so we know where the new DIE should go. */
12695 for (i
= VEC_length (tree
, decl_scope_table
) - 1; i
>= 0; --i
)
12696 if (VEC_index (tree
, decl_scope_table
, i
) == containing_scope
)
12701 gcc_assert (debug_info_level
<= DINFO_LEVEL_TERSE
12702 || TREE_ASM_WRITTEN (containing_scope
));
12704 /* If none of the current dies are suitable, we get file scope. */
12705 scope_die
= comp_unit_die
;
12708 scope_die
= lookup_type_die (containing_scope
);
12711 scope_die
= context_die
;
12716 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
12719 local_scope_p (dw_die_ref context_die
)
12721 for (; context_die
; context_die
= context_die
->die_parent
)
12722 if (context_die
->die_tag
== DW_TAG_inlined_subroutine
12723 || context_die
->die_tag
== DW_TAG_subprogram
)
12729 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
12730 whether or not to treat a DIE in this context as a declaration. */
12733 class_or_namespace_scope_p (dw_die_ref context_die
)
12735 return (context_die
12736 && (context_die
->die_tag
== DW_TAG_structure_type
12737 || context_die
->die_tag
== DW_TAG_class_type
12738 || context_die
->die_tag
== DW_TAG_interface_type
12739 || context_die
->die_tag
== DW_TAG_union_type
12740 || context_die
->die_tag
== DW_TAG_namespace
));
12743 /* Many forms of DIEs require a "type description" attribute. This
12744 routine locates the proper "type descriptor" die for the type given
12745 by 'type', and adds a DW_AT_type attribute below the given die. */
12748 add_type_attribute (dw_die_ref object_die
, tree type
, int decl_const
,
12749 int decl_volatile
, dw_die_ref context_die
)
12751 enum tree_code code
= TREE_CODE (type
);
12752 dw_die_ref type_die
= NULL
;
12754 /* ??? If this type is an unnamed subrange type of an integral, floating-point
12755 or fixed-point type, use the inner type. This is because we have no
12756 support for unnamed types in base_type_die. This can happen if this is
12757 an Ada subrange type. Correct solution is emit a subrange type die. */
12758 if ((code
== INTEGER_TYPE
|| code
== REAL_TYPE
|| code
== FIXED_POINT_TYPE
)
12759 && TREE_TYPE (type
) != 0 && TYPE_NAME (type
) == 0)
12760 type
= TREE_TYPE (type
), code
= TREE_CODE (type
);
12762 if (code
== ERROR_MARK
12763 /* Handle a special case. For functions whose return type is void, we
12764 generate *no* type attribute. (Note that no object may have type
12765 `void', so this only applies to function return types). */
12766 || code
== VOID_TYPE
)
12769 type_die
= modified_type_die (type
,
12770 decl_const
|| TYPE_READONLY (type
),
12771 decl_volatile
|| TYPE_VOLATILE (type
),
12774 if (type_die
!= NULL
)
12775 add_AT_die_ref (object_die
, DW_AT_type
, type_die
);
12778 /* Given an object die, add the calling convention attribute for the
12779 function call type. */
12781 add_calling_convention_attribute (dw_die_ref subr_die
, tree decl
)
12783 enum dwarf_calling_convention value
= DW_CC_normal
;
12785 value
= targetm
.dwarf_calling_convention (TREE_TYPE (decl
));
12787 /* DWARF doesn't provide a way to identify a program's source-level
12788 entry point. DW_AT_calling_convention attributes are only meant
12789 to describe functions' calling conventions. However, lacking a
12790 better way to signal the Fortran main program, we use this for the
12791 time being, following existing custom. */
12793 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl
)), "MAIN__"))
12794 value
= DW_CC_program
;
12796 /* Only add the attribute if the backend requests it, and
12797 is not DW_CC_normal. */
12798 if (value
&& (value
!= DW_CC_normal
))
12799 add_AT_unsigned (subr_die
, DW_AT_calling_convention
, value
);
12802 /* Given a tree pointer to a struct, class, union, or enum type node, return
12803 a pointer to the (string) tag name for the given type, or zero if the type
12804 was declared without a tag. */
12806 static const char *
12807 type_tag (const_tree type
)
12809 const char *name
= 0;
12811 if (TYPE_NAME (type
) != 0)
12815 /* Find the IDENTIFIER_NODE for the type name. */
12816 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
)
12817 t
= TYPE_NAME (type
);
12819 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
12820 a TYPE_DECL node, regardless of whether or not a `typedef' was
12822 else if (TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
12823 && ! DECL_IGNORED_P (TYPE_NAME (type
)))
12825 /* We want to be extra verbose. Don't call dwarf_name if
12826 DECL_NAME isn't set. The default hook for decl_printable_name
12827 doesn't like that, and in this context it's correct to return
12828 0, instead of "<anonymous>" or the like. */
12829 if (DECL_NAME (TYPE_NAME (type
)))
12830 name
= lang_hooks
.dwarf_name (TYPE_NAME (type
), 2);
12833 /* Now get the name as a string, or invent one. */
12834 if (!name
&& t
!= 0)
12835 name
= IDENTIFIER_POINTER (t
);
12838 return (name
== 0 || *name
== '\0') ? 0 : name
;
12841 /* Return the type associated with a data member, make a special check
12842 for bit field types. */
12845 member_declared_type (const_tree member
)
12847 return (DECL_BIT_FIELD_TYPE (member
)
12848 ? DECL_BIT_FIELD_TYPE (member
) : TREE_TYPE (member
));
12851 /* Get the decl's label, as described by its RTL. This may be different
12852 from the DECL_NAME name used in the source file. */
12855 static const char *
12856 decl_start_label (tree decl
)
12859 const char *fnname
;
12861 x
= DECL_RTL (decl
);
12862 gcc_assert (MEM_P (x
));
12865 gcc_assert (GET_CODE (x
) == SYMBOL_REF
);
12867 fnname
= XSTR (x
, 0);
12872 /* These routines generate the internal representation of the DIE's for
12873 the compilation unit. Debugging information is collected by walking
12874 the declaration trees passed in from dwarf2out_decl(). */
12877 gen_array_type_die (tree type
, dw_die_ref context_die
)
12879 dw_die_ref scope_die
= scope_die_for (type
, context_die
);
12880 dw_die_ref array_die
;
12882 /* GNU compilers represent multidimensional array types as sequences of one
12883 dimensional array types whose element types are themselves array types.
12884 We sometimes squish that down to a single array_type DIE with multiple
12885 subscripts in the Dwarf debugging info. The draft Dwarf specification
12886 say that we are allowed to do this kind of compression in C, because
12887 there is no difference between an array of arrays and a multidimensional
12888 array. We don't do this for Ada to remain as close as possible to the
12889 actual representation, which is especially important against the language
12890 flexibilty wrt arrays of variable size. */
12892 bool collapse_nested_arrays
= !is_ada ();
12895 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
12896 DW_TAG_string_type doesn't have DW_AT_type attribute). */
12897 if (TYPE_STRING_FLAG (type
)
12898 && TREE_CODE (type
) == ARRAY_TYPE
12900 && TYPE_MODE (TREE_TYPE (type
)) == TYPE_MODE (char_type_node
))
12902 HOST_WIDE_INT size
;
12904 array_die
= new_die (DW_TAG_string_type
, scope_die
, type
);
12905 add_name_attribute (array_die
, type_tag (type
));
12906 equate_type_number_to_die (type
, array_die
);
12907 size
= int_size_in_bytes (type
);
12909 add_AT_unsigned (array_die
, DW_AT_byte_size
, size
);
12910 else if (TYPE_DOMAIN (type
) != NULL_TREE
12911 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) != NULL_TREE
12912 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))
12914 tree szdecl
= TYPE_MAX_VALUE (TYPE_DOMAIN (type
));
12915 dw_loc_descr_ref loc
= loc_descriptor_from_tree (szdecl
);
12917 size
= int_size_in_bytes (TREE_TYPE (szdecl
));
12918 if (loc
&& size
> 0)
12920 add_AT_loc (array_die
, DW_AT_string_length
, loc
);
12921 if (size
!= DWARF2_ADDR_SIZE
)
12922 add_AT_unsigned (array_die
, DW_AT_byte_size
, size
);
12928 /* ??? The SGI dwarf reader fails for array of array of enum types
12929 (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
12930 array type comes before the outer array type. We thus call gen_type_die
12931 before we new_die and must prevent nested array types collapsing for this
12934 #ifdef MIPS_DEBUGGING_INFO
12935 gen_type_die (TREE_TYPE (type
), context_die
);
12936 collapse_nested_arrays
= false;
12939 array_die
= new_die (DW_TAG_array_type
, scope_die
, type
);
12940 add_name_attribute (array_die
, type_tag (type
));
12941 equate_type_number_to_die (type
, array_die
);
12943 if (TREE_CODE (type
) == VECTOR_TYPE
)
12945 /* The frontend feeds us a representation for the vector as a struct
12946 containing an array. Pull out the array type. */
12947 type
= TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type
)));
12948 add_AT_flag (array_die
, DW_AT_GNU_vector
, 1);
12951 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
12953 && TREE_CODE (type
) == ARRAY_TYPE
12954 && TREE_CODE (TREE_TYPE (type
)) == ARRAY_TYPE
12955 && !TYPE_STRING_FLAG (TREE_TYPE (type
)))
12956 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_col_major
);
12959 /* We default the array ordering. SDB will probably do
12960 the right things even if DW_AT_ordering is not present. It's not even
12961 an issue until we start to get into multidimensional arrays anyway. If
12962 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
12963 then we'll have to put the DW_AT_ordering attribute back in. (But if
12964 and when we find out that we need to put these in, we will only do so
12965 for multidimensional arrays. */
12966 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_row_major
);
12969 #ifdef MIPS_DEBUGGING_INFO
12970 /* The SGI compilers handle arrays of unknown bound by setting
12971 AT_declaration and not emitting any subrange DIEs. */
12972 if (! TYPE_DOMAIN (type
))
12973 add_AT_flag (array_die
, DW_AT_declaration
, 1);
12976 add_subscript_info (array_die
, type
, collapse_nested_arrays
);
12978 /* Add representation of the type of the elements of this array type and
12979 emit the corresponding DIE if we haven't done it already. */
12980 element_type
= TREE_TYPE (type
);
12981 if (collapse_nested_arrays
)
12982 while (TREE_CODE (element_type
) == ARRAY_TYPE
)
12984 if (TYPE_STRING_FLAG (element_type
) && is_fortran ())
12986 element_type
= TREE_TYPE (element_type
);
12989 #ifndef MIPS_DEBUGGING_INFO
12990 gen_type_die (element_type
, context_die
);
12993 add_type_attribute (array_die
, element_type
, 0, 0, context_die
);
12995 if (get_AT (array_die
, DW_AT_name
))
12996 add_pubtype (type
, array_die
);
12999 static dw_loc_descr_ref
13000 descr_info_loc (tree val
, tree base_decl
)
13002 HOST_WIDE_INT size
;
13003 dw_loc_descr_ref loc
, loc2
;
13004 enum dwarf_location_atom op
;
13006 if (val
== base_decl
)
13007 return new_loc_descr (DW_OP_push_object_address
, 0, 0);
13009 switch (TREE_CODE (val
))
13012 return descr_info_loc (TREE_OPERAND (val
, 0), base_decl
);
13014 return loc_descriptor_from_tree_1 (val
, 0);
13016 if (host_integerp (val
, 0))
13017 return int_loc_descriptor (tree_low_cst (val
, 0));
13020 size
= int_size_in_bytes (TREE_TYPE (val
));
13023 loc
= descr_info_loc (TREE_OPERAND (val
, 0), base_decl
);
13026 if (size
== DWARF2_ADDR_SIZE
)
13027 add_loc_descr (&loc
, new_loc_descr (DW_OP_deref
, 0, 0));
13029 add_loc_descr (&loc
, new_loc_descr (DW_OP_deref_size
, size
, 0));
13031 case POINTER_PLUS_EXPR
:
13033 if (host_integerp (TREE_OPERAND (val
, 1), 1)
13034 && (unsigned HOST_WIDE_INT
) tree_low_cst (TREE_OPERAND (val
, 1), 1)
13037 loc
= descr_info_loc (TREE_OPERAND (val
, 0), base_decl
);
13040 add_loc_descr (&loc
,
13041 new_loc_descr (DW_OP_plus_uconst
,
13042 tree_low_cst (TREE_OPERAND (val
, 1),
13049 loc
= descr_info_loc (TREE_OPERAND (val
, 0), base_decl
);
13052 loc2
= descr_info_loc (TREE_OPERAND (val
, 1), base_decl
);
13055 add_loc_descr (&loc
, loc2
);
13056 add_loc_descr (&loc2
, new_loc_descr (op
, 0, 0));
13078 add_descr_info_field (dw_die_ref die
, enum dwarf_attribute attr
,
13079 tree val
, tree base_decl
)
13081 dw_loc_descr_ref loc
;
13083 if (host_integerp (val
, 0))
13085 add_AT_unsigned (die
, attr
, tree_low_cst (val
, 0));
13089 loc
= descr_info_loc (val
, base_decl
);
13093 add_AT_loc (die
, attr
, loc
);
13096 /* This routine generates DIE for array with hidden descriptor, details
13097 are filled into *info by a langhook. */
13100 gen_descr_array_type_die (tree type
, struct array_descr_info
*info
,
13101 dw_die_ref context_die
)
13103 dw_die_ref scope_die
= scope_die_for (type
, context_die
);
13104 dw_die_ref array_die
;
13107 array_die
= new_die (DW_TAG_array_type
, scope_die
, type
);
13108 add_name_attribute (array_die
, type_tag (type
));
13109 equate_type_number_to_die (type
, array_die
);
13111 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
13113 && info
->ndimensions
>= 2)
13114 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_col_major
);
13116 if (info
->data_location
)
13117 add_descr_info_field (array_die
, DW_AT_data_location
, info
->data_location
,
13119 if (info
->associated
)
13120 add_descr_info_field (array_die
, DW_AT_associated
, info
->associated
,
13122 if (info
->allocated
)
13123 add_descr_info_field (array_die
, DW_AT_allocated
, info
->allocated
,
13126 for (dim
= 0; dim
< info
->ndimensions
; dim
++)
13128 dw_die_ref subrange_die
13129 = new_die (DW_TAG_subrange_type
, array_die
, NULL
);
13131 if (info
->dimen
[dim
].lower_bound
)
13133 /* If it is the default value, omit it. */
13134 if ((is_c_family () || is_java ())
13135 && integer_zerop (info
->dimen
[dim
].lower_bound
))
13137 else if (is_fortran ()
13138 && integer_onep (info
->dimen
[dim
].lower_bound
))
13141 add_descr_info_field (subrange_die
, DW_AT_lower_bound
,
13142 info
->dimen
[dim
].lower_bound
,
13145 if (info
->dimen
[dim
].upper_bound
)
13146 add_descr_info_field (subrange_die
, DW_AT_upper_bound
,
13147 info
->dimen
[dim
].upper_bound
,
13149 if (info
->dimen
[dim
].stride
)
13150 add_descr_info_field (subrange_die
, DW_AT_byte_stride
,
13151 info
->dimen
[dim
].stride
,
13155 gen_type_die (info
->element_type
, context_die
);
13156 add_type_attribute (array_die
, info
->element_type
, 0, 0, context_die
);
13158 if (get_AT (array_die
, DW_AT_name
))
13159 add_pubtype (type
, array_die
);
13164 gen_entry_point_die (tree decl
, dw_die_ref context_die
)
13166 tree origin
= decl_ultimate_origin (decl
);
13167 dw_die_ref decl_die
= new_die (DW_TAG_entry_point
, context_die
, decl
);
13169 if (origin
!= NULL
)
13170 add_abstract_origin_attribute (decl_die
, origin
);
13173 add_name_and_src_coords_attributes (decl_die
, decl
);
13174 add_type_attribute (decl_die
, TREE_TYPE (TREE_TYPE (decl
)),
13175 0, 0, context_die
);
13178 if (DECL_ABSTRACT (decl
))
13179 equate_decl_number_to_die (decl
, decl_die
);
13181 add_AT_lbl_id (decl_die
, DW_AT_low_pc
, decl_start_label (decl
));
13185 /* Walk through the list of incomplete types again, trying once more to
13186 emit full debugging info for them. */
13189 retry_incomplete_types (void)
13193 for (i
= VEC_length (tree
, incomplete_types
) - 1; i
>= 0; i
--)
13194 gen_type_die (VEC_index (tree
, incomplete_types
, i
), comp_unit_die
);
13197 /* Determine what tag to use for a record type. */
13199 static enum dwarf_tag
13200 record_type_tag (tree type
)
13202 if (! lang_hooks
.types
.classify_record
)
13203 return DW_TAG_structure_type
;
13205 switch (lang_hooks
.types
.classify_record (type
))
13207 case RECORD_IS_STRUCT
:
13208 return DW_TAG_structure_type
;
13210 case RECORD_IS_CLASS
:
13211 return DW_TAG_class_type
;
13213 case RECORD_IS_INTERFACE
:
13214 return DW_TAG_interface_type
;
13217 gcc_unreachable ();
13221 /* Generate a DIE to represent an enumeration type. Note that these DIEs
13222 include all of the information about the enumeration values also. Each
13223 enumerated type name/value is listed as a child of the enumerated type
13227 gen_enumeration_type_die (tree type
, dw_die_ref context_die
)
13229 dw_die_ref type_die
= lookup_type_die (type
);
13231 if (type_die
== NULL
)
13233 type_die
= new_die (DW_TAG_enumeration_type
,
13234 scope_die_for (type
, context_die
), type
);
13235 equate_type_number_to_die (type
, type_die
);
13236 add_name_attribute (type_die
, type_tag (type
));
13238 else if (! TYPE_SIZE (type
))
13241 remove_AT (type_die
, DW_AT_declaration
);
13243 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
13244 given enum type is incomplete, do not generate the DW_AT_byte_size
13245 attribute or the DW_AT_element_list attribute. */
13246 if (TYPE_SIZE (type
))
13250 TREE_ASM_WRITTEN (type
) = 1;
13251 add_byte_size_attribute (type_die
, type
);
13252 if (TYPE_STUB_DECL (type
) != NULL_TREE
)
13253 add_src_coords_attributes (type_die
, TYPE_STUB_DECL (type
));
13255 /* If the first reference to this type was as the return type of an
13256 inline function, then it may not have a parent. Fix this now. */
13257 if (type_die
->die_parent
== NULL
)
13258 add_child_die (scope_die_for (type
, context_die
), type_die
);
13260 for (link
= TYPE_VALUES (type
);
13261 link
!= NULL
; link
= TREE_CHAIN (link
))
13263 dw_die_ref enum_die
= new_die (DW_TAG_enumerator
, type_die
, link
);
13264 tree value
= TREE_VALUE (link
);
13266 add_name_attribute (enum_die
,
13267 IDENTIFIER_POINTER (TREE_PURPOSE (link
)));
13269 if (TREE_CODE (value
) == CONST_DECL
)
13270 value
= DECL_INITIAL (value
);
13272 if (host_integerp (value
, TYPE_UNSIGNED (TREE_TYPE (value
))))
13273 /* DWARF2 does not provide a way of indicating whether or
13274 not enumeration constants are signed or unsigned. GDB
13275 always assumes the values are signed, so we output all
13276 values as if they were signed. That means that
13277 enumeration constants with very large unsigned values
13278 will appear to have negative values in the debugger. */
13279 add_AT_int (enum_die
, DW_AT_const_value
,
13280 tree_low_cst (value
, tree_int_cst_sgn (value
) > 0));
13284 add_AT_flag (type_die
, DW_AT_declaration
, 1);
13286 if (get_AT (type_die
, DW_AT_name
))
13287 add_pubtype (type
, type_die
);
13292 /* Generate a DIE to represent either a real live formal parameter decl or to
13293 represent just the type of some formal parameter position in some function
13296 Note that this routine is a bit unusual because its argument may be a
13297 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
13298 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
13299 node. If it's the former then this function is being called to output a
13300 DIE to represent a formal parameter object (or some inlining thereof). If
13301 it's the latter, then this function is only being called to output a
13302 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
13303 argument type of some subprogram type. */
13306 gen_formal_parameter_die (tree node
, tree origin
, dw_die_ref context_die
)
13308 tree node_or_origin
= node
? node
: origin
;
13309 dw_die_ref parm_die
13310 = new_die (DW_TAG_formal_parameter
, context_die
, node
);
13312 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin
)))
13314 case tcc_declaration
:
13316 origin
= decl_ultimate_origin (node
);
13317 if (origin
!= NULL
)
13318 add_abstract_origin_attribute (parm_die
, origin
);
13321 tree type
= TREE_TYPE (node
);
13322 add_name_and_src_coords_attributes (parm_die
, node
);
13323 if (DECL_BY_REFERENCE (node
))
13324 add_type_attribute (parm_die
, TREE_TYPE (type
), 0, 0,
13327 add_type_attribute (parm_die
, type
,
13328 TREE_READONLY (node
),
13329 TREE_THIS_VOLATILE (node
),
13331 if (DECL_ARTIFICIAL (node
))
13332 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
13336 equate_decl_number_to_die (node
, parm_die
);
13337 if (! DECL_ABSTRACT (node_or_origin
))
13338 add_location_or_const_value_attribute (parm_die
, node_or_origin
,
13344 /* We were called with some kind of a ..._TYPE node. */
13345 add_type_attribute (parm_die
, node_or_origin
, 0, 0, context_die
);
13349 gcc_unreachable ();
13355 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
13356 at the end of an (ANSI prototyped) formal parameters list. */
13359 gen_unspecified_parameters_die (tree decl_or_type
, dw_die_ref context_die
)
13361 new_die (DW_TAG_unspecified_parameters
, context_die
, decl_or_type
);
13364 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
13365 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
13366 parameters as specified in some function type specification (except for
13367 those which appear as part of a function *definition*). */
13370 gen_formal_types_die (tree function_or_method_type
, dw_die_ref context_die
)
13373 tree formal_type
= NULL
;
13374 tree first_parm_type
;
13377 if (TREE_CODE (function_or_method_type
) == FUNCTION_DECL
)
13379 arg
= DECL_ARGUMENTS (function_or_method_type
);
13380 function_or_method_type
= TREE_TYPE (function_or_method_type
);
13385 first_parm_type
= TYPE_ARG_TYPES (function_or_method_type
);
13387 /* Make our first pass over the list of formal parameter types and output a
13388 DW_TAG_formal_parameter DIE for each one. */
13389 for (link
= first_parm_type
; link
; )
13391 dw_die_ref parm_die
;
13393 formal_type
= TREE_VALUE (link
);
13394 if (formal_type
== void_type_node
)
13397 /* Output a (nameless) DIE to represent the formal parameter itself. */
13398 parm_die
= gen_formal_parameter_die (formal_type
, NULL
, context_die
);
13399 if ((TREE_CODE (function_or_method_type
) == METHOD_TYPE
13400 && link
== first_parm_type
)
13401 || (arg
&& DECL_ARTIFICIAL (arg
)))
13402 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
13404 link
= TREE_CHAIN (link
);
13406 arg
= TREE_CHAIN (arg
);
13409 /* If this function type has an ellipsis, add a
13410 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
13411 if (formal_type
!= void_type_node
)
13412 gen_unspecified_parameters_die (function_or_method_type
, context_die
);
13414 /* Make our second (and final) pass over the list of formal parameter types
13415 and output DIEs to represent those types (as necessary). */
13416 for (link
= TYPE_ARG_TYPES (function_or_method_type
);
13417 link
&& TREE_VALUE (link
);
13418 link
= TREE_CHAIN (link
))
13419 gen_type_die (TREE_VALUE (link
), context_die
);
13422 /* We want to generate the DIE for TYPE so that we can generate the
13423 die for MEMBER, which has been defined; we will need to refer back
13424 to the member declaration nested within TYPE. If we're trying to
13425 generate minimal debug info for TYPE, processing TYPE won't do the
13426 trick; we need to attach the member declaration by hand. */
13429 gen_type_die_for_member (tree type
, tree member
, dw_die_ref context_die
)
13431 gen_type_die (type
, context_die
);
13433 /* If we're trying to avoid duplicate debug info, we may not have
13434 emitted the member decl for this function. Emit it now. */
13435 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type
))
13436 && ! lookup_decl_die (member
))
13438 dw_die_ref type_die
;
13439 gcc_assert (!decl_ultimate_origin (member
));
13441 push_decl_scope (type
);
13442 type_die
= lookup_type_die (type
);
13443 if (TREE_CODE (member
) == FUNCTION_DECL
)
13444 gen_subprogram_die (member
, type_die
);
13445 else if (TREE_CODE (member
) == FIELD_DECL
)
13447 /* Ignore the nameless fields that are used to skip bits but handle
13448 C++ anonymous unions and structs. */
13449 if (DECL_NAME (member
) != NULL_TREE
13450 || TREE_CODE (TREE_TYPE (member
)) == UNION_TYPE
13451 || TREE_CODE (TREE_TYPE (member
)) == RECORD_TYPE
)
13453 gen_type_die (member_declared_type (member
), type_die
);
13454 gen_field_die (member
, type_die
);
13458 gen_variable_die (member
, NULL_TREE
, type_die
);
13464 /* Generate the DWARF2 info for the "abstract" instance of a function which we
13465 may later generate inlined and/or out-of-line instances of. */
13468 dwarf2out_abstract_function (tree decl
)
13470 dw_die_ref old_die
;
13473 int was_abstract
= DECL_ABSTRACT (decl
);
13475 /* Make sure we have the actual abstract inline, not a clone. */
13476 decl
= DECL_ORIGIN (decl
);
13478 old_die
= lookup_decl_die (decl
);
13479 if (old_die
&& get_AT (old_die
, DW_AT_inline
))
13480 /* We've already generated the abstract instance. */
13483 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
13484 we don't get confused by DECL_ABSTRACT. */
13485 if (debug_info_level
> DINFO_LEVEL_TERSE
)
13487 context
= decl_class_context (decl
);
13489 gen_type_die_for_member
13490 (context
, decl
, decl_function_context (decl
) ? NULL
: comp_unit_die
);
13493 /* Pretend we've just finished compiling this function. */
13494 save_fn
= current_function_decl
;
13495 current_function_decl
= decl
;
13496 push_cfun (DECL_STRUCT_FUNCTION (decl
));
13498 set_decl_abstract_flags (decl
, 1);
13499 dwarf2out_decl (decl
);
13500 if (! was_abstract
)
13501 set_decl_abstract_flags (decl
, 0);
13503 current_function_decl
= save_fn
;
13507 /* Helper function of premark_used_types() which gets called through
13508 htab_traverse_resize().
13510 Marks the DIE of a given type in *SLOT as perennial, so it never gets
13511 marked as unused by prune_unused_types. */
13513 premark_used_types_helper (void **slot
, void *data ATTRIBUTE_UNUSED
)
13518 type
= (tree
) *slot
;
13519 die
= lookup_type_die (type
);
13521 die
->die_perennial_p
= 1;
13525 /* Mark all members of used_types_hash as perennial. */
13527 premark_used_types (void)
13529 if (cfun
&& cfun
->used_types_hash
)
13530 htab_traverse (cfun
->used_types_hash
, premark_used_types_helper
, NULL
);
13533 /* Generate a DIE to represent a declared function (either file-scope or
13537 gen_subprogram_die (tree decl
, dw_die_ref context_die
)
13539 char label_id
[MAX_ARTIFICIAL_LABEL_BYTES
];
13540 tree origin
= decl_ultimate_origin (decl
);
13541 dw_die_ref subr_die
;
13544 dw_die_ref old_die
= lookup_decl_die (decl
);
13545 int declaration
= (current_function_decl
!= decl
13546 || class_or_namespace_scope_p (context_die
));
13548 premark_used_types ();
13550 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
13551 started to generate the abstract instance of an inline, decided to output
13552 its containing class, and proceeded to emit the declaration of the inline
13553 from the member list for the class. If so, DECLARATION takes priority;
13554 we'll get back to the abstract instance when done with the class. */
13556 /* The class-scope declaration DIE must be the primary DIE. */
13557 if (origin
&& declaration
&& class_or_namespace_scope_p (context_die
))
13560 gcc_assert (!old_die
);
13563 /* Now that the C++ front end lazily declares artificial member fns, we
13564 might need to retrofit the declaration into its class. */
13565 if (!declaration
&& !origin
&& !old_die
13566 && DECL_CONTEXT (decl
) && TYPE_P (DECL_CONTEXT (decl
))
13567 && !class_or_namespace_scope_p (context_die
)
13568 && debug_info_level
> DINFO_LEVEL_TERSE
)
13569 old_die
= force_decl_die (decl
);
13571 if (origin
!= NULL
)
13573 gcc_assert (!declaration
|| local_scope_p (context_die
));
13575 /* Fixup die_parent for the abstract instance of a nested
13576 inline function. */
13577 if (old_die
&& old_die
->die_parent
== NULL
)
13578 add_child_die (context_die
, old_die
);
13580 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
13581 add_abstract_origin_attribute (subr_die
, origin
);
13585 expanded_location s
= expand_location (DECL_SOURCE_LOCATION (decl
));
13586 struct dwarf_file_data
* file_index
= lookup_filename (s
.file
);
13588 if (!get_AT_flag (old_die
, DW_AT_declaration
)
13589 /* We can have a normal definition following an inline one in the
13590 case of redefinition of GNU C extern inlines.
13591 It seems reasonable to use AT_specification in this case. */
13592 && !get_AT (old_die
, DW_AT_inline
))
13594 /* Detect and ignore this case, where we are trying to output
13595 something we have already output. */
13599 /* If the definition comes from the same place as the declaration,
13600 maybe use the old DIE. We always want the DIE for this function
13601 that has the *_pc attributes to be under comp_unit_die so the
13602 debugger can find it. We also need to do this for abstract
13603 instances of inlines, since the spec requires the out-of-line copy
13604 to have the same parent. For local class methods, this doesn't
13605 apply; we just use the old DIE. */
13606 if ((old_die
->die_parent
== comp_unit_die
|| context_die
== NULL
)
13607 && (DECL_ARTIFICIAL (decl
)
13608 || (get_AT_file (old_die
, DW_AT_decl_file
) == file_index
13609 && (get_AT_unsigned (old_die
, DW_AT_decl_line
)
13610 == (unsigned) s
.line
))))
13612 subr_die
= old_die
;
13614 /* Clear out the declaration attribute and the formal parameters.
13615 Do not remove all children, because it is possible that this
13616 declaration die was forced using force_decl_die(). In such
13617 cases die that forced declaration die (e.g. TAG_imported_module)
13618 is one of the children that we do not want to remove. */
13619 remove_AT (subr_die
, DW_AT_declaration
);
13620 remove_child_TAG (subr_die
, DW_TAG_formal_parameter
);
13624 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
13625 add_AT_specification (subr_die
, old_die
);
13626 if (get_AT_file (old_die
, DW_AT_decl_file
) != file_index
)
13627 add_AT_file (subr_die
, DW_AT_decl_file
, file_index
);
13628 if (get_AT_unsigned (old_die
, DW_AT_decl_line
) != (unsigned) s
.line
)
13629 add_AT_unsigned (subr_die
, DW_AT_decl_line
, s
.line
);
13634 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
13636 if (TREE_PUBLIC (decl
))
13637 add_AT_flag (subr_die
, DW_AT_external
, 1);
13639 add_name_and_src_coords_attributes (subr_die
, decl
);
13640 if (debug_info_level
> DINFO_LEVEL_TERSE
)
13642 add_prototyped_attribute (subr_die
, TREE_TYPE (decl
));
13643 add_type_attribute (subr_die
, TREE_TYPE (TREE_TYPE (decl
)),
13644 0, 0, context_die
);
13647 add_pure_or_virtual_attribute (subr_die
, decl
);
13648 if (DECL_ARTIFICIAL (decl
))
13649 add_AT_flag (subr_die
, DW_AT_artificial
, 1);
13651 if (TREE_PROTECTED (decl
))
13652 add_AT_unsigned (subr_die
, DW_AT_accessibility
, DW_ACCESS_protected
);
13653 else if (TREE_PRIVATE (decl
))
13654 add_AT_unsigned (subr_die
, DW_AT_accessibility
, DW_ACCESS_private
);
13659 if (!old_die
|| !get_AT (old_die
, DW_AT_inline
))
13661 add_AT_flag (subr_die
, DW_AT_declaration
, 1);
13663 /* The first time we see a member function, it is in the context of
13664 the class to which it belongs. We make sure of this by emitting
13665 the class first. The next time is the definition, which is
13666 handled above. The two may come from the same source text.
13668 Note that force_decl_die() forces function declaration die. It is
13669 later reused to represent definition. */
13670 equate_decl_number_to_die (decl
, subr_die
);
13673 else if (DECL_ABSTRACT (decl
))
13675 if (DECL_DECLARED_INLINE_P (decl
))
13677 if (cgraph_function_possibly_inlined_p (decl
))
13678 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_declared_inlined
);
13680 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_declared_not_inlined
);
13684 if (cgraph_function_possibly_inlined_p (decl
))
13685 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_inlined
);
13687 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_not_inlined
);
13690 if (DECL_DECLARED_INLINE_P (decl
)
13691 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl
)))
13692 add_AT_flag (subr_die
, DW_AT_artificial
, 1);
13694 equate_decl_number_to_die (decl
, subr_die
);
13696 else if (!DECL_EXTERNAL (decl
))
13698 HOST_WIDE_INT cfa_fb_offset
;
13700 if (!old_die
|| !get_AT (old_die
, DW_AT_inline
))
13701 equate_decl_number_to_die (decl
, subr_die
);
13703 if (!flag_reorder_blocks_and_partition
)
13705 ASM_GENERATE_INTERNAL_LABEL (label_id
, FUNC_BEGIN_LABEL
,
13706 current_function_funcdef_no
);
13707 add_AT_lbl_id (subr_die
, DW_AT_low_pc
, label_id
);
13708 ASM_GENERATE_INTERNAL_LABEL (label_id
, FUNC_END_LABEL
,
13709 current_function_funcdef_no
);
13710 add_AT_lbl_id (subr_die
, DW_AT_high_pc
, label_id
);
13712 add_pubname (decl
, subr_die
);
13713 add_arange (decl
, subr_die
);
13716 { /* Do nothing for now; maybe need to duplicate die, one for
13717 hot section and one for cold section, then use the hot/cold
13718 section begin/end labels to generate the aranges... */
13720 add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
13721 add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
13722 add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
13723 add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
13725 add_pubname (decl, subr_die);
13726 add_arange (decl, subr_die);
13727 add_arange (decl, subr_die);
13731 #ifdef MIPS_DEBUGGING_INFO
13732 /* Add a reference to the FDE for this routine. */
13733 add_AT_fde_ref (subr_die
, DW_AT_MIPS_fde
, current_funcdef_fde
);
13736 cfa_fb_offset
= CFA_FRAME_BASE_OFFSET (decl
);
13738 /* We define the "frame base" as the function's CFA. This is more
13739 convenient for several reasons: (1) It's stable across the prologue
13740 and epilogue, which makes it better than just a frame pointer,
13741 (2) With dwarf3, there exists a one-byte encoding that allows us
13742 to reference the .debug_frame data by proxy, but failing that,
13743 (3) We can at least reuse the code inspection and interpretation
13744 code that determines the CFA position at various points in the
13746 /* ??? Use some command-line or configury switch to enable the use
13747 of dwarf3 DW_OP_call_frame_cfa. At present there are no dwarf
13748 consumers that understand it; fall back to "pure" dwarf2 and
13749 convert the CFA data into a location list. */
13751 dw_loc_list_ref list
= convert_cfa_to_fb_loc_list (cfa_fb_offset
);
13752 if (list
->dw_loc_next
)
13753 add_AT_loc_list (subr_die
, DW_AT_frame_base
, list
);
13755 add_AT_loc (subr_die
, DW_AT_frame_base
, list
->expr
);
13758 /* Compute a displacement from the "steady-state frame pointer" to
13759 the CFA. The former is what all stack slots and argument slots
13760 will reference in the rtl; the later is what we've told the
13761 debugger about. We'll need to adjust all frame_base references
13762 by this displacement. */
13763 compute_frame_pointer_to_fb_displacement (cfa_fb_offset
);
13765 if (cfun
->static_chain_decl
)
13766 add_AT_location_description (subr_die
, DW_AT_static_link
,
13767 loc_descriptor_from_tree (cfun
->static_chain_decl
));
13770 /* Now output descriptions of the arguments for this function. This gets
13771 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
13772 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
13773 `...' at the end of the formal parameter list. In order to find out if
13774 there was a trailing ellipsis or not, we must instead look at the type
13775 associated with the FUNCTION_DECL. This will be a node of type
13776 FUNCTION_TYPE. If the chain of type nodes hanging off of this
13777 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
13778 an ellipsis at the end. */
13780 /* In the case where we are describing a mere function declaration, all we
13781 need to do here (and all we *can* do here) is to describe the *types* of
13782 its formal parameters. */
13783 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
13785 else if (declaration
)
13786 gen_formal_types_die (decl
, subr_die
);
13789 /* Generate DIEs to represent all known formal parameters. */
13790 tree arg_decls
= DECL_ARGUMENTS (decl
);
13793 /* When generating DIEs, generate the unspecified_parameters DIE
13794 instead if we come across the arg "__builtin_va_alist" */
13795 for (parm
= arg_decls
; parm
; parm
= TREE_CHAIN (parm
))
13796 if (TREE_CODE (parm
) == PARM_DECL
)
13798 if (DECL_NAME (parm
)
13799 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm
)),
13800 "__builtin_va_alist"))
13801 gen_unspecified_parameters_die (parm
, subr_die
);
13803 gen_decl_die (parm
, NULL
, subr_die
);
13806 /* Decide whether we need an unspecified_parameters DIE at the end.
13807 There are 2 more cases to do this for: 1) the ansi ... declaration -
13808 this is detectable when the end of the arg list is not a
13809 void_type_node 2) an unprototyped function declaration (not a
13810 definition). This just means that we have no info about the
13811 parameters at all. */
13812 fn_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
13813 if (fn_arg_types
!= NULL
)
13815 /* This is the prototyped case, check for.... */
13816 if (TREE_VALUE (tree_last (fn_arg_types
)) != void_type_node
)
13817 gen_unspecified_parameters_die (decl
, subr_die
);
13819 else if (DECL_INITIAL (decl
) == NULL_TREE
)
13820 gen_unspecified_parameters_die (decl
, subr_die
);
13823 /* Output Dwarf info for all of the stuff within the body of the function
13824 (if it has one - it may be just a declaration). */
13825 outer_scope
= DECL_INITIAL (decl
);
13827 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
13828 a function. This BLOCK actually represents the outermost binding contour
13829 for the function, i.e. the contour in which the function's formal
13830 parameters and labels get declared. Curiously, it appears that the front
13831 end doesn't actually put the PARM_DECL nodes for the current function onto
13832 the BLOCK_VARS list for this outer scope, but are strung off of the
13833 DECL_ARGUMENTS list for the function instead.
13835 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
13836 the LABEL_DECL nodes for the function however, and we output DWARF info
13837 for those in decls_for_scope. Just within the `outer_scope' there will be
13838 a BLOCK node representing the function's outermost pair of curly braces,
13839 and any blocks used for the base and member initializers of a C++
13840 constructor function. */
13841 if (! declaration
&& TREE_CODE (outer_scope
) != ERROR_MARK
)
13843 /* Emit a DW_TAG_variable DIE for a named return value. */
13844 if (DECL_NAME (DECL_RESULT (decl
)))
13845 gen_decl_die (DECL_RESULT (decl
), NULL
, subr_die
);
13847 current_function_has_inlines
= 0;
13848 decls_for_scope (outer_scope
, subr_die
, 0);
13850 #if 0 && defined (MIPS_DEBUGGING_INFO)
13851 if (current_function_has_inlines
)
13853 add_AT_flag (subr_die
, DW_AT_MIPS_has_inlines
, 1);
13854 if (! comp_unit_has_inlines
)
13856 add_AT_flag (comp_unit_die
, DW_AT_MIPS_has_inlines
, 1);
13857 comp_unit_has_inlines
= 1;
13862 /* Add the calling convention attribute if requested. */
13863 add_calling_convention_attribute (subr_die
, decl
);
13867 /* Returns a hash value for X (which really is a die_struct). */
13870 common_block_die_table_hash (const void *x
)
13872 const_dw_die_ref d
= (const_dw_die_ref
) x
;
13873 return (hashval_t
) d
->decl_id
^ htab_hash_pointer (d
->die_parent
);
13876 /* Return nonzero if decl_id and die_parent of die_struct X is the same
13877 as decl_id and die_parent of die_struct Y. */
13880 common_block_die_table_eq (const void *x
, const void *y
)
13882 const_dw_die_ref d
= (const_dw_die_ref
) x
;
13883 const_dw_die_ref e
= (const_dw_die_ref
) y
;
13884 return d
->decl_id
== e
->decl_id
&& d
->die_parent
== e
->die_parent
;
13887 /* Generate a DIE to represent a declared data object.
13888 Either DECL or ORIGIN must be non-null. */
13891 gen_variable_die (tree decl
, tree origin
, dw_die_ref context_die
)
13895 tree decl_or_origin
= decl
? decl
: origin
;
13896 dw_die_ref var_die
;
13897 dw_die_ref old_die
= decl
? lookup_decl_die (decl
) : NULL
;
13898 dw_die_ref origin_die
;
13899 int declaration
= (DECL_EXTERNAL (decl_or_origin
)
13900 /* If DECL is COMDAT and has not actually been
13901 emitted, we cannot take its address; there
13902 might end up being no definition anywhere in
13903 the program. For example, consider the C++
13907 struct S { static const int i = 7; };
13912 int f() { return S<int>::i; }
13914 Here, S<int>::i is not DECL_EXTERNAL, but no
13915 definition is required, so the compiler will
13916 not emit a definition. */
13917 || (TREE_CODE (decl_or_origin
) == VAR_DECL
13918 && DECL_COMDAT (decl_or_origin
)
13919 && !TREE_ASM_WRITTEN (decl_or_origin
))
13920 || class_or_namespace_scope_p (context_die
));
13923 origin
= decl_ultimate_origin (decl
);
13925 com_decl
= fortran_common (decl_or_origin
, &off
);
13927 /* Symbol in common gets emitted as a child of the common block, in the form
13928 of a data member. */
13932 dw_die_ref com_die
;
13933 dw_loc_descr_ref loc
;
13934 die_node com_die_arg
;
13936 var_die
= lookup_decl_die (decl_or_origin
);
13939 if (get_AT (var_die
, DW_AT_location
) == NULL
)
13941 loc
= loc_descriptor_from_tree (com_decl
);
13946 /* Optimize the common case. */
13947 if (loc
->dw_loc_opc
== DW_OP_addr
13948 && loc
->dw_loc_next
== NULL
13949 && GET_CODE (loc
->dw_loc_oprnd1
.v
.val_addr
)
13951 loc
->dw_loc_oprnd1
.v
.val_addr
13952 = plus_constant (loc
->dw_loc_oprnd1
.v
.val_addr
, off
);
13954 add_loc_descr (&loc
,
13955 new_loc_descr (DW_OP_plus_uconst
,
13958 add_AT_loc (var_die
, DW_AT_location
, loc
);
13959 remove_AT (var_die
, DW_AT_declaration
);
13965 if (common_block_die_table
== NULL
)
13966 common_block_die_table
13967 = htab_create_ggc (10, common_block_die_table_hash
,
13968 common_block_die_table_eq
, NULL
);
13970 field
= TREE_OPERAND (DECL_VALUE_EXPR (decl
), 0);
13971 com_die_arg
.decl_id
= DECL_UID (com_decl
);
13972 com_die_arg
.die_parent
= context_die
;
13973 com_die
= (dw_die_ref
) htab_find (common_block_die_table
, &com_die_arg
);
13974 loc
= loc_descriptor_from_tree (com_decl
);
13975 if (com_die
== NULL
)
13978 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl
));
13981 com_die
= new_die (DW_TAG_common_block
, context_die
, decl
);
13982 add_name_and_src_coords_attributes (com_die
, com_decl
);
13985 add_AT_loc (com_die
, DW_AT_location
, loc
);
13986 /* Avoid sharing the same loc descriptor between
13987 DW_TAG_common_block and DW_TAG_variable. */
13988 loc
= loc_descriptor_from_tree (com_decl
);
13990 else if (DECL_EXTERNAL (decl
))
13991 add_AT_flag (com_die
, DW_AT_declaration
, 1);
13992 add_pubname_string (cnam
, com_die
); /* ??? needed? */
13993 com_die
->decl_id
= DECL_UID (com_decl
);
13994 slot
= htab_find_slot (common_block_die_table
, com_die
, INSERT
);
13995 *slot
= (void *) com_die
;
13997 else if (get_AT (com_die
, DW_AT_location
) == NULL
&& loc
)
13999 add_AT_loc (com_die
, DW_AT_location
, loc
);
14000 loc
= loc_descriptor_from_tree (com_decl
);
14001 remove_AT (com_die
, DW_AT_declaration
);
14003 var_die
= new_die (DW_TAG_variable
, com_die
, decl
);
14004 add_name_and_src_coords_attributes (var_die
, decl
);
14005 add_type_attribute (var_die
, TREE_TYPE (decl
), TREE_READONLY (decl
),
14006 TREE_THIS_VOLATILE (decl
), context_die
);
14007 add_AT_flag (var_die
, DW_AT_external
, 1);
14012 /* Optimize the common case. */
14013 if (loc
->dw_loc_opc
== DW_OP_addr
14014 && loc
->dw_loc_next
== NULL
14015 && GET_CODE (loc
->dw_loc_oprnd1
.v
.val_addr
) == SYMBOL_REF
)
14016 loc
->dw_loc_oprnd1
.v
.val_addr
14017 = plus_constant (loc
->dw_loc_oprnd1
.v
.val_addr
, off
);
14019 add_loc_descr (&loc
, new_loc_descr (DW_OP_plus_uconst
,
14022 add_AT_loc (var_die
, DW_AT_location
, loc
);
14024 else if (DECL_EXTERNAL (decl
))
14025 add_AT_flag (var_die
, DW_AT_declaration
, 1);
14026 equate_decl_number_to_die (decl
, var_die
);
14030 /* If the compiler emitted a definition for the DECL declaration
14031 and if we already emitted a DIE for it, don't emit a second
14032 DIE for it again. */
14035 && old_die
->die_parent
== context_die
)
14038 var_die
= new_die (DW_TAG_variable
, context_die
, decl
);
14041 if (origin
!= NULL
)
14042 origin_die
= add_abstract_origin_attribute (var_die
, origin
);
14044 /* Loop unrolling can create multiple blocks that refer to the same
14045 static variable, so we must test for the DW_AT_declaration flag.
14047 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
14048 copy decls and set the DECL_ABSTRACT flag on them instead of
14051 ??? Duplicated blocks have been rewritten to use .debug_ranges.
14053 ??? The declare_in_namespace support causes us to get two DIEs for one
14054 variable, both of which are declarations. We want to avoid considering
14055 one to be a specification, so we must test that this DIE is not a
14057 else if (old_die
&& TREE_STATIC (decl
) && ! declaration
14058 && get_AT_flag (old_die
, DW_AT_declaration
) == 1)
14060 /* This is a definition of a C++ class level static. */
14061 add_AT_specification (var_die
, old_die
);
14062 if (DECL_NAME (decl
))
14064 expanded_location s
= expand_location (DECL_SOURCE_LOCATION (decl
));
14065 struct dwarf_file_data
* file_index
= lookup_filename (s
.file
);
14067 if (get_AT_file (old_die
, DW_AT_decl_file
) != file_index
)
14068 add_AT_file (var_die
, DW_AT_decl_file
, file_index
);
14070 if (get_AT_unsigned (old_die
, DW_AT_decl_line
) != (unsigned) s
.line
)
14071 add_AT_unsigned (var_die
, DW_AT_decl_line
, s
.line
);
14076 tree type
= TREE_TYPE (decl
);
14078 add_name_and_src_coords_attributes (var_die
, decl
);
14079 if ((TREE_CODE (decl
) == PARM_DECL
14080 || TREE_CODE (decl
) == RESULT_DECL
)
14081 && DECL_BY_REFERENCE (decl
))
14082 add_type_attribute (var_die
, TREE_TYPE (type
), 0, 0, context_die
);
14084 add_type_attribute (var_die
, type
, TREE_READONLY (decl
),
14085 TREE_THIS_VOLATILE (decl
), context_die
);
14087 if (TREE_PUBLIC (decl
))
14088 add_AT_flag (var_die
, DW_AT_external
, 1);
14090 if (DECL_ARTIFICIAL (decl
))
14091 add_AT_flag (var_die
, DW_AT_artificial
, 1);
14093 if (TREE_PROTECTED (decl
))
14094 add_AT_unsigned (var_die
, DW_AT_accessibility
, DW_ACCESS_protected
);
14095 else if (TREE_PRIVATE (decl
))
14096 add_AT_unsigned (var_die
, DW_AT_accessibility
, DW_ACCESS_private
);
14100 add_AT_flag (var_die
, DW_AT_declaration
, 1);
14102 if (decl
&& (DECL_ABSTRACT (decl
) || declaration
))
14103 equate_decl_number_to_die (decl
, var_die
);
14106 && (! DECL_ABSTRACT (decl_or_origin
)
14107 /* Local static vars are shared between all clones/inlines,
14108 so emit DW_AT_location on the abstract DIE if DECL_RTL is
14110 || (TREE_CODE (decl_or_origin
) == VAR_DECL
14111 && TREE_STATIC (decl_or_origin
)
14112 && DECL_RTL_SET_P (decl_or_origin
)))
14113 /* When abstract origin already has DW_AT_location attribute, no need
14114 to add it again. */
14115 && (origin_die
== NULL
|| get_AT (origin_die
, DW_AT_location
) == NULL
))
14117 if (TREE_CODE (decl_or_origin
) == VAR_DECL
&& TREE_STATIC (decl_or_origin
)
14118 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin
)))
14119 defer_location (decl_or_origin
, var_die
);
14121 add_location_or_const_value_attribute (var_die
,
14124 add_pubname (decl_or_origin
, var_die
);
14127 tree_add_const_value_attribute (var_die
, decl_or_origin
);
14130 /* Generate a DIE to represent a named constant. */
14133 gen_const_die (tree decl
, dw_die_ref context_die
)
14135 dw_die_ref const_die
;
14136 tree type
= TREE_TYPE (decl
);
14138 const_die
= new_die (DW_TAG_constant
, context_die
, decl
);
14139 add_name_and_src_coords_attributes (const_die
, decl
);
14140 add_type_attribute (const_die
, type
, 1, 0, context_die
);
14141 if (TREE_PUBLIC (decl
))
14142 add_AT_flag (const_die
, DW_AT_external
, 1);
14143 if (DECL_ARTIFICIAL (decl
))
14144 add_AT_flag (const_die
, DW_AT_artificial
, 1);
14145 tree_add_const_value_attribute (const_die
, decl
);
14148 /* Generate a DIE to represent a label identifier. */
14151 gen_label_die (tree decl
, dw_die_ref context_die
)
14153 tree origin
= decl_ultimate_origin (decl
);
14154 dw_die_ref lbl_die
= new_die (DW_TAG_label
, context_die
, decl
);
14156 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
14158 if (origin
!= NULL
)
14159 add_abstract_origin_attribute (lbl_die
, origin
);
14161 add_name_and_src_coords_attributes (lbl_die
, decl
);
14163 if (DECL_ABSTRACT (decl
))
14164 equate_decl_number_to_die (decl
, lbl_die
);
14167 insn
= DECL_RTL_IF_SET (decl
);
14169 /* Deleted labels are programmer specified labels which have been
14170 eliminated because of various optimizations. We still emit them
14171 here so that it is possible to put breakpoints on them. */
14175 && NOTE_KIND (insn
) == NOTE_INSN_DELETED_LABEL
))))
14177 /* When optimization is enabled (via -O) some parts of the compiler
14178 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
14179 represent source-level labels which were explicitly declared by
14180 the user. This really shouldn't be happening though, so catch
14181 it if it ever does happen. */
14182 gcc_assert (!INSN_DELETED_P (insn
));
14184 ASM_GENERATE_INTERNAL_LABEL (label
, "L", CODE_LABEL_NUMBER (insn
));
14185 add_AT_lbl_id (lbl_die
, DW_AT_low_pc
, label
);
14190 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
14191 attributes to the DIE for a block STMT, to describe where the inlined
14192 function was called from. This is similar to add_src_coords_attributes. */
14195 add_call_src_coords_attributes (tree stmt
, dw_die_ref die
)
14197 expanded_location s
= expand_location (BLOCK_SOURCE_LOCATION (stmt
));
14199 add_AT_file (die
, DW_AT_call_file
, lookup_filename (s
.file
));
14200 add_AT_unsigned (die
, DW_AT_call_line
, s
.line
);
14204 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
14205 Add low_pc and high_pc attributes to the DIE for a block STMT. */
14208 add_high_low_attributes (tree stmt
, dw_die_ref die
)
14210 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
14212 if (BLOCK_FRAGMENT_CHAIN (stmt
))
14216 if (inlined_function_outer_scope_p (stmt
))
14218 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_BEGIN_LABEL
,
14219 BLOCK_NUMBER (stmt
));
14220 add_AT_lbl_id (die
, DW_AT_entry_pc
, label
);
14223 add_AT_range_list (die
, DW_AT_ranges
, add_ranges (stmt
));
14225 chain
= BLOCK_FRAGMENT_CHAIN (stmt
);
14228 add_ranges (chain
);
14229 chain
= BLOCK_FRAGMENT_CHAIN (chain
);
14236 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_BEGIN_LABEL
,
14237 BLOCK_NUMBER (stmt
));
14238 add_AT_lbl_id (die
, DW_AT_low_pc
, label
);
14239 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_END_LABEL
,
14240 BLOCK_NUMBER (stmt
));
14241 add_AT_lbl_id (die
, DW_AT_high_pc
, label
);
14245 /* Generate a DIE for a lexical block. */
14248 gen_lexical_block_die (tree stmt
, dw_die_ref context_die
, int depth
)
14250 dw_die_ref stmt_die
= new_die (DW_TAG_lexical_block
, context_die
, stmt
);
14252 if (! BLOCK_ABSTRACT (stmt
) && TREE_ASM_WRITTEN (stmt
))
14253 add_high_low_attributes (stmt
, stmt_die
);
14255 decls_for_scope (stmt
, stmt_die
, depth
);
14258 /* Generate a DIE for an inlined subprogram. */
14261 gen_inlined_subroutine_die (tree stmt
, dw_die_ref context_die
, int depth
)
14263 tree decl
= block_ultimate_origin (stmt
);
14265 /* Emit info for the abstract instance first, if we haven't yet. We
14266 must emit this even if the block is abstract, otherwise when we
14267 emit the block below (or elsewhere), we may end up trying to emit
14268 a die whose origin die hasn't been emitted, and crashing. */
14269 dwarf2out_abstract_function (decl
);
14271 if (! BLOCK_ABSTRACT (stmt
))
14273 dw_die_ref subr_die
14274 = new_die (DW_TAG_inlined_subroutine
, context_die
, stmt
);
14276 add_abstract_origin_attribute (subr_die
, decl
);
14277 if (TREE_ASM_WRITTEN (stmt
))
14278 add_high_low_attributes (stmt
, subr_die
);
14279 add_call_src_coords_attributes (stmt
, subr_die
);
14281 decls_for_scope (stmt
, subr_die
, depth
);
14282 current_function_has_inlines
= 1;
14285 /* We may get here if we're the outer block of function A that was
14286 inlined into function B that was inlined into function C. When
14287 generating debugging info for C, dwarf2out_abstract_function(B)
14288 would mark all inlined blocks as abstract, including this one.
14289 So, we wouldn't (and shouldn't) expect labels to be generated
14290 for this one. Instead, just emit debugging info for
14291 declarations within the block. This is particularly important
14292 in the case of initializers of arguments passed from B to us:
14293 if they're statement expressions containing declarations, we
14294 wouldn't generate dies for their abstract variables, and then,
14295 when generating dies for the real variables, we'd die (pun
14297 gen_lexical_block_die (stmt
, context_die
, depth
);
14300 /* Generate a DIE for a field in a record, or structure. */
14303 gen_field_die (tree decl
, dw_die_ref context_die
)
14305 dw_die_ref decl_die
;
14307 if (TREE_TYPE (decl
) == error_mark_node
)
14310 decl_die
= new_die (DW_TAG_member
, context_die
, decl
);
14311 add_name_and_src_coords_attributes (decl_die
, decl
);
14312 add_type_attribute (decl_die
, member_declared_type (decl
),
14313 TREE_READONLY (decl
), TREE_THIS_VOLATILE (decl
),
14316 if (DECL_BIT_FIELD_TYPE (decl
))
14318 add_byte_size_attribute (decl_die
, decl
);
14319 add_bit_size_attribute (decl_die
, decl
);
14320 add_bit_offset_attribute (decl_die
, decl
);
14323 if (TREE_CODE (DECL_FIELD_CONTEXT (decl
)) != UNION_TYPE
)
14324 add_data_member_location_attribute (decl_die
, decl
);
14326 if (DECL_ARTIFICIAL (decl
))
14327 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
14329 if (TREE_PROTECTED (decl
))
14330 add_AT_unsigned (decl_die
, DW_AT_accessibility
, DW_ACCESS_protected
);
14331 else if (TREE_PRIVATE (decl
))
14332 add_AT_unsigned (decl_die
, DW_AT_accessibility
, DW_ACCESS_private
);
14334 /* Equate decl number to die, so that we can look up this decl later on. */
14335 equate_decl_number_to_die (decl
, decl_die
);
14339 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
14340 Use modified_type_die instead.
14341 We keep this code here just in case these types of DIEs may be needed to
14342 represent certain things in other languages (e.g. Pascal) someday. */
14345 gen_pointer_type_die (tree type
, dw_die_ref context_die
)
14348 = new_die (DW_TAG_pointer_type
, scope_die_for (type
, context_die
), type
);
14350 equate_type_number_to_die (type
, ptr_die
);
14351 add_type_attribute (ptr_die
, TREE_TYPE (type
), 0, 0, context_die
);
14352 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
, PTR_SIZE
);
14355 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
14356 Use modified_type_die instead.
14357 We keep this code here just in case these types of DIEs may be needed to
14358 represent certain things in other languages (e.g. Pascal) someday. */
14361 gen_reference_type_die (tree type
, dw_die_ref context_die
)
14364 = new_die (DW_TAG_reference_type
, scope_die_for (type
, context_die
), type
);
14366 equate_type_number_to_die (type
, ref_die
);
14367 add_type_attribute (ref_die
, TREE_TYPE (type
), 0, 0, context_die
);
14368 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
, PTR_SIZE
);
14372 /* Generate a DIE for a pointer to a member type. */
14375 gen_ptr_to_mbr_type_die (tree type
, dw_die_ref context_die
)
14378 = new_die (DW_TAG_ptr_to_member_type
,
14379 scope_die_for (type
, context_die
), type
);
14381 equate_type_number_to_die (type
, ptr_die
);
14382 add_AT_die_ref (ptr_die
, DW_AT_containing_type
,
14383 lookup_type_die (TYPE_OFFSET_BASETYPE (type
)));
14384 add_type_attribute (ptr_die
, TREE_TYPE (type
), 0, 0, context_die
);
14387 /* Generate the DIE for the compilation unit. */
14390 gen_compile_unit_die (const char *filename
)
14393 char producer
[250];
14394 const char *language_string
= lang_hooks
.name
;
14397 die
= new_die (DW_TAG_compile_unit
, NULL
, NULL
);
14401 add_name_attribute (die
, filename
);
14402 /* Don't add cwd for <built-in>. */
14403 if (!IS_ABSOLUTE_PATH (filename
) && filename
[0] != '<')
14404 add_comp_dir_attribute (die
);
14407 sprintf (producer
, "%s %s", language_string
, version_string
);
14409 #ifdef MIPS_DEBUGGING_INFO
14410 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
14411 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
14412 not appear in the producer string, the debugger reaches the conclusion
14413 that the object file is stripped and has no debugging information.
14414 To get the MIPS/SGI debugger to believe that there is debugging
14415 information in the object file, we add a -g to the producer string. */
14416 if (debug_info_level
> DINFO_LEVEL_TERSE
)
14417 strcat (producer
, " -g");
14420 add_AT_string (die
, DW_AT_producer
, producer
);
14422 if (strcmp (language_string
, "GNU C++") == 0)
14423 language
= DW_LANG_C_plus_plus
;
14424 else if (strcmp (language_string
, "GNU Ada") == 0)
14425 language
= DW_LANG_Ada95
;
14426 else if (strcmp (language_string
, "GNU F77") == 0)
14427 language
= DW_LANG_Fortran77
;
14428 else if (strcmp (language_string
, "GNU Fortran") == 0)
14429 language
= DW_LANG_Fortran95
;
14430 else if (strcmp (language_string
, "GNU Pascal") == 0)
14431 language
= DW_LANG_Pascal83
;
14432 else if (strcmp (language_string
, "GNU Java") == 0)
14433 language
= DW_LANG_Java
;
14434 else if (strcmp (language_string
, "GNU Objective-C") == 0)
14435 language
= DW_LANG_ObjC
;
14436 else if (strcmp (language_string
, "GNU Objective-C++") == 0)
14437 language
= DW_LANG_ObjC_plus_plus
;
14439 language
= DW_LANG_C89
;
14441 add_AT_unsigned (die
, DW_AT_language
, language
);
14445 /* Generate the DIE for a base class. */
14448 gen_inheritance_die (tree binfo
, tree access
, dw_die_ref context_die
)
14450 dw_die_ref die
= new_die (DW_TAG_inheritance
, context_die
, binfo
);
14452 add_type_attribute (die
, BINFO_TYPE (binfo
), 0, 0, context_die
);
14453 add_data_member_location_attribute (die
, binfo
);
14455 if (BINFO_VIRTUAL_P (binfo
))
14456 add_AT_unsigned (die
, DW_AT_virtuality
, DW_VIRTUALITY_virtual
);
14458 if (access
== access_public_node
)
14459 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_public
);
14460 else if (access
== access_protected_node
)
14461 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_protected
);
14464 /* Generate a DIE for a class member. */
14467 gen_member_die (tree type
, dw_die_ref context_die
)
14470 tree binfo
= TYPE_BINFO (type
);
14473 /* If this is not an incomplete type, output descriptions of each of its
14474 members. Note that as we output the DIEs necessary to represent the
14475 members of this record or union type, we will also be trying to output
14476 DIEs to represent the *types* of those members. However the `type'
14477 function (above) will specifically avoid generating type DIEs for member
14478 types *within* the list of member DIEs for this (containing) type except
14479 for those types (of members) which are explicitly marked as also being
14480 members of this (containing) type themselves. The g++ front- end can
14481 force any given type to be treated as a member of some other (containing)
14482 type by setting the TYPE_CONTEXT of the given (member) type to point to
14483 the TREE node representing the appropriate (containing) type. */
14485 /* First output info about the base classes. */
14488 VEC(tree
,gc
) *accesses
= BINFO_BASE_ACCESSES (binfo
);
14492 for (i
= 0; BINFO_BASE_ITERATE (binfo
, i
, base
); i
++)
14493 gen_inheritance_die (base
,
14494 (accesses
? VEC_index (tree
, accesses
, i
)
14495 : access_public_node
), context_die
);
14498 /* Now output info about the data members and type members. */
14499 for (member
= TYPE_FIELDS (type
); member
; member
= TREE_CHAIN (member
))
14501 /* If we thought we were generating minimal debug info for TYPE
14502 and then changed our minds, some of the member declarations
14503 may have already been defined. Don't define them again, but
14504 do put them in the right order. */
14506 child
= lookup_decl_die (member
);
14508 splice_child_die (context_die
, child
);
14510 gen_decl_die (member
, NULL
, context_die
);
14513 /* Now output info about the function members (if any). */
14514 for (member
= TYPE_METHODS (type
); member
; member
= TREE_CHAIN (member
))
14516 /* Don't include clones in the member list. */
14517 if (DECL_ABSTRACT_ORIGIN (member
))
14520 child
= lookup_decl_die (member
);
14522 splice_child_die (context_die
, child
);
14524 gen_decl_die (member
, NULL
, context_die
);
14528 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
14529 is set, we pretend that the type was never defined, so we only get the
14530 member DIEs needed by later specification DIEs. */
14533 gen_struct_or_union_type_die (tree type
, dw_die_ref context_die
,
14534 enum debug_info_usage usage
)
14536 dw_die_ref type_die
= lookup_type_die (type
);
14537 dw_die_ref scope_die
= 0;
14539 int complete
= (TYPE_SIZE (type
)
14540 && (! TYPE_STUB_DECL (type
)
14541 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type
))));
14542 int ns_decl
= (context_die
&& context_die
->die_tag
== DW_TAG_namespace
);
14543 complete
= complete
&& should_emit_struct_debug (type
, usage
);
14545 if (type_die
&& ! complete
)
14548 if (TYPE_CONTEXT (type
) != NULL_TREE
14549 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type
))
14550 || TREE_CODE (TYPE_CONTEXT (type
)) == NAMESPACE_DECL
))
14553 scope_die
= scope_die_for (type
, context_die
);
14555 if (! type_die
|| (nested
&& scope_die
== comp_unit_die
))
14556 /* First occurrence of type or toplevel definition of nested class. */
14558 dw_die_ref old_die
= type_die
;
14560 type_die
= new_die (TREE_CODE (type
) == RECORD_TYPE
14561 ? record_type_tag (type
) : DW_TAG_union_type
,
14563 equate_type_number_to_die (type
, type_die
);
14565 add_AT_specification (type_die
, old_die
);
14567 add_name_attribute (type_die
, type_tag (type
));
14570 remove_AT (type_die
, DW_AT_declaration
);
14572 /* If this type has been completed, then give it a byte_size attribute and
14573 then give a list of members. */
14574 if (complete
&& !ns_decl
)
14576 /* Prevent infinite recursion in cases where the type of some member of
14577 this type is expressed in terms of this type itself. */
14578 TREE_ASM_WRITTEN (type
) = 1;
14579 add_byte_size_attribute (type_die
, type
);
14580 if (TYPE_STUB_DECL (type
) != NULL_TREE
)
14581 add_src_coords_attributes (type_die
, TYPE_STUB_DECL (type
));
14583 /* If the first reference to this type was as the return type of an
14584 inline function, then it may not have a parent. Fix this now. */
14585 if (type_die
->die_parent
== NULL
)
14586 add_child_die (scope_die
, type_die
);
14588 push_decl_scope (type
);
14589 gen_member_die (type
, type_die
);
14592 /* GNU extension: Record what type our vtable lives in. */
14593 if (TYPE_VFIELD (type
))
14595 tree vtype
= DECL_FCONTEXT (TYPE_VFIELD (type
));
14597 gen_type_die (vtype
, context_die
);
14598 add_AT_die_ref (type_die
, DW_AT_containing_type
,
14599 lookup_type_die (vtype
));
14604 add_AT_flag (type_die
, DW_AT_declaration
, 1);
14606 /* We don't need to do this for function-local types. */
14607 if (TYPE_STUB_DECL (type
)
14608 && ! decl_function_context (TYPE_STUB_DECL (type
)))
14609 VEC_safe_push (tree
, gc
, incomplete_types
, type
);
14612 if (get_AT (type_die
, DW_AT_name
))
14613 add_pubtype (type
, type_die
);
14616 /* Generate a DIE for a subroutine _type_. */
14619 gen_subroutine_type_die (tree type
, dw_die_ref context_die
)
14621 tree return_type
= TREE_TYPE (type
);
14622 dw_die_ref subr_die
14623 = new_die (DW_TAG_subroutine_type
,
14624 scope_die_for (type
, context_die
), type
);
14626 equate_type_number_to_die (type
, subr_die
);
14627 add_prototyped_attribute (subr_die
, type
);
14628 add_type_attribute (subr_die
, return_type
, 0, 0, context_die
);
14629 gen_formal_types_die (type
, subr_die
);
14631 if (get_AT (subr_die
, DW_AT_name
))
14632 add_pubtype (type
, subr_die
);
14635 /* Generate a DIE for a type definition. */
14638 gen_typedef_die (tree decl
, dw_die_ref context_die
)
14640 dw_die_ref type_die
;
14643 if (TREE_ASM_WRITTEN (decl
))
14646 TREE_ASM_WRITTEN (decl
) = 1;
14647 type_die
= new_die (DW_TAG_typedef
, context_die
, decl
);
14648 origin
= decl_ultimate_origin (decl
);
14649 if (origin
!= NULL
)
14650 add_abstract_origin_attribute (type_die
, origin
);
14655 add_name_and_src_coords_attributes (type_die
, decl
);
14656 if (DECL_ORIGINAL_TYPE (decl
))
14658 type
= DECL_ORIGINAL_TYPE (decl
);
14660 gcc_assert (type
!= TREE_TYPE (decl
));
14661 equate_type_number_to_die (TREE_TYPE (decl
), type_die
);
14664 type
= TREE_TYPE (decl
);
14666 add_type_attribute (type_die
, type
, TREE_READONLY (decl
),
14667 TREE_THIS_VOLATILE (decl
), context_die
);
14670 if (DECL_ABSTRACT (decl
))
14671 equate_decl_number_to_die (decl
, type_die
);
14673 if (get_AT (type_die
, DW_AT_name
))
14674 add_pubtype (decl
, type_die
);
14677 /* Generate a type description DIE. */
14680 gen_type_die_with_usage (tree type
, dw_die_ref context_die
,
14681 enum debug_info_usage usage
)
14684 struct array_descr_info info
;
14686 if (type
== NULL_TREE
|| type
== error_mark_node
)
14689 if (TYPE_NAME (type
) && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
14690 && DECL_ORIGINAL_TYPE (TYPE_NAME (type
)))
14692 if (TREE_ASM_WRITTEN (type
))
14695 /* Prevent broken recursion; we can't hand off to the same type. */
14696 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type
)) != type
);
14698 /* Use the DIE of the containing namespace as the parent DIE of
14699 the type description DIE we want to generate. */
14700 if (DECL_CONTEXT (TYPE_NAME (type
))
14701 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type
))) == NAMESPACE_DECL
)
14702 context_die
= lookup_decl_die (DECL_CONTEXT (TYPE_NAME (type
)));
14704 TREE_ASM_WRITTEN (type
) = 1;
14705 gen_decl_die (TYPE_NAME (type
), NULL
, context_die
);
14709 /* If this is an array type with hidden descriptor, handle it first. */
14710 if (!TREE_ASM_WRITTEN (type
)
14711 && lang_hooks
.types
.get_array_descr_info
14712 && lang_hooks
.types
.get_array_descr_info (type
, &info
))
14714 gen_descr_array_type_die (type
, &info
, context_die
);
14715 TREE_ASM_WRITTEN (type
) = 1;
14719 /* We are going to output a DIE to represent the unqualified version
14720 of this type (i.e. without any const or volatile qualifiers) so
14721 get the main variant (i.e. the unqualified version) of this type
14722 now. (Vectors are special because the debugging info is in the
14723 cloned type itself). */
14724 if (TREE_CODE (type
) != VECTOR_TYPE
)
14725 type
= type_main_variant (type
);
14727 if (TREE_ASM_WRITTEN (type
))
14730 switch (TREE_CODE (type
))
14736 case REFERENCE_TYPE
:
14737 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
14738 ensures that the gen_type_die recursion will terminate even if the
14739 type is recursive. Recursive types are possible in Ada. */
14740 /* ??? We could perhaps do this for all types before the switch
14742 TREE_ASM_WRITTEN (type
) = 1;
14744 /* For these types, all that is required is that we output a DIE (or a
14745 set of DIEs) to represent the "basis" type. */
14746 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
14747 DINFO_USAGE_IND_USE
);
14751 /* This code is used for C++ pointer-to-data-member types.
14752 Output a description of the relevant class type. */
14753 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type
), context_die
,
14754 DINFO_USAGE_IND_USE
);
14756 /* Output a description of the type of the object pointed to. */
14757 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
14758 DINFO_USAGE_IND_USE
);
14760 /* Now output a DIE to represent this pointer-to-data-member type
14762 gen_ptr_to_mbr_type_die (type
, context_die
);
14765 case FUNCTION_TYPE
:
14766 /* Force out return type (in case it wasn't forced out already). */
14767 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
14768 DINFO_USAGE_DIR_USE
);
14769 gen_subroutine_type_die (type
, context_die
);
14773 /* Force out return type (in case it wasn't forced out already). */
14774 gen_type_die_with_usage (TREE_TYPE (type
), context_die
,
14775 DINFO_USAGE_DIR_USE
);
14776 gen_subroutine_type_die (type
, context_die
);
14780 gen_array_type_die (type
, context_die
);
14784 gen_array_type_die (type
, context_die
);
14787 case ENUMERAL_TYPE
:
14790 case QUAL_UNION_TYPE
:
14791 /* If this is a nested type whose containing class hasn't been written
14792 out yet, writing it out will cover this one, too. This does not apply
14793 to instantiations of member class templates; they need to be added to
14794 the containing class as they are generated. FIXME: This hurts the
14795 idea of combining type decls from multiple TUs, since we can't predict
14796 what set of template instantiations we'll get. */
14797 if (TYPE_CONTEXT (type
)
14798 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type
))
14799 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type
)))
14801 gen_type_die_with_usage (TYPE_CONTEXT (type
), context_die
, usage
);
14803 if (TREE_ASM_WRITTEN (type
))
14806 /* If that failed, attach ourselves to the stub. */
14807 push_decl_scope (TYPE_CONTEXT (type
));
14808 context_die
= lookup_type_die (TYPE_CONTEXT (type
));
14813 context_die
= declare_in_namespace (type
, context_die
);
14817 if (TREE_CODE (type
) == ENUMERAL_TYPE
)
14819 /* This might have been written out by the call to
14820 declare_in_namespace. */
14821 if (!TREE_ASM_WRITTEN (type
))
14822 gen_enumeration_type_die (type
, context_die
);
14825 gen_struct_or_union_type_die (type
, context_die
, usage
);
14830 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
14831 it up if it is ever completed. gen_*_type_die will set it for us
14832 when appropriate. */
14838 case FIXED_POINT_TYPE
:
14841 /* No DIEs needed for fundamental types. */
14845 /* No Dwarf representation currently defined. */
14849 gcc_unreachable ();
14852 TREE_ASM_WRITTEN (type
) = 1;
14856 gen_type_die (tree type
, dw_die_ref context_die
)
14858 gen_type_die_with_usage (type
, context_die
, DINFO_USAGE_DIR_USE
);
14861 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
14862 things which are local to the given block. */
14865 gen_block_die (tree stmt
, dw_die_ref context_die
, int depth
)
14867 int must_output_die
= 0;
14870 /* Ignore blocks that are NULL. */
14871 if (stmt
== NULL_TREE
)
14874 inlined_func
= inlined_function_outer_scope_p (stmt
);
14876 /* If the block is one fragment of a non-contiguous block, do not
14877 process the variables, since they will have been done by the
14878 origin block. Do process subblocks. */
14879 if (BLOCK_FRAGMENT_ORIGIN (stmt
))
14883 for (sub
= BLOCK_SUBBLOCKS (stmt
); sub
; sub
= BLOCK_CHAIN (sub
))
14884 gen_block_die (sub
, context_die
, depth
+ 1);
14889 /* Determine if we need to output any Dwarf DIEs at all to represent this
14892 /* The outer scopes for inlinings *must* always be represented. We
14893 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
14894 must_output_die
= 1;
14897 /* Determine if this block directly contains any "significant"
14898 local declarations which we will need to output DIEs for. */
14899 if (debug_info_level
> DINFO_LEVEL_TERSE
)
14900 /* We are not in terse mode so *any* local declaration counts
14901 as being a "significant" one. */
14902 must_output_die
= ((BLOCK_VARS (stmt
) != NULL
14903 || BLOCK_NUM_NONLOCALIZED_VARS (stmt
))
14904 && (TREE_USED (stmt
)
14905 || TREE_ASM_WRITTEN (stmt
)
14906 || BLOCK_ABSTRACT (stmt
)));
14907 else if ((TREE_USED (stmt
)
14908 || TREE_ASM_WRITTEN (stmt
)
14909 || BLOCK_ABSTRACT (stmt
))
14910 && !dwarf2out_ignore_block (stmt
))
14911 must_output_die
= 1;
14914 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
14915 DIE for any block which contains no significant local declarations at
14916 all. Rather, in such cases we just call `decls_for_scope' so that any
14917 needed Dwarf info for any sub-blocks will get properly generated. Note
14918 that in terse mode, our definition of what constitutes a "significant"
14919 local declaration gets restricted to include only inlined function
14920 instances and local (nested) function definitions. */
14921 if (must_output_die
)
14924 gen_inlined_subroutine_die (stmt
, context_die
, depth
);
14926 gen_lexical_block_die (stmt
, context_die
, depth
);
14929 decls_for_scope (stmt
, context_die
, depth
);
14932 /* Process variable DECL (or variable with origin ORIGIN) within
14933 block STMT and add it to CONTEXT_DIE. */
14935 process_scope_var (tree stmt
, tree decl
, tree origin
, dw_die_ref context_die
)
14938 tree decl_or_origin
= decl
? decl
: origin
;
14939 tree ultimate_origin
= origin
? decl_ultimate_origin (origin
) : NULL
;
14941 if (ultimate_origin
)
14942 origin
= ultimate_origin
;
14944 if (TREE_CODE (decl_or_origin
) == FUNCTION_DECL
)
14945 die
= lookup_decl_die (decl_or_origin
);
14946 else if (TREE_CODE (decl_or_origin
) == TYPE_DECL
14947 && TYPE_DECL_IS_STUB (decl_or_origin
))
14948 die
= lookup_type_die (TREE_TYPE (decl_or_origin
));
14952 if (die
!= NULL
&& die
->die_parent
== NULL
)
14953 add_child_die (context_die
, die
);
14954 else if (TREE_CODE (decl_or_origin
) == IMPORTED_DECL
)
14955 dwarf2out_imported_module_or_decl_1 (decl_or_origin
, DECL_NAME (decl_or_origin
),
14956 stmt
, context_die
);
14958 gen_decl_die (decl
, origin
, context_die
);
14961 /* Generate all of the decls declared within a given scope and (recursively)
14962 all of its sub-blocks. */
14965 decls_for_scope (tree stmt
, dw_die_ref context_die
, int depth
)
14971 /* Ignore NULL blocks. */
14972 if (stmt
== NULL_TREE
)
14975 /* Output the DIEs to represent all of the data objects and typedefs
14976 declared directly within this block but not within any nested
14977 sub-blocks. Also, nested function and tag DIEs have been
14978 generated with a parent of NULL; fix that up now. */
14979 for (decl
= BLOCK_VARS (stmt
); decl
!= NULL
; decl
= TREE_CHAIN (decl
))
14980 process_scope_var (stmt
, decl
, NULL_TREE
, context_die
);
14981 for (i
= 0; i
< BLOCK_NUM_NONLOCALIZED_VARS (stmt
); i
++)
14982 process_scope_var (stmt
, NULL
, BLOCK_NONLOCALIZED_VAR (stmt
, i
),
14985 /* If we're at -g1, we're not interested in subblocks. */
14986 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
14989 /* Output the DIEs to represent all sub-blocks (and the items declared
14990 therein) of this block. */
14991 for (subblocks
= BLOCK_SUBBLOCKS (stmt
);
14993 subblocks
= BLOCK_CHAIN (subblocks
))
14994 gen_block_die (subblocks
, context_die
, depth
+ 1);
14997 /* Is this a typedef we can avoid emitting? */
15000 is_redundant_typedef (const_tree decl
)
15002 if (TYPE_DECL_IS_STUB (decl
))
15005 if (DECL_ARTIFICIAL (decl
)
15006 && DECL_CONTEXT (decl
)
15007 && is_tagged_type (DECL_CONTEXT (decl
))
15008 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl
))) == TYPE_DECL
15009 && DECL_NAME (decl
) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl
))))
15010 /* Also ignore the artificial member typedef for the class name. */
15016 /* Returns the DIE for a context. */
15018 static inline dw_die_ref
15019 get_context_die (tree context
)
15023 /* Find die that represents this context. */
15024 if (TYPE_P (context
))
15025 return force_type_die (context
);
15027 return force_decl_die (context
);
15029 return comp_unit_die
;
15032 /* Returns the DIE for decl. A DIE will always be returned. */
15035 force_decl_die (tree decl
)
15037 dw_die_ref decl_die
;
15038 unsigned saved_external_flag
;
15039 tree save_fn
= NULL_TREE
;
15040 decl_die
= lookup_decl_die (decl
);
15043 dw_die_ref context_die
= get_context_die (DECL_CONTEXT (decl
));
15045 decl_die
= lookup_decl_die (decl
);
15049 switch (TREE_CODE (decl
))
15051 case FUNCTION_DECL
:
15052 /* Clear current_function_decl, so that gen_subprogram_die thinks
15053 that this is a declaration. At this point, we just want to force
15054 declaration die. */
15055 save_fn
= current_function_decl
;
15056 current_function_decl
= NULL_TREE
;
15057 gen_subprogram_die (decl
, context_die
);
15058 current_function_decl
= save_fn
;
15062 /* Set external flag to force declaration die. Restore it after
15063 gen_decl_die() call. */
15064 saved_external_flag
= DECL_EXTERNAL (decl
);
15065 DECL_EXTERNAL (decl
) = 1;
15066 gen_decl_die (decl
, NULL
, context_die
);
15067 DECL_EXTERNAL (decl
) = saved_external_flag
;
15070 case NAMESPACE_DECL
:
15071 dwarf2out_decl (decl
);
15075 gcc_unreachable ();
15078 /* We should be able to find the DIE now. */
15080 decl_die
= lookup_decl_die (decl
);
15081 gcc_assert (decl_die
);
15087 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
15088 always returned. */
15091 force_type_die (tree type
)
15093 dw_die_ref type_die
;
15095 type_die
= lookup_type_die (type
);
15098 dw_die_ref context_die
= get_context_die (TYPE_CONTEXT (type
));
15100 type_die
= modified_type_die (type
, TYPE_READONLY (type
),
15101 TYPE_VOLATILE (type
), context_die
);
15102 gcc_assert (type_die
);
15107 /* Force out any required namespaces to be able to output DECL,
15108 and return the new context_die for it, if it's changed. */
15111 setup_namespace_context (tree thing
, dw_die_ref context_die
)
15113 tree context
= (DECL_P (thing
)
15114 ? DECL_CONTEXT (thing
) : TYPE_CONTEXT (thing
));
15115 if (context
&& TREE_CODE (context
) == NAMESPACE_DECL
)
15116 /* Force out the namespace. */
15117 context_die
= force_decl_die (context
);
15119 return context_die
;
15122 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
15123 type) within its namespace, if appropriate.
15125 For compatibility with older debuggers, namespace DIEs only contain
15126 declarations; all definitions are emitted at CU scope. */
15129 declare_in_namespace (tree thing
, dw_die_ref context_die
)
15131 dw_die_ref ns_context
;
15133 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15134 return context_die
;
15136 /* If this decl is from an inlined function, then don't try to emit it in its
15137 namespace, as we will get confused. It would have already been emitted
15138 when the abstract instance of the inline function was emitted anyways. */
15139 if (DECL_P (thing
) && DECL_ABSTRACT_ORIGIN (thing
))
15140 return context_die
;
15142 ns_context
= setup_namespace_context (thing
, context_die
);
15144 if (ns_context
!= context_die
)
15148 if (DECL_P (thing
))
15149 gen_decl_die (thing
, NULL
, ns_context
);
15151 gen_type_die (thing
, ns_context
);
15153 return context_die
;
15156 /* Generate a DIE for a namespace or namespace alias. */
15159 gen_namespace_die (tree decl
, dw_die_ref context_die
)
15161 dw_die_ref namespace_die
;
15163 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
15164 they are an alias of. */
15165 if (DECL_ABSTRACT_ORIGIN (decl
) == NULL
)
15167 /* Output a real namespace or module. */
15168 context_die
= setup_namespace_context (decl
, comp_unit_die
);
15169 namespace_die
= new_die (is_fortran ()
15170 ? DW_TAG_module
: DW_TAG_namespace
,
15171 context_die
, decl
);
15172 /* For Fortran modules defined in different CU don't add src coords. */
15173 if (namespace_die
->die_tag
== DW_TAG_module
&& DECL_EXTERNAL (decl
))
15174 add_name_attribute (namespace_die
, dwarf2_name (decl
, 0));
15176 add_name_and_src_coords_attributes (namespace_die
, decl
);
15177 if (DECL_EXTERNAL (decl
))
15178 add_AT_flag (namespace_die
, DW_AT_declaration
, 1);
15179 equate_decl_number_to_die (decl
, namespace_die
);
15183 /* Output a namespace alias. */
15185 /* Force out the namespace we are an alias of, if necessary. */
15186 dw_die_ref origin_die
15187 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl
));
15189 if (DECL_CONTEXT (decl
) == NULL_TREE
15190 || TREE_CODE (DECL_CONTEXT (decl
)) == NAMESPACE_DECL
)
15191 context_die
= setup_namespace_context (decl
, comp_unit_die
);
15192 /* Now create the namespace alias DIE. */
15193 namespace_die
= new_die (DW_TAG_imported_declaration
, context_die
, decl
);
15194 add_name_and_src_coords_attributes (namespace_die
, decl
);
15195 add_AT_die_ref (namespace_die
, DW_AT_import
, origin_die
);
15196 equate_decl_number_to_die (decl
, namespace_die
);
15200 /* Generate Dwarf debug information for a decl described by DECL. */
15203 gen_decl_die (tree decl
, tree origin
, dw_die_ref context_die
)
15205 tree decl_or_origin
= decl
? decl
: origin
;
15206 tree class_origin
= NULL
;
15208 if (DECL_P (decl_or_origin
) && DECL_IGNORED_P (decl_or_origin
))
15211 switch (TREE_CODE (decl_or_origin
))
15217 if (!is_fortran ())
15219 /* The individual enumerators of an enum type get output when we output
15220 the Dwarf representation of the relevant enum type itself. */
15224 /* Emit its type. */
15225 gen_type_die (TREE_TYPE (decl
), context_die
);
15227 /* And its containing namespace. */
15228 context_die
= declare_in_namespace (decl
, context_die
);
15230 gen_const_die (decl
, context_die
);
15233 case FUNCTION_DECL
:
15234 /* Don't output any DIEs to represent mere function declarations,
15235 unless they are class members or explicit block externs. */
15236 if (DECL_INITIAL (decl_or_origin
) == NULL_TREE
15237 && DECL_CONTEXT (decl_or_origin
) == NULL_TREE
15238 && (current_function_decl
== NULL_TREE
15239 || DECL_ARTIFICIAL (decl_or_origin
)))
15244 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
15245 on local redeclarations of global functions. That seems broken. */
15246 if (current_function_decl
!= decl
)
15247 /* This is only a declaration. */;
15250 /* If we're emitting a clone, emit info for the abstract instance. */
15251 if (origin
|| DECL_ORIGIN (decl
) != decl
)
15252 dwarf2out_abstract_function (origin
? origin
: DECL_ABSTRACT_ORIGIN (decl
));
15254 /* If we're emitting an out-of-line copy of an inline function,
15255 emit info for the abstract instance and set up to refer to it. */
15256 else if (cgraph_function_possibly_inlined_p (decl
)
15257 && ! DECL_ABSTRACT (decl
)
15258 && ! class_or_namespace_scope_p (context_die
)
15259 /* dwarf2out_abstract_function won't emit a die if this is just
15260 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
15261 that case, because that works only if we have a die. */
15262 && DECL_INITIAL (decl
) != NULL_TREE
)
15264 dwarf2out_abstract_function (decl
);
15265 set_decl_origin_self (decl
);
15268 /* Otherwise we're emitting the primary DIE for this decl. */
15269 else if (debug_info_level
> DINFO_LEVEL_TERSE
)
15271 /* Before we describe the FUNCTION_DECL itself, make sure that we
15272 have described its return type. */
15273 gen_type_die (TREE_TYPE (TREE_TYPE (decl
)), context_die
);
15275 /* And its virtual context. */
15276 if (DECL_VINDEX (decl
) != NULL_TREE
)
15277 gen_type_die (DECL_CONTEXT (decl
), context_die
);
15279 /* And its containing type. */
15281 origin
= decl_class_context (decl
);
15282 if (origin
!= NULL_TREE
)
15283 gen_type_die_for_member (origin
, decl
, context_die
);
15285 /* And its containing namespace. */
15286 context_die
= declare_in_namespace (decl
, context_die
);
15289 /* Now output a DIE to represent the function itself. */
15291 gen_subprogram_die (decl
, context_die
);
15295 /* If we are in terse mode, don't generate any DIEs to represent any
15296 actual typedefs. */
15297 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15300 /* In the special case of a TYPE_DECL node representing the declaration
15301 of some type tag, if the given TYPE_DECL is marked as having been
15302 instantiated from some other (original) TYPE_DECL node (e.g. one which
15303 was generated within the original definition of an inline function) we
15304 used to generate a special (abbreviated) DW_TAG_structure_type,
15305 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
15306 should be actually referencing those DIEs, as variable DIEs with that
15307 type would be emitted already in the abstract origin, so it was always
15308 removed during unused type prunning. Don't add anything in this
15310 if (TYPE_DECL_IS_STUB (decl
) && decl_ultimate_origin (decl
) != NULL_TREE
)
15313 if (is_redundant_typedef (decl
))
15314 gen_type_die (TREE_TYPE (decl
), context_die
);
15316 /* Output a DIE to represent the typedef itself. */
15317 gen_typedef_die (decl
, context_die
);
15321 if (debug_info_level
>= DINFO_LEVEL_NORMAL
)
15322 gen_label_die (decl
, context_die
);
15327 /* If we are in terse mode, don't generate any DIEs to represent any
15328 variable declarations or definitions. */
15329 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15332 /* Output any DIEs that are needed to specify the type of this data
15334 if (TREE_CODE (decl_or_origin
) == RESULT_DECL
15335 && DECL_BY_REFERENCE (decl_or_origin
))
15336 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin
)), context_die
);
15338 gen_type_die (TREE_TYPE (decl_or_origin
), context_die
);
15340 /* And its containing type. */
15341 class_origin
= decl_class_context (decl_or_origin
);
15342 if (class_origin
!= NULL_TREE
)
15343 gen_type_die_for_member (class_origin
, decl_or_origin
, context_die
);
15345 /* And its containing namespace. */
15346 context_die
= declare_in_namespace (decl_or_origin
, context_die
);
15348 /* Now output the DIE to represent the data object itself. This gets
15349 complicated because of the possibility that the VAR_DECL really
15350 represents an inlined instance of a formal parameter for an inline
15353 origin
= decl_ultimate_origin (decl
);
15354 if (origin
!= NULL_TREE
&& TREE_CODE (origin
) == PARM_DECL
)
15355 gen_formal_parameter_die (decl
, origin
, context_die
);
15357 gen_variable_die (decl
, origin
, context_die
);
15361 /* Ignore the nameless fields that are used to skip bits but handle C++
15362 anonymous unions and structs. */
15363 if (DECL_NAME (decl
) != NULL_TREE
15364 || TREE_CODE (TREE_TYPE (decl
)) == UNION_TYPE
15365 || TREE_CODE (TREE_TYPE (decl
)) == RECORD_TYPE
)
15367 gen_type_die (member_declared_type (decl
), context_die
);
15368 gen_field_die (decl
, context_die
);
15373 if (DECL_BY_REFERENCE (decl_or_origin
))
15374 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin
)), context_die
);
15376 gen_type_die (TREE_TYPE (decl_or_origin
), context_die
);
15377 gen_formal_parameter_die (decl
, origin
, context_die
);
15380 case NAMESPACE_DECL
:
15381 case IMPORTED_DECL
:
15382 gen_namespace_die (decl
, context_die
);
15386 /* Probably some frontend-internal decl. Assume we don't care. */
15387 gcc_assert ((int)TREE_CODE (decl
) > NUM_TREE_CODES
);
15392 /* Output debug information for global decl DECL. Called from toplev.c after
15393 compilation proper has finished. */
15396 dwarf2out_global_decl (tree decl
)
15398 /* Output DWARF2 information for file-scope tentative data object
15399 declarations, file-scope (extern) function declarations (which
15400 had no corresponding body) and file-scope tagged type declarations
15401 and definitions which have not yet been forced out. */
15402 if (TREE_CODE (decl
) != FUNCTION_DECL
|| !DECL_INITIAL (decl
))
15403 dwarf2out_decl (decl
);
15406 /* Output debug information for type decl DECL. Called from toplev.c
15407 and from language front ends (to record built-in types). */
15409 dwarf2out_type_decl (tree decl
, int local
)
15412 dwarf2out_decl (decl
);
15415 /* Output debug information for imported module or decl DECL.
15416 NAME is non-NULL name in the lexical block if the decl has been renamed.
15417 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
15418 that DECL belongs to.
15419 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
15421 dwarf2out_imported_module_or_decl_1 (tree decl
,
15423 tree lexical_block
,
15424 dw_die_ref lexical_block_die
)
15426 expanded_location xloc
;
15427 dw_die_ref imported_die
= NULL
;
15428 dw_die_ref at_import_die
;
15430 if (TREE_CODE (decl
) == IMPORTED_DECL
)
15432 xloc
= expand_location (DECL_SOURCE_LOCATION (decl
));
15433 decl
= IMPORTED_DECL_ASSOCIATED_DECL (decl
);
15437 xloc
= expand_location (input_location
);
15439 if (TREE_CODE (decl
) == TYPE_DECL
|| TREE_CODE (decl
) == CONST_DECL
)
15441 if (is_base_type (TREE_TYPE (decl
)))
15442 at_import_die
= base_type_die (TREE_TYPE (decl
));
15444 at_import_die
= force_type_die (TREE_TYPE (decl
));
15445 /* For namespace N { typedef void T; } using N::T; base_type_die
15446 returns NULL, but DW_TAG_imported_declaration requires
15447 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
15448 if (!at_import_die
)
15450 gcc_assert (TREE_CODE (decl
) == TYPE_DECL
);
15451 gen_typedef_die (decl
, get_context_die (DECL_CONTEXT (decl
)));
15452 at_import_die
= lookup_type_die (TREE_TYPE (decl
));
15453 gcc_assert (at_import_die
);
15458 at_import_die
= lookup_decl_die (decl
);
15459 if (!at_import_die
)
15461 /* If we're trying to avoid duplicate debug info, we may not have
15462 emitted the member decl for this field. Emit it now. */
15463 if (TREE_CODE (decl
) == FIELD_DECL
)
15465 tree type
= DECL_CONTEXT (decl
);
15467 if (TYPE_CONTEXT (type
)
15468 && TYPE_P (TYPE_CONTEXT (type
))
15469 && !should_emit_struct_debug (TYPE_CONTEXT (type
),
15470 DINFO_USAGE_DIR_USE
))
15472 gen_type_die_for_member (type
, decl
,
15473 get_context_die (TYPE_CONTEXT (type
)));
15475 at_import_die
= force_decl_die (decl
);
15479 if (TREE_CODE (decl
) == NAMESPACE_DECL
)
15480 imported_die
= new_die (DW_TAG_imported_module
,
15484 imported_die
= new_die (DW_TAG_imported_declaration
,
15488 add_AT_file (imported_die
, DW_AT_decl_file
, lookup_filename (xloc
.file
));
15489 add_AT_unsigned (imported_die
, DW_AT_decl_line
, xloc
.line
);
15491 add_AT_string (imported_die
, DW_AT_name
,
15492 IDENTIFIER_POINTER (name
));
15493 add_AT_die_ref (imported_die
, DW_AT_import
, at_import_die
);
15496 /* Output debug information for imported module or decl DECL.
15497 NAME is non-NULL name in context if the decl has been renamed.
15498 CHILD is true if decl is one of the renamed decls as part of
15499 importing whole module. */
15502 dwarf2out_imported_module_or_decl (tree decl
, tree name
, tree context
,
15505 /* dw_die_ref at_import_die; */
15506 dw_die_ref scope_die
;
15508 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15513 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
15514 We need decl DIE for reference and scope die. First, get DIE for the decl
15517 /* Get the scope die for decl context. Use comp_unit_die for global module
15518 or decl. If die is not found for non globals, force new die. */
15520 && TYPE_P (context
)
15521 && !should_emit_struct_debug (context
, DINFO_USAGE_DIR_USE
))
15523 scope_die
= get_context_die (context
);
15527 gcc_assert (scope_die
->die_child
);
15528 gcc_assert (scope_die
->die_child
->die_tag
== DW_TAG_imported_module
);
15529 gcc_assert (TREE_CODE (decl
) != NAMESPACE_DECL
);
15530 scope_die
= scope_die
->die_child
;
15533 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
15534 dwarf2out_imported_module_or_decl_1 (decl
, name
, context
, scope_die
);
15538 /* Write the debugging output for DECL. */
15541 dwarf2out_decl (tree decl
)
15543 dw_die_ref context_die
= comp_unit_die
;
15545 switch (TREE_CODE (decl
))
15550 case FUNCTION_DECL
:
15551 /* What we would really like to do here is to filter out all mere
15552 file-scope declarations of file-scope functions which are never
15553 referenced later within this translation unit (and keep all of ones
15554 that *are* referenced later on) but we aren't clairvoyant, so we have
15555 no idea which functions will be referenced in the future (i.e. later
15556 on within the current translation unit). So here we just ignore all
15557 file-scope function declarations which are not also definitions. If
15558 and when the debugger needs to know something about these functions,
15559 it will have to hunt around and find the DWARF information associated
15560 with the definition of the function.
15562 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
15563 nodes represent definitions and which ones represent mere
15564 declarations. We have to check DECL_INITIAL instead. That's because
15565 the C front-end supports some weird semantics for "extern inline"
15566 function definitions. These can get inlined within the current
15567 translation unit (and thus, we need to generate Dwarf info for their
15568 abstract instances so that the Dwarf info for the concrete inlined
15569 instances can have something to refer to) but the compiler never
15570 generates any out-of-lines instances of such things (despite the fact
15571 that they *are* definitions).
15573 The important point is that the C front-end marks these "extern
15574 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
15575 them anyway. Note that the C++ front-end also plays some similar games
15576 for inline function definitions appearing within include files which
15577 also contain `#pragma interface' pragmas. */
15578 if (DECL_INITIAL (decl
) == NULL_TREE
)
15581 /* If we're a nested function, initially use a parent of NULL; if we're
15582 a plain function, this will be fixed up in decls_for_scope. If
15583 we're a method, it will be ignored, since we already have a DIE. */
15584 if (decl_function_context (decl
)
15585 /* But if we're in terse mode, we don't care about scope. */
15586 && debug_info_level
> DINFO_LEVEL_TERSE
)
15587 context_die
= NULL
;
15591 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
15592 declaration and if the declaration was never even referenced from
15593 within this entire compilation unit. We suppress these DIEs in
15594 order to save space in the .debug section (by eliminating entries
15595 which are probably useless). Note that we must not suppress
15596 block-local extern declarations (whether used or not) because that
15597 would screw-up the debugger's name lookup mechanism and cause it to
15598 miss things which really ought to be in scope at a given point. */
15599 if (DECL_EXTERNAL (decl
) && !TREE_USED (decl
))
15602 /* For local statics lookup proper context die. */
15603 if (TREE_STATIC (decl
) && decl_function_context (decl
))
15604 context_die
= lookup_decl_die (DECL_CONTEXT (decl
));
15606 /* If we are in terse mode, don't generate any DIEs to represent any
15607 variable declarations or definitions. */
15608 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15613 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15615 if (!is_fortran ())
15617 if (TREE_STATIC (decl
) && decl_function_context (decl
))
15618 context_die
= lookup_decl_die (DECL_CONTEXT (decl
));
15621 case NAMESPACE_DECL
:
15622 case IMPORTED_DECL
:
15623 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15625 if (lookup_decl_die (decl
) != NULL
)
15630 /* Don't emit stubs for types unless they are needed by other DIEs. */
15631 if (TYPE_DECL_SUPPRESS_DEBUG (decl
))
15634 /* Don't bother trying to generate any DIEs to represent any of the
15635 normal built-in types for the language we are compiling. */
15636 if (DECL_IS_BUILTIN (decl
))
15638 /* OK, we need to generate one for `bool' so GDB knows what type
15639 comparisons have. */
15641 && TREE_CODE (TREE_TYPE (decl
)) == BOOLEAN_TYPE
15642 && ! DECL_IGNORED_P (decl
))
15643 modified_type_die (TREE_TYPE (decl
), 0, 0, NULL
);
15648 /* If we are in terse mode, don't generate any DIEs for types. */
15649 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
15652 /* If we're a function-scope tag, initially use a parent of NULL;
15653 this will be fixed up in decls_for_scope. */
15654 if (decl_function_context (decl
))
15655 context_die
= NULL
;
15663 gen_decl_die (decl
, NULL
, context_die
);
15666 /* Output a marker (i.e. a label) for the beginning of the generated code for
15667 a lexical block. */
15670 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED
,
15671 unsigned int blocknum
)
15673 switch_to_section (current_function_section ());
15674 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, BLOCK_BEGIN_LABEL
, blocknum
);
15677 /* Output a marker (i.e. a label) for the end of the generated code for a
15681 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED
, unsigned int blocknum
)
15683 switch_to_section (current_function_section ());
15684 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, BLOCK_END_LABEL
, blocknum
);
15687 /* Returns nonzero if it is appropriate not to emit any debugging
15688 information for BLOCK, because it doesn't contain any instructions.
15690 Don't allow this for blocks with nested functions or local classes
15691 as we would end up with orphans, and in the presence of scheduling
15692 we may end up calling them anyway. */
15695 dwarf2out_ignore_block (const_tree block
)
15700 for (decl
= BLOCK_VARS (block
); decl
; decl
= TREE_CHAIN (decl
))
15701 if (TREE_CODE (decl
) == FUNCTION_DECL
15702 || (TREE_CODE (decl
) == TYPE_DECL
&& TYPE_DECL_IS_STUB (decl
)))
15704 for (i
= 0; i
< BLOCK_NUM_NONLOCALIZED_VARS (block
); i
++)
15706 decl
= BLOCK_NONLOCALIZED_VAR (block
, i
);
15707 if (TREE_CODE (decl
) == FUNCTION_DECL
15708 || (TREE_CODE (decl
) == TYPE_DECL
&& TYPE_DECL_IS_STUB (decl
)))
15715 /* Hash table routines for file_hash. */
15718 file_table_eq (const void *p1_p
, const void *p2_p
)
15720 const struct dwarf_file_data
*const p1
=
15721 (const struct dwarf_file_data
*) p1_p
;
15722 const char *const p2
= (const char *) p2_p
;
15723 return strcmp (p1
->filename
, p2
) == 0;
15727 file_table_hash (const void *p_p
)
15729 const struct dwarf_file_data
*const p
= (const struct dwarf_file_data
*) p_p
;
15730 return htab_hash_string (p
->filename
);
15733 /* Lookup FILE_NAME (in the list of filenames that we know about here in
15734 dwarf2out.c) and return its "index". The index of each (known) filename is
15735 just a unique number which is associated with only that one filename. We
15736 need such numbers for the sake of generating labels (in the .debug_sfnames
15737 section) and references to those files numbers (in the .debug_srcinfo
15738 and.debug_macinfo sections). If the filename given as an argument is not
15739 found in our current list, add it to the list and assign it the next
15740 available unique index number. In order to speed up searches, we remember
15741 the index of the filename was looked up last. This handles the majority of
15744 static struct dwarf_file_data
*
15745 lookup_filename (const char *file_name
)
15748 struct dwarf_file_data
* created
;
15750 /* Check to see if the file name that was searched on the previous
15751 call matches this file name. If so, return the index. */
15752 if (file_table_last_lookup
15753 && (file_name
== file_table_last_lookup
->filename
15754 || strcmp (file_table_last_lookup
->filename
, file_name
) == 0))
15755 return file_table_last_lookup
;
15757 /* Didn't match the previous lookup, search the table. */
15758 slot
= htab_find_slot_with_hash (file_table
, file_name
,
15759 htab_hash_string (file_name
), INSERT
);
15761 return (struct dwarf_file_data
*) *slot
;
15763 created
= GGC_NEW (struct dwarf_file_data
);
15764 created
->filename
= file_name
;
15765 created
->emitted_number
= 0;
15770 /* If the assembler will construct the file table, then translate the compiler
15771 internal file table number into the assembler file table number, and emit
15772 a .file directive if we haven't already emitted one yet. The file table
15773 numbers are different because we prune debug info for unused variables and
15774 types, which may include filenames. */
15777 maybe_emit_file (struct dwarf_file_data
* fd
)
15779 if (! fd
->emitted_number
)
15781 if (last_emitted_file
)
15782 fd
->emitted_number
= last_emitted_file
->emitted_number
+ 1;
15784 fd
->emitted_number
= 1;
15785 last_emitted_file
= fd
;
15787 if (DWARF2_ASM_LINE_DEBUG_INFO
)
15789 fprintf (asm_out_file
, "\t.file %u ", fd
->emitted_number
);
15790 output_quoted_string (asm_out_file
,
15791 remap_debug_filename (fd
->filename
));
15792 fputc ('\n', asm_out_file
);
15796 return fd
->emitted_number
;
15799 /* Called by the final INSN scan whenever we see a var location. We
15800 use it to drop labels in the right places, and throw the location in
15801 our lookup table. */
15804 dwarf2out_var_location (rtx loc_note
)
15806 char loclabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
15807 struct var_loc_node
*newloc
;
15809 static rtx last_insn
;
15810 static const char *last_label
;
15813 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note
)))
15815 prev_insn
= PREV_INSN (loc_note
);
15817 newloc
= GGC_CNEW (struct var_loc_node
);
15818 /* If the insn we processed last time is the previous insn
15819 and it is also a var location note, use the label we emitted
15821 if (last_insn
!= NULL_RTX
15822 && last_insn
== prev_insn
15823 && NOTE_P (prev_insn
)
15824 && NOTE_KIND (prev_insn
) == NOTE_INSN_VAR_LOCATION
)
15826 newloc
->label
= last_label
;
15830 ASM_GENERATE_INTERNAL_LABEL (loclabel
, "LVL", loclabel_num
);
15831 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, "LVL", loclabel_num
);
15833 newloc
->label
= ggc_strdup (loclabel
);
15835 newloc
->var_loc_note
= loc_note
;
15836 newloc
->next
= NULL
;
15838 if (cfun
&& in_cold_section_p
)
15839 newloc
->section_label
= crtl
->subsections
.cold_section_label
;
15841 newloc
->section_label
= text_section_label
;
15843 last_insn
= loc_note
;
15844 last_label
= newloc
->label
;
15845 decl
= NOTE_VAR_LOCATION_DECL (loc_note
);
15846 add_var_loc_to_decl (decl
, newloc
);
15849 /* We need to reset the locations at the beginning of each
15850 function. We can't do this in the end_function hook, because the
15851 declarations that use the locations won't have been output when
15852 that hook is called. Also compute have_multiple_function_sections here. */
15855 dwarf2out_begin_function (tree fun
)
15857 htab_empty (decl_loc_table
);
15859 if (function_section (fun
) != text_section
)
15860 have_multiple_function_sections
= true;
15862 dwarf2out_note_section_used ();
15865 /* Output a label to mark the beginning of a source code line entry
15866 and record information relating to this source line, in
15867 'line_info_table' for later output of the .debug_line section. */
15870 dwarf2out_source_line (unsigned int line
, const char *filename
)
15872 if (debug_info_level
>= DINFO_LEVEL_NORMAL
15875 int file_num
= maybe_emit_file (lookup_filename (filename
));
15877 switch_to_section (current_function_section ());
15879 /* If requested, emit something human-readable. */
15880 if (flag_debug_asm
)
15881 fprintf (asm_out_file
, "\t%s %s:%d\n", ASM_COMMENT_START
,
15884 if (DWARF2_ASM_LINE_DEBUG_INFO
)
15886 /* Emit the .loc directive understood by GNU as. */
15887 fprintf (asm_out_file
, "\t.loc %d %d 0\n", file_num
, line
);
15889 /* Indicate that line number info exists. */
15890 line_info_table_in_use
++;
15892 else if (function_section (current_function_decl
) != text_section
)
15894 dw_separate_line_info_ref line_info
;
15895 targetm
.asm_out
.internal_label (asm_out_file
,
15896 SEPARATE_LINE_CODE_LABEL
,
15897 separate_line_info_table_in_use
);
15899 /* Expand the line info table if necessary. */
15900 if (separate_line_info_table_in_use
15901 == separate_line_info_table_allocated
)
15903 separate_line_info_table_allocated
+= LINE_INFO_TABLE_INCREMENT
;
15904 separate_line_info_table
15905 = GGC_RESIZEVEC (dw_separate_line_info_entry
,
15906 separate_line_info_table
,
15907 separate_line_info_table_allocated
);
15908 memset (separate_line_info_table
15909 + separate_line_info_table_in_use
,
15911 (LINE_INFO_TABLE_INCREMENT
15912 * sizeof (dw_separate_line_info_entry
)));
15915 /* Add the new entry at the end of the line_info_table. */
15917 = &separate_line_info_table
[separate_line_info_table_in_use
++];
15918 line_info
->dw_file_num
= file_num
;
15919 line_info
->dw_line_num
= line
;
15920 line_info
->function
= current_function_funcdef_no
;
15924 dw_line_info_ref line_info
;
15926 targetm
.asm_out
.internal_label (asm_out_file
, LINE_CODE_LABEL
,
15927 line_info_table_in_use
);
15929 /* Expand the line info table if necessary. */
15930 if (line_info_table_in_use
== line_info_table_allocated
)
15932 line_info_table_allocated
+= LINE_INFO_TABLE_INCREMENT
;
15934 = GGC_RESIZEVEC (dw_line_info_entry
, line_info_table
,
15935 line_info_table_allocated
);
15936 memset (line_info_table
+ line_info_table_in_use
, 0,
15937 LINE_INFO_TABLE_INCREMENT
* sizeof (dw_line_info_entry
));
15940 /* Add the new entry at the end of the line_info_table. */
15941 line_info
= &line_info_table
[line_info_table_in_use
++];
15942 line_info
->dw_file_num
= file_num
;
15943 line_info
->dw_line_num
= line
;
15948 /* Record the beginning of a new source file. */
15951 dwarf2out_start_source_file (unsigned int lineno
, const char *filename
)
15953 if (flag_eliminate_dwarf2_dups
)
15955 /* Record the beginning of the file for break_out_includes. */
15956 dw_die_ref bincl_die
;
15958 bincl_die
= new_die (DW_TAG_GNU_BINCL
, comp_unit_die
, NULL
);
15959 add_AT_string (bincl_die
, DW_AT_name
, remap_debug_filename (filename
));
15962 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
15964 int file_num
= maybe_emit_file (lookup_filename (filename
));
15966 switch_to_section (debug_macinfo_section
);
15967 dw2_asm_output_data (1, DW_MACINFO_start_file
, "Start new file");
15968 dw2_asm_output_data_uleb128 (lineno
, "Included from line number %d",
15971 dw2_asm_output_data_uleb128 (file_num
, "file %s", filename
);
15975 /* Record the end of a source file. */
15978 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED
)
15980 if (flag_eliminate_dwarf2_dups
)
15981 /* Record the end of the file for break_out_includes. */
15982 new_die (DW_TAG_GNU_EINCL
, comp_unit_die
, NULL
);
15984 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
15986 switch_to_section (debug_macinfo_section
);
15987 dw2_asm_output_data (1, DW_MACINFO_end_file
, "End file");
15991 /* Called from debug_define in toplev.c. The `buffer' parameter contains
15992 the tail part of the directive line, i.e. the part which is past the
15993 initial whitespace, #, whitespace, directive-name, whitespace part. */
15996 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED
,
15997 const char *buffer ATTRIBUTE_UNUSED
)
15999 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
16001 switch_to_section (debug_macinfo_section
);
16002 dw2_asm_output_data (1, DW_MACINFO_define
, "Define macro");
16003 dw2_asm_output_data_uleb128 (lineno
, "At line number %d", lineno
);
16004 dw2_asm_output_nstring (buffer
, -1, "The macro");
16008 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
16009 the tail part of the directive line, i.e. the part which is past the
16010 initial whitespace, #, whitespace, directive-name, whitespace part. */
16013 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED
,
16014 const char *buffer ATTRIBUTE_UNUSED
)
16016 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
16018 switch_to_section (debug_macinfo_section
);
16019 dw2_asm_output_data (1, DW_MACINFO_undef
, "Undefine macro");
16020 dw2_asm_output_data_uleb128 (lineno
, "At line number %d", lineno
);
16021 dw2_asm_output_nstring (buffer
, -1, "The macro");
16025 /* Set up for Dwarf output at the start of compilation. */
16028 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED
)
16030 /* Allocate the file_table. */
16031 file_table
= htab_create_ggc (50, file_table_hash
,
16032 file_table_eq
, NULL
);
16034 /* Allocate the decl_die_table. */
16035 decl_die_table
= htab_create_ggc (10, decl_die_table_hash
,
16036 decl_die_table_eq
, NULL
);
16038 /* Allocate the decl_loc_table. */
16039 decl_loc_table
= htab_create_ggc (10, decl_loc_table_hash
,
16040 decl_loc_table_eq
, NULL
);
16042 /* Allocate the initial hunk of the decl_scope_table. */
16043 decl_scope_table
= VEC_alloc (tree
, gc
, 256);
16045 /* Allocate the initial hunk of the abbrev_die_table. */
16046 abbrev_die_table
= GGC_CNEWVEC (dw_die_ref
, ABBREV_DIE_TABLE_INCREMENT
);
16047 abbrev_die_table_allocated
= ABBREV_DIE_TABLE_INCREMENT
;
16048 /* Zero-th entry is allocated, but unused. */
16049 abbrev_die_table_in_use
= 1;
16051 /* Allocate the initial hunk of the line_info_table. */
16052 line_info_table
= GGC_CNEWVEC (dw_line_info_entry
, LINE_INFO_TABLE_INCREMENT
);
16053 line_info_table_allocated
= LINE_INFO_TABLE_INCREMENT
;
16055 /* Zero-th entry is allocated, but unused. */
16056 line_info_table_in_use
= 1;
16058 /* Allocate the pubtypes and pubnames vectors. */
16059 pubname_table
= VEC_alloc (pubname_entry
, gc
, 32);
16060 pubtype_table
= VEC_alloc (pubname_entry
, gc
, 32);
16062 /* Generate the initial DIE for the .debug section. Note that the (string)
16063 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
16064 will (typically) be a relative pathname and that this pathname should be
16065 taken as being relative to the directory from which the compiler was
16066 invoked when the given (base) source file was compiled. We will fill
16067 in this value in dwarf2out_finish. */
16068 comp_unit_die
= gen_compile_unit_die (NULL
);
16070 incomplete_types
= VEC_alloc (tree
, gc
, 64);
16072 used_rtx_array
= VEC_alloc (rtx
, gc
, 32);
16074 debug_info_section
= get_section (DEBUG_INFO_SECTION
,
16075 SECTION_DEBUG
, NULL
);
16076 debug_abbrev_section
= get_section (DEBUG_ABBREV_SECTION
,
16077 SECTION_DEBUG
, NULL
);
16078 debug_aranges_section
= get_section (DEBUG_ARANGES_SECTION
,
16079 SECTION_DEBUG
, NULL
);
16080 debug_macinfo_section
= get_section (DEBUG_MACINFO_SECTION
,
16081 SECTION_DEBUG
, NULL
);
16082 debug_line_section
= get_section (DEBUG_LINE_SECTION
,
16083 SECTION_DEBUG
, NULL
);
16084 debug_loc_section
= get_section (DEBUG_LOC_SECTION
,
16085 SECTION_DEBUG
, NULL
);
16086 debug_pubnames_section
= get_section (DEBUG_PUBNAMES_SECTION
,
16087 SECTION_DEBUG
, NULL
);
16088 #ifdef DEBUG_PUBTYPES_SECTION
16089 debug_pubtypes_section
= get_section (DEBUG_PUBTYPES_SECTION
,
16090 SECTION_DEBUG
, NULL
);
16092 debug_str_section
= get_section (DEBUG_STR_SECTION
,
16093 DEBUG_STR_SECTION_FLAGS
, NULL
);
16094 debug_ranges_section
= get_section (DEBUG_RANGES_SECTION
,
16095 SECTION_DEBUG
, NULL
);
16096 debug_frame_section
= get_section (DEBUG_FRAME_SECTION
,
16097 SECTION_DEBUG
, NULL
);
16099 ASM_GENERATE_INTERNAL_LABEL (text_end_label
, TEXT_END_LABEL
, 0);
16100 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label
,
16101 DEBUG_ABBREV_SECTION_LABEL
, 0);
16102 ASM_GENERATE_INTERNAL_LABEL (text_section_label
, TEXT_SECTION_LABEL
, 0);
16103 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label
,
16104 COLD_TEXT_SECTION_LABEL
, 0);
16105 ASM_GENERATE_INTERNAL_LABEL (cold_end_label
, COLD_END_LABEL
, 0);
16107 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label
,
16108 DEBUG_INFO_SECTION_LABEL
, 0);
16109 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label
,
16110 DEBUG_LINE_SECTION_LABEL
, 0);
16111 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label
,
16112 DEBUG_RANGES_SECTION_LABEL
, 0);
16113 switch_to_section (debug_abbrev_section
);
16114 ASM_OUTPUT_LABEL (asm_out_file
, abbrev_section_label
);
16115 switch_to_section (debug_info_section
);
16116 ASM_OUTPUT_LABEL (asm_out_file
, debug_info_section_label
);
16117 switch_to_section (debug_line_section
);
16118 ASM_OUTPUT_LABEL (asm_out_file
, debug_line_section_label
);
16120 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
16122 switch_to_section (debug_macinfo_section
);
16123 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label
,
16124 DEBUG_MACINFO_SECTION_LABEL
, 0);
16125 ASM_OUTPUT_LABEL (asm_out_file
, macinfo_section_label
);
16128 switch_to_section (text_section
);
16129 ASM_OUTPUT_LABEL (asm_out_file
, text_section_label
);
16130 if (flag_reorder_blocks_and_partition
)
16132 cold_text_section
= unlikely_text_section ();
16133 switch_to_section (cold_text_section
);
16134 ASM_OUTPUT_LABEL (asm_out_file
, cold_text_section_label
);
16138 /* A helper function for dwarf2out_finish called through
16139 ht_forall. Emit one queued .debug_str string. */
16142 output_indirect_string (void **h
, void *v ATTRIBUTE_UNUSED
)
16144 struct indirect_string_node
*node
= (struct indirect_string_node
*) *h
;
16146 if (node
->form
== DW_FORM_strp
)
16148 switch_to_section (debug_str_section
);
16149 ASM_OUTPUT_LABEL (asm_out_file
, node
->label
);
16150 assemble_string (node
->str
, strlen (node
->str
) + 1);
16156 #if ENABLE_ASSERT_CHECKING
16157 /* Verify that all marks are clear. */
16160 verify_marks_clear (dw_die_ref die
)
16164 gcc_assert (! die
->die_mark
);
16165 FOR_EACH_CHILD (die
, c
, verify_marks_clear (c
));
16167 #endif /* ENABLE_ASSERT_CHECKING */
16169 /* Clear the marks for a die and its children.
16170 Be cool if the mark isn't set. */
16173 prune_unmark_dies (dw_die_ref die
)
16179 FOR_EACH_CHILD (die
, c
, prune_unmark_dies (c
));
16182 /* Given DIE that we're marking as used, find any other dies
16183 it references as attributes and mark them as used. */
16186 prune_unused_types_walk_attribs (dw_die_ref die
)
16191 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
16193 if (a
->dw_attr_val
.val_class
== dw_val_class_die_ref
)
16195 /* A reference to another DIE.
16196 Make sure that it will get emitted. */
16197 prune_unused_types_mark (a
->dw_attr_val
.v
.val_die_ref
.die
, 1);
16199 /* Set the string's refcount to 0 so that prune_unused_types_mark
16200 accounts properly for it. */
16201 if (AT_class (a
) == dw_val_class_str
)
16202 a
->dw_attr_val
.v
.val_str
->refcount
= 0;
16207 /* Mark DIE as being used. If DOKIDS is true, then walk down
16208 to DIE's children. */
16211 prune_unused_types_mark (dw_die_ref die
, int dokids
)
16215 if (die
->die_mark
== 0)
16217 /* We haven't done this node yet. Mark it as used. */
16220 /* We also have to mark its parents as used.
16221 (But we don't want to mark our parents' kids due to this.) */
16222 if (die
->die_parent
)
16223 prune_unused_types_mark (die
->die_parent
, 0);
16225 /* Mark any referenced nodes. */
16226 prune_unused_types_walk_attribs (die
);
16228 /* If this node is a specification,
16229 also mark the definition, if it exists. */
16230 if (get_AT_flag (die
, DW_AT_declaration
) && die
->die_definition
)
16231 prune_unused_types_mark (die
->die_definition
, 1);
16234 if (dokids
&& die
->die_mark
!= 2)
16236 /* We need to walk the children, but haven't done so yet.
16237 Remember that we've walked the kids. */
16240 /* If this is an array type, we need to make sure our
16241 kids get marked, even if they're types. */
16242 if (die
->die_tag
== DW_TAG_array_type
)
16243 FOR_EACH_CHILD (die
, c
, prune_unused_types_mark (c
, 1));
16245 FOR_EACH_CHILD (die
, c
, prune_unused_types_walk (c
));
16249 /* For local classes, look if any static member functions were emitted
16250 and if so, mark them. */
16253 prune_unused_types_walk_local_classes (dw_die_ref die
)
16257 if (die
->die_mark
== 2)
16260 switch (die
->die_tag
)
16262 case DW_TAG_structure_type
:
16263 case DW_TAG_union_type
:
16264 case DW_TAG_class_type
:
16267 case DW_TAG_subprogram
:
16268 if (!get_AT_flag (die
, DW_AT_declaration
)
16269 || die
->die_definition
!= NULL
)
16270 prune_unused_types_mark (die
, 1);
16277 /* Mark children. */
16278 FOR_EACH_CHILD (die
, c
, prune_unused_types_walk_local_classes (c
));
16281 /* Walk the tree DIE and mark types that we actually use. */
16284 prune_unused_types_walk (dw_die_ref die
)
16288 /* Don't do anything if this node is already marked and
16289 children have been marked as well. */
16290 if (die
->die_mark
== 2)
16293 switch (die
->die_tag
)
16295 case DW_TAG_structure_type
:
16296 case DW_TAG_union_type
:
16297 case DW_TAG_class_type
:
16298 if (die
->die_perennial_p
)
16301 for (c
= die
->die_parent
; c
; c
= c
->die_parent
)
16302 if (c
->die_tag
== DW_TAG_subprogram
)
16305 /* Finding used static member functions inside of classes
16306 is needed just for local classes, because for other classes
16307 static member function DIEs with DW_AT_specification
16308 are emitted outside of the DW_TAG_*_type. If we ever change
16309 it, we'd need to call this even for non-local classes. */
16311 prune_unused_types_walk_local_classes (die
);
16313 /* It's a type node --- don't mark it. */
16316 case DW_TAG_const_type
:
16317 case DW_TAG_packed_type
:
16318 case DW_TAG_pointer_type
:
16319 case DW_TAG_reference_type
:
16320 case DW_TAG_volatile_type
:
16321 case DW_TAG_typedef
:
16322 case DW_TAG_array_type
:
16323 case DW_TAG_interface_type
:
16324 case DW_TAG_friend
:
16325 case DW_TAG_variant_part
:
16326 case DW_TAG_enumeration_type
:
16327 case DW_TAG_subroutine_type
:
16328 case DW_TAG_string_type
:
16329 case DW_TAG_set_type
:
16330 case DW_TAG_subrange_type
:
16331 case DW_TAG_ptr_to_member_type
:
16332 case DW_TAG_file_type
:
16333 if (die
->die_perennial_p
)
16336 /* It's a type node --- don't mark it. */
16340 /* Mark everything else. */
16344 if (die
->die_mark
== 0)
16348 /* Now, mark any dies referenced from here. */
16349 prune_unused_types_walk_attribs (die
);
16354 /* Mark children. */
16355 FOR_EACH_CHILD (die
, c
, prune_unused_types_walk (c
));
16358 /* Increment the string counts on strings referred to from DIE's
16362 prune_unused_types_update_strings (dw_die_ref die
)
16367 for (ix
= 0; VEC_iterate (dw_attr_node
, die
->die_attr
, ix
, a
); ix
++)
16368 if (AT_class (a
) == dw_val_class_str
)
16370 struct indirect_string_node
*s
= a
->dw_attr_val
.v
.val_str
;
16372 /* Avoid unnecessarily putting strings that are used less than
16373 twice in the hash table. */
16375 == ((DEBUG_STR_SECTION_FLAGS
& SECTION_MERGE
) ? 1 : 2))
16378 slot
= htab_find_slot_with_hash (debug_str_hash
, s
->str
,
16379 htab_hash_string (s
->str
),
16381 gcc_assert (*slot
== NULL
);
16387 /* Remove from the tree DIE any dies that aren't marked. */
16390 prune_unused_types_prune (dw_die_ref die
)
16394 gcc_assert (die
->die_mark
);
16395 prune_unused_types_update_strings (die
);
16397 if (! die
->die_child
)
16400 c
= die
->die_child
;
16402 dw_die_ref prev
= c
;
16403 for (c
= c
->die_sib
; ! c
->die_mark
; c
= c
->die_sib
)
16404 if (c
== die
->die_child
)
16406 /* No marked children between 'prev' and the end of the list. */
16408 /* No marked children at all. */
16409 die
->die_child
= NULL
;
16412 prev
->die_sib
= c
->die_sib
;
16413 die
->die_child
= prev
;
16418 if (c
!= prev
->die_sib
)
16420 prune_unused_types_prune (c
);
16421 } while (c
!= die
->die_child
);
16425 /* Remove dies representing declarations that we never use. */
16428 prune_unused_types (void)
16431 limbo_die_node
*node
;
16434 #if ENABLE_ASSERT_CHECKING
16435 /* All the marks should already be clear. */
16436 verify_marks_clear (comp_unit_die
);
16437 for (node
= limbo_die_list
; node
; node
= node
->next
)
16438 verify_marks_clear (node
->die
);
16439 #endif /* ENABLE_ASSERT_CHECKING */
16441 /* Set the mark on nodes that are actually used. */
16442 prune_unused_types_walk (comp_unit_die
);
16443 for (node
= limbo_die_list
; node
; node
= node
->next
)
16444 prune_unused_types_walk (node
->die
);
16446 /* Also set the mark on nodes referenced from the
16447 pubname_table or arange_table. */
16448 for (i
= 0; VEC_iterate (pubname_entry
, pubname_table
, i
, pub
); i
++)
16449 prune_unused_types_mark (pub
->die
, 1);
16450 for (i
= 0; i
< arange_table_in_use
; i
++)
16451 prune_unused_types_mark (arange_table
[i
], 1);
16453 /* Get rid of nodes that aren't marked; and update the string counts. */
16454 if (debug_str_hash
)
16455 htab_empty (debug_str_hash
);
16456 prune_unused_types_prune (comp_unit_die
);
16457 for (node
= limbo_die_list
; node
; node
= node
->next
)
16458 prune_unused_types_prune (node
->die
);
16460 /* Leave the marks clear. */
16461 prune_unmark_dies (comp_unit_die
);
16462 for (node
= limbo_die_list
; node
; node
= node
->next
)
16463 prune_unmark_dies (node
->die
);
16466 /* Set the parameter to true if there are any relative pathnames in
16469 file_table_relative_p (void ** slot
, void *param
)
16471 bool *p
= (bool *) param
;
16472 struct dwarf_file_data
*d
= (struct dwarf_file_data
*) *slot
;
16473 if (!IS_ABSOLUTE_PATH (d
->filename
))
16481 /* Output stuff that dwarf requires at the end of every file,
16482 and generate the DWARF-2 debugging info. */
16485 dwarf2out_finish (const char *filename
)
16487 limbo_die_node
*node
, *next_node
;
16488 dw_die_ref die
= 0;
16491 /* Add the name for the main input file now. We delayed this from
16492 dwarf2out_init to avoid complications with PCH. */
16493 add_name_attribute (comp_unit_die
, remap_debug_filename (filename
));
16494 if (!IS_ABSOLUTE_PATH (filename
))
16495 add_comp_dir_attribute (comp_unit_die
);
16496 else if (get_AT (comp_unit_die
, DW_AT_comp_dir
) == NULL
)
16499 htab_traverse (file_table
, file_table_relative_p
, &p
);
16501 add_comp_dir_attribute (comp_unit_die
);
16504 for (i
= 0; i
< VEC_length (deferred_locations
, deferred_locations_list
); i
++)
16506 add_location_or_const_value_attribute (
16507 VEC_index (deferred_locations
, deferred_locations_list
, i
)->die
,
16508 VEC_index (deferred_locations
, deferred_locations_list
, i
)->variable
,
16512 /* Traverse the limbo die list, and add parent/child links. The only
16513 dies without parents that should be here are concrete instances of
16514 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
16515 For concrete instances, we can get the parent die from the abstract
16517 for (node
= limbo_die_list
; node
; node
= next_node
)
16519 next_node
= node
->next
;
16522 if (die
->die_parent
== NULL
)
16524 dw_die_ref origin
= get_AT_ref (die
, DW_AT_abstract_origin
);
16527 add_child_die (origin
->die_parent
, die
);
16528 else if (die
== comp_unit_die
)
16530 else if (errorcount
> 0 || sorrycount
> 0)
16531 /* It's OK to be confused by errors in the input. */
16532 add_child_die (comp_unit_die
, die
);
16535 /* In certain situations, the lexical block containing a
16536 nested function can be optimized away, which results
16537 in the nested function die being orphaned. Likewise
16538 with the return type of that nested function. Force
16539 this to be a child of the containing function.
16541 It may happen that even the containing function got fully
16542 inlined and optimized out. In that case we are lost and
16543 assign the empty child. This should not be big issue as
16544 the function is likely unreachable too. */
16545 tree context
= NULL_TREE
;
16547 gcc_assert (node
->created_for
);
16549 if (DECL_P (node
->created_for
))
16550 context
= DECL_CONTEXT (node
->created_for
);
16551 else if (TYPE_P (node
->created_for
))
16552 context
= TYPE_CONTEXT (node
->created_for
);
16554 gcc_assert (context
16555 && (TREE_CODE (context
) == FUNCTION_DECL
16556 || TREE_CODE (context
) == NAMESPACE_DECL
));
16558 origin
= lookup_decl_die (context
);
16560 add_child_die (origin
, die
);
16562 add_child_die (comp_unit_die
, die
);
16567 limbo_die_list
= NULL
;
16569 /* Walk through the list of incomplete types again, trying once more to
16570 emit full debugging info for them. */
16571 retry_incomplete_types ();
16573 if (flag_eliminate_unused_debug_types
)
16574 prune_unused_types ();
16576 /* Generate separate CUs for each of the include files we've seen.
16577 They will go into limbo_die_list. */
16578 if (flag_eliminate_dwarf2_dups
)
16579 break_out_includes (comp_unit_die
);
16581 /* Traverse the DIE's and add add sibling attributes to those DIE's
16582 that have children. */
16583 add_sibling_attributes (comp_unit_die
);
16584 for (node
= limbo_die_list
; node
; node
= node
->next
)
16585 add_sibling_attributes (node
->die
);
16587 /* Output a terminator label for the .text section. */
16588 switch_to_section (text_section
);
16589 targetm
.asm_out
.internal_label (asm_out_file
, TEXT_END_LABEL
, 0);
16590 if (flag_reorder_blocks_and_partition
)
16592 switch_to_section (unlikely_text_section ());
16593 targetm
.asm_out
.internal_label (asm_out_file
, COLD_END_LABEL
, 0);
16596 /* We can only use the low/high_pc attributes if all of the code was
16598 if (!have_multiple_function_sections
)
16600 add_AT_lbl_id (comp_unit_die
, DW_AT_low_pc
, text_section_label
);
16601 add_AT_lbl_id (comp_unit_die
, DW_AT_high_pc
, text_end_label
);
16606 unsigned fde_idx
= 0;
16608 /* We need to give .debug_loc and .debug_ranges an appropriate
16609 "base address". Use zero so that these addresses become
16610 absolute. Historically, we've emitted the unexpected
16611 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
16612 Emit both to give time for other tools to adapt. */
16613 add_AT_addr (comp_unit_die
, DW_AT_low_pc
, const0_rtx
);
16614 add_AT_addr (comp_unit_die
, DW_AT_entry_pc
, const0_rtx
);
16616 add_AT_range_list (comp_unit_die
, DW_AT_ranges
,
16617 add_ranges_by_labels (text_section_label
,
16619 if (flag_reorder_blocks_and_partition
)
16620 add_ranges_by_labels (cold_text_section_label
,
16623 for (fde_idx
= 0; fde_idx
< fde_table_in_use
; fde_idx
++)
16625 dw_fde_ref fde
= &fde_table
[fde_idx
];
16627 if (fde
->dw_fde_switched_sections
)
16629 add_ranges_by_labels (fde
->dw_fde_hot_section_label
,
16630 fde
->dw_fde_hot_section_end_label
);
16631 add_ranges_by_labels (fde
->dw_fde_unlikely_section_label
,
16632 fde
->dw_fde_unlikely_section_end_label
);
16635 add_ranges_by_labels (fde
->dw_fde_begin
,
16642 /* Output location list section if necessary. */
16643 if (have_location_lists
)
16645 /* Output the location lists info. */
16646 switch_to_section (debug_loc_section
);
16647 ASM_GENERATE_INTERNAL_LABEL (loc_section_label
,
16648 DEBUG_LOC_SECTION_LABEL
, 0);
16649 ASM_OUTPUT_LABEL (asm_out_file
, loc_section_label
);
16650 output_location_lists (die
);
16653 if (debug_info_level
>= DINFO_LEVEL_NORMAL
)
16654 add_AT_lineptr (comp_unit_die
, DW_AT_stmt_list
,
16655 debug_line_section_label
);
16657 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
16658 add_AT_macptr (comp_unit_die
, DW_AT_macro_info
, macinfo_section_label
);
16660 /* Output all of the compilation units. We put the main one last so that
16661 the offsets are available to output_pubnames. */
16662 for (node
= limbo_die_list
; node
; node
= node
->next
)
16663 output_comp_unit (node
->die
, 0);
16665 /* Output the main compilation unit if non-empty or if .debug_macinfo
16666 has been emitted. */
16667 output_comp_unit (comp_unit_die
, debug_info_level
>= DINFO_LEVEL_VERBOSE
);
16669 /* Output the abbreviation table. */
16670 switch_to_section (debug_abbrev_section
);
16671 output_abbrev_section ();
16673 /* Output public names table if necessary. */
16674 if (!VEC_empty (pubname_entry
, pubname_table
))
16676 switch_to_section (debug_pubnames_section
);
16677 output_pubnames (pubname_table
);
16680 #ifdef DEBUG_PUBTYPES_SECTION
16681 /* Output public types table if necessary. */
16682 if (!VEC_empty (pubname_entry
, pubtype_table
))
16684 switch_to_section (debug_pubtypes_section
);
16685 output_pubnames (pubtype_table
);
16689 /* Output the address range information. We only put functions in the arange
16690 table, so don't write it out if we don't have any. */
16691 if (fde_table_in_use
)
16693 switch_to_section (debug_aranges_section
);
16697 /* Output ranges section if necessary. */
16698 if (ranges_table_in_use
)
16700 switch_to_section (debug_ranges_section
);
16701 ASM_OUTPUT_LABEL (asm_out_file
, ranges_section_label
);
16705 /* Output the source line correspondence table. We must do this
16706 even if there is no line information. Otherwise, on an empty
16707 translation unit, we will generate a present, but empty,
16708 .debug_info section. IRIX 6.5 `nm' will then complain when
16709 examining the file. This is done late so that any filenames
16710 used by the debug_info section are marked as 'used'. */
16711 if (! DWARF2_ASM_LINE_DEBUG_INFO
)
16713 switch_to_section (debug_line_section
);
16714 output_line_info ();
16717 /* Have to end the macro section. */
16718 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
16720 switch_to_section (debug_macinfo_section
);
16721 dw2_asm_output_data (1, 0, "End compilation unit");
16724 /* If we emitted any DW_FORM_strp form attribute, output the string
16726 if (debug_str_hash
)
16727 htab_traverse (debug_str_hash
, output_indirect_string
, NULL
);
16731 /* This should never be used, but its address is needed for comparisons. */
16732 const struct gcc_debug_hooks dwarf2_debug_hooks
;
16734 #endif /* DWARF2_DEBUGGING_INFO */
16736 #include "gt-dwarf2out.h"