1 /* Output Dwarf2 format symbol table information from the GNU C compiler.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 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 2, 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 COPYING. If not, write to the Free
22 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 /* TODO: Emit .debug_line header even when there are no functions, since
26 the file numbers are used by .debug_info. Alternately, leave
27 out locations for types and decls.
28 Avoid talking about ctors and op= for PODs.
29 Factor out common prologue sequences into multiple CIEs. */
31 /* The first part of this file deals with the DWARF 2 frame unwind
32 information, which is also used by the GCC efficient exception handling
33 mechanism. The second part, controlled only by an #ifdef
34 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
39 #include "coretypes.h"
45 #include "hard-reg-set.h"
47 #include "insn-config.h"
55 #include "dwarf2out.h"
56 #include "dwarf2asm.h"
62 #include "diagnostic.h"
65 #include "langhooks.h"
68 #ifdef DWARF2_DEBUGGING_INFO
69 static void dwarf2out_source_line
PARAMS ((unsigned int, const char *));
72 /* DWARF2 Abbreviation Glossary:
73 CFA = Canonical Frame Address
74 a fixed address on the stack which identifies a call frame.
75 We define it to be the value of SP just before the call insn.
76 The CFA register and offset, which may change during the course
77 of the function, are used to calculate its value at runtime.
78 CFI = Call Frame Instruction
79 an instruction for the DWARF2 abstract machine
80 CIE = Common Information Entry
81 information describing information common to one or more FDEs
82 DIE = Debugging Information Entry
83 FDE = Frame Description Entry
84 information describing the stack call frame, in particular,
85 how to restore registers
87 DW_CFA_... = DWARF2 CFA call frame instruction
88 DW_TAG_... = DWARF2 DIE tag */
90 /* Decide whether we want to emit frame unwind information for the current
96 return (write_symbols
== DWARF2_DEBUG
97 || write_symbols
== VMS_AND_DWARF2_DEBUG
98 #ifdef DWARF2_FRAME_INFO
101 #ifdef DWARF2_UNWIND_INFO
102 || flag_unwind_tables
103 || (flag_exceptions
&& ! USING_SJLJ_EXCEPTIONS
)
108 /* The size of the target's pointer type. */
110 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
113 /* Default version of targetm.eh_frame_section. Note this must appear
114 outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO macro
118 default_eh_frame_section ()
120 #ifdef EH_FRAME_SECTION_NAME
121 #ifdef HAVE_LD_RO_RW_SECTION_MIXING
122 int fde_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
123 int per_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
124 int lsda_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
128 || ((fde_encoding
& 0x70) != DW_EH_PE_absptr
129 && (fde_encoding
& 0x70) != DW_EH_PE_aligned
130 && (per_encoding
& 0x70) != DW_EH_PE_absptr
131 && (per_encoding
& 0x70) != DW_EH_PE_aligned
132 && (lsda_encoding
& 0x70) != DW_EH_PE_absptr
133 && (lsda_encoding
& 0x70) != DW_EH_PE_aligned
))
135 named_section_flags (EH_FRAME_SECTION_NAME
, flags
);
137 named_section_flags (EH_FRAME_SECTION_NAME
, SECTION_WRITE
);
140 tree label
= get_file_function_name ('F');
143 ASM_OUTPUT_ALIGN (asm_out_file
, floor_log2 (PTR_SIZE
));
144 (*targetm
.asm_out
.globalize_label
) (asm_out_file
, IDENTIFIER_POINTER (label
));
145 ASM_OUTPUT_LABEL (asm_out_file
, IDENTIFIER_POINTER (label
));
149 /* Array of RTXes referenced by the debugging information, which therefore
150 must be kept around forever. */
151 static GTY(()) varray_type used_rtx_varray
;
153 /* A pointer to the base of a list of incomplete types which might be
154 completed at some later time. incomplete_types_list needs to be a VARRAY
155 because we want to tell the garbage collector about it. */
156 static GTY(()) varray_type incomplete_types
;
158 /* A pointer to the base of a table of references to declaration
159 scopes. This table is a display which tracks the nesting
160 of declaration scopes at the current scope and containing
161 scopes. This table is used to find the proper place to
162 define type declaration DIE's. */
163 static GTY(()) varray_type decl_scope_table
;
165 /* How to start an assembler comment. */
166 #ifndef ASM_COMMENT_START
167 #define ASM_COMMENT_START ";#"
170 typedef struct dw_cfi_struct
*dw_cfi_ref
;
171 typedef struct dw_fde_struct
*dw_fde_ref
;
172 typedef union dw_cfi_oprnd_struct
*dw_cfi_oprnd_ref
;
174 /* Call frames are described using a sequence of Call Frame
175 Information instructions. The register number, offset
176 and address fields are provided as possible operands;
177 their use is selected by the opcode field. */
179 enum dw_cfi_oprnd_type
{
181 dw_cfi_oprnd_reg_num
,
187 typedef union dw_cfi_oprnd_struct
GTY(())
189 unsigned long GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num
;
190 long int GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset
;
191 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr
;
192 struct dw_loc_descr_struct
* GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc
;
196 typedef struct dw_cfi_struct
GTY(())
198 dw_cfi_ref dw_cfi_next
;
199 enum dwarf_call_frame_info dw_cfi_opc
;
200 dw_cfi_oprnd
GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
202 dw_cfi_oprnd
GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
207 /* This is how we define the location of the CFA. We use to handle it
208 as REG + OFFSET all the time, but now it can be more complex.
209 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
210 Instead of passing around REG and OFFSET, we pass a copy
211 of this structure. */
212 typedef struct cfa_loc
GTY(())
217 int indirect
; /* 1 if CFA is accessed via a dereference. */
220 /* All call frame descriptions (FDE's) in the GCC generated DWARF
221 refer to a single Common Information Entry (CIE), defined at
222 the beginning of the .debug_frame section. This use of a single
223 CIE obviates the need to keep track of multiple CIE's
224 in the DWARF generation routines below. */
226 typedef struct dw_fde_struct
GTY(())
228 const char *dw_fde_begin
;
229 const char *dw_fde_current_label
;
230 const char *dw_fde_end
;
231 dw_cfi_ref dw_fde_cfi
;
232 unsigned funcdef_number
;
233 unsigned all_throwers_are_sibcalls
: 1;
234 unsigned nothrow
: 1;
235 unsigned uses_eh_lsda
: 1;
239 /* Maximum size (in bytes) of an artificially generated label. */
240 #define MAX_ARTIFICIAL_LABEL_BYTES 30
242 /* The size of addresses as they appear in the Dwarf 2 data.
243 Some architectures use word addresses to refer to code locations,
244 but Dwarf 2 info always uses byte addresses. On such machines,
245 Dwarf 2 addresses need to be larger than the architecture's
247 #ifndef DWARF2_ADDR_SIZE
248 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
251 /* The size in bytes of a DWARF field indicating an offset or length
252 relative to a debug info section, specified to be 4 bytes in the
253 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
256 #ifndef DWARF_OFFSET_SIZE
257 #define DWARF_OFFSET_SIZE 4
260 #define DWARF_VERSION 2
262 /* Round SIZE up to the nearest BOUNDARY. */
263 #define DWARF_ROUND(SIZE,BOUNDARY) \
264 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
266 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
267 #ifndef DWARF_CIE_DATA_ALIGNMENT
268 #ifdef STACK_GROWS_DOWNWARD
269 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
271 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
275 /* A pointer to the base of a table that contains frame description
276 information for each routine. */
277 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table
;
279 /* Number of elements currently allocated for fde_table. */
280 static unsigned fde_table_allocated
;
282 /* Number of elements in fde_table currently in use. */
283 static unsigned fde_table_in_use
;
285 /* Size (in elements) of increments by which we may expand the
287 #define FDE_TABLE_INCREMENT 256
289 /* A list of call frame insns for the CIE. */
290 static GTY(()) dw_cfi_ref cie_cfi_head
;
292 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
293 attribute that accelerates the lookup of the FDE associated
294 with the subprogram. This variable holds the table index of the FDE
295 associated with the current function (body) definition. */
296 static unsigned current_funcdef_fde
;
298 struct indirect_string_node
GTY(())
301 unsigned int refcount
;
306 static GTY ((param_is (struct indirect_string_node
))) htab_t debug_str_hash
;
308 static GTY(()) int dw2_string_counter
;
310 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
312 /* Forward declarations for functions defined in this file. */
314 static char *stripattributes
PARAMS ((const char *));
315 static const char *dwarf_cfi_name
PARAMS ((unsigned));
316 static dw_cfi_ref new_cfi
PARAMS ((void));
317 static void add_cfi
PARAMS ((dw_cfi_ref
*, dw_cfi_ref
));
318 static void add_fde_cfi
PARAMS ((const char *, dw_cfi_ref
));
319 static void lookup_cfa_1
PARAMS ((dw_cfi_ref
,
321 static void lookup_cfa
PARAMS ((dw_cfa_location
*));
322 static void reg_save
PARAMS ((const char *, unsigned,
324 static void initial_return_save
PARAMS ((rtx
));
325 static long stack_adjust_offset
PARAMS ((rtx
));
326 static void output_cfi
PARAMS ((dw_cfi_ref
, dw_fde_ref
, int));
327 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
328 PARAMS ((enum dwarf_call_frame_info cfi
));
329 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
330 PARAMS ((enum dwarf_call_frame_info cfi
));
331 static void output_call_frame_info
PARAMS ((int));
332 static void dwarf2out_stack_adjust
PARAMS ((rtx
));
333 static void queue_reg_save
PARAMS ((const char *, rtx
, long));
334 static void flush_queued_reg_saves
PARAMS ((void));
335 static bool clobbers_queued_reg_save
PARAMS ((rtx
));
336 static void dwarf2out_frame_debug_expr
PARAMS ((rtx
, const char *));
338 /* Support for complex CFA locations. */
339 static void output_cfa_loc
PARAMS ((dw_cfi_ref
));
340 static void get_cfa_from_loc_descr
PARAMS ((dw_cfa_location
*,
341 struct dw_loc_descr_struct
*));
342 static struct dw_loc_descr_struct
*build_cfa_loc
343 PARAMS ((dw_cfa_location
*));
344 static void def_cfa_1
PARAMS ((const char *,
347 /* How to start an assembler comment. */
348 #ifndef ASM_COMMENT_START
349 #define ASM_COMMENT_START ";#"
352 /* Data and reference forms for relocatable data. */
353 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
354 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
356 #ifndef DEBUG_FRAME_SECTION
357 #define DEBUG_FRAME_SECTION ".debug_frame"
360 #ifndef FUNC_BEGIN_LABEL
361 #define FUNC_BEGIN_LABEL "LFB"
364 #ifndef FUNC_END_LABEL
365 #define FUNC_END_LABEL "LFE"
368 #define FRAME_BEGIN_LABEL "Lframe"
369 #define CIE_AFTER_SIZE_LABEL "LSCIE"
370 #define CIE_END_LABEL "LECIE"
371 #define FDE_LABEL "LSFDE"
372 #define FDE_AFTER_SIZE_LABEL "LASFDE"
373 #define FDE_END_LABEL "LEFDE"
374 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
375 #define LINE_NUMBER_END_LABEL "LELT"
376 #define LN_PROLOG_AS_LABEL "LASLTP"
377 #define LN_PROLOG_END_LABEL "LELTP"
378 #define DIE_LABEL_PREFIX "DW"
380 /* The DWARF 2 CFA column which tracks the return address. Normally this
381 is the column for PC, or the first column after all of the hard
383 #ifndef DWARF_FRAME_RETURN_COLUMN
385 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
387 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
391 /* The mapping from gcc register number to DWARF 2 CFA column number. By
392 default, we just provide columns for all registers. */
393 #ifndef DWARF_FRAME_REGNUM
394 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
397 /* The offset from the incoming value of %sp to the top of the stack frame
398 for the current function. */
399 #ifndef INCOMING_FRAME_SP_OFFSET
400 #define INCOMING_FRAME_SP_OFFSET 0
403 /* Hook used by __throw. */
406 expand_builtin_dwarf_fp_regnum ()
408 return GEN_INT (DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM
));
411 /* Return a pointer to a copy of the section string name S with all
412 attributes stripped off, and an asterisk prepended (for assemble_name). */
418 char *stripped
= xmalloc (strlen (s
) + 2);
423 while (*s
&& *s
!= ',')
430 /* Generate code to initialize the register size table. */
433 expand_builtin_init_dwarf_reg_sizes (address
)
437 enum machine_mode mode
= TYPE_MODE (char_type_node
);
438 rtx addr
= expand_expr (address
, NULL_RTX
, VOIDmode
, 0);
439 rtx mem
= gen_rtx_MEM (BLKmode
, addr
);
441 for (i
= 0; i
< FIRST_PSEUDO_REGISTER
; i
++)
442 if (DWARF_FRAME_REGNUM (i
) < DWARF_FRAME_REGISTERS
)
444 HOST_WIDE_INT offset
= DWARF_FRAME_REGNUM (i
) * GET_MODE_SIZE (mode
);
445 HOST_WIDE_INT size
= GET_MODE_SIZE (reg_raw_mode
[i
]);
450 emit_move_insn (adjust_address (mem
, mode
, offset
), GEN_INT (size
));
454 /* Convert a DWARF call frame info. operation to its string name */
457 dwarf_cfi_name (cfi_opc
)
462 case DW_CFA_advance_loc
:
463 return "DW_CFA_advance_loc";
465 return "DW_CFA_offset";
467 return "DW_CFA_restore";
471 return "DW_CFA_set_loc";
472 case DW_CFA_advance_loc1
:
473 return "DW_CFA_advance_loc1";
474 case DW_CFA_advance_loc2
:
475 return "DW_CFA_advance_loc2";
476 case DW_CFA_advance_loc4
:
477 return "DW_CFA_advance_loc4";
478 case DW_CFA_offset_extended
:
479 return "DW_CFA_offset_extended";
480 case DW_CFA_restore_extended
:
481 return "DW_CFA_restore_extended";
482 case DW_CFA_undefined
:
483 return "DW_CFA_undefined";
484 case DW_CFA_same_value
:
485 return "DW_CFA_same_value";
486 case DW_CFA_register
:
487 return "DW_CFA_register";
488 case DW_CFA_remember_state
:
489 return "DW_CFA_remember_state";
490 case DW_CFA_restore_state
:
491 return "DW_CFA_restore_state";
493 return "DW_CFA_def_cfa";
494 case DW_CFA_def_cfa_register
:
495 return "DW_CFA_def_cfa_register";
496 case DW_CFA_def_cfa_offset
:
497 return "DW_CFA_def_cfa_offset";
500 case DW_CFA_def_cfa_expression
:
501 return "DW_CFA_def_cfa_expression";
502 case DW_CFA_expression
:
503 return "DW_CFA_expression";
504 case DW_CFA_offset_extended_sf
:
505 return "DW_CFA_offset_extended_sf";
506 case DW_CFA_def_cfa_sf
:
507 return "DW_CFA_def_cfa_sf";
508 case DW_CFA_def_cfa_offset_sf
:
509 return "DW_CFA_def_cfa_offset_sf";
511 /* SGI/MIPS specific */
512 case DW_CFA_MIPS_advance_loc8
:
513 return "DW_CFA_MIPS_advance_loc8";
516 case DW_CFA_GNU_window_save
:
517 return "DW_CFA_GNU_window_save";
518 case DW_CFA_GNU_args_size
:
519 return "DW_CFA_GNU_args_size";
520 case DW_CFA_GNU_negative_offset_extended
:
521 return "DW_CFA_GNU_negative_offset_extended";
524 return "DW_CFA_<unknown>";
528 /* Return a pointer to a newly allocated Call Frame Instruction. */
530 static inline dw_cfi_ref
533 dw_cfi_ref cfi
= (dw_cfi_ref
) ggc_alloc (sizeof (dw_cfi_node
));
535 cfi
->dw_cfi_next
= NULL
;
536 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= 0;
537 cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
= 0;
542 /* Add a Call Frame Instruction to list of instructions. */
545 add_cfi (list_head
, cfi
)
546 dw_cfi_ref
*list_head
;
551 /* Find the end of the chain. */
552 for (p
= list_head
; (*p
) != NULL
; p
= &(*p
)->dw_cfi_next
)
558 /* Generate a new label for the CFI info to refer to. */
561 dwarf2out_cfi_label ()
563 static char label
[20];
564 static unsigned long label_num
= 0;
566 ASM_GENERATE_INTERNAL_LABEL (label
, "LCFI", label_num
++);
567 ASM_OUTPUT_LABEL (asm_out_file
, label
);
571 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
572 or to the CIE if LABEL is NULL. */
575 add_fde_cfi (label
, cfi
)
581 dw_fde_ref fde
= &fde_table
[fde_table_in_use
- 1];
584 label
= dwarf2out_cfi_label ();
586 if (fde
->dw_fde_current_label
== NULL
587 || strcmp (label
, fde
->dw_fde_current_label
) != 0)
591 fde
->dw_fde_current_label
= label
= xstrdup (label
);
593 /* Set the location counter to the new label. */
595 xcfi
->dw_cfi_opc
= DW_CFA_advance_loc4
;
596 xcfi
->dw_cfi_oprnd1
.dw_cfi_addr
= label
;
597 add_cfi (&fde
->dw_fde_cfi
, xcfi
);
600 add_cfi (&fde
->dw_fde_cfi
, cfi
);
604 add_cfi (&cie_cfi_head
, cfi
);
607 /* Subroutine of lookup_cfa. */
610 lookup_cfa_1 (cfi
, loc
)
612 dw_cfa_location
*loc
;
614 switch (cfi
->dw_cfi_opc
)
616 case DW_CFA_def_cfa_offset
:
617 loc
->offset
= cfi
->dw_cfi_oprnd1
.dw_cfi_offset
;
619 case DW_CFA_def_cfa_register
:
620 loc
->reg
= cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
;
623 loc
->reg
= cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
;
624 loc
->offset
= cfi
->dw_cfi_oprnd2
.dw_cfi_offset
;
626 case DW_CFA_def_cfa_expression
:
627 get_cfa_from_loc_descr (loc
, cfi
->dw_cfi_oprnd1
.dw_cfi_loc
);
634 /* Find the previous value for the CFA. */
638 dw_cfa_location
*loc
;
642 loc
->reg
= (unsigned long) -1;
645 loc
->base_offset
= 0;
647 for (cfi
= cie_cfi_head
; cfi
; cfi
= cfi
->dw_cfi_next
)
648 lookup_cfa_1 (cfi
, loc
);
650 if (fde_table_in_use
)
652 dw_fde_ref fde
= &fde_table
[fde_table_in_use
- 1];
653 for (cfi
= fde
->dw_fde_cfi
; cfi
; cfi
= cfi
->dw_cfi_next
)
654 lookup_cfa_1 (cfi
, loc
);
658 /* The current rule for calculating the DWARF2 canonical frame address. */
659 static dw_cfa_location cfa
;
661 /* The register used for saving registers to the stack, and its offset
663 static dw_cfa_location cfa_store
;
665 /* The running total of the size of arguments pushed onto the stack. */
666 static long args_size
;
668 /* The last args_size we actually output. */
669 static long old_args_size
;
671 /* Entry point to update the canonical frame address (CFA).
672 LABEL is passed to add_fde_cfi. The value of CFA is now to be
673 calculated from REG+OFFSET. */
676 dwarf2out_def_cfa (label
, reg
, offset
)
686 def_cfa_1 (label
, &loc
);
689 /* This routine does the actual work. The CFA is now calculated from
690 the dw_cfa_location structure. */
693 def_cfa_1 (label
, loc_p
)
695 dw_cfa_location
*loc_p
;
698 dw_cfa_location old_cfa
, loc
;
703 if (cfa_store
.reg
== loc
.reg
&& loc
.indirect
== 0)
704 cfa_store
.offset
= loc
.offset
;
706 loc
.reg
= DWARF_FRAME_REGNUM (loc
.reg
);
707 lookup_cfa (&old_cfa
);
709 /* If nothing changed, no need to issue any call frame instructions. */
710 if (loc
.reg
== old_cfa
.reg
&& loc
.offset
== old_cfa
.offset
711 && loc
.indirect
== old_cfa
.indirect
712 && (loc
.indirect
== 0 || loc
.base_offset
== old_cfa
.base_offset
))
717 if (loc
.reg
== old_cfa
.reg
&& !loc
.indirect
)
719 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction,
720 indicating the CFA register did not change but the offset
722 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_offset
;
723 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
= loc
.offset
;
726 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
727 else if (loc
.offset
== old_cfa
.offset
&& old_cfa
.reg
!= (unsigned long) -1
730 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
731 indicating the CFA register has changed to <register> but the
732 offset has not changed. */
733 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_register
;
734 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= loc
.reg
;
738 else if (loc
.indirect
== 0)
740 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
741 indicating the CFA register has changed to <register> with
742 the specified offset. */
743 cfi
->dw_cfi_opc
= DW_CFA_def_cfa
;
744 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= loc
.reg
;
745 cfi
->dw_cfi_oprnd2
.dw_cfi_offset
= loc
.offset
;
749 /* Construct a DW_CFA_def_cfa_expression instruction to
750 calculate the CFA using a full location expression since no
751 register-offset pair is available. */
752 struct dw_loc_descr_struct
*loc_list
;
754 cfi
->dw_cfi_opc
= DW_CFA_def_cfa_expression
;
755 loc_list
= build_cfa_loc (&loc
);
756 cfi
->dw_cfi_oprnd1
.dw_cfi_loc
= loc_list
;
759 add_fde_cfi (label
, cfi
);
762 /* Add the CFI for saving a register. REG is the CFA column number.
763 LABEL is passed to add_fde_cfi.
764 If SREG is -1, the register is saved at OFFSET from the CFA;
765 otherwise it is saved in SREG. */
768 reg_save (label
, reg
, sreg
, offset
)
774 dw_cfi_ref cfi
= new_cfi ();
776 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
= reg
;
778 /* The following comparison is correct. -1 is used to indicate that
779 the value isn't a register number. */
780 if (sreg
== (unsigned int) -1)
783 /* The register number won't fit in 6 bits, so we have to use
785 cfi
->dw_cfi_opc
= DW_CFA_offset_extended
;
787 cfi
->dw_cfi_opc
= DW_CFA_offset
;
789 #ifdef ENABLE_CHECKING
791 /* If we get an offset that is not a multiple of
792 DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
793 definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
795 long check_offset
= offset
/ DWARF_CIE_DATA_ALIGNMENT
;
797 if (check_offset
* DWARF_CIE_DATA_ALIGNMENT
!= offset
)
801 offset
/= DWARF_CIE_DATA_ALIGNMENT
;
803 cfi
->dw_cfi_opc
= DW_CFA_offset_extended_sf
;
805 cfi
->dw_cfi_oprnd2
.dw_cfi_offset
= offset
;
807 else if (sreg
== reg
)
808 /* We could emit a DW_CFA_same_value in this case, but don't bother. */
812 cfi
->dw_cfi_opc
= DW_CFA_register
;
813 cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
= sreg
;
816 add_fde_cfi (label
, cfi
);
819 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
820 This CFI tells the unwinder that it needs to restore the window registers
821 from the previous frame's window save area.
823 ??? Perhaps we should note in the CIE where windows are saved (instead of
824 assuming 0(cfa)) and what registers are in the window. */
827 dwarf2out_window_save (label
)
830 dw_cfi_ref cfi
= new_cfi ();
832 cfi
->dw_cfi_opc
= DW_CFA_GNU_window_save
;
833 add_fde_cfi (label
, cfi
);
836 /* Add a CFI to update the running total of the size of arguments
837 pushed onto the stack. */
840 dwarf2out_args_size (label
, size
)
846 if (size
== old_args_size
)
849 old_args_size
= size
;
852 cfi
->dw_cfi_opc
= DW_CFA_GNU_args_size
;
853 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
= size
;
854 add_fde_cfi (label
, cfi
);
857 /* Entry point for saving a register to the stack. REG is the GCC register
858 number. LABEL and OFFSET are passed to reg_save. */
861 dwarf2out_reg_save (label
, reg
, offset
)
866 reg_save (label
, DWARF_FRAME_REGNUM (reg
), -1, offset
);
869 /* Entry point for saving the return address in the stack.
870 LABEL and OFFSET are passed to reg_save. */
873 dwarf2out_return_save (label
, offset
)
877 reg_save (label
, DWARF_FRAME_RETURN_COLUMN
, -1, offset
);
880 /* Entry point for saving the return address in a register.
881 LABEL and SREG are passed to reg_save. */
884 dwarf2out_return_reg (label
, sreg
)
888 reg_save (label
, DWARF_FRAME_RETURN_COLUMN
, sreg
, 0);
891 /* Record the initial position of the return address. RTL is
892 INCOMING_RETURN_ADDR_RTX. */
895 initial_return_save (rtl
)
898 unsigned int reg
= (unsigned int) -1;
899 HOST_WIDE_INT offset
= 0;
901 switch (GET_CODE (rtl
))
904 /* RA is in a register. */
905 reg
= DWARF_FRAME_REGNUM (REGNO (rtl
));
909 /* RA is on the stack. */
911 switch (GET_CODE (rtl
))
914 if (REGNO (rtl
) != STACK_POINTER_REGNUM
)
920 if (REGNO (XEXP (rtl
, 0)) != STACK_POINTER_REGNUM
)
922 offset
= INTVAL (XEXP (rtl
, 1));
926 if (REGNO (XEXP (rtl
, 0)) != STACK_POINTER_REGNUM
)
928 offset
= -INTVAL (XEXP (rtl
, 1));
938 /* The return address is at some offset from any value we can
939 actually load. For instance, on the SPARC it is in %i7+8. Just
940 ignore the offset for now; it doesn't matter for unwinding frames. */
941 if (GET_CODE (XEXP (rtl
, 1)) != CONST_INT
)
943 initial_return_save (XEXP (rtl
, 0));
950 reg_save (NULL
, DWARF_FRAME_RETURN_COLUMN
, reg
, offset
- cfa
.offset
);
953 /* Given a SET, calculate the amount of stack adjustment it
957 stack_adjust_offset (pattern
)
960 rtx src
= SET_SRC (pattern
);
961 rtx dest
= SET_DEST (pattern
);
962 HOST_WIDE_INT offset
= 0;
965 if (dest
== stack_pointer_rtx
)
967 /* (set (reg sp) (plus (reg sp) (const_int))) */
968 code
= GET_CODE (src
);
969 if (! (code
== PLUS
|| code
== MINUS
)
970 || XEXP (src
, 0) != stack_pointer_rtx
971 || GET_CODE (XEXP (src
, 1)) != CONST_INT
)
974 offset
= INTVAL (XEXP (src
, 1));
978 else if (GET_CODE (dest
) == MEM
)
980 /* (set (mem (pre_dec (reg sp))) (foo)) */
981 src
= XEXP (dest
, 0);
982 code
= GET_CODE (src
);
988 if (XEXP (src
, 0) == stack_pointer_rtx
)
990 rtx val
= XEXP (XEXP (src
, 1), 1);
991 /* We handle only adjustments by constant amount. */
992 if (GET_CODE (XEXP (src
, 1)) != PLUS
||
993 GET_CODE (val
) != CONST_INT
)
995 offset
= -INTVAL (val
);
1002 if (XEXP (src
, 0) == stack_pointer_rtx
)
1004 offset
= GET_MODE_SIZE (GET_MODE (dest
));
1011 if (XEXP (src
, 0) == stack_pointer_rtx
)
1013 offset
= -GET_MODE_SIZE (GET_MODE (dest
));
1028 /* Check INSN to see if it looks like a push or a stack adjustment, and
1029 make a note of it if it does. EH uses this information to find out how
1030 much extra space it needs to pop off the stack. */
1033 dwarf2out_stack_adjust (insn
)
1036 HOST_WIDE_INT offset
;
1040 if (!flag_asynchronous_unwind_tables
&& GET_CODE (insn
) == CALL_INSN
)
1042 /* Extract the size of the args from the CALL rtx itself. */
1043 insn
= PATTERN (insn
);
1044 if (GET_CODE (insn
) == PARALLEL
)
1045 insn
= XVECEXP (insn
, 0, 0);
1046 if (GET_CODE (insn
) == SET
)
1047 insn
= SET_SRC (insn
);
1048 if (GET_CODE (insn
) != CALL
)
1051 dwarf2out_args_size ("", INTVAL (XEXP (insn
, 1)));
1055 /* If only calls can throw, and we have a frame pointer,
1056 save up adjustments until we see the CALL_INSN. */
1057 else if (!flag_asynchronous_unwind_tables
&& cfa
.reg
!= STACK_POINTER_REGNUM
)
1060 if (GET_CODE (insn
) == BARRIER
)
1062 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1063 the compiler will have already emitted a stack adjustment, but
1064 doesn't bother for calls to noreturn functions. */
1065 #ifdef STACK_GROWS_DOWNWARD
1066 offset
= -args_size
;
1071 else if (GET_CODE (PATTERN (insn
)) == SET
)
1072 offset
= stack_adjust_offset (PATTERN (insn
));
1073 else if (GET_CODE (PATTERN (insn
)) == PARALLEL
1074 || GET_CODE (PATTERN (insn
)) == SEQUENCE
)
1076 /* There may be stack adjustments inside compound insns. Search
1078 for (offset
= 0, i
= XVECLEN (PATTERN (insn
), 0) - 1; i
>= 0; i
--)
1079 if (GET_CODE (XVECEXP (PATTERN (insn
), 0, i
)) == SET
)
1080 offset
+= stack_adjust_offset (XVECEXP (PATTERN (insn
), 0, i
));
1088 if (cfa
.reg
== STACK_POINTER_REGNUM
)
1089 cfa
.offset
+= offset
;
1091 #ifndef STACK_GROWS_DOWNWARD
1095 args_size
+= offset
;
1099 label
= dwarf2out_cfi_label ();
1100 def_cfa_1 (label
, &cfa
);
1101 dwarf2out_args_size (label
, args_size
);
1106 /* We delay emitting a register save until either (a) we reach the end
1107 of the prologue or (b) the register is clobbered. This clusters
1108 register saves so that there are fewer pc advances. */
1110 struct queued_reg_save
GTY(())
1112 struct queued_reg_save
*next
;
1117 static GTY(()) struct queued_reg_save
*queued_reg_saves
;
1119 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1120 static const char *last_reg_save_label
;
1123 queue_reg_save (label
, reg
, offset
)
1128 struct queued_reg_save
*q
= ggc_alloc (sizeof (*q
));
1130 q
->next
= queued_reg_saves
;
1132 q
->cfa_offset
= offset
;
1133 queued_reg_saves
= q
;
1135 last_reg_save_label
= label
;
1139 flush_queued_reg_saves ()
1141 struct queued_reg_save
*q
, *next
;
1143 for (q
= queued_reg_saves
; q
; q
= next
)
1145 dwarf2out_reg_save (last_reg_save_label
, REGNO (q
->reg
), q
->cfa_offset
);
1149 queued_reg_saves
= NULL
;
1150 last_reg_save_label
= NULL
;
1154 clobbers_queued_reg_save (insn
)
1157 struct queued_reg_save
*q
;
1159 for (q
= queued_reg_saves
; q
; q
= q
->next
)
1160 if (modified_in_p (q
->reg
, insn
))
1167 /* A temporary register holding an integral value used in adjusting SP
1168 or setting up the store_reg. The "offset" field holds the integer
1169 value, not an offset. */
1170 static dw_cfa_location cfa_temp
;
1172 /* Record call frame debugging information for an expression EXPR,
1173 which either sets SP or FP (adjusting how we calculate the frame
1174 address) or saves a register to the stack. LABEL indicates the
1177 This function encodes a state machine mapping rtxes to actions on
1178 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1179 users need not read the source code.
1181 The High-Level Picture
1183 Changes in the register we use to calculate the CFA: Currently we
1184 assume that if you copy the CFA register into another register, we
1185 should take the other one as the new CFA register; this seems to
1186 work pretty well. If it's wrong for some target, it's simple
1187 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1189 Changes in the register we use for saving registers to the stack:
1190 This is usually SP, but not always. Again, we deduce that if you
1191 copy SP into another register (and SP is not the CFA register),
1192 then the new register is the one we will be using for register
1193 saves. This also seems to work.
1195 Register saves: There's not much guesswork about this one; if
1196 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1197 register save, and the register used to calculate the destination
1198 had better be the one we think we're using for this purpose.
1200 Except: If the register being saved is the CFA register, and the
1201 offset is nonzero, we are saving the CFA, so we assume we have to
1202 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1203 the intent is to save the value of SP from the previous frame.
1205 Invariants / Summaries of Rules
1207 cfa current rule for calculating the CFA. It usually
1208 consists of a register and an offset.
1209 cfa_store register used by prologue code to save things to the stack
1210 cfa_store.offset is the offset from the value of
1211 cfa_store.reg to the actual CFA
1212 cfa_temp register holding an integral value. cfa_temp.offset
1213 stores the value, which will be used to adjust the
1214 stack pointer. cfa_temp is also used like cfa_store,
1215 to track stores to the stack via fp or a temp reg.
1217 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1218 with cfa.reg as the first operand changes the cfa.reg and its
1219 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1222 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1223 expression yielding a constant. This sets cfa_temp.reg
1224 and cfa_temp.offset.
1226 Rule 5: Create a new register cfa_store used to save items to the
1229 Rules 10-14: Save a register to the stack. Define offset as the
1230 difference of the original location and cfa_store's
1231 location (or cfa_temp's location if cfa_temp is used).
1235 "{a,b}" indicates a choice of a xor b.
1236 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1239 (set <reg1> <reg2>:cfa.reg)
1240 effects: cfa.reg = <reg1>
1241 cfa.offset unchanged
1242 cfa_temp.reg = <reg1>
1243 cfa_temp.offset = cfa.offset
1246 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1247 {<const_int>,<reg>:cfa_temp.reg}))
1248 effects: cfa.reg = sp if fp used
1249 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1250 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1251 if cfa_store.reg==sp
1254 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1255 effects: cfa.reg = fp
1256 cfa_offset += +/- <const_int>
1259 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1260 constraints: <reg1> != fp
1262 effects: cfa.reg = <reg1>
1263 cfa_temp.reg = <reg1>
1264 cfa_temp.offset = cfa.offset
1267 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1268 constraints: <reg1> != fp
1270 effects: cfa_store.reg = <reg1>
1271 cfa_store.offset = cfa.offset - cfa_temp.offset
1274 (set <reg> <const_int>)
1275 effects: cfa_temp.reg = <reg>
1276 cfa_temp.offset = <const_int>
1279 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1280 effects: cfa_temp.reg = <reg1>
1281 cfa_temp.offset |= <const_int>
1284 (set <reg> (high <exp>))
1288 (set <reg> (lo_sum <exp> <const_int>))
1289 effects: cfa_temp.reg = <reg>
1290 cfa_temp.offset = <const_int>
1293 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1294 effects: cfa_store.offset -= <const_int>
1295 cfa.offset = cfa_store.offset if cfa.reg == sp
1297 cfa.base_offset = -cfa_store.offset
1300 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1301 effects: cfa_store.offset += -/+ mode_size(mem)
1302 cfa.offset = cfa_store.offset if cfa.reg == sp
1304 cfa.base_offset = -cfa_store.offset
1307 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1310 effects: cfa.reg = <reg1>
1311 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1314 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1315 effects: cfa.reg = <reg1>
1316 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1319 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1320 effects: cfa.reg = <reg1>
1321 cfa.base_offset = -cfa_temp.offset
1322 cfa_temp.offset -= mode_size(mem) */
1325 dwarf2out_frame_debug_expr (expr
, label
)
1330 HOST_WIDE_INT offset
;
1332 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1333 the PARALLEL independently. The first element is always processed if
1334 it is a SET. This is for backward compatibility. Other elements
1335 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1336 flag is set in them. */
1337 if (GET_CODE (expr
) == PARALLEL
|| GET_CODE (expr
) == SEQUENCE
)
1340 int limit
= XVECLEN (expr
, 0);
1342 for (par_index
= 0; par_index
< limit
; par_index
++)
1343 if (GET_CODE (XVECEXP (expr
, 0, par_index
)) == SET
1344 && (RTX_FRAME_RELATED_P (XVECEXP (expr
, 0, par_index
))
1346 dwarf2out_frame_debug_expr (XVECEXP (expr
, 0, par_index
), label
);
1351 if (GET_CODE (expr
) != SET
)
1354 src
= SET_SRC (expr
);
1355 dest
= SET_DEST (expr
);
1357 switch (GET_CODE (dest
))
1361 /* Update the CFA rule wrt SP or FP. Make sure src is
1362 relative to the current CFA register. */
1363 switch (GET_CODE (src
))
1365 /* Setting FP from SP. */
1367 if (cfa
.reg
== (unsigned) REGNO (src
))
1373 /* We used to require that dest be either SP or FP, but the
1374 ARM copies SP to a temporary register, and from there to
1375 FP. So we just rely on the backends to only set
1376 RTX_FRAME_RELATED_P on appropriate insns. */
1377 cfa
.reg
= REGNO (dest
);
1378 cfa_temp
.reg
= cfa
.reg
;
1379 cfa_temp
.offset
= cfa
.offset
;
1385 if (dest
== stack_pointer_rtx
)
1389 switch (GET_CODE (XEXP (src
, 1)))
1392 offset
= INTVAL (XEXP (src
, 1));
1395 if ((unsigned) REGNO (XEXP (src
, 1)) != cfa_temp
.reg
)
1397 offset
= cfa_temp
.offset
;
1403 if (XEXP (src
, 0) == hard_frame_pointer_rtx
)
1405 /* Restoring SP from FP in the epilogue. */
1406 if (cfa
.reg
!= (unsigned) HARD_FRAME_POINTER_REGNUM
)
1408 cfa
.reg
= STACK_POINTER_REGNUM
;
1410 else if (GET_CODE (src
) == LO_SUM
)
1411 /* Assume we've set the source reg of the LO_SUM from sp. */
1413 else if (XEXP (src
, 0) != stack_pointer_rtx
)
1416 if (GET_CODE (src
) != MINUS
)
1418 if (cfa
.reg
== STACK_POINTER_REGNUM
)
1419 cfa
.offset
+= offset
;
1420 if (cfa_store
.reg
== STACK_POINTER_REGNUM
)
1421 cfa_store
.offset
+= offset
;
1423 else if (dest
== hard_frame_pointer_rtx
)
1426 /* Either setting the FP from an offset of the SP,
1427 or adjusting the FP */
1428 if (! frame_pointer_needed
)
1431 if (GET_CODE (XEXP (src
, 0)) == REG
1432 && (unsigned) REGNO (XEXP (src
, 0)) == cfa
.reg
1433 && GET_CODE (XEXP (src
, 1)) == CONST_INT
)
1435 offset
= INTVAL (XEXP (src
, 1));
1436 if (GET_CODE (src
) != MINUS
)
1438 cfa
.offset
+= offset
;
1439 cfa
.reg
= HARD_FRAME_POINTER_REGNUM
;
1446 if (GET_CODE (src
) == MINUS
)
1450 if (GET_CODE (XEXP (src
, 0)) == REG
1451 && REGNO (XEXP (src
, 0)) == cfa
.reg
1452 && GET_CODE (XEXP (src
, 1)) == CONST_INT
)
1454 /* Setting a temporary CFA register that will be copied
1455 into the FP later on. */
1456 offset
= - INTVAL (XEXP (src
, 1));
1457 cfa
.offset
+= offset
;
1458 cfa
.reg
= REGNO (dest
);
1459 /* Or used to save regs to the stack. */
1460 cfa_temp
.reg
= cfa
.reg
;
1461 cfa_temp
.offset
= cfa
.offset
;
1465 else if (GET_CODE (XEXP (src
, 0)) == REG
1466 && REGNO (XEXP (src
, 0)) == cfa_temp
.reg
1467 && XEXP (src
, 1) == stack_pointer_rtx
)
1469 /* Setting a scratch register that we will use instead
1470 of SP for saving registers to the stack. */
1471 if (cfa
.reg
!= STACK_POINTER_REGNUM
)
1473 cfa_store
.reg
= REGNO (dest
);
1474 cfa_store
.offset
= cfa
.offset
- cfa_temp
.offset
;
1478 else if (GET_CODE (src
) == LO_SUM
1479 && GET_CODE (XEXP (src
, 1)) == CONST_INT
)
1481 cfa_temp
.reg
= REGNO (dest
);
1482 cfa_temp
.offset
= INTVAL (XEXP (src
, 1));
1491 cfa_temp
.reg
= REGNO (dest
);
1492 cfa_temp
.offset
= INTVAL (src
);
1497 if (GET_CODE (XEXP (src
, 0)) != REG
1498 || (unsigned) REGNO (XEXP (src
, 0)) != cfa_temp
.reg
1499 || GET_CODE (XEXP (src
, 1)) != CONST_INT
)
1502 if ((unsigned) REGNO (dest
) != cfa_temp
.reg
)
1503 cfa_temp
.reg
= REGNO (dest
);
1504 cfa_temp
.offset
|= INTVAL (XEXP (src
, 1));
1507 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1508 which will fill in all of the bits. */
1517 def_cfa_1 (label
, &cfa
);
1521 if (GET_CODE (src
) != REG
)
1524 /* Saving a register to the stack. Make sure dest is relative to the
1526 switch (GET_CODE (XEXP (dest
, 0)))
1531 /* We can't handle variable size modifications. */
1532 if (GET_CODE (XEXP (XEXP (XEXP (dest
, 0), 1), 1)) != CONST_INT
)
1534 offset
= -INTVAL (XEXP (XEXP (XEXP (dest
, 0), 1), 1));
1536 if (REGNO (XEXP (XEXP (dest
, 0), 0)) != STACK_POINTER_REGNUM
1537 || cfa_store
.reg
!= STACK_POINTER_REGNUM
)
1540 cfa_store
.offset
+= offset
;
1541 if (cfa
.reg
== STACK_POINTER_REGNUM
)
1542 cfa
.offset
= cfa_store
.offset
;
1544 offset
= -cfa_store
.offset
;
1550 offset
= GET_MODE_SIZE (GET_MODE (dest
));
1551 if (GET_CODE (XEXP (dest
, 0)) == PRE_INC
)
1554 if (REGNO (XEXP (XEXP (dest
, 0), 0)) != STACK_POINTER_REGNUM
1555 || cfa_store
.reg
!= STACK_POINTER_REGNUM
)
1558 cfa_store
.offset
+= offset
;
1559 if (cfa
.reg
== STACK_POINTER_REGNUM
)
1560 cfa
.offset
= cfa_store
.offset
;
1562 offset
= -cfa_store
.offset
;
1566 /* With an offset. */
1570 if (GET_CODE (XEXP (XEXP (dest
, 0), 1)) != CONST_INT
)
1572 offset
= INTVAL (XEXP (XEXP (dest
, 0), 1));
1573 if (GET_CODE (XEXP (dest
, 0)) == MINUS
)
1576 if (cfa_store
.reg
== (unsigned) REGNO (XEXP (XEXP (dest
, 0), 0)))
1577 offset
-= cfa_store
.offset
;
1578 else if (cfa_temp
.reg
== (unsigned) REGNO (XEXP (XEXP (dest
, 0), 0)))
1579 offset
-= cfa_temp
.offset
;
1585 /* Without an offset. */
1587 if (cfa_store
.reg
== (unsigned) REGNO (XEXP (dest
, 0)))
1588 offset
= -cfa_store
.offset
;
1589 else if (cfa_temp
.reg
== (unsigned) REGNO (XEXP (dest
, 0)))
1590 offset
= -cfa_temp
.offset
;
1597 if (cfa_temp
.reg
!= (unsigned) REGNO (XEXP (XEXP (dest
, 0), 0)))
1599 offset
= -cfa_temp
.offset
;
1600 cfa_temp
.offset
-= GET_MODE_SIZE (GET_MODE (dest
));
1607 if (REGNO (src
) != STACK_POINTER_REGNUM
1608 && REGNO (src
) != HARD_FRAME_POINTER_REGNUM
1609 && (unsigned) REGNO (src
) == cfa
.reg
)
1611 /* We're storing the current CFA reg into the stack. */
1613 if (cfa
.offset
== 0)
1615 /* If the source register is exactly the CFA, assume
1616 we're saving SP like any other register; this happens
1618 def_cfa_1 (label
, &cfa
);
1619 queue_reg_save (label
, stack_pointer_rtx
, offset
);
1624 /* Otherwise, we'll need to look in the stack to
1625 calculate the CFA. */
1626 rtx x
= XEXP (dest
, 0);
1628 if (GET_CODE (x
) != REG
)
1630 if (GET_CODE (x
) != REG
)
1633 cfa
.reg
= REGNO (x
);
1634 cfa
.base_offset
= offset
;
1636 def_cfa_1 (label
, &cfa
);
1641 def_cfa_1 (label
, &cfa
);
1642 queue_reg_save (label
, src
, offset
);
1650 /* Record call frame debugging information for INSN, which either
1651 sets SP or FP (adjusting how we calculate the frame address) or saves a
1652 register to the stack. If INSN is NULL_RTX, initialize our state. */
1655 dwarf2out_frame_debug (insn
)
1661 if (insn
== NULL_RTX
)
1663 /* Flush any queued register saves. */
1664 flush_queued_reg_saves ();
1666 /* Set up state for generating call frame debug info. */
1668 if (cfa
.reg
!= (unsigned long) DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM
))
1671 cfa
.reg
= STACK_POINTER_REGNUM
;
1674 cfa_temp
.offset
= 0;
1678 if (GET_CODE (insn
) != INSN
|| clobbers_queued_reg_save (insn
))
1679 flush_queued_reg_saves ();
1681 if (! RTX_FRAME_RELATED_P (insn
))
1683 if (!ACCUMULATE_OUTGOING_ARGS
)
1684 dwarf2out_stack_adjust (insn
);
1689 label
= dwarf2out_cfi_label ();
1690 src
= find_reg_note (insn
, REG_FRAME_RELATED_EXPR
, NULL_RTX
);
1692 insn
= XEXP (src
, 0);
1694 insn
= PATTERN (insn
);
1696 dwarf2out_frame_debug_expr (insn
, label
);
1701 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
1703 static enum dw_cfi_oprnd_type
1704 dw_cfi_oprnd1_desc (cfi
)
1705 enum dwarf_call_frame_info cfi
;
1710 case DW_CFA_GNU_window_save
:
1711 return dw_cfi_oprnd_unused
;
1713 case DW_CFA_set_loc
:
1714 case DW_CFA_advance_loc1
:
1715 case DW_CFA_advance_loc2
:
1716 case DW_CFA_advance_loc4
:
1717 case DW_CFA_MIPS_advance_loc8
:
1718 return dw_cfi_oprnd_addr
;
1721 case DW_CFA_offset_extended
:
1722 case DW_CFA_def_cfa
:
1723 case DW_CFA_offset_extended_sf
:
1724 case DW_CFA_def_cfa_sf
:
1725 case DW_CFA_restore_extended
:
1726 case DW_CFA_undefined
:
1727 case DW_CFA_same_value
:
1728 case DW_CFA_def_cfa_register
:
1729 case DW_CFA_register
:
1730 return dw_cfi_oprnd_reg_num
;
1732 case DW_CFA_def_cfa_offset
:
1733 case DW_CFA_GNU_args_size
:
1734 case DW_CFA_def_cfa_offset_sf
:
1735 return dw_cfi_oprnd_offset
;
1737 case DW_CFA_def_cfa_expression
:
1738 case DW_CFA_expression
:
1739 return dw_cfi_oprnd_loc
;
1746 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
1748 static enum dw_cfi_oprnd_type
1749 dw_cfi_oprnd2_desc (cfi
)
1750 enum dwarf_call_frame_info cfi
;
1754 case DW_CFA_def_cfa
:
1755 case DW_CFA_def_cfa_sf
:
1757 case DW_CFA_offset_extended_sf
:
1758 case DW_CFA_offset_extended
:
1759 return dw_cfi_oprnd_offset
;
1761 case DW_CFA_register
:
1762 return dw_cfi_oprnd_reg_num
;
1765 return dw_cfi_oprnd_unused
;
1769 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1771 /* Output a Call Frame Information opcode and its operand(s). */
1774 output_cfi (cfi
, fde
, for_eh
)
1779 if (cfi
->dw_cfi_opc
== DW_CFA_advance_loc
)
1780 dw2_asm_output_data (1, (cfi
->dw_cfi_opc
1781 | (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
& 0x3f)),
1782 "DW_CFA_advance_loc 0x%lx",
1783 cfi
->dw_cfi_oprnd1
.dw_cfi_offset
);
1784 else if (cfi
->dw_cfi_opc
== DW_CFA_offset
)
1786 dw2_asm_output_data (1, (cfi
->dw_cfi_opc
1787 | (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
& 0x3f)),
1788 "DW_CFA_offset, column 0x%lx",
1789 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
);
1790 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
, NULL
);
1792 else if (cfi
->dw_cfi_opc
== DW_CFA_restore
)
1793 dw2_asm_output_data (1, (cfi
->dw_cfi_opc
1794 | (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
& 0x3f)),
1795 "DW_CFA_restore, column 0x%lx",
1796 cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
);
1799 dw2_asm_output_data (1, cfi
->dw_cfi_opc
,
1800 "%s", dwarf_cfi_name (cfi
->dw_cfi_opc
));
1802 switch (cfi
->dw_cfi_opc
)
1804 case DW_CFA_set_loc
:
1806 dw2_asm_output_encoded_addr_rtx (
1807 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
1808 gen_rtx_SYMBOL_REF (Pmode
, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
),
1811 dw2_asm_output_addr (DWARF2_ADDR_SIZE
,
1812 cfi
->dw_cfi_oprnd1
.dw_cfi_addr
, NULL
);
1815 case DW_CFA_advance_loc1
:
1816 dw2_asm_output_delta (1, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
1817 fde
->dw_fde_current_label
, NULL
);
1818 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
1821 case DW_CFA_advance_loc2
:
1822 dw2_asm_output_delta (2, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
1823 fde
->dw_fde_current_label
, NULL
);
1824 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
1827 case DW_CFA_advance_loc4
:
1828 dw2_asm_output_delta (4, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
1829 fde
->dw_fde_current_label
, NULL
);
1830 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
1833 case DW_CFA_MIPS_advance_loc8
:
1834 dw2_asm_output_delta (8, cfi
->dw_cfi_oprnd1
.dw_cfi_addr
,
1835 fde
->dw_fde_current_label
, NULL
);
1836 fde
->dw_fde_current_label
= cfi
->dw_cfi_oprnd1
.dw_cfi_addr
;
1839 case DW_CFA_offset_extended
:
1840 case DW_CFA_def_cfa
:
1841 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
,
1843 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
, NULL
);
1846 case DW_CFA_offset_extended_sf
:
1847 case DW_CFA_def_cfa_sf
:
1848 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
,
1850 dw2_asm_output_data_sleb128 (cfi
->dw_cfi_oprnd2
.dw_cfi_offset
, NULL
);
1853 case DW_CFA_restore_extended
:
1854 case DW_CFA_undefined
:
1855 case DW_CFA_same_value
:
1856 case DW_CFA_def_cfa_register
:
1857 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
,
1861 case DW_CFA_register
:
1862 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_reg_num
,
1864 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd2
.dw_cfi_reg_num
,
1868 case DW_CFA_def_cfa_offset
:
1869 case DW_CFA_GNU_args_size
:
1870 dw2_asm_output_data_uleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
, NULL
);
1873 case DW_CFA_def_cfa_offset_sf
:
1874 dw2_asm_output_data_sleb128 (cfi
->dw_cfi_oprnd1
.dw_cfi_offset
, NULL
);
1877 case DW_CFA_GNU_window_save
:
1880 case DW_CFA_def_cfa_expression
:
1881 case DW_CFA_expression
:
1882 output_cfa_loc (cfi
);
1885 case DW_CFA_GNU_negative_offset_extended
:
1886 /* Obsoleted by DW_CFA_offset_extended_sf. */
1895 /* Output the call frame information used to used to record information
1896 that relates to calculating the frame pointer, and records the
1897 location of saved registers. */
1900 output_call_frame_info (for_eh
)
1906 char l1
[20], l2
[20], section_start_label
[20];
1907 int any_lsda_needed
= 0;
1908 char augmentation
[6];
1909 int augmentation_size
;
1910 int fde_encoding
= DW_EH_PE_absptr
;
1911 int per_encoding
= DW_EH_PE_absptr
;
1912 int lsda_encoding
= DW_EH_PE_absptr
;
1914 /* Don't emit a CIE if there won't be any FDEs. */
1915 if (fde_table_in_use
== 0)
1918 /* If we don't have any functions we'll want to unwind out of, don't emit any
1919 EH unwind information. */
1922 int any_eh_needed
= flag_asynchronous_unwind_tables
;
1924 for (i
= 0; i
< fde_table_in_use
; i
++)
1925 if (fde_table
[i
].uses_eh_lsda
)
1926 any_eh_needed
= any_lsda_needed
= 1;
1927 else if (! fde_table
[i
].nothrow
)
1930 if (! any_eh_needed
)
1934 /* We're going to be generating comments, so turn on app. */
1939 (*targetm
.asm_out
.eh_frame_section
) ();
1941 named_section_flags (DEBUG_FRAME_SECTION
, SECTION_DEBUG
);
1943 ASM_GENERATE_INTERNAL_LABEL (section_start_label
, FRAME_BEGIN_LABEL
, for_eh
);
1944 ASM_OUTPUT_LABEL (asm_out_file
, section_start_label
);
1946 /* Output the CIE. */
1947 ASM_GENERATE_INTERNAL_LABEL (l1
, CIE_AFTER_SIZE_LABEL
, for_eh
);
1948 ASM_GENERATE_INTERNAL_LABEL (l2
, CIE_END_LABEL
, for_eh
);
1949 dw2_asm_output_delta (for_eh
? 4 : DWARF_OFFSET_SIZE
, l2
, l1
,
1950 "Length of Common Information Entry");
1951 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
1953 /* Now that the CIE pointer is PC-relative for EH,
1954 use 0 to identify the CIE. */
1955 dw2_asm_output_data ((for_eh
? 4 : DWARF_OFFSET_SIZE
),
1956 (for_eh
? 0 : DW_CIE_ID
),
1957 "CIE Identifier Tag");
1959 dw2_asm_output_data (1, DW_CIE_VERSION
, "CIE Version");
1961 augmentation
[0] = 0;
1962 augmentation_size
= 0;
1968 z Indicates that a uleb128 is present to size the
1969 augmentation section.
1970 L Indicates the encoding (and thus presence) of
1971 an LSDA pointer in the FDE augmentation.
1972 R Indicates a non-default pointer encoding for
1974 P Indicates the presence of an encoding + language
1975 personality routine in the CIE augmentation. */
1977 fde_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
1978 per_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
1979 lsda_encoding
= ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
1981 p
= augmentation
+ 1;
1982 if (eh_personality_libfunc
)
1985 augmentation_size
+= 1 + size_of_encoded_value (per_encoding
);
1987 if (any_lsda_needed
)
1990 augmentation_size
+= 1;
1992 if (fde_encoding
!= DW_EH_PE_absptr
)
1995 augmentation_size
+= 1;
1997 if (p
> augmentation
+ 1)
1999 augmentation
[0] = 'z';
2003 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2004 if (eh_personality_libfunc
&& per_encoding
== DW_EH_PE_aligned
)
2006 int offset
= ( 4 /* Length */
2008 + 1 /* CIE version */
2009 + strlen (augmentation
) + 1 /* Augmentation */
2010 + size_of_uleb128 (1) /* Code alignment */
2011 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT
)
2013 + 1 /* Augmentation size */
2014 + 1 /* Personality encoding */ );
2015 int pad
= -offset
& (PTR_SIZE
- 1);
2017 augmentation_size
+= pad
;
2019 /* Augmentations should be small, so there's scarce need to
2020 iterate for a solution. Die if we exceed one uleb128 byte. */
2021 if (size_of_uleb128 (augmentation_size
) != 1)
2026 dw2_asm_output_nstring (augmentation
, -1, "CIE Augmentation");
2027 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2028 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT
,
2029 "CIE Data Alignment Factor");
2030 dw2_asm_output_data (1, DWARF_FRAME_RETURN_COLUMN
, "CIE RA Column");
2032 if (augmentation
[0])
2034 dw2_asm_output_data_uleb128 (augmentation_size
, "Augmentation size");
2035 if (eh_personality_libfunc
)
2037 dw2_asm_output_data (1, per_encoding
, "Personality (%s)",
2038 eh_data_format_name (per_encoding
));
2039 dw2_asm_output_encoded_addr_rtx (per_encoding
,
2040 eh_personality_libfunc
, NULL
);
2043 if (any_lsda_needed
)
2044 dw2_asm_output_data (1, lsda_encoding
, "LSDA Encoding (%s)",
2045 eh_data_format_name (lsda_encoding
));
2047 if (fde_encoding
!= DW_EH_PE_absptr
)
2048 dw2_asm_output_data (1, fde_encoding
, "FDE Encoding (%s)",
2049 eh_data_format_name (fde_encoding
));
2052 for (cfi
= cie_cfi_head
; cfi
!= NULL
; cfi
= cfi
->dw_cfi_next
)
2053 output_cfi (cfi
, NULL
, for_eh
);
2055 /* Pad the CIE out to an address sized boundary. */
2056 ASM_OUTPUT_ALIGN (asm_out_file
,
2057 floor_log2 (for_eh
? PTR_SIZE
: DWARF2_ADDR_SIZE
));
2058 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
2060 /* Loop through all of the FDE's. */
2061 for (i
= 0; i
< fde_table_in_use
; i
++)
2063 fde
= &fde_table
[i
];
2065 /* Don't emit EH unwind info for leaf functions that don't need it. */
2066 if (!flag_asynchronous_unwind_tables
&& for_eh
2067 && (fde
->nothrow
|| fde
->all_throwers_are_sibcalls
)
2068 && !fde
->uses_eh_lsda
)
2071 (*targetm
.asm_out
.internal_label
) (asm_out_file
, FDE_LABEL
, for_eh
+ i
* 2);
2072 ASM_GENERATE_INTERNAL_LABEL (l1
, FDE_AFTER_SIZE_LABEL
, for_eh
+ i
* 2);
2073 ASM_GENERATE_INTERNAL_LABEL (l2
, FDE_END_LABEL
, for_eh
+ i
* 2);
2074 dw2_asm_output_delta (for_eh
? 4 : DWARF_OFFSET_SIZE
, l2
, l1
,
2076 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
2079 dw2_asm_output_delta (4, l1
, section_start_label
, "FDE CIE offset");
2081 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, section_start_label
,
2086 dw2_asm_output_encoded_addr_rtx (fde_encoding
,
2087 gen_rtx_SYMBOL_REF (Pmode
, fde
->dw_fde_begin
),
2088 "FDE initial location");
2089 dw2_asm_output_delta (size_of_encoded_value (fde_encoding
),
2090 fde
->dw_fde_end
, fde
->dw_fde_begin
,
2091 "FDE address range");
2095 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, fde
->dw_fde_begin
,
2096 "FDE initial location");
2097 dw2_asm_output_delta (DWARF2_ADDR_SIZE
,
2098 fde
->dw_fde_end
, fde
->dw_fde_begin
,
2099 "FDE address range");
2102 if (augmentation
[0])
2104 if (any_lsda_needed
)
2106 int size
= size_of_encoded_value (lsda_encoding
);
2108 if (lsda_encoding
== DW_EH_PE_aligned
)
2110 int offset
= ( 4 /* Length */
2111 + 4 /* CIE offset */
2112 + 2 * size_of_encoded_value (fde_encoding
)
2113 + 1 /* Augmentation size */ );
2114 int pad
= -offset
& (PTR_SIZE
- 1);
2117 if (size_of_uleb128 (size
) != 1)
2121 dw2_asm_output_data_uleb128 (size
, "Augmentation size");
2123 if (fde
->uses_eh_lsda
)
2125 ASM_GENERATE_INTERNAL_LABEL (l1
, "LLSDA",
2126 fde
->funcdef_number
);
2127 dw2_asm_output_encoded_addr_rtx (
2128 lsda_encoding
, gen_rtx_SYMBOL_REF (Pmode
, l1
),
2129 "Language Specific Data Area");
2133 if (lsda_encoding
== DW_EH_PE_aligned
)
2134 ASM_OUTPUT_ALIGN (asm_out_file
, floor_log2 (PTR_SIZE
));
2136 (size_of_encoded_value (lsda_encoding
), 0,
2137 "Language Specific Data Area (none)");
2141 dw2_asm_output_data_uleb128 (0, "Augmentation size");
2144 /* Loop through the Call Frame Instructions associated with
2146 fde
->dw_fde_current_label
= fde
->dw_fde_begin
;
2147 for (cfi
= fde
->dw_fde_cfi
; cfi
!= NULL
; cfi
= cfi
->dw_cfi_next
)
2148 output_cfi (cfi
, fde
, for_eh
);
2150 /* Pad the FDE out to an address sized boundary. */
2151 ASM_OUTPUT_ALIGN (asm_out_file
,
2152 floor_log2 ((for_eh
? PTR_SIZE
: DWARF2_ADDR_SIZE
)));
2153 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
2156 if (for_eh
&& targetm
.terminate_dw2_eh_frame_info
)
2157 dw2_asm_output_data (4, 0, "End of Table");
2158 #ifdef MIPS_DEBUGGING_INFO
2159 /* Work around Irix 6 assembler bug whereby labels at the end of a section
2160 get a value of 0. Putting .align 0 after the label fixes it. */
2161 ASM_OUTPUT_ALIGN (asm_out_file
, 0);
2164 /* Turn off app to make assembly quicker. */
2169 /* Output a marker (i.e. a label) for the beginning of a function, before
2173 dwarf2out_begin_prologue (line
, file
)
2174 unsigned int line ATTRIBUTE_UNUSED
;
2175 const char *file ATTRIBUTE_UNUSED
;
2177 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
2180 current_function_func_begin_label
= 0;
2182 #ifdef IA64_UNWIND_INFO
2183 /* ??? current_function_func_begin_label is also used by except.c
2184 for call-site information. We must emit this label if it might
2186 if ((! flag_exceptions
|| USING_SJLJ_EXCEPTIONS
)
2187 && ! dwarf2out_do_frame ())
2190 if (! dwarf2out_do_frame ())
2194 function_section (current_function_decl
);
2195 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_BEGIN_LABEL
,
2196 current_function_funcdef_no
);
2197 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, FUNC_BEGIN_LABEL
,
2198 current_function_funcdef_no
);
2199 current_function_func_begin_label
= get_identifier (label
);
2201 #ifdef IA64_UNWIND_INFO
2202 /* We can elide the fde allocation if we're not emitting debug info. */
2203 if (! dwarf2out_do_frame ())
2207 /* Expand the fde table if necessary. */
2208 if (fde_table_in_use
== fde_table_allocated
)
2210 fde_table_allocated
+= FDE_TABLE_INCREMENT
;
2211 fde_table
= ggc_realloc (fde_table
,
2212 fde_table_allocated
* sizeof (dw_fde_node
));
2213 memset (fde_table
+ fde_table_in_use
, 0,
2214 FDE_TABLE_INCREMENT
* sizeof (dw_fde_node
));
2217 /* Record the FDE associated with this function. */
2218 current_funcdef_fde
= fde_table_in_use
;
2220 /* Add the new FDE at the end of the fde_table. */
2221 fde
= &fde_table
[fde_table_in_use
++];
2222 fde
->dw_fde_begin
= xstrdup (label
);
2223 fde
->dw_fde_current_label
= NULL
;
2224 fde
->dw_fde_end
= NULL
;
2225 fde
->dw_fde_cfi
= NULL
;
2226 fde
->funcdef_number
= current_function_funcdef_no
;
2227 fde
->nothrow
= current_function_nothrow
;
2228 fde
->uses_eh_lsda
= cfun
->uses_eh_lsda
;
2229 fde
->all_throwers_are_sibcalls
= cfun
->all_throwers_are_sibcalls
;
2231 args_size
= old_args_size
= 0;
2233 /* We only want to output line number information for the genuine dwarf2
2234 prologue case, not the eh frame case. */
2235 #ifdef DWARF2_DEBUGGING_INFO
2237 dwarf2out_source_line (line
, file
);
2241 /* Output a marker (i.e. a label) for the absolute end of the generated code
2242 for a function definition. This gets called *after* the epilogue code has
2246 dwarf2out_end_epilogue (line
, file
)
2247 unsigned int line ATTRIBUTE_UNUSED
;
2248 const char *file ATTRIBUTE_UNUSED
;
2251 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
2253 /* Output a label to mark the endpoint of the code generated for this
2255 ASM_GENERATE_INTERNAL_LABEL (label
, FUNC_END_LABEL
,
2256 current_function_funcdef_no
);
2257 ASM_OUTPUT_LABEL (asm_out_file
, label
);
2258 fde
= &fde_table
[fde_table_in_use
- 1];
2259 fde
->dw_fde_end
= xstrdup (label
);
2263 dwarf2out_frame_init ()
2265 /* Allocate the initial hunk of the fde_table. */
2266 fde_table
= (dw_fde_ref
) ggc_alloc_cleared (FDE_TABLE_INCREMENT
2267 * sizeof (dw_fde_node
));
2268 fde_table_allocated
= FDE_TABLE_INCREMENT
;
2269 fde_table_in_use
= 0;
2271 /* Generate the CFA instructions common to all FDE's. Do it now for the
2272 sake of lookup_cfa. */
2274 #ifdef DWARF2_UNWIND_INFO
2275 /* On entry, the Canonical Frame Address is at SP. */
2276 dwarf2out_def_cfa (NULL
, STACK_POINTER_REGNUM
, INCOMING_FRAME_SP_OFFSET
);
2277 initial_return_save (INCOMING_RETURN_ADDR_RTX
);
2282 dwarf2out_frame_finish ()
2284 /* Output call frame information. */
2285 if (write_symbols
== DWARF2_DEBUG
|| write_symbols
== VMS_AND_DWARF2_DEBUG
)
2286 output_call_frame_info (0);
2288 if (! USING_SJLJ_EXCEPTIONS
&& (flag_unwind_tables
|| flag_exceptions
))
2289 output_call_frame_info (1);
2293 /* And now, the subset of the debugging information support code necessary
2294 for emitting location expressions. */
2296 /* We need some way to distinguish DW_OP_addr with a direct symbol
2297 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
2298 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
2301 typedef struct dw_val_struct
*dw_val_ref
;
2302 typedef struct die_struct
*dw_die_ref
;
2303 typedef struct dw_loc_descr_struct
*dw_loc_descr_ref
;
2304 typedef struct dw_loc_list_struct
*dw_loc_list_ref
;
2306 /* Each DIE may have a series of attribute/value pairs. Values
2307 can take on several forms. The forms that are used in this
2308 implementation are listed below. */
2313 dw_val_class_offset
,
2315 dw_val_class_loc_list
,
2316 dw_val_class_range_list
,
2318 dw_val_class_unsigned_const
,
2319 dw_val_class_long_long
,
2322 dw_val_class_die_ref
,
2323 dw_val_class_fde_ref
,
2324 dw_val_class_lbl_id
,
2325 dw_val_class_lbl_offset
,
2329 /* Describe a double word constant value. */
2330 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2332 typedef struct dw_long_long_struct
GTY(())
2339 /* Describe a floating point constant value. */
2341 typedef struct dw_fp_struct
GTY(())
2343 long * GTY((length ("%h.length"))) array
;
2348 /* The dw_val_node describes an attribute's value, as it is
2349 represented internally. */
2351 typedef struct dw_val_struct
GTY(())
2353 enum dw_val_class val_class
;
2354 union dw_val_struct_union
2356 rtx
GTY ((tag ("dw_val_class_addr"))) val_addr
;
2357 long unsigned GTY ((tag ("dw_val_class_offset"))) val_offset
;
2358 dw_loc_list_ref
GTY ((tag ("dw_val_class_loc_list"))) val_loc_list
;
2359 dw_loc_descr_ref
GTY ((tag ("dw_val_class_loc"))) val_loc
;
2360 long int GTY ((default (""))) val_int
;
2361 long unsigned GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned
;
2362 dw_long_long_const
GTY ((tag ("dw_val_class_long_long"))) val_long_long
;
2363 dw_float_const
GTY ((tag ("dw_val_class_float"))) val_float
;
2364 struct dw_val_die_union
2368 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref
;
2369 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index
;
2370 struct indirect_string_node
* GTY ((tag ("dw_val_class_str"))) val_str
;
2371 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id
;
2372 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag
;
2374 GTY ((desc ("%1.val_class"))) v
;
2378 /* Locations in memory are described using a sequence of stack machine
2381 typedef struct dw_loc_descr_struct
GTY(())
2383 dw_loc_descr_ref dw_loc_next
;
2384 enum dwarf_location_atom dw_loc_opc
;
2385 dw_val_node dw_loc_oprnd1
;
2386 dw_val_node dw_loc_oprnd2
;
2391 /* Location lists are ranges + location descriptions for that range,
2392 so you can track variables that are in different places over
2393 their entire life. */
2394 typedef struct dw_loc_list_struct
GTY(())
2396 dw_loc_list_ref dw_loc_next
;
2397 const char *begin
; /* Label for begin address of range */
2398 const char *end
; /* Label for end address of range */
2399 char *ll_symbol
; /* Label for beginning of location list.
2400 Only on head of list */
2401 const char *section
; /* Section this loclist is relative to */
2402 dw_loc_descr_ref expr
;
2405 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2407 static const char *dwarf_stack_op_name
PARAMS ((unsigned));
2408 static dw_loc_descr_ref new_loc_descr
PARAMS ((enum dwarf_location_atom
,
2411 static void add_loc_descr
PARAMS ((dw_loc_descr_ref
*,
2413 static unsigned long size_of_loc_descr
PARAMS ((dw_loc_descr_ref
));
2414 static unsigned long size_of_locs
PARAMS ((dw_loc_descr_ref
));
2415 static void output_loc_operands
PARAMS ((dw_loc_descr_ref
));
2416 static void output_loc_sequence
PARAMS ((dw_loc_descr_ref
));
2418 /* Convert a DWARF stack opcode into its string name. */
2421 dwarf_stack_op_name (op
)
2427 case INTERNAL_DW_OP_tls_addr
:
2428 return "DW_OP_addr";
2430 return "DW_OP_deref";
2432 return "DW_OP_const1u";
2434 return "DW_OP_const1s";
2436 return "DW_OP_const2u";
2438 return "DW_OP_const2s";
2440 return "DW_OP_const4u";
2442 return "DW_OP_const4s";
2444 return "DW_OP_const8u";
2446 return "DW_OP_const8s";
2448 return "DW_OP_constu";
2450 return "DW_OP_consts";
2454 return "DW_OP_drop";
2456 return "DW_OP_over";
2458 return "DW_OP_pick";
2460 return "DW_OP_swap";
2464 return "DW_OP_xderef";
2472 return "DW_OP_minus";
2484 return "DW_OP_plus";
2485 case DW_OP_plus_uconst
:
2486 return "DW_OP_plus_uconst";
2492 return "DW_OP_shra";
2510 return "DW_OP_skip";
2512 return "DW_OP_lit0";
2514 return "DW_OP_lit1";
2516 return "DW_OP_lit2";
2518 return "DW_OP_lit3";
2520 return "DW_OP_lit4";
2522 return "DW_OP_lit5";
2524 return "DW_OP_lit6";
2526 return "DW_OP_lit7";
2528 return "DW_OP_lit8";
2530 return "DW_OP_lit9";
2532 return "DW_OP_lit10";
2534 return "DW_OP_lit11";
2536 return "DW_OP_lit12";
2538 return "DW_OP_lit13";
2540 return "DW_OP_lit14";
2542 return "DW_OP_lit15";
2544 return "DW_OP_lit16";
2546 return "DW_OP_lit17";
2548 return "DW_OP_lit18";
2550 return "DW_OP_lit19";
2552 return "DW_OP_lit20";
2554 return "DW_OP_lit21";
2556 return "DW_OP_lit22";
2558 return "DW_OP_lit23";
2560 return "DW_OP_lit24";
2562 return "DW_OP_lit25";
2564 return "DW_OP_lit26";
2566 return "DW_OP_lit27";
2568 return "DW_OP_lit28";
2570 return "DW_OP_lit29";
2572 return "DW_OP_lit30";
2574 return "DW_OP_lit31";
2576 return "DW_OP_reg0";
2578 return "DW_OP_reg1";
2580 return "DW_OP_reg2";
2582 return "DW_OP_reg3";
2584 return "DW_OP_reg4";
2586 return "DW_OP_reg5";
2588 return "DW_OP_reg6";
2590 return "DW_OP_reg7";
2592 return "DW_OP_reg8";
2594 return "DW_OP_reg9";
2596 return "DW_OP_reg10";
2598 return "DW_OP_reg11";
2600 return "DW_OP_reg12";
2602 return "DW_OP_reg13";
2604 return "DW_OP_reg14";
2606 return "DW_OP_reg15";
2608 return "DW_OP_reg16";
2610 return "DW_OP_reg17";
2612 return "DW_OP_reg18";
2614 return "DW_OP_reg19";
2616 return "DW_OP_reg20";
2618 return "DW_OP_reg21";
2620 return "DW_OP_reg22";
2622 return "DW_OP_reg23";
2624 return "DW_OP_reg24";
2626 return "DW_OP_reg25";
2628 return "DW_OP_reg26";
2630 return "DW_OP_reg27";
2632 return "DW_OP_reg28";
2634 return "DW_OP_reg29";
2636 return "DW_OP_reg30";
2638 return "DW_OP_reg31";
2640 return "DW_OP_breg0";
2642 return "DW_OP_breg1";
2644 return "DW_OP_breg2";
2646 return "DW_OP_breg3";
2648 return "DW_OP_breg4";
2650 return "DW_OP_breg5";
2652 return "DW_OP_breg6";
2654 return "DW_OP_breg7";
2656 return "DW_OP_breg8";
2658 return "DW_OP_breg9";
2660 return "DW_OP_breg10";
2662 return "DW_OP_breg11";
2664 return "DW_OP_breg12";
2666 return "DW_OP_breg13";
2668 return "DW_OP_breg14";
2670 return "DW_OP_breg15";
2672 return "DW_OP_breg16";
2674 return "DW_OP_breg17";
2676 return "DW_OP_breg18";
2678 return "DW_OP_breg19";
2680 return "DW_OP_breg20";
2682 return "DW_OP_breg21";
2684 return "DW_OP_breg22";
2686 return "DW_OP_breg23";
2688 return "DW_OP_breg24";
2690 return "DW_OP_breg25";
2692 return "DW_OP_breg26";
2694 return "DW_OP_breg27";
2696 return "DW_OP_breg28";
2698 return "DW_OP_breg29";
2700 return "DW_OP_breg30";
2702 return "DW_OP_breg31";
2704 return "DW_OP_regx";
2706 return "DW_OP_fbreg";
2708 return "DW_OP_bregx";
2710 return "DW_OP_piece";
2711 case DW_OP_deref_size
:
2712 return "DW_OP_deref_size";
2713 case DW_OP_xderef_size
:
2714 return "DW_OP_xderef_size";
2717 case DW_OP_push_object_address
:
2718 return "DW_OP_push_object_address";
2720 return "DW_OP_call2";
2722 return "DW_OP_call4";
2723 case DW_OP_call_ref
:
2724 return "DW_OP_call_ref";
2725 case DW_OP_GNU_push_tls_address
:
2726 return "DW_OP_GNU_push_tls_address";
2728 return "OP_<unknown>";
2732 /* Return a pointer to a newly allocated location description. Location
2733 descriptions are simple expression terms that can be strung
2734 together to form more complicated location (address) descriptions. */
2736 static inline dw_loc_descr_ref
2737 new_loc_descr (op
, oprnd1
, oprnd2
)
2738 enum dwarf_location_atom op
;
2739 unsigned long oprnd1
;
2740 unsigned long oprnd2
;
2742 dw_loc_descr_ref descr
2743 = (dw_loc_descr_ref
) ggc_alloc_cleared (sizeof (dw_loc_descr_node
));
2745 descr
->dw_loc_opc
= op
;
2746 descr
->dw_loc_oprnd1
.val_class
= dw_val_class_unsigned_const
;
2747 descr
->dw_loc_oprnd1
.v
.val_unsigned
= oprnd1
;
2748 descr
->dw_loc_oprnd2
.val_class
= dw_val_class_unsigned_const
;
2749 descr
->dw_loc_oprnd2
.v
.val_unsigned
= oprnd2
;
2755 /* Add a location description term to a location description expression. */
2758 add_loc_descr (list_head
, descr
)
2759 dw_loc_descr_ref
*list_head
;
2760 dw_loc_descr_ref descr
;
2762 dw_loc_descr_ref
*d
;
2764 /* Find the end of the chain. */
2765 for (d
= list_head
; (*d
) != NULL
; d
= &(*d
)->dw_loc_next
)
2771 /* Return the size of a location descriptor. */
2773 static unsigned long
2774 size_of_loc_descr (loc
)
2775 dw_loc_descr_ref loc
;
2777 unsigned long size
= 1;
2779 switch (loc
->dw_loc_opc
)
2782 case INTERNAL_DW_OP_tls_addr
:
2783 size
+= DWARF2_ADDR_SIZE
;
2802 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
2805 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
2810 case DW_OP_plus_uconst
:
2811 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
2849 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
2852 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
2855 size
+= size_of_sleb128 (loc
->dw_loc_oprnd1
.v
.val_int
);
2858 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
2859 size
+= size_of_sleb128 (loc
->dw_loc_oprnd2
.v
.val_int
);
2862 size
+= size_of_uleb128 (loc
->dw_loc_oprnd1
.v
.val_unsigned
);
2864 case DW_OP_deref_size
:
2865 case DW_OP_xderef_size
:
2874 case DW_OP_call_ref
:
2875 size
+= DWARF2_ADDR_SIZE
;
2884 /* Return the size of a series of location descriptors. */
2886 static unsigned long
2888 dw_loc_descr_ref loc
;
2892 for (size
= 0; loc
!= NULL
; loc
= loc
->dw_loc_next
)
2894 loc
->dw_loc_addr
= size
;
2895 size
+= size_of_loc_descr (loc
);
2901 /* Output location description stack opcode's operands (if any). */
2904 output_loc_operands (loc
)
2905 dw_loc_descr_ref loc
;
2907 dw_val_ref val1
= &loc
->dw_loc_oprnd1
;
2908 dw_val_ref val2
= &loc
->dw_loc_oprnd2
;
2910 switch (loc
->dw_loc_opc
)
2912 #ifdef DWARF2_DEBUGGING_INFO
2914 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, val1
->v
.val_addr
, NULL
);
2918 dw2_asm_output_data (2, val1
->v
.val_int
, NULL
);
2922 dw2_asm_output_data (4, val1
->v
.val_int
, NULL
);
2926 if (HOST_BITS_PER_LONG
< 64)
2928 dw2_asm_output_data (8, val1
->v
.val_int
, NULL
);
2935 if (val1
->val_class
== dw_val_class_loc
)
2936 offset
= val1
->v
.val_loc
->dw_loc_addr
- (loc
->dw_loc_addr
+ 3);
2940 dw2_asm_output_data (2, offset
, NULL
);
2953 /* We currently don't make any attempt to make sure these are
2954 aligned properly like we do for the main unwind info, so
2955 don't support emitting things larger than a byte if we're
2956 only doing unwinding. */
2961 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
2964 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
2967 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
2970 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
2972 case DW_OP_plus_uconst
:
2973 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
3007 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
3010 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
3013 dw2_asm_output_data_sleb128 (val1
->v
.val_int
, NULL
);
3016 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
3017 dw2_asm_output_data_sleb128 (val2
->v
.val_int
, NULL
);
3020 dw2_asm_output_data_uleb128 (val1
->v
.val_unsigned
, NULL
);
3022 case DW_OP_deref_size
:
3023 case DW_OP_xderef_size
:
3024 dw2_asm_output_data (1, val1
->v
.val_int
, NULL
);
3027 case INTERNAL_DW_OP_tls_addr
:
3028 #ifdef ASM_OUTPUT_DWARF_DTPREL
3029 ASM_OUTPUT_DWARF_DTPREL (asm_out_file
, DWARF2_ADDR_SIZE
,
3031 fputc ('\n', asm_out_file
);
3038 /* Other codes have no operands. */
3043 /* Output a sequence of location operations. */
3046 output_loc_sequence (loc
)
3047 dw_loc_descr_ref loc
;
3049 for (; loc
!= NULL
; loc
= loc
->dw_loc_next
)
3051 /* Output the opcode. */
3052 dw2_asm_output_data (1, loc
->dw_loc_opc
,
3053 "%s", dwarf_stack_op_name (loc
->dw_loc_opc
));
3055 /* Output the operand(s) (if any). */
3056 output_loc_operands (loc
);
3060 /* This routine will generate the correct assembly data for a location
3061 description based on a cfi entry with a complex address. */
3064 output_cfa_loc (cfi
)
3067 dw_loc_descr_ref loc
;
3070 /* Output the size of the block. */
3071 loc
= cfi
->dw_cfi_oprnd1
.dw_cfi_loc
;
3072 size
= size_of_locs (loc
);
3073 dw2_asm_output_data_uleb128 (size
, NULL
);
3075 /* Now output the operations themselves. */
3076 output_loc_sequence (loc
);
3079 /* This function builds a dwarf location descriptor sequence from
3080 a dw_cfa_location. */
3082 static struct dw_loc_descr_struct
*
3084 dw_cfa_location
*cfa
;
3086 struct dw_loc_descr_struct
*head
, *tmp
;
3088 if (cfa
->indirect
== 0)
3091 if (cfa
->base_offset
)
3094 head
= new_loc_descr (DW_OP_breg0
+ cfa
->reg
, cfa
->base_offset
, 0);
3096 head
= new_loc_descr (DW_OP_bregx
, cfa
->reg
, cfa
->base_offset
);
3098 else if (cfa
->reg
<= 31)
3099 head
= new_loc_descr (DW_OP_reg0
+ cfa
->reg
, 0, 0);
3101 head
= new_loc_descr (DW_OP_regx
, cfa
->reg
, 0);
3103 head
->dw_loc_oprnd1
.val_class
= dw_val_class_const
;
3104 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
3105 add_loc_descr (&head
, tmp
);
3106 if (cfa
->offset
!= 0)
3108 tmp
= new_loc_descr (DW_OP_plus_uconst
, cfa
->offset
, 0);
3109 add_loc_descr (&head
, tmp
);
3115 /* This function fills in aa dw_cfa_location structure from a dwarf location
3116 descriptor sequence. */
3119 get_cfa_from_loc_descr (cfa
, loc
)
3120 dw_cfa_location
*cfa
;
3121 struct dw_loc_descr_struct
*loc
;
3123 struct dw_loc_descr_struct
*ptr
;
3125 cfa
->base_offset
= 0;
3129 for (ptr
= loc
; ptr
!= NULL
; ptr
= ptr
->dw_loc_next
)
3131 enum dwarf_location_atom op
= ptr
->dw_loc_opc
;
3167 cfa
->reg
= op
- DW_OP_reg0
;
3170 cfa
->reg
= ptr
->dw_loc_oprnd1
.v
.val_int
;
3204 cfa
->reg
= op
- DW_OP_breg0
;
3205 cfa
->base_offset
= ptr
->dw_loc_oprnd1
.v
.val_int
;
3208 cfa
->reg
= ptr
->dw_loc_oprnd1
.v
.val_int
;
3209 cfa
->base_offset
= ptr
->dw_loc_oprnd2
.v
.val_int
;
3214 case DW_OP_plus_uconst
:
3215 cfa
->offset
= ptr
->dw_loc_oprnd1
.v
.val_unsigned
;
3218 internal_error ("DW_LOC_OP %s not implemented\n",
3219 dwarf_stack_op_name (ptr
->dw_loc_opc
));
3223 #endif /* .debug_frame support */
3225 /* And now, the support for symbolic debugging information. */
3226 #ifdef DWARF2_DEBUGGING_INFO
3228 /* .debug_str support. */
3229 static int output_indirect_string
PARAMS ((void **, void *));
3231 static void dwarf2out_init
PARAMS ((const char *));
3232 static void dwarf2out_finish
PARAMS ((const char *));
3233 static void dwarf2out_define
PARAMS ((unsigned int, const char *));
3234 static void dwarf2out_undef
PARAMS ((unsigned int, const char *));
3235 static void dwarf2out_start_source_file
PARAMS ((unsigned, const char *));
3236 static void dwarf2out_end_source_file
PARAMS ((unsigned));
3237 static void dwarf2out_begin_block
PARAMS ((unsigned, unsigned));
3238 static void dwarf2out_end_block
PARAMS ((unsigned, unsigned));
3239 static bool dwarf2out_ignore_block
PARAMS ((tree
));
3240 static void dwarf2out_global_decl
PARAMS ((tree
));
3241 static void dwarf2out_abstract_function
PARAMS ((tree
));
3243 /* The debug hooks structure. */
3245 const struct gcc_debug_hooks dwarf2_debug_hooks
=
3251 dwarf2out_start_source_file
,
3252 dwarf2out_end_source_file
,
3253 dwarf2out_begin_block
,
3254 dwarf2out_end_block
,
3255 dwarf2out_ignore_block
,
3256 dwarf2out_source_line
,
3257 dwarf2out_begin_prologue
,
3258 debug_nothing_int_charstar
, /* end_prologue */
3259 dwarf2out_end_epilogue
,
3260 debug_nothing_tree
, /* begin_function */
3261 debug_nothing_int
, /* end_function */
3262 dwarf2out_decl
, /* function_decl */
3263 dwarf2out_global_decl
,
3264 debug_nothing_tree
, /* deferred_inline_function */
3265 /* The DWARF 2 backend tries to reduce debugging bloat by not
3266 emitting the abstract description of inline functions until
3267 something tries to reference them. */
3268 dwarf2out_abstract_function
, /* outlining_inline_function */
3269 debug_nothing_rtx
/* label */
3273 /* NOTE: In the comments in this file, many references are made to
3274 "Debugging Information Entries". This term is abbreviated as `DIE'
3275 throughout the remainder of this file. */
3277 /* An internal representation of the DWARF output is built, and then
3278 walked to generate the DWARF debugging info. The walk of the internal
3279 representation is done after the entire program has been compiled.
3280 The types below are used to describe the internal representation. */
3282 /* Various DIE's use offsets relative to the beginning of the
3283 .debug_info section to refer to each other. */
3285 typedef long int dw_offset
;
3287 /* Define typedefs here to avoid circular dependencies. */
3289 typedef struct dw_attr_struct
*dw_attr_ref
;
3290 typedef struct dw_line_info_struct
*dw_line_info_ref
;
3291 typedef struct dw_separate_line_info_struct
*dw_separate_line_info_ref
;
3292 typedef struct pubname_struct
*pubname_ref
;
3293 typedef struct dw_ranges_struct
*dw_ranges_ref
;
3295 /* Each entry in the line_info_table maintains the file and
3296 line number associated with the label generated for that
3297 entry. The label gives the PC value associated with
3298 the line number entry. */
3300 typedef struct dw_line_info_struct
GTY(())
3302 unsigned long dw_file_num
;
3303 unsigned long dw_line_num
;
3307 /* Line information for functions in separate sections; each one gets its
3309 typedef struct dw_separate_line_info_struct
GTY(())
3311 unsigned long dw_file_num
;
3312 unsigned long dw_line_num
;
3313 unsigned long function
;
3315 dw_separate_line_info_entry
;
3317 /* Each DIE attribute has a field specifying the attribute kind,
3318 a link to the next attribute in the chain, and an attribute value.
3319 Attributes are typically linked below the DIE they modify. */
3321 typedef struct dw_attr_struct
GTY(())
3323 enum dwarf_attribute dw_attr
;
3324 dw_attr_ref dw_attr_next
;
3325 dw_val_node dw_attr_val
;
3329 /* The Debugging Information Entry (DIE) structure */
3331 typedef struct die_struct
GTY(())
3333 enum dwarf_tag die_tag
;
3335 dw_attr_ref die_attr
;
3336 dw_die_ref die_parent
;
3337 dw_die_ref die_child
;
3339 dw_offset die_offset
;
3340 unsigned long die_abbrev
;
3345 /* The pubname structure */
3347 typedef struct pubname_struct
GTY(())
3354 struct dw_ranges_struct
GTY(())
3359 /* The limbo die list structure. */
3360 typedef struct limbo_die_struct
GTY(())
3364 struct limbo_die_struct
*next
;
3368 /* How to start an assembler comment. */
3369 #ifndef ASM_COMMENT_START
3370 #define ASM_COMMENT_START ";#"
3373 /* Define a macro which returns nonzero for a TYPE_DECL which was
3374 implicitly generated for a tagged type.
3376 Note that unlike the gcc front end (which generates a NULL named
3377 TYPE_DECL node for each complete tagged type, each array type, and
3378 each function type node created) the g++ front end generates a
3379 _named_ TYPE_DECL node for each tagged type node created.
3380 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3381 generate a DW_TAG_typedef DIE for them. */
3383 #define TYPE_DECL_IS_STUB(decl) \
3384 (DECL_NAME (decl) == NULL_TREE \
3385 || (DECL_ARTIFICIAL (decl) \
3386 && is_tagged_type (TREE_TYPE (decl)) \
3387 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3388 /* This is necessary for stub decls that \
3389 appear in nested inline functions. */ \
3390 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3391 && (decl_ultimate_origin (decl) \
3392 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3394 /* Information concerning the compilation unit's programming
3395 language, and compiler version. */
3397 /* Fixed size portion of the DWARF compilation unit header. */
3398 #define DWARF_COMPILE_UNIT_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 3)
3400 /* Fixed size portion of public names info. */
3401 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3403 /* Fixed size portion of the address range info. */
3404 #define DWARF_ARANGES_HEADER_SIZE \
3405 (DWARF_ROUND (2 * DWARF_OFFSET_SIZE + 4, DWARF2_ADDR_SIZE * 2) \
3406 - DWARF_OFFSET_SIZE)
3408 /* Size of padding portion in the address range info. It must be
3409 aligned to twice the pointer size. */
3410 #define DWARF_ARANGES_PAD_SIZE \
3411 (DWARF_ROUND (2 * DWARF_OFFSET_SIZE + 4, DWARF2_ADDR_SIZE * 2) \
3412 - (2 * DWARF_OFFSET_SIZE + 4))
3414 /* Use assembler line directives if available. */
3415 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3416 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3417 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3419 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3423 /* Minimum line offset in a special line info. opcode.
3424 This value was chosen to give a reasonable range of values. */
3425 #define DWARF_LINE_BASE -10
3427 /* First special line opcode - leave room for the standard opcodes. */
3428 #define DWARF_LINE_OPCODE_BASE 10
3430 /* Range of line offsets in a special line info. opcode. */
3431 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3433 /* Flag that indicates the initial value of the is_stmt_start flag.
3434 In the present implementation, we do not mark any lines as
3435 the beginning of a source statement, because that information
3436 is not made available by the GCC front-end. */
3437 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3439 /* This location is used by calc_die_sizes() to keep track
3440 the offset of each DIE within the .debug_info section. */
3441 static unsigned long next_die_offset
;
3443 /* Record the root of the DIE's built for the current compilation unit. */
3444 static GTY(()) dw_die_ref comp_unit_die
;
3446 /* We need special handling in dwarf2out_start_source_file if it is
3448 static int is_main_source
;
3450 /* A list of DIEs with a NULL parent waiting to be relocated. */
3451 static GTY(()) limbo_die_node
*limbo_die_list
;
3453 /* Structure used by lookup_filename to manage sets of filenames. */
3459 unsigned last_lookup_index
;
3462 /* Size (in elements) of increments by which we may expand the filename
3464 #define FILE_TABLE_INCREMENT 64
3466 /* Filenames referenced by this compilation unit. */
3467 static struct file_table file_table
;
3469 /* A pointer to the base of a table of references to DIE's that describe
3470 declarations. The table is indexed by DECL_UID() which is a unique
3471 number identifying each decl. */
3472 static GTY((length ("decl_die_table_allocated"))) dw_die_ref
*decl_die_table
;
3474 /* Number of elements currently allocated for the decl_die_table. */
3475 static unsigned decl_die_table_allocated
;
3477 /* Number of elements in decl_die_table currently in use. */
3478 static unsigned decl_die_table_in_use
;
3480 /* Size (in elements) of increments by which we may expand the
3482 #define DECL_DIE_TABLE_INCREMENT 256
3484 /* A pointer to the base of a list of references to DIE's that
3485 are uniquely identified by their tag, presence/absence of
3486 children DIE's, and list of attribute/value pairs. */
3487 static GTY((length ("abbrev_die_table_allocated")))
3488 dw_die_ref
*abbrev_die_table
;
3490 /* Number of elements currently allocated for abbrev_die_table. */
3491 static unsigned abbrev_die_table_allocated
;
3493 /* Number of elements in type_die_table currently in use. */
3494 static unsigned abbrev_die_table_in_use
;
3496 /* Size (in elements) of increments by which we may expand the
3497 abbrev_die_table. */
3498 #define ABBREV_DIE_TABLE_INCREMENT 256
3500 /* A pointer to the base of a table that contains line information
3501 for each source code line in .text in the compilation unit. */
3502 static GTY((length ("line_info_table_allocated")))
3503 dw_line_info_ref line_info_table
;
3505 /* Number of elements currently allocated for line_info_table. */
3506 static unsigned line_info_table_allocated
;
3508 /* Number of elements in line_info_table currently in use. */
3509 static unsigned line_info_table_in_use
;
3511 /* A pointer to the base of a table that contains line information
3512 for each source code line outside of .text in the compilation unit. */
3513 static GTY ((length ("separate_line_info_table_allocated")))
3514 dw_separate_line_info_ref separate_line_info_table
;
3516 /* Number of elements currently allocated for separate_line_info_table. */
3517 static unsigned separate_line_info_table_allocated
;
3519 /* Number of elements in separate_line_info_table currently in use. */
3520 static unsigned separate_line_info_table_in_use
;
3522 /* Size (in elements) of increments by which we may expand the
3524 #define LINE_INFO_TABLE_INCREMENT 1024
3526 /* A pointer to the base of a table that contains a list of publicly
3527 accessible names. */
3528 static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table
;
3530 /* Number of elements currently allocated for pubname_table. */
3531 static unsigned pubname_table_allocated
;
3533 /* Number of elements in pubname_table currently in use. */
3534 static unsigned pubname_table_in_use
;
3536 /* Size (in elements) of increments by which we may expand the
3538 #define PUBNAME_TABLE_INCREMENT 64
3540 /* Array of dies for which we should generate .debug_arange info. */
3541 static GTY((length ("arange_table_allocated"))) dw_die_ref
*arange_table
;
3543 /* Number of elements currently allocated for arange_table. */
3544 static unsigned arange_table_allocated
;
3546 /* Number of elements in arange_table currently in use. */
3547 static unsigned arange_table_in_use
;
3549 /* Size (in elements) of increments by which we may expand the
3551 #define ARANGE_TABLE_INCREMENT 64
3553 /* Array of dies for which we should generate .debug_ranges info. */
3554 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table
;
3556 /* Number of elements currently allocated for ranges_table. */
3557 static unsigned ranges_table_allocated
;
3559 /* Number of elements in ranges_table currently in use. */
3560 static unsigned ranges_table_in_use
;
3562 /* Size (in elements) of increments by which we may expand the
3564 #define RANGES_TABLE_INCREMENT 64
3566 /* Whether we have location lists that need outputting */
3567 static unsigned have_location_lists
;
3569 /* Record whether the function being analyzed contains inlined functions. */
3570 static int current_function_has_inlines
;
3571 #if 0 && defined (MIPS_DEBUGGING_INFO)
3572 static int comp_unit_has_inlines
;
3575 #ifdef DWARF2_DEBUGGING_INFO
3577 /* Forward declarations for functions defined in this file. */
3579 static int is_pseudo_reg
PARAMS ((rtx
));
3580 static tree type_main_variant
PARAMS ((tree
));
3581 static int is_tagged_type
PARAMS ((tree
));
3582 static const char *dwarf_tag_name
PARAMS ((unsigned));
3583 static const char *dwarf_attr_name
PARAMS ((unsigned));
3584 static const char *dwarf_form_name
PARAMS ((unsigned));
3586 static const char *dwarf_type_encoding_name
PARAMS ((unsigned));
3588 static tree decl_ultimate_origin
PARAMS ((tree
));
3589 static tree block_ultimate_origin
PARAMS ((tree
));
3590 static tree decl_class_context
PARAMS ((tree
));
3591 static void add_dwarf_attr
PARAMS ((dw_die_ref
, dw_attr_ref
));
3592 static inline enum dw_val_class AT_class
PARAMS ((dw_attr_ref
));
3593 static void add_AT_flag
PARAMS ((dw_die_ref
,
3594 enum dwarf_attribute
,
3596 static inline unsigned AT_flag
PARAMS ((dw_attr_ref
));
3597 static void add_AT_int
PARAMS ((dw_die_ref
,
3598 enum dwarf_attribute
, long));
3599 static inline long int AT_int
PARAMS ((dw_attr_ref
));
3600 static void add_AT_unsigned
PARAMS ((dw_die_ref
,
3601 enum dwarf_attribute
,
3603 static inline unsigned long AT_unsigned
PARAMS ((dw_attr_ref
));
3604 static void add_AT_long_long
PARAMS ((dw_die_ref
,
3605 enum dwarf_attribute
,
3608 static void add_AT_float
PARAMS ((dw_die_ref
,
3609 enum dwarf_attribute
,
3611 static hashval_t debug_str_do_hash
PARAMS ((const void *));
3612 static int debug_str_eq
PARAMS ((const void *, const void *));
3613 static void add_AT_string
PARAMS ((dw_die_ref
,
3614 enum dwarf_attribute
,
3616 static inline const char *AT_string
PARAMS ((dw_attr_ref
));
3617 static int AT_string_form
PARAMS ((dw_attr_ref
));
3618 static void add_AT_die_ref
PARAMS ((dw_die_ref
,
3619 enum dwarf_attribute
,
3621 static inline dw_die_ref AT_ref
PARAMS ((dw_attr_ref
));
3622 static inline int AT_ref_external
PARAMS ((dw_attr_ref
));
3623 static inline void set_AT_ref_external
PARAMS ((dw_attr_ref
, int));
3624 static void add_AT_fde_ref
PARAMS ((dw_die_ref
,
3625 enum dwarf_attribute
,
3627 static void add_AT_loc
PARAMS ((dw_die_ref
,
3628 enum dwarf_attribute
,
3630 static inline dw_loc_descr_ref AT_loc
PARAMS ((dw_attr_ref
));
3631 static void add_AT_loc_list
PARAMS ((dw_die_ref
,
3632 enum dwarf_attribute
,
3634 static inline dw_loc_list_ref AT_loc_list
PARAMS ((dw_attr_ref
));
3635 static void add_AT_addr
PARAMS ((dw_die_ref
,
3636 enum dwarf_attribute
,
3638 static inline rtx AT_addr
PARAMS ((dw_attr_ref
));
3639 static void add_AT_lbl_id
PARAMS ((dw_die_ref
,
3640 enum dwarf_attribute
,
3642 static void add_AT_lbl_offset
PARAMS ((dw_die_ref
,
3643 enum dwarf_attribute
,
3645 static void add_AT_offset
PARAMS ((dw_die_ref
,
3646 enum dwarf_attribute
,
3648 static void add_AT_range_list
PARAMS ((dw_die_ref
,
3649 enum dwarf_attribute
,
3651 static inline const char *AT_lbl
PARAMS ((dw_attr_ref
));
3652 static dw_attr_ref get_AT
PARAMS ((dw_die_ref
,
3653 enum dwarf_attribute
));
3654 static const char *get_AT_low_pc
PARAMS ((dw_die_ref
));
3655 static const char *get_AT_hi_pc
PARAMS ((dw_die_ref
));
3656 static const char *get_AT_string
PARAMS ((dw_die_ref
,
3657 enum dwarf_attribute
));
3658 static int get_AT_flag
PARAMS ((dw_die_ref
,
3659 enum dwarf_attribute
));
3660 static unsigned get_AT_unsigned
PARAMS ((dw_die_ref
,
3661 enum dwarf_attribute
));
3662 static inline dw_die_ref get_AT_ref
PARAMS ((dw_die_ref
,
3663 enum dwarf_attribute
));
3664 static int is_c_family
PARAMS ((void));
3665 static int is_cxx
PARAMS ((void));
3666 static int is_java
PARAMS ((void));
3667 static int is_fortran
PARAMS ((void));
3668 static void remove_AT
PARAMS ((dw_die_ref
,
3669 enum dwarf_attribute
));
3670 static inline void free_die
PARAMS ((dw_die_ref
));
3671 static void remove_children
PARAMS ((dw_die_ref
));
3672 static void add_child_die
PARAMS ((dw_die_ref
, dw_die_ref
));
3673 static dw_die_ref new_die
PARAMS ((enum dwarf_tag
, dw_die_ref
,
3675 static dw_die_ref lookup_type_die
PARAMS ((tree
));
3676 static void equate_type_number_to_die
PARAMS ((tree
, dw_die_ref
));
3677 static dw_die_ref lookup_decl_die
PARAMS ((tree
));
3678 static void equate_decl_number_to_die
PARAMS ((tree
, dw_die_ref
));
3679 static void print_spaces
PARAMS ((FILE *));
3680 static void print_die
PARAMS ((dw_die_ref
, FILE *));
3681 static void print_dwarf_line_table
PARAMS ((FILE *));
3682 static void reverse_die_lists
PARAMS ((dw_die_ref
));
3683 static void reverse_all_dies
PARAMS ((dw_die_ref
));
3684 static dw_die_ref push_new_compile_unit
PARAMS ((dw_die_ref
, dw_die_ref
));
3685 static dw_die_ref pop_compile_unit
PARAMS ((dw_die_ref
));
3686 static void loc_checksum
PARAMS ((dw_loc_descr_ref
,
3688 static void attr_checksum
PARAMS ((dw_attr_ref
,
3691 static void die_checksum
PARAMS ((dw_die_ref
,
3694 static int same_loc_p
PARAMS ((dw_loc_descr_ref
,
3695 dw_loc_descr_ref
, int *));
3696 static int same_dw_val_p
PARAMS ((dw_val_node
*, dw_val_node
*,
3698 static int same_attr_p
PARAMS ((dw_attr_ref
, dw_attr_ref
, int *));
3699 static int same_die_p
PARAMS ((dw_die_ref
, dw_die_ref
, int *));
3700 static int same_die_p_wrap
PARAMS ((dw_die_ref
, dw_die_ref
));
3701 static void compute_section_prefix
PARAMS ((dw_die_ref
));
3702 static int is_type_die
PARAMS ((dw_die_ref
));
3703 static int is_comdat_die
PARAMS ((dw_die_ref
));
3704 static int is_symbol_die
PARAMS ((dw_die_ref
));
3705 static void assign_symbol_names
PARAMS ((dw_die_ref
));
3706 static void break_out_includes
PARAMS ((dw_die_ref
));
3707 static hashval_t htab_cu_hash
PARAMS ((const void *));
3708 static int htab_cu_eq
PARAMS ((const void *, const void *));
3709 static void htab_cu_del
PARAMS ((void *));
3710 static int check_duplicate_cu
PARAMS ((dw_die_ref
, htab_t
, unsigned *));
3711 static void record_comdat_symbol_number
PARAMS ((dw_die_ref
, htab_t
, unsigned));
3712 static void add_sibling_attributes
PARAMS ((dw_die_ref
));
3713 static void build_abbrev_table
PARAMS ((dw_die_ref
));
3714 static void output_location_lists
PARAMS ((dw_die_ref
));
3715 static int constant_size
PARAMS ((long unsigned));
3716 static unsigned long size_of_die
PARAMS ((dw_die_ref
));
3717 static void calc_die_sizes
PARAMS ((dw_die_ref
));
3718 static void mark_dies
PARAMS ((dw_die_ref
));
3719 static void unmark_dies
PARAMS ((dw_die_ref
));
3720 static void unmark_all_dies
PARAMS ((dw_die_ref
));
3721 static unsigned long size_of_pubnames
PARAMS ((void));
3722 static unsigned long size_of_aranges
PARAMS ((void));
3723 static enum dwarf_form value_format
PARAMS ((dw_attr_ref
));
3724 static void output_value_format
PARAMS ((dw_attr_ref
));
3725 static void output_abbrev_section
PARAMS ((void));
3726 static void output_die_symbol
PARAMS ((dw_die_ref
));
3727 static void output_die
PARAMS ((dw_die_ref
));
3728 static void output_compilation_unit_header
PARAMS ((void));
3729 static void output_comp_unit
PARAMS ((dw_die_ref
, int));
3730 static const char *dwarf2_name
PARAMS ((tree
, int));
3731 static void add_pubname
PARAMS ((tree
, dw_die_ref
));
3732 static void output_pubnames
PARAMS ((void));
3733 static void add_arange
PARAMS ((tree
, dw_die_ref
));
3734 static void output_aranges
PARAMS ((void));
3735 static unsigned int add_ranges
PARAMS ((tree
));
3736 static void output_ranges
PARAMS ((void));
3737 static void output_line_info
PARAMS ((void));
3738 static void output_file_names
PARAMS ((void));
3739 static dw_die_ref base_type_die
PARAMS ((tree
));
3740 static tree root_type
PARAMS ((tree
));
3741 static int is_base_type
PARAMS ((tree
));
3742 static dw_die_ref modified_type_die
PARAMS ((tree
, int, int, dw_die_ref
));
3743 static int type_is_enum
PARAMS ((tree
));
3744 static unsigned int reg_number
PARAMS ((rtx
));
3745 static dw_loc_descr_ref reg_loc_descriptor
PARAMS ((rtx
));
3746 static dw_loc_descr_ref int_loc_descriptor
PARAMS ((HOST_WIDE_INT
));
3747 static dw_loc_descr_ref based_loc_descr
PARAMS ((unsigned, long));
3748 static int is_based_loc
PARAMS ((rtx
));
3749 static dw_loc_descr_ref mem_loc_descriptor
PARAMS ((rtx
, enum machine_mode mode
));
3750 static dw_loc_descr_ref concat_loc_descriptor
PARAMS ((rtx
, rtx
));
3751 static dw_loc_descr_ref loc_descriptor
PARAMS ((rtx
));
3752 static dw_loc_descr_ref loc_descriptor_from_tree
PARAMS ((tree
, int));
3753 static HOST_WIDE_INT ceiling
PARAMS ((HOST_WIDE_INT
, unsigned int));
3754 static tree field_type
PARAMS ((tree
));
3755 static unsigned int simple_type_align_in_bits
PARAMS ((tree
));
3756 static unsigned int simple_decl_align_in_bits
PARAMS ((tree
));
3757 static unsigned HOST_WIDE_INT simple_type_size_in_bits
PARAMS ((tree
));
3758 static HOST_WIDE_INT field_byte_offset
PARAMS ((tree
));
3759 static void add_AT_location_description
PARAMS ((dw_die_ref
,
3760 enum dwarf_attribute
,
3762 static void add_data_member_location_attribute
PARAMS ((dw_die_ref
, tree
));
3763 static void add_const_value_attribute
PARAMS ((dw_die_ref
, rtx
));
3764 static rtx rtl_for_decl_location
PARAMS ((tree
));
3765 static void add_location_or_const_value_attribute
PARAMS ((dw_die_ref
, tree
));
3766 static void tree_add_const_value_attribute
PARAMS ((dw_die_ref
, tree
));
3767 static void add_name_attribute
PARAMS ((dw_die_ref
, const char *));
3768 static void add_bound_info
PARAMS ((dw_die_ref
,
3769 enum dwarf_attribute
, tree
));
3770 static void add_subscript_info
PARAMS ((dw_die_ref
, tree
));
3771 static void add_byte_size_attribute
PARAMS ((dw_die_ref
, tree
));
3772 static void add_bit_offset_attribute
PARAMS ((dw_die_ref
, tree
));
3773 static void add_bit_size_attribute
PARAMS ((dw_die_ref
, tree
));
3774 static void add_prototyped_attribute
PARAMS ((dw_die_ref
, tree
));
3775 static void add_abstract_origin_attribute
PARAMS ((dw_die_ref
, tree
));
3776 static void add_pure_or_virtual_attribute
PARAMS ((dw_die_ref
, tree
));
3777 static void add_src_coords_attributes
PARAMS ((dw_die_ref
, tree
));
3778 static void add_name_and_src_coords_attributes
PARAMS ((dw_die_ref
, tree
));
3779 static void push_decl_scope
PARAMS ((tree
));
3780 static void pop_decl_scope
PARAMS ((void));
3781 static dw_die_ref scope_die_for
PARAMS ((tree
, dw_die_ref
));
3782 static inline int local_scope_p
PARAMS ((dw_die_ref
));
3783 static inline int class_scope_p
PARAMS ((dw_die_ref
));
3784 static void add_type_attribute
PARAMS ((dw_die_ref
, tree
, int, int,
3786 static const char *type_tag
PARAMS ((tree
));
3787 static tree member_declared_type
PARAMS ((tree
));
3789 static const char *decl_start_label
PARAMS ((tree
));
3791 static void gen_array_type_die
PARAMS ((tree
, dw_die_ref
));
3792 static void gen_set_type_die
PARAMS ((tree
, dw_die_ref
));
3794 static void gen_entry_point_die
PARAMS ((tree
, dw_die_ref
));
3796 static void gen_inlined_enumeration_type_die
PARAMS ((tree
, dw_die_ref
));
3797 static void gen_inlined_structure_type_die
PARAMS ((tree
, dw_die_ref
));
3798 static void gen_inlined_union_type_die
PARAMS ((tree
, dw_die_ref
));
3799 static void gen_enumeration_type_die
PARAMS ((tree
, dw_die_ref
));
3800 static dw_die_ref gen_formal_parameter_die
PARAMS ((tree
, dw_die_ref
));
3801 static void gen_unspecified_parameters_die
PARAMS ((tree
, dw_die_ref
));
3802 static void gen_formal_types_die
PARAMS ((tree
, dw_die_ref
));
3803 static void gen_subprogram_die
PARAMS ((tree
, dw_die_ref
));
3804 static void gen_variable_die
PARAMS ((tree
, dw_die_ref
));
3805 static void gen_label_die
PARAMS ((tree
, dw_die_ref
));
3806 static void gen_lexical_block_die
PARAMS ((tree
, dw_die_ref
, int));
3807 static void gen_inlined_subroutine_die
PARAMS ((tree
, dw_die_ref
, int));
3808 static void gen_field_die
PARAMS ((tree
, dw_die_ref
));
3809 static void gen_ptr_to_mbr_type_die
PARAMS ((tree
, dw_die_ref
));
3810 static dw_die_ref gen_compile_unit_die
PARAMS ((const char *));
3811 static void gen_string_type_die
PARAMS ((tree
, dw_die_ref
));
3812 static void gen_inheritance_die
PARAMS ((tree
, dw_die_ref
));
3813 static void gen_member_die
PARAMS ((tree
, dw_die_ref
));
3814 static void gen_struct_or_union_type_die
PARAMS ((tree
, dw_die_ref
));
3815 static void gen_subroutine_type_die
PARAMS ((tree
, dw_die_ref
));
3816 static void gen_typedef_die
PARAMS ((tree
, dw_die_ref
));
3817 static void gen_type_die
PARAMS ((tree
, dw_die_ref
));
3818 static void gen_tagged_type_instantiation_die
PARAMS ((tree
, dw_die_ref
));
3819 static void gen_block_die
PARAMS ((tree
, dw_die_ref
, int));
3820 static void decls_for_scope
PARAMS ((tree
, dw_die_ref
, int));
3821 static int is_redundant_typedef
PARAMS ((tree
));
3822 static void gen_decl_die
PARAMS ((tree
, dw_die_ref
));
3823 static unsigned lookup_filename
PARAMS ((const char *));
3824 static void init_file_table
PARAMS ((void));
3825 static void retry_incomplete_types
PARAMS ((void));
3826 static void gen_type_die_for_member
PARAMS ((tree
, tree
, dw_die_ref
));
3827 static void splice_child_die
PARAMS ((dw_die_ref
, dw_die_ref
));
3828 static int file_info_cmp
PARAMS ((const void *, const void *));
3829 static dw_loc_list_ref new_loc_list
PARAMS ((dw_loc_descr_ref
,
3830 const char *, const char *,
3831 const char *, unsigned));
3832 static void add_loc_descr_to_loc_list
PARAMS ((dw_loc_list_ref
*,
3834 const char *, const char *, const char *));
3835 static void output_loc_list
PARAMS ((dw_loc_list_ref
));
3836 static char *gen_internal_sym
PARAMS ((const char *));
3838 /* Section names used to hold DWARF debugging information. */
3839 #ifndef DEBUG_INFO_SECTION
3840 #define DEBUG_INFO_SECTION ".debug_info"
3842 #ifndef DEBUG_ABBREV_SECTION
3843 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3845 #ifndef DEBUG_ARANGES_SECTION
3846 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3848 #ifndef DEBUG_MACINFO_SECTION
3849 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
3851 #ifndef DEBUG_LINE_SECTION
3852 #define DEBUG_LINE_SECTION ".debug_line"
3854 #ifndef DEBUG_LOC_SECTION
3855 #define DEBUG_LOC_SECTION ".debug_loc"
3857 #ifndef DEBUG_PUBNAMES_SECTION
3858 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
3860 #ifndef DEBUG_STR_SECTION
3861 #define DEBUG_STR_SECTION ".debug_str"
3863 #ifndef DEBUG_RANGES_SECTION
3864 #define DEBUG_RANGES_SECTION ".debug_ranges"
3867 /* Standard ELF section names for compiled code and data. */
3868 #ifndef TEXT_SECTION_NAME
3869 #define TEXT_SECTION_NAME ".text"
3872 /* Section flags for .debug_str section. */
3873 #ifdef HAVE_GAS_SHF_MERGE
3874 #define DEBUG_STR_SECTION_FLAGS \
3875 (SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1)
3877 #define DEBUG_STR_SECTION_FLAGS SECTION_DEBUG
3880 /* Labels we insert at beginning sections we can reference instead of
3881 the section names themselves. */
3883 #ifndef TEXT_SECTION_LABEL
3884 #define TEXT_SECTION_LABEL "Ltext"
3886 #ifndef DEBUG_LINE_SECTION_LABEL
3887 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3889 #ifndef DEBUG_INFO_SECTION_LABEL
3890 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3892 #ifndef DEBUG_ABBREV_SECTION_LABEL
3893 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
3895 #ifndef DEBUG_LOC_SECTION_LABEL
3896 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
3898 #ifndef DEBUG_RANGES_SECTION_LABEL
3899 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
3901 #ifndef DEBUG_MACINFO_SECTION_LABEL
3902 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
3905 /* Definitions of defaults for formats and names of various special
3906 (artificial) labels which may be generated within this file (when the -g
3907 options is used and DWARF_DEBUGGING_INFO is in effect.
3908 If necessary, these may be overridden from within the tm.h file, but
3909 typically, overriding these defaults is unnecessary. */
3911 static char text_end_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3912 static char text_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3913 static char abbrev_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3914 static char debug_info_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3915 static char debug_line_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3916 static char macinfo_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3917 static char loc_section_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
3918 static char ranges_section_label
[2 * MAX_ARTIFICIAL_LABEL_BYTES
];
3920 #ifndef TEXT_END_LABEL
3921 #define TEXT_END_LABEL "Letext"
3923 #ifndef BLOCK_BEGIN_LABEL
3924 #define BLOCK_BEGIN_LABEL "LBB"
3926 #ifndef BLOCK_END_LABEL
3927 #define BLOCK_END_LABEL "LBE"
3929 #ifndef LINE_CODE_LABEL
3930 #define LINE_CODE_LABEL "LM"
3932 #ifndef SEPARATE_LINE_CODE_LABEL
3933 #define SEPARATE_LINE_CODE_LABEL "LSM"
3936 /* We allow a language front-end to designate a function that is to be
3937 called to "demangle" any name before it it put into a DIE. */
3939 static const char *(*demangle_name_func
) PARAMS ((const char *));
3942 dwarf2out_set_demangle_name_func (func
)
3943 const char *(*func
) PARAMS ((const char *));
3945 demangle_name_func
= func
;
3948 /* Test if rtl node points to a pseudo register. */
3954 return ((GET_CODE (rtl
) == REG
&& REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
3955 || (GET_CODE (rtl
) == SUBREG
3956 && REGNO (SUBREG_REG (rtl
)) >= FIRST_PSEUDO_REGISTER
));
3959 /* Return a reference to a type, with its const and volatile qualifiers
3963 type_main_variant (type
)
3966 type
= TYPE_MAIN_VARIANT (type
);
3968 /* ??? There really should be only one main variant among any group of
3969 variants of a given type (and all of the MAIN_VARIANT values for all
3970 members of the group should point to that one type) but sometimes the C
3971 front-end messes this up for array types, so we work around that bug
3973 if (TREE_CODE (type
) == ARRAY_TYPE
)
3974 while (type
!= TYPE_MAIN_VARIANT (type
))
3975 type
= TYPE_MAIN_VARIANT (type
);
3980 /* Return nonzero if the given type node represents a tagged type. */
3983 is_tagged_type (type
)
3986 enum tree_code code
= TREE_CODE (type
);
3988 return (code
== RECORD_TYPE
|| code
== UNION_TYPE
3989 || code
== QUAL_UNION_TYPE
|| code
== ENUMERAL_TYPE
);
3992 /* Convert a DIE tag into its string name. */
3995 dwarf_tag_name (tag
)
4000 case DW_TAG_padding
:
4001 return "DW_TAG_padding";
4002 case DW_TAG_array_type
:
4003 return "DW_TAG_array_type";
4004 case DW_TAG_class_type
:
4005 return "DW_TAG_class_type";
4006 case DW_TAG_entry_point
:
4007 return "DW_TAG_entry_point";
4008 case DW_TAG_enumeration_type
:
4009 return "DW_TAG_enumeration_type";
4010 case DW_TAG_formal_parameter
:
4011 return "DW_TAG_formal_parameter";
4012 case DW_TAG_imported_declaration
:
4013 return "DW_TAG_imported_declaration";
4015 return "DW_TAG_label";
4016 case DW_TAG_lexical_block
:
4017 return "DW_TAG_lexical_block";
4019 return "DW_TAG_member";
4020 case DW_TAG_pointer_type
:
4021 return "DW_TAG_pointer_type";
4022 case DW_TAG_reference_type
:
4023 return "DW_TAG_reference_type";
4024 case DW_TAG_compile_unit
:
4025 return "DW_TAG_compile_unit";
4026 case DW_TAG_string_type
:
4027 return "DW_TAG_string_type";
4028 case DW_TAG_structure_type
:
4029 return "DW_TAG_structure_type";
4030 case DW_TAG_subroutine_type
:
4031 return "DW_TAG_subroutine_type";
4032 case DW_TAG_typedef
:
4033 return "DW_TAG_typedef";
4034 case DW_TAG_union_type
:
4035 return "DW_TAG_union_type";
4036 case DW_TAG_unspecified_parameters
:
4037 return "DW_TAG_unspecified_parameters";
4038 case DW_TAG_variant
:
4039 return "DW_TAG_variant";
4040 case DW_TAG_common_block
:
4041 return "DW_TAG_common_block";
4042 case DW_TAG_common_inclusion
:
4043 return "DW_TAG_common_inclusion";
4044 case DW_TAG_inheritance
:
4045 return "DW_TAG_inheritance";
4046 case DW_TAG_inlined_subroutine
:
4047 return "DW_TAG_inlined_subroutine";
4049 return "DW_TAG_module";
4050 case DW_TAG_ptr_to_member_type
:
4051 return "DW_TAG_ptr_to_member_type";
4052 case DW_TAG_set_type
:
4053 return "DW_TAG_set_type";
4054 case DW_TAG_subrange_type
:
4055 return "DW_TAG_subrange_type";
4056 case DW_TAG_with_stmt
:
4057 return "DW_TAG_with_stmt";
4058 case DW_TAG_access_declaration
:
4059 return "DW_TAG_access_declaration";
4060 case DW_TAG_base_type
:
4061 return "DW_TAG_base_type";
4062 case DW_TAG_catch_block
:
4063 return "DW_TAG_catch_block";
4064 case DW_TAG_const_type
:
4065 return "DW_TAG_const_type";
4066 case DW_TAG_constant
:
4067 return "DW_TAG_constant";
4068 case DW_TAG_enumerator
:
4069 return "DW_TAG_enumerator";
4070 case DW_TAG_file_type
:
4071 return "DW_TAG_file_type";
4073 return "DW_TAG_friend";
4074 case DW_TAG_namelist
:
4075 return "DW_TAG_namelist";
4076 case DW_TAG_namelist_item
:
4077 return "DW_TAG_namelist_item";
4078 case DW_TAG_packed_type
:
4079 return "DW_TAG_packed_type";
4080 case DW_TAG_subprogram
:
4081 return "DW_TAG_subprogram";
4082 case DW_TAG_template_type_param
:
4083 return "DW_TAG_template_type_param";
4084 case DW_TAG_template_value_param
:
4085 return "DW_TAG_template_value_param";
4086 case DW_TAG_thrown_type
:
4087 return "DW_TAG_thrown_type";
4088 case DW_TAG_try_block
:
4089 return "DW_TAG_try_block";
4090 case DW_TAG_variant_part
:
4091 return "DW_TAG_variant_part";
4092 case DW_TAG_variable
:
4093 return "DW_TAG_variable";
4094 case DW_TAG_volatile_type
:
4095 return "DW_TAG_volatile_type";
4096 case DW_TAG_MIPS_loop
:
4097 return "DW_TAG_MIPS_loop";
4098 case DW_TAG_format_label
:
4099 return "DW_TAG_format_label";
4100 case DW_TAG_function_template
:
4101 return "DW_TAG_function_template";
4102 case DW_TAG_class_template
:
4103 return "DW_TAG_class_template";
4104 case DW_TAG_GNU_BINCL
:
4105 return "DW_TAG_GNU_BINCL";
4106 case DW_TAG_GNU_EINCL
:
4107 return "DW_TAG_GNU_EINCL";
4109 return "DW_TAG_<unknown>";
4113 /* Convert a DWARF attribute code into its string name. */
4116 dwarf_attr_name (attr
)
4122 return "DW_AT_sibling";
4123 case DW_AT_location
:
4124 return "DW_AT_location";
4126 return "DW_AT_name";
4127 case DW_AT_ordering
:
4128 return "DW_AT_ordering";
4129 case DW_AT_subscr_data
:
4130 return "DW_AT_subscr_data";
4131 case DW_AT_byte_size
:
4132 return "DW_AT_byte_size";
4133 case DW_AT_bit_offset
:
4134 return "DW_AT_bit_offset";
4135 case DW_AT_bit_size
:
4136 return "DW_AT_bit_size";
4137 case DW_AT_element_list
:
4138 return "DW_AT_element_list";
4139 case DW_AT_stmt_list
:
4140 return "DW_AT_stmt_list";
4142 return "DW_AT_low_pc";
4144 return "DW_AT_high_pc";
4145 case DW_AT_language
:
4146 return "DW_AT_language";
4148 return "DW_AT_member";
4150 return "DW_AT_discr";
4151 case DW_AT_discr_value
:
4152 return "DW_AT_discr_value";
4153 case DW_AT_visibility
:
4154 return "DW_AT_visibility";
4156 return "DW_AT_import";
4157 case DW_AT_string_length
:
4158 return "DW_AT_string_length";
4159 case DW_AT_common_reference
:
4160 return "DW_AT_common_reference";
4161 case DW_AT_comp_dir
:
4162 return "DW_AT_comp_dir";
4163 case DW_AT_const_value
:
4164 return "DW_AT_const_value";
4165 case DW_AT_containing_type
:
4166 return "DW_AT_containing_type";
4167 case DW_AT_default_value
:
4168 return "DW_AT_default_value";
4170 return "DW_AT_inline";
4171 case DW_AT_is_optional
:
4172 return "DW_AT_is_optional";
4173 case DW_AT_lower_bound
:
4174 return "DW_AT_lower_bound";
4175 case DW_AT_producer
:
4176 return "DW_AT_producer";
4177 case DW_AT_prototyped
:
4178 return "DW_AT_prototyped";
4179 case DW_AT_return_addr
:
4180 return "DW_AT_return_addr";
4181 case DW_AT_start_scope
:
4182 return "DW_AT_start_scope";
4183 case DW_AT_stride_size
:
4184 return "DW_AT_stride_size";
4185 case DW_AT_upper_bound
:
4186 return "DW_AT_upper_bound";
4187 case DW_AT_abstract_origin
:
4188 return "DW_AT_abstract_origin";
4189 case DW_AT_accessibility
:
4190 return "DW_AT_accessibility";
4191 case DW_AT_address_class
:
4192 return "DW_AT_address_class";
4193 case DW_AT_artificial
:
4194 return "DW_AT_artificial";
4195 case DW_AT_base_types
:
4196 return "DW_AT_base_types";
4197 case DW_AT_calling_convention
:
4198 return "DW_AT_calling_convention";
4200 return "DW_AT_count";
4201 case DW_AT_data_member_location
:
4202 return "DW_AT_data_member_location";
4203 case DW_AT_decl_column
:
4204 return "DW_AT_decl_column";
4205 case DW_AT_decl_file
:
4206 return "DW_AT_decl_file";
4207 case DW_AT_decl_line
:
4208 return "DW_AT_decl_line";
4209 case DW_AT_declaration
:
4210 return "DW_AT_declaration";
4211 case DW_AT_discr_list
:
4212 return "DW_AT_discr_list";
4213 case DW_AT_encoding
:
4214 return "DW_AT_encoding";
4215 case DW_AT_external
:
4216 return "DW_AT_external";
4217 case DW_AT_frame_base
:
4218 return "DW_AT_frame_base";
4220 return "DW_AT_friend";
4221 case DW_AT_identifier_case
:
4222 return "DW_AT_identifier_case";
4223 case DW_AT_macro_info
:
4224 return "DW_AT_macro_info";
4225 case DW_AT_namelist_items
:
4226 return "DW_AT_namelist_items";
4227 case DW_AT_priority
:
4228 return "DW_AT_priority";
4230 return "DW_AT_segment";
4231 case DW_AT_specification
:
4232 return "DW_AT_specification";
4233 case DW_AT_static_link
:
4234 return "DW_AT_static_link";
4236 return "DW_AT_type";
4237 case DW_AT_use_location
:
4238 return "DW_AT_use_location";
4239 case DW_AT_variable_parameter
:
4240 return "DW_AT_variable_parameter";
4241 case DW_AT_virtuality
:
4242 return "DW_AT_virtuality";
4243 case DW_AT_vtable_elem_location
:
4244 return "DW_AT_vtable_elem_location";
4246 case DW_AT_allocated
:
4247 return "DW_AT_allocated";
4248 case DW_AT_associated
:
4249 return "DW_AT_associated";
4250 case DW_AT_data_location
:
4251 return "DW_AT_data_location";
4253 return "DW_AT_stride";
4254 case DW_AT_entry_pc
:
4255 return "DW_AT_entry_pc";
4256 case DW_AT_use_UTF8
:
4257 return "DW_AT_use_UTF8";
4258 case DW_AT_extension
:
4259 return "DW_AT_extension";
4261 return "DW_AT_ranges";
4262 case DW_AT_trampoline
:
4263 return "DW_AT_trampoline";
4264 case DW_AT_call_column
:
4265 return "DW_AT_call_column";
4266 case DW_AT_call_file
:
4267 return "DW_AT_call_file";
4268 case DW_AT_call_line
:
4269 return "DW_AT_call_line";
4271 case DW_AT_MIPS_fde
:
4272 return "DW_AT_MIPS_fde";
4273 case DW_AT_MIPS_loop_begin
:
4274 return "DW_AT_MIPS_loop_begin";
4275 case DW_AT_MIPS_tail_loop_begin
:
4276 return "DW_AT_MIPS_tail_loop_begin";
4277 case DW_AT_MIPS_epilog_begin
:
4278 return "DW_AT_MIPS_epilog_begin";
4279 case DW_AT_MIPS_loop_unroll_factor
:
4280 return "DW_AT_MIPS_loop_unroll_factor";
4281 case DW_AT_MIPS_software_pipeline_depth
:
4282 return "DW_AT_MIPS_software_pipeline_depth";
4283 case DW_AT_MIPS_linkage_name
:
4284 return "DW_AT_MIPS_linkage_name";
4285 case DW_AT_MIPS_stride
:
4286 return "DW_AT_MIPS_stride";
4287 case DW_AT_MIPS_abstract_name
:
4288 return "DW_AT_MIPS_abstract_name";
4289 case DW_AT_MIPS_clone_origin
:
4290 return "DW_AT_MIPS_clone_origin";
4291 case DW_AT_MIPS_has_inlines
:
4292 return "DW_AT_MIPS_has_inlines";
4294 case DW_AT_sf_names
:
4295 return "DW_AT_sf_names";
4296 case DW_AT_src_info
:
4297 return "DW_AT_src_info";
4298 case DW_AT_mac_info
:
4299 return "DW_AT_mac_info";
4300 case DW_AT_src_coords
:
4301 return "DW_AT_src_coords";
4302 case DW_AT_body_begin
:
4303 return "DW_AT_body_begin";
4304 case DW_AT_body_end
:
4305 return "DW_AT_body_end";
4306 case DW_AT_GNU_vector
:
4307 return "DW_AT_GNU_vector";
4309 case DW_AT_VMS_rtnbeg_pd_address
:
4310 return "DW_AT_VMS_rtnbeg_pd_address";
4313 return "DW_AT_<unknown>";
4317 /* Convert a DWARF value form code into its string name. */
4320 dwarf_form_name (form
)
4326 return "DW_FORM_addr";
4327 case DW_FORM_block2
:
4328 return "DW_FORM_block2";
4329 case DW_FORM_block4
:
4330 return "DW_FORM_block4";
4332 return "DW_FORM_data2";
4334 return "DW_FORM_data4";
4336 return "DW_FORM_data8";
4337 case DW_FORM_string
:
4338 return "DW_FORM_string";
4340 return "DW_FORM_block";
4341 case DW_FORM_block1
:
4342 return "DW_FORM_block1";
4344 return "DW_FORM_data1";
4346 return "DW_FORM_flag";
4348 return "DW_FORM_sdata";
4350 return "DW_FORM_strp";
4352 return "DW_FORM_udata";
4353 case DW_FORM_ref_addr
:
4354 return "DW_FORM_ref_addr";
4356 return "DW_FORM_ref1";
4358 return "DW_FORM_ref2";
4360 return "DW_FORM_ref4";
4362 return "DW_FORM_ref8";
4363 case DW_FORM_ref_udata
:
4364 return "DW_FORM_ref_udata";
4365 case DW_FORM_indirect
:
4366 return "DW_FORM_indirect";
4368 return "DW_FORM_<unknown>";
4372 /* Convert a DWARF type code into its string name. */
4376 dwarf_type_encoding_name (enc
)
4381 case DW_ATE_address
:
4382 return "DW_ATE_address";
4383 case DW_ATE_boolean
:
4384 return "DW_ATE_boolean";
4385 case DW_ATE_complex_float
:
4386 return "DW_ATE_complex_float";
4388 return "DW_ATE_float";
4390 return "DW_ATE_signed";
4391 case DW_ATE_signed_char
:
4392 return "DW_ATE_signed_char";
4393 case DW_ATE_unsigned
:
4394 return "DW_ATE_unsigned";
4395 case DW_ATE_unsigned_char
:
4396 return "DW_ATE_unsigned_char";
4398 return "DW_ATE_<unknown>";
4403 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4404 instance of an inlined instance of a decl which is local to an inline
4405 function, so we have to trace all of the way back through the origin chain
4406 to find out what sort of node actually served as the original seed for the
4410 decl_ultimate_origin (decl
)
4413 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4414 nodes in the function to point to themselves; ignore that if
4415 we're trying to output the abstract instance of this function. */
4416 if (DECL_ABSTRACT (decl
) && DECL_ABSTRACT_ORIGIN (decl
) == decl
)
4419 #ifdef ENABLE_CHECKING
4420 if (DECL_FROM_INLINE (DECL_ORIGIN (decl
)))
4421 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4422 most distant ancestor, this should never happen. */
4426 return DECL_ABSTRACT_ORIGIN (decl
);
4429 /* Determine the "ultimate origin" of a block. The block may be an inlined
4430 instance of an inlined instance of a block which is local to an inline
4431 function, so we have to trace all of the way back through the origin chain
4432 to find out what sort of node actually served as the original seed for the
4436 block_ultimate_origin (block
)
4439 tree immediate_origin
= BLOCK_ABSTRACT_ORIGIN (block
);
4441 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4442 nodes in the function to point to themselves; ignore that if
4443 we're trying to output the abstract instance of this function. */
4444 if (BLOCK_ABSTRACT (block
) && immediate_origin
== block
)
4447 if (immediate_origin
== NULL_TREE
)
4452 tree lookahead
= immediate_origin
;
4456 ret_val
= lookahead
;
4457 lookahead
= (TREE_CODE (ret_val
) == BLOCK
4458 ? BLOCK_ABSTRACT_ORIGIN (ret_val
) : NULL
);
4460 while (lookahead
!= NULL
&& lookahead
!= ret_val
);
4466 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4467 of a virtual function may refer to a base class, so we check the 'this'
4471 decl_class_context (decl
)
4474 tree context
= NULL_TREE
;
4476 if (TREE_CODE (decl
) != FUNCTION_DECL
|| ! DECL_VINDEX (decl
))
4477 context
= DECL_CONTEXT (decl
);
4479 context
= TYPE_MAIN_VARIANT
4480 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl
)))));
4482 if (context
&& !TYPE_P (context
))
4483 context
= NULL_TREE
;
4488 /* Add an attribute/value pair to a DIE. We build the lists up in reverse
4489 addition order, and correct that in reverse_all_dies. */
4492 add_dwarf_attr (die
, attr
)
4496 if (die
!= NULL
&& attr
!= NULL
)
4498 attr
->dw_attr_next
= die
->die_attr
;
4499 die
->die_attr
= attr
;
4503 static inline enum dw_val_class
4507 return a
->dw_attr_val
.val_class
;
4510 /* Add a flag value attribute to a DIE. */
4513 add_AT_flag (die
, attr_kind
, flag
)
4515 enum dwarf_attribute attr_kind
;
4518 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4520 attr
->dw_attr_next
= NULL
;
4521 attr
->dw_attr
= attr_kind
;
4522 attr
->dw_attr_val
.val_class
= dw_val_class_flag
;
4523 attr
->dw_attr_val
.v
.val_flag
= flag
;
4524 add_dwarf_attr (die
, attr
);
4527 static inline unsigned
4531 if (a
&& AT_class (a
) == dw_val_class_flag
)
4532 return a
->dw_attr_val
.v
.val_flag
;
4537 /* Add a signed integer attribute value to a DIE. */
4540 add_AT_int (die
, attr_kind
, int_val
)
4542 enum dwarf_attribute attr_kind
;
4545 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4547 attr
->dw_attr_next
= NULL
;
4548 attr
->dw_attr
= attr_kind
;
4549 attr
->dw_attr_val
.val_class
= dw_val_class_const
;
4550 attr
->dw_attr_val
.v
.val_int
= int_val
;
4551 add_dwarf_attr (die
, attr
);
4554 static inline long int
4558 if (a
&& AT_class (a
) == dw_val_class_const
)
4559 return a
->dw_attr_val
.v
.val_int
;
4564 /* Add an unsigned integer attribute value to a DIE. */
4567 add_AT_unsigned (die
, attr_kind
, unsigned_val
)
4569 enum dwarf_attribute attr_kind
;
4570 unsigned long unsigned_val
;
4572 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4574 attr
->dw_attr_next
= NULL
;
4575 attr
->dw_attr
= attr_kind
;
4576 attr
->dw_attr_val
.val_class
= dw_val_class_unsigned_const
;
4577 attr
->dw_attr_val
.v
.val_unsigned
= unsigned_val
;
4578 add_dwarf_attr (die
, attr
);
4581 static inline unsigned long
4585 if (a
&& AT_class (a
) == dw_val_class_unsigned_const
)
4586 return a
->dw_attr_val
.v
.val_unsigned
;
4591 /* Add an unsigned double integer attribute value to a DIE. */
4594 add_AT_long_long (die
, attr_kind
, val_hi
, val_low
)
4596 enum dwarf_attribute attr_kind
;
4597 unsigned long val_hi
;
4598 unsigned long val_low
;
4600 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4602 attr
->dw_attr_next
= NULL
;
4603 attr
->dw_attr
= attr_kind
;
4604 attr
->dw_attr_val
.val_class
= dw_val_class_long_long
;
4605 attr
->dw_attr_val
.v
.val_long_long
.hi
= val_hi
;
4606 attr
->dw_attr_val
.v
.val_long_long
.low
= val_low
;
4607 add_dwarf_attr (die
, attr
);
4610 /* Add a floating point attribute value to a DIE and return it. */
4613 add_AT_float (die
, attr_kind
, length
, array
)
4615 enum dwarf_attribute attr_kind
;
4619 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4621 attr
->dw_attr_next
= NULL
;
4622 attr
->dw_attr
= attr_kind
;
4623 attr
->dw_attr_val
.val_class
= dw_val_class_float
;
4624 attr
->dw_attr_val
.v
.val_float
.length
= length
;
4625 attr
->dw_attr_val
.v
.val_float
.array
= array
;
4626 add_dwarf_attr (die
, attr
);
4629 /* Hash and equality functions for debug_str_hash. */
4632 debug_str_do_hash (x
)
4635 return htab_hash_string (((const struct indirect_string_node
*)x
)->str
);
4639 debug_str_eq (x1
, x2
)
4643 return strcmp ((((const struct indirect_string_node
*)x1
)->str
),
4644 (const char *)x2
) == 0;
4647 /* Add a string attribute value to a DIE. */
4650 add_AT_string (die
, attr_kind
, str
)
4652 enum dwarf_attribute attr_kind
;
4655 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4656 struct indirect_string_node
*node
;
4659 if (! debug_str_hash
)
4660 debug_str_hash
= htab_create_ggc (10, debug_str_do_hash
,
4661 debug_str_eq
, NULL
);
4663 slot
= htab_find_slot_with_hash (debug_str_hash
, str
,
4664 htab_hash_string (str
), INSERT
);
4666 *slot
= ggc_alloc_cleared (sizeof (struct indirect_string_node
));
4667 node
= (struct indirect_string_node
*) *slot
;
4668 node
->str
= ggc_alloc_string (str
, -1);
4671 attr
->dw_attr_next
= NULL
;
4672 attr
->dw_attr
= attr_kind
;
4673 attr
->dw_attr_val
.val_class
= dw_val_class_str
;
4674 attr
->dw_attr_val
.v
.val_str
= node
;
4675 add_dwarf_attr (die
, attr
);
4678 static inline const char *
4682 if (a
&& AT_class (a
) == dw_val_class_str
)
4683 return a
->dw_attr_val
.v
.val_str
->str
;
4688 /* Find out whether a string should be output inline in DIE
4689 or out-of-line in .debug_str section. */
4695 if (a
&& AT_class (a
) == dw_val_class_str
)
4697 struct indirect_string_node
*node
;
4701 node
= a
->dw_attr_val
.v
.val_str
;
4705 len
= strlen (node
->str
) + 1;
4707 /* If the string is shorter or equal to the size of the reference, it is
4708 always better to put it inline. */
4709 if (len
<= DWARF_OFFSET_SIZE
|| node
->refcount
== 0)
4710 return node
->form
= DW_FORM_string
;
4712 /* If we cannot expect the linker to merge strings in .debug_str
4713 section, only put it into .debug_str if it is worth even in this
4715 if ((DEBUG_STR_SECTION_FLAGS
& SECTION_MERGE
) == 0
4716 && (len
- DWARF_OFFSET_SIZE
) * node
->refcount
<= len
)
4717 return node
->form
= DW_FORM_string
;
4719 ASM_GENERATE_INTERNAL_LABEL (label
, "LASF", dw2_string_counter
);
4720 ++dw2_string_counter
;
4721 node
->label
= xstrdup (label
);
4723 return node
->form
= DW_FORM_strp
;
4729 /* Add a DIE reference attribute value to a DIE. */
4732 add_AT_die_ref (die
, attr_kind
, targ_die
)
4734 enum dwarf_attribute attr_kind
;
4735 dw_die_ref targ_die
;
4737 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4739 attr
->dw_attr_next
= NULL
;
4740 attr
->dw_attr
= attr_kind
;
4741 attr
->dw_attr_val
.val_class
= dw_val_class_die_ref
;
4742 attr
->dw_attr_val
.v
.val_die_ref
.die
= targ_die
;
4743 attr
->dw_attr_val
.v
.val_die_ref
.external
= 0;
4744 add_dwarf_attr (die
, attr
);
4747 static inline dw_die_ref
4751 if (a
&& AT_class (a
) == dw_val_class_die_ref
)
4752 return a
->dw_attr_val
.v
.val_die_ref
.die
;
4761 if (a
&& AT_class (a
) == dw_val_class_die_ref
)
4762 return a
->dw_attr_val
.v
.val_die_ref
.external
;
4768 set_AT_ref_external (a
, i
)
4772 if (a
&& AT_class (a
) == dw_val_class_die_ref
)
4773 a
->dw_attr_val
.v
.val_die_ref
.external
= i
;
4778 /* Add an FDE reference attribute value to a DIE. */
4781 add_AT_fde_ref (die
, attr_kind
, targ_fde
)
4783 enum dwarf_attribute attr_kind
;
4786 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4788 attr
->dw_attr_next
= NULL
;
4789 attr
->dw_attr
= attr_kind
;
4790 attr
->dw_attr_val
.val_class
= dw_val_class_fde_ref
;
4791 attr
->dw_attr_val
.v
.val_fde_index
= targ_fde
;
4792 add_dwarf_attr (die
, attr
);
4795 /* Add a location description attribute value to a DIE. */
4798 add_AT_loc (die
, attr_kind
, loc
)
4800 enum dwarf_attribute attr_kind
;
4801 dw_loc_descr_ref loc
;
4803 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4805 attr
->dw_attr_next
= NULL
;
4806 attr
->dw_attr
= attr_kind
;
4807 attr
->dw_attr_val
.val_class
= dw_val_class_loc
;
4808 attr
->dw_attr_val
.v
.val_loc
= loc
;
4809 add_dwarf_attr (die
, attr
);
4812 static inline dw_loc_descr_ref
4816 if (a
&& AT_class (a
) == dw_val_class_loc
)
4817 return a
->dw_attr_val
.v
.val_loc
;
4823 add_AT_loc_list (die
, attr_kind
, loc_list
)
4825 enum dwarf_attribute attr_kind
;
4826 dw_loc_list_ref loc_list
;
4828 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4830 attr
->dw_attr_next
= NULL
;
4831 attr
->dw_attr
= attr_kind
;
4832 attr
->dw_attr_val
.val_class
= dw_val_class_loc_list
;
4833 attr
->dw_attr_val
.v
.val_loc_list
= loc_list
;
4834 add_dwarf_attr (die
, attr
);
4835 have_location_lists
= 1;
4838 static inline dw_loc_list_ref
4842 if (a
&& AT_class (a
) == dw_val_class_loc_list
)
4843 return a
->dw_attr_val
.v
.val_loc_list
;
4848 /* Add an address constant attribute value to a DIE. */
4851 add_AT_addr (die
, attr_kind
, addr
)
4853 enum dwarf_attribute attr_kind
;
4856 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4858 attr
->dw_attr_next
= NULL
;
4859 attr
->dw_attr
= attr_kind
;
4860 attr
->dw_attr_val
.val_class
= dw_val_class_addr
;
4861 attr
->dw_attr_val
.v
.val_addr
= addr
;
4862 add_dwarf_attr (die
, attr
);
4869 if (a
&& AT_class (a
) == dw_val_class_addr
)
4870 return a
->dw_attr_val
.v
.val_addr
;
4875 /* Add a label identifier attribute value to a DIE. */
4878 add_AT_lbl_id (die
, attr_kind
, lbl_id
)
4880 enum dwarf_attribute attr_kind
;
4883 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4885 attr
->dw_attr_next
= NULL
;
4886 attr
->dw_attr
= attr_kind
;
4887 attr
->dw_attr_val
.val_class
= dw_val_class_lbl_id
;
4888 attr
->dw_attr_val
.v
.val_lbl_id
= xstrdup (lbl_id
);
4889 add_dwarf_attr (die
, attr
);
4892 /* Add a section offset attribute value to a DIE. */
4895 add_AT_lbl_offset (die
, attr_kind
, label
)
4897 enum dwarf_attribute attr_kind
;
4900 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4902 attr
->dw_attr_next
= NULL
;
4903 attr
->dw_attr
= attr_kind
;
4904 attr
->dw_attr_val
.val_class
= dw_val_class_lbl_offset
;
4905 attr
->dw_attr_val
.v
.val_lbl_id
= xstrdup (label
);
4906 add_dwarf_attr (die
, attr
);
4909 /* Add an offset attribute value to a DIE. */
4912 add_AT_offset (die
, attr_kind
, offset
)
4914 enum dwarf_attribute attr_kind
;
4915 unsigned long offset
;
4917 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4919 attr
->dw_attr_next
= NULL
;
4920 attr
->dw_attr
= attr_kind
;
4921 attr
->dw_attr_val
.val_class
= dw_val_class_offset
;
4922 attr
->dw_attr_val
.v
.val_offset
= offset
;
4923 add_dwarf_attr (die
, attr
);
4926 /* Add an range_list attribute value to a DIE. */
4929 add_AT_range_list (die
, attr_kind
, offset
)
4931 enum dwarf_attribute attr_kind
;
4932 unsigned long offset
;
4934 dw_attr_ref attr
= (dw_attr_ref
) ggc_alloc (sizeof (dw_attr_node
));
4936 attr
->dw_attr_next
= NULL
;
4937 attr
->dw_attr
= attr_kind
;
4938 attr
->dw_attr_val
.val_class
= dw_val_class_range_list
;
4939 attr
->dw_attr_val
.v
.val_offset
= offset
;
4940 add_dwarf_attr (die
, attr
);
4943 static inline const char *
4947 if (a
&& (AT_class (a
) == dw_val_class_lbl_id
4948 || AT_class (a
) == dw_val_class_lbl_offset
))
4949 return a
->dw_attr_val
.v
.val_lbl_id
;
4954 /* Get the attribute of type attr_kind. */
4956 static inline dw_attr_ref
4957 get_AT (die
, attr_kind
)
4959 enum dwarf_attribute attr_kind
;
4962 dw_die_ref spec
= NULL
;
4966 for (a
= die
->die_attr
; a
!= NULL
; a
= a
->dw_attr_next
)
4967 if (a
->dw_attr
== attr_kind
)
4969 else if (a
->dw_attr
== DW_AT_specification
4970 || a
->dw_attr
== DW_AT_abstract_origin
)
4974 return get_AT (spec
, attr_kind
);
4980 /* Return the "low pc" attribute value, typically associated with a subprogram
4981 DIE. Return null if the "low pc" attribute is either not present, or if it
4982 cannot be represented as an assembler label identifier. */
4984 static inline const char *
4988 dw_attr_ref a
= get_AT (die
, DW_AT_low_pc
);
4990 return a
? AT_lbl (a
) : NULL
;
4993 /* Return the "high pc" attribute value, typically associated with a subprogram
4994 DIE. Return null if the "high pc" attribute is either not present, or if it
4995 cannot be represented as an assembler label identifier. */
4997 static inline const char *
5001 dw_attr_ref a
= get_AT (die
, DW_AT_high_pc
);
5003 return a
? AT_lbl (a
) : NULL
;
5006 /* Return the value of the string attribute designated by ATTR_KIND, or
5007 NULL if it is not present. */
5009 static inline const char *
5010 get_AT_string (die
, attr_kind
)
5012 enum dwarf_attribute attr_kind
;
5014 dw_attr_ref a
= get_AT (die
, attr_kind
);
5016 return a
? AT_string (a
) : NULL
;
5019 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5020 if it is not present. */
5023 get_AT_flag (die
, attr_kind
)
5025 enum dwarf_attribute attr_kind
;
5027 dw_attr_ref a
= get_AT (die
, attr_kind
);
5029 return a
? AT_flag (a
) : 0;
5032 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5033 if it is not present. */
5035 static inline unsigned
5036 get_AT_unsigned (die
, attr_kind
)
5038 enum dwarf_attribute attr_kind
;
5040 dw_attr_ref a
= get_AT (die
, attr_kind
);
5042 return a
? AT_unsigned (a
) : 0;
5045 static inline dw_die_ref
5046 get_AT_ref (die
, attr_kind
)
5048 enum dwarf_attribute attr_kind
;
5050 dw_attr_ref a
= get_AT (die
, attr_kind
);
5052 return a
? AT_ref (a
) : NULL
;
5058 unsigned lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
5060 return (lang
== DW_LANG_C
|| lang
== DW_LANG_C89
5061 || lang
== DW_LANG_C_plus_plus
);
5067 return (get_AT_unsigned (comp_unit_die
, DW_AT_language
)
5068 == DW_LANG_C_plus_plus
);
5074 unsigned lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
5076 return (lang
== DW_LANG_Fortran77
|| lang
== DW_LANG_Fortran90
);
5082 unsigned lang
= get_AT_unsigned (comp_unit_die
, DW_AT_language
);
5084 return (lang
== DW_LANG_Java
);
5087 /* Free up the memory used by A. */
5089 static inline void free_AT
PARAMS ((dw_attr_ref
));
5094 if (AT_class (a
) == dw_val_class_str
)
5095 if (a
->dw_attr_val
.v
.val_str
->refcount
)
5096 a
->dw_attr_val
.v
.val_str
->refcount
--;
5099 /* Remove the specified attribute if present. */
5102 remove_AT (die
, attr_kind
)
5104 enum dwarf_attribute attr_kind
;
5107 dw_attr_ref removed
= NULL
;
5111 for (p
= &(die
->die_attr
); *p
; p
= &((*p
)->dw_attr_next
))
5112 if ((*p
)->dw_attr
== attr_kind
)
5115 *p
= (*p
)->dw_attr_next
;
5124 /* Free up the memory used by DIE. */
5130 remove_children (die
);
5133 /* Discard the children of this DIE. */
5136 remove_children (die
)
5139 dw_die_ref child_die
= die
->die_child
;
5141 die
->die_child
= NULL
;
5143 while (child_die
!= NULL
)
5145 dw_die_ref tmp_die
= child_die
;
5148 child_die
= child_die
->die_sib
;
5150 for (a
= tmp_die
->die_attr
; a
!= NULL
;)
5152 dw_attr_ref tmp_a
= a
;
5154 a
= a
->dw_attr_next
;
5162 /* Add a child DIE below its parent. We build the lists up in reverse
5163 addition order, and correct that in reverse_all_dies. */
5166 add_child_die (die
, child_die
)
5168 dw_die_ref child_die
;
5170 if (die
!= NULL
&& child_die
!= NULL
)
5172 if (die
== child_die
)
5175 child_die
->die_parent
= die
;
5176 child_die
->die_sib
= die
->die_child
;
5177 die
->die_child
= child_die
;
5181 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5182 is the specification, to the front of PARENT's list of children. */
5185 splice_child_die (parent
, child
)
5186 dw_die_ref parent
, child
;
5190 /* We want the declaration DIE from inside the class, not the
5191 specification DIE at toplevel. */
5192 if (child
->die_parent
!= parent
)
5194 dw_die_ref tmp
= get_AT_ref (child
, DW_AT_specification
);
5200 if (child
->die_parent
!= parent
5201 && child
->die_parent
!= get_AT_ref (parent
, DW_AT_specification
))
5204 for (p
= &(child
->die_parent
->die_child
); *p
; p
= &((*p
)->die_sib
))
5207 *p
= child
->die_sib
;
5211 child
->die_sib
= parent
->die_child
;
5212 parent
->die_child
= child
;
5215 /* Return a pointer to a newly created DIE node. */
5217 static inline dw_die_ref
5218 new_die (tag_value
, parent_die
, t
)
5219 enum dwarf_tag tag_value
;
5220 dw_die_ref parent_die
;
5223 dw_die_ref die
= (dw_die_ref
) ggc_alloc_cleared (sizeof (die_node
));
5225 die
->die_tag
= tag_value
;
5227 if (parent_die
!= NULL
)
5228 add_child_die (parent_die
, die
);
5231 limbo_die_node
*limbo_node
;
5233 limbo_node
= ggc_alloc_cleared (sizeof (limbo_die_node
));
5234 limbo_node
->die
= die
;
5235 limbo_node
->created_for
= t
;
5236 limbo_node
->next
= limbo_die_list
;
5237 limbo_die_list
= limbo_node
;
5243 /* Return the DIE associated with the given type specifier. */
5245 static inline dw_die_ref
5246 lookup_type_die (type
)
5249 return TYPE_SYMTAB_DIE (type
);
5252 /* Equate a DIE to a given type specifier. */
5255 equate_type_number_to_die (type
, type_die
)
5257 dw_die_ref type_die
;
5259 TYPE_SYMTAB_DIE (type
) = type_die
;
5262 /* Return the DIE associated with a given declaration. */
5264 static inline dw_die_ref
5265 lookup_decl_die (decl
)
5268 unsigned decl_id
= DECL_UID (decl
);
5270 return (decl_id
< decl_die_table_in_use
? decl_die_table
[decl_id
] : NULL
);
5273 /* Equate a DIE to a particular declaration. */
5276 equate_decl_number_to_die (decl
, decl_die
)
5278 dw_die_ref decl_die
;
5280 unsigned int decl_id
= DECL_UID (decl
);
5281 unsigned int num_allocated
;
5283 if (decl_id
>= decl_die_table_allocated
)
5286 = ((decl_id
+ 1 + DECL_DIE_TABLE_INCREMENT
- 1)
5287 / DECL_DIE_TABLE_INCREMENT
)
5288 * DECL_DIE_TABLE_INCREMENT
;
5290 decl_die_table
= ggc_realloc (decl_die_table
,
5291 sizeof (dw_die_ref
) * num_allocated
);
5293 memset ((char *) &decl_die_table
[decl_die_table_allocated
], 0,
5294 (num_allocated
- decl_die_table_allocated
) * sizeof (dw_die_ref
));
5295 decl_die_table_allocated
= num_allocated
;
5298 if (decl_id
>= decl_die_table_in_use
)
5299 decl_die_table_in_use
= (decl_id
+ 1);
5301 decl_die_table
[decl_id
] = decl_die
;
5304 /* Keep track of the number of spaces used to indent the
5305 output of the debugging routines that print the structure of
5306 the DIE internal representation. */
5307 static int print_indent
;
5309 /* Indent the line the number of spaces given by print_indent. */
5312 print_spaces (outfile
)
5315 fprintf (outfile
, "%*s", print_indent
, "");
5318 /* Print the information associated with a given DIE, and its children.
5319 This routine is a debugging aid only. */
5322 print_die (die
, outfile
)
5329 print_spaces (outfile
);
5330 fprintf (outfile
, "DIE %4lu: %s\n",
5331 die
->die_offset
, dwarf_tag_name (die
->die_tag
));
5332 print_spaces (outfile
);
5333 fprintf (outfile
, " abbrev id: %lu", die
->die_abbrev
);
5334 fprintf (outfile
, " offset: %lu\n", die
->die_offset
);
5336 for (a
= die
->die_attr
; a
!= NULL
; a
= a
->dw_attr_next
)
5338 print_spaces (outfile
);
5339 fprintf (outfile
, " %s: ", dwarf_attr_name (a
->dw_attr
));
5341 switch (AT_class (a
))
5343 case dw_val_class_addr
:
5344 fprintf (outfile
, "address");
5346 case dw_val_class_offset
:
5347 fprintf (outfile
, "offset");
5349 case dw_val_class_loc
:
5350 fprintf (outfile
, "location descriptor");
5352 case dw_val_class_loc_list
:
5353 fprintf (outfile
, "location list -> label:%s",
5354 AT_loc_list (a
)->ll_symbol
);
5356 case dw_val_class_range_list
:
5357 fprintf (outfile
, "range list");
5359 case dw_val_class_const
:
5360 fprintf (outfile
, "%ld", AT_int (a
));
5362 case dw_val_class_unsigned_const
:
5363 fprintf (outfile
, "%lu", AT_unsigned (a
));
5365 case dw_val_class_long_long
:
5366 fprintf (outfile
, "constant (%lu,%lu)",
5367 a
->dw_attr_val
.v
.val_long_long
.hi
,
5368 a
->dw_attr_val
.v
.val_long_long
.low
);
5370 case dw_val_class_float
:
5371 fprintf (outfile
, "floating-point constant");
5373 case dw_val_class_flag
:
5374 fprintf (outfile
, "%u", AT_flag (a
));
5376 case dw_val_class_die_ref
:
5377 if (AT_ref (a
) != NULL
)
5379 if (AT_ref (a
)->die_symbol
)
5380 fprintf (outfile
, "die -> label: %s", AT_ref (a
)->die_symbol
);
5382 fprintf (outfile
, "die -> %lu", AT_ref (a
)->die_offset
);
5385 fprintf (outfile
, "die -> <null>");
5387 case dw_val_class_lbl_id
:
5388 case dw_val_class_lbl_offset
:
5389 fprintf (outfile
, "label: %s", AT_lbl (a
));
5391 case dw_val_class_str
:
5392 if (AT_string (a
) != NULL
)
5393 fprintf (outfile
, "\"%s\"", AT_string (a
));
5395 fprintf (outfile
, "<null>");
5401 fprintf (outfile
, "\n");
5404 if (die
->die_child
!= NULL
)
5407 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
5408 print_die (c
, outfile
);
5412 if (print_indent
== 0)
5413 fprintf (outfile
, "\n");
5416 /* Print the contents of the source code line number correspondence table.
5417 This routine is a debugging aid only. */
5420 print_dwarf_line_table (outfile
)
5424 dw_line_info_ref line_info
;
5426 fprintf (outfile
, "\n\nDWARF source line information\n");
5427 for (i
= 1; i
< line_info_table_in_use
; i
++)
5429 line_info
= &line_info_table
[i
];
5430 fprintf (outfile
, "%5d: ", i
);
5431 fprintf (outfile
, "%-20s", file_table
.table
[line_info
->dw_file_num
]);
5432 fprintf (outfile
, "%6ld", line_info
->dw_line_num
);
5433 fprintf (outfile
, "\n");
5436 fprintf (outfile
, "\n\n");
5439 /* Print the information collected for a given DIE. */
5442 debug_dwarf_die (die
)
5445 print_die (die
, stderr
);
5448 /* Print all DWARF information collected for the compilation unit.
5449 This routine is a debugging aid only. */
5455 print_die (comp_unit_die
, stderr
);
5456 if (! DWARF2_ASM_LINE_DEBUG_INFO
)
5457 print_dwarf_line_table (stderr
);
5460 /* We build up the lists of children and attributes by pushing new ones
5461 onto the beginning of the list. Reverse the lists for DIE so that
5462 they are in order of addition. */
5465 reverse_die_lists (die
)
5468 dw_die_ref c
, cp
, cn
;
5469 dw_attr_ref a
, ap
, an
;
5471 for (a
= die
->die_attr
, ap
= 0; a
; a
= an
)
5473 an
= a
->dw_attr_next
;
5474 a
->dw_attr_next
= ap
;
5480 for (c
= die
->die_child
, cp
= 0; c
; c
= cn
)
5487 die
->die_child
= cp
;
5490 /* reverse_die_lists only reverses the single die you pass it. Since we used to
5491 reverse all dies in add_sibling_attributes, which runs through all the dies,
5492 it would reverse all the dies. Now, however, since we don't call
5493 reverse_die_lists in add_sibling_attributes, we need a routine to
5494 recursively reverse all the dies. This is that routine. */
5497 reverse_all_dies (die
)
5502 reverse_die_lists (die
);
5504 for (c
= die
->die_child
; c
; c
= c
->die_sib
)
5505 reverse_all_dies (c
);
5508 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5509 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5510 DIE that marks the start of the DIEs for this include file. */
5513 push_new_compile_unit (old_unit
, bincl_die
)
5514 dw_die_ref old_unit
, bincl_die
;
5516 const char *filename
= get_AT_string (bincl_die
, DW_AT_name
);
5517 dw_die_ref new_unit
= gen_compile_unit_die (filename
);
5519 new_unit
->die_sib
= old_unit
;
5523 /* Close an include-file CU and reopen the enclosing one. */
5526 pop_compile_unit (old_unit
)
5527 dw_die_ref old_unit
;
5529 dw_die_ref new_unit
= old_unit
->die_sib
;
5531 old_unit
->die_sib
= NULL
;
5535 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5536 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5538 /* Calculate the checksum of a location expression. */
5541 loc_checksum (loc
, ctx
)
5542 dw_loc_descr_ref loc
;
5543 struct md5_ctx
*ctx
;
5545 CHECKSUM (loc
->dw_loc_opc
);
5546 CHECKSUM (loc
->dw_loc_oprnd1
);
5547 CHECKSUM (loc
->dw_loc_oprnd2
);
5550 /* Calculate the checksum of an attribute. */
5553 attr_checksum (at
, ctx
, mark
)
5555 struct md5_ctx
*ctx
;
5558 dw_loc_descr_ref loc
;
5561 CHECKSUM (at
->dw_attr
);
5563 /* We don't care about differences in file numbering. */
5564 if (at
->dw_attr
== DW_AT_decl_file
5565 /* Or that this was compiled with a different compiler snapshot; if
5566 the output is the same, that's what matters. */
5567 || at
->dw_attr
== DW_AT_producer
)
5570 switch (AT_class (at
))
5572 case dw_val_class_const
:
5573 CHECKSUM (at
->dw_attr_val
.v
.val_int
);
5575 case dw_val_class_unsigned_const
:
5576 CHECKSUM (at
->dw_attr_val
.v
.val_unsigned
);
5578 case dw_val_class_long_long
:
5579 CHECKSUM (at
->dw_attr_val
.v
.val_long_long
);
5581 case dw_val_class_float
:
5582 CHECKSUM (at
->dw_attr_val
.v
.val_float
);
5584 case dw_val_class_flag
:
5585 CHECKSUM (at
->dw_attr_val
.v
.val_flag
);
5587 case dw_val_class_str
:
5588 CHECKSUM_STRING (AT_string (at
));
5591 case dw_val_class_addr
:
5593 switch (GET_CODE (r
))
5596 CHECKSUM_STRING (XSTR (r
, 0));
5604 case dw_val_class_offset
:
5605 CHECKSUM (at
->dw_attr_val
.v
.val_offset
);
5608 case dw_val_class_loc
:
5609 for (loc
= AT_loc (at
); loc
; loc
= loc
->dw_loc_next
)
5610 loc_checksum (loc
, ctx
);
5613 case dw_val_class_die_ref
:
5614 die_checksum (AT_ref (at
), ctx
, mark
);
5617 case dw_val_class_fde_ref
:
5618 case dw_val_class_lbl_id
:
5619 case dw_val_class_lbl_offset
:
5627 /* Calculate the checksum of a DIE. */
5630 die_checksum (die
, ctx
, mark
)
5632 struct md5_ctx
*ctx
;
5638 /* To avoid infinite recursion. */
5641 CHECKSUM (die
->die_mark
);
5644 die
->die_mark
= ++(*mark
);
5646 CHECKSUM (die
->die_tag
);
5648 for (a
= die
->die_attr
; a
; a
= a
->dw_attr_next
)
5649 attr_checksum (a
, ctx
, mark
);
5651 for (c
= die
->die_child
; c
; c
= c
->die_sib
)
5652 die_checksum (c
, ctx
, mark
);
5656 #undef CHECKSUM_STRING
5658 /* Do the location expressions look same? */
5660 same_loc_p (loc1
, loc2
, mark
)
5661 dw_loc_descr_ref loc1
;
5662 dw_loc_descr_ref loc2
;
5665 return loc1
->dw_loc_opc
== loc2
->dw_loc_opc
5666 && same_dw_val_p (&loc1
->dw_loc_oprnd1
, &loc2
->dw_loc_oprnd1
, mark
)
5667 && same_dw_val_p (&loc1
->dw_loc_oprnd2
, &loc2
->dw_loc_oprnd2
, mark
);
5670 /* Do the values look the same? */
5672 same_dw_val_p (v1
, v2
, mark
)
5677 dw_loc_descr_ref loc1
, loc2
;
5681 if (v1
->val_class
!= v2
->val_class
)
5684 switch (v1
->val_class
)
5686 case dw_val_class_const
:
5687 return v1
->v
.val_int
== v2
->v
.val_int
;
5688 case dw_val_class_unsigned_const
:
5689 return v1
->v
.val_unsigned
== v2
->v
.val_unsigned
;
5690 case dw_val_class_long_long
:
5691 return v1
->v
.val_long_long
.hi
== v2
->v
.val_long_long
.hi
5692 && v1
->v
.val_long_long
.low
== v2
->v
.val_long_long
.low
;
5693 case dw_val_class_float
:
5694 if (v1
->v
.val_float
.length
!= v2
->v
.val_float
.length
)
5696 for (i
= 0; i
< v1
->v
.val_float
.length
; i
++)
5697 if (v1
->v
.val_float
.array
[i
] != v2
->v
.val_float
.array
[i
])
5700 case dw_val_class_flag
:
5701 return v1
->v
.val_flag
== v2
->v
.val_flag
;
5702 case dw_val_class_str
:
5703 return !strcmp(v1
->v
.val_str
->str
, v2
->v
.val_str
->str
);
5705 case dw_val_class_addr
:
5706 r1
= v1
->v
.val_addr
;
5707 r2
= v2
->v
.val_addr
;
5708 if (GET_CODE (r1
) != GET_CODE (r2
))
5710 switch (GET_CODE (r1
))
5713 return !strcmp (XSTR (r1
, 0), XSTR (r2
, 0));
5719 case dw_val_class_offset
:
5720 return v1
->v
.val_offset
== v2
->v
.val_offset
;
5722 case dw_val_class_loc
:
5723 for (loc1
= v1
->v
.val_loc
, loc2
= v2
->v
.val_loc
;
5725 loc1
= loc1
->dw_loc_next
, loc2
= loc2
->dw_loc_next
)
5726 if (!same_loc_p (loc1
, loc2
, mark
))
5728 return !loc1
&& !loc2
;
5730 case dw_val_class_die_ref
:
5731 return same_die_p (v1
->v
.val_die_ref
.die
, v2
->v
.val_die_ref
.die
, mark
);
5733 case dw_val_class_fde_ref
:
5734 case dw_val_class_lbl_id
:
5735 case dw_val_class_lbl_offset
:
5743 /* Do the attributes look the same? */
5746 same_attr_p (at1
, at2
, mark
)
5751 if (at1
->dw_attr
!= at2
->dw_attr
)
5754 /* We don't care about differences in file numbering. */
5755 if (at1
->dw_attr
== DW_AT_decl_file
5756 /* Or that this was compiled with a different compiler snapshot; if
5757 the output is the same, that's what matters. */
5758 || at1
->dw_attr
== DW_AT_producer
)
5761 return same_dw_val_p (&at1
->dw_attr_val
, &at2
->dw_attr_val
, mark
);
5764 /* Do the dies look the same? */
5767 same_die_p (die1
, die2
, mark
)
5775 /* To avoid infinite recursion. */
5777 return die1
->die_mark
== die2
->die_mark
;
5778 die1
->die_mark
= die2
->die_mark
= ++(*mark
);
5780 if (die1
->die_tag
!= die2
->die_tag
)
5783 for (a1
= die1
->die_attr
, a2
= die2
->die_attr
;
5785 a1
= a1
->dw_attr_next
, a2
= a2
->dw_attr_next
)
5786 if (!same_attr_p (a1
, a2
, mark
))
5791 for (c1
= die1
->die_child
, c2
= die2
->die_child
;
5793 c1
= c1
->die_sib
, c2
= c2
->die_sib
)
5794 if (!same_die_p (c1
, c2
, mark
))
5802 /* Do the dies look the same? Wrapper around same_die_p. */
5805 same_die_p_wrap (die1
, die2
)
5810 int ret
= same_die_p (die1
, die2
, &mark
);
5812 unmark_all_dies (die1
);
5813 unmark_all_dies (die2
);
5818 /* The prefix to attach to symbols on DIEs in the current comdat debug
5820 static char *comdat_symbol_id
;
5822 /* The index of the current symbol within the current comdat CU. */
5823 static unsigned int comdat_symbol_number
;
5825 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
5826 children, and set comdat_symbol_id accordingly. */
5829 compute_section_prefix (unit_die
)
5830 dw_die_ref unit_die
;
5832 const char *die_name
= get_AT_string (unit_die
, DW_AT_name
);
5833 const char *base
= die_name
? lbasename (die_name
) : "anonymous";
5834 char *name
= (char *) alloca (strlen (base
) + 64);
5837 unsigned char checksum
[16];
5840 /* Compute the checksum of the DIE, then append part of it as hex digits to
5841 the name filename of the unit. */
5843 md5_init_ctx (&ctx
);
5845 die_checksum (unit_die
, &ctx
, &mark
);
5846 unmark_all_dies (unit_die
);
5847 md5_finish_ctx (&ctx
, checksum
);
5849 sprintf (name
, "%s.", base
);
5850 clean_symbol_name (name
);
5852 p
= name
+ strlen (name
);
5853 for (i
= 0; i
< 4; i
++)
5855 sprintf (p
, "%.2x", checksum
[i
]);
5859 comdat_symbol_id
= unit_die
->die_symbol
= xstrdup (name
);
5860 comdat_symbol_number
= 0;
5863 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
5869 switch (die
->die_tag
)
5871 case DW_TAG_array_type
:
5872 case DW_TAG_class_type
:
5873 case DW_TAG_enumeration_type
:
5874 case DW_TAG_pointer_type
:
5875 case DW_TAG_reference_type
:
5876 case DW_TAG_string_type
:
5877 case DW_TAG_structure_type
:
5878 case DW_TAG_subroutine_type
:
5879 case DW_TAG_union_type
:
5880 case DW_TAG_ptr_to_member_type
:
5881 case DW_TAG_set_type
:
5882 case DW_TAG_subrange_type
:
5883 case DW_TAG_base_type
:
5884 case DW_TAG_const_type
:
5885 case DW_TAG_file_type
:
5886 case DW_TAG_packed_type
:
5887 case DW_TAG_volatile_type
:
5888 case DW_TAG_typedef
:
5895 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
5896 Basically, we want to choose the bits that are likely to be shared between
5897 compilations (types) and leave out the bits that are specific to individual
5898 compilations (functions). */
5904 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
5905 we do for stabs. The advantage is a greater likelihood of sharing between
5906 objects that don't include headers in the same order (and therefore would
5907 put the base types in a different comdat). jason 8/28/00 */
5909 if (c
->die_tag
== DW_TAG_base_type
)
5912 if (c
->die_tag
== DW_TAG_pointer_type
5913 || c
->die_tag
== DW_TAG_reference_type
5914 || c
->die_tag
== DW_TAG_const_type
5915 || c
->die_tag
== DW_TAG_volatile_type
)
5917 dw_die_ref t
= get_AT_ref (c
, DW_AT_type
);
5919 return t
? is_comdat_die (t
) : 0;
5922 return is_type_die (c
);
5925 /* Returns 1 iff C is the sort of DIE that might be referred to from another
5926 compilation unit. */
5932 return (is_type_die (c
)
5933 || (get_AT (c
, DW_AT_declaration
)
5934 && !get_AT (c
, DW_AT_specification
)));
5938 gen_internal_sym (prefix
)
5942 static int label_num
;
5944 ASM_GENERATE_INTERNAL_LABEL (buf
, prefix
, label_num
++);
5945 return xstrdup (buf
);
5948 /* Assign symbols to all worthy DIEs under DIE. */
5951 assign_symbol_names (die
)
5956 if (is_symbol_die (die
))
5958 if (comdat_symbol_id
)
5960 char *p
= alloca (strlen (comdat_symbol_id
) + 64);
5962 sprintf (p
, "%s.%s.%x", DIE_LABEL_PREFIX
,
5963 comdat_symbol_id
, comdat_symbol_number
++);
5964 die
->die_symbol
= xstrdup (p
);
5967 die
->die_symbol
= gen_internal_sym ("LDIE");
5970 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
5971 assign_symbol_names (c
);
5974 struct cu_hash_table_entry
5977 unsigned min_comdat_num
, max_comdat_num
;
5978 struct cu_hash_table_entry
*next
;
5981 /* Routines to manipulate hash table of CUs. */
5986 const struct cu_hash_table_entry
*entry
= of
;
5988 return htab_hash_string (entry
->cu
->die_symbol
);
5992 htab_cu_eq (of1
, of2
)
5996 const struct cu_hash_table_entry
*entry1
= of1
;
5997 const struct die_struct
*entry2
= of2
;
5999 return !strcmp (entry1
->cu
->die_symbol
, entry2
->die_symbol
);
6006 struct cu_hash_table_entry
*next
, *entry
= what
;
6016 /* Check whether we have already seen this CU and set up SYM_NUM
6019 check_duplicate_cu (cu
, htable
, sym_num
)
6024 struct cu_hash_table_entry dummy
;
6025 struct cu_hash_table_entry
**slot
, *entry
, *last
= &dummy
;
6027 dummy
.max_comdat_num
= 0;
6029 slot
= (struct cu_hash_table_entry
**)
6030 htab_find_slot_with_hash (htable
, cu
, htab_hash_string (cu
->die_symbol
),
6034 for (; entry
; last
= entry
, entry
= entry
->next
)
6036 if (same_die_p_wrap (cu
, entry
->cu
))
6042 *sym_num
= entry
->min_comdat_num
;
6046 entry
= xcalloc (1, sizeof (struct cu_hash_table_entry
));
6048 entry
->min_comdat_num
= *sym_num
= last
->max_comdat_num
;
6049 entry
->next
= *slot
;
6055 /* Record SYM_NUM to record of CU in HTABLE. */
6057 record_comdat_symbol_number (cu
, htable
, sym_num
)
6062 struct cu_hash_table_entry
**slot
, *entry
;
6064 slot
= (struct cu_hash_table_entry
**)
6065 htab_find_slot_with_hash (htable
, cu
, htab_hash_string (cu
->die_symbol
),
6069 entry
->max_comdat_num
= sym_num
;
6072 /* Traverse the DIE (which is always comp_unit_die), and set up
6073 additional compilation units for each of the include files we see
6074 bracketed by BINCL/EINCL. */
6077 break_out_includes (die
)
6081 dw_die_ref unit
= NULL
;
6082 limbo_die_node
*node
, **pnode
;
6083 htab_t cu_hash_table
;
6085 for (ptr
= &(die
->die_child
); *ptr
;)
6087 dw_die_ref c
= *ptr
;
6089 if (c
->die_tag
== DW_TAG_GNU_BINCL
|| c
->die_tag
== DW_TAG_GNU_EINCL
6090 || (unit
&& is_comdat_die (c
)))
6092 /* This DIE is for a secondary CU; remove it from the main one. */
6095 if (c
->die_tag
== DW_TAG_GNU_BINCL
)
6097 unit
= push_new_compile_unit (unit
, c
);
6100 else if (c
->die_tag
== DW_TAG_GNU_EINCL
)
6102 unit
= pop_compile_unit (unit
);
6106 add_child_die (unit
, c
);
6110 /* Leave this DIE in the main CU. */
6111 ptr
= &(c
->die_sib
);
6117 /* We can only use this in debugging, since the frontend doesn't check
6118 to make sure that we leave every include file we enter. */
6123 assign_symbol_names (die
);
6124 cu_hash_table
= htab_create (10, htab_cu_hash
, htab_cu_eq
, htab_cu_del
);
6125 for (node
= limbo_die_list
, pnode
= &limbo_die_list
;
6131 compute_section_prefix (node
->die
);
6132 is_dupl
= check_duplicate_cu (node
->die
, cu_hash_table
,
6133 &comdat_symbol_number
);
6134 assign_symbol_names (node
->die
);
6136 *pnode
= node
->next
;
6139 pnode
= &node
->next
;
6140 record_comdat_symbol_number (node
->die
, cu_hash_table
,
6141 comdat_symbol_number
);
6144 htab_delete (cu_hash_table
);
6147 /* Traverse the DIE and add a sibling attribute if it may have the
6148 effect of speeding up access to siblings. To save some space,
6149 avoid generating sibling attributes for DIE's without children. */
6152 add_sibling_attributes (die
)
6157 if (die
->die_tag
!= DW_TAG_compile_unit
6158 && die
->die_sib
&& die
->die_child
!= NULL
)
6159 /* Add the sibling link to the front of the attribute list. */
6160 add_AT_die_ref (die
, DW_AT_sibling
, die
->die_sib
);
6162 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
6163 add_sibling_attributes (c
);
6166 /* Output all location lists for the DIE and its children. */
6169 output_location_lists (die
)
6175 for (d_attr
= die
->die_attr
; d_attr
; d_attr
= d_attr
->dw_attr_next
)
6176 if (AT_class (d_attr
) == dw_val_class_loc_list
)
6177 output_loc_list (AT_loc_list (d_attr
));
6179 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
6180 output_location_lists (c
);
6184 /* The format of each DIE (and its attribute value pairs) is encoded in an
6185 abbreviation table. This routine builds the abbreviation table and assigns
6186 a unique abbreviation id for each abbreviation entry. The children of each
6187 die are visited recursively. */
6190 build_abbrev_table (die
)
6193 unsigned long abbrev_id
;
6194 unsigned int n_alloc
;
6196 dw_attr_ref d_attr
, a_attr
;
6198 /* Scan the DIE references, and mark as external any that refer to
6199 DIEs from other CUs (i.e. those which are not marked). */
6200 for (d_attr
= die
->die_attr
; d_attr
; d_attr
= d_attr
->dw_attr_next
)
6201 if (AT_class (d_attr
) == dw_val_class_die_ref
6202 && AT_ref (d_attr
)->die_mark
== 0)
6204 if (AT_ref (d_attr
)->die_symbol
== 0)
6207 set_AT_ref_external (d_attr
, 1);
6210 for (abbrev_id
= 1; abbrev_id
< abbrev_die_table_in_use
; ++abbrev_id
)
6212 dw_die_ref abbrev
= abbrev_die_table
[abbrev_id
];
6214 if (abbrev
->die_tag
== die
->die_tag
)
6216 if ((abbrev
->die_child
!= NULL
) == (die
->die_child
!= NULL
))
6218 a_attr
= abbrev
->die_attr
;
6219 d_attr
= die
->die_attr
;
6221 while (a_attr
!= NULL
&& d_attr
!= NULL
)
6223 if ((a_attr
->dw_attr
!= d_attr
->dw_attr
)
6224 || (value_format (a_attr
) != value_format (d_attr
)))
6227 a_attr
= a_attr
->dw_attr_next
;
6228 d_attr
= d_attr
->dw_attr_next
;
6231 if (a_attr
== NULL
&& d_attr
== NULL
)
6237 if (abbrev_id
>= abbrev_die_table_in_use
)
6239 if (abbrev_die_table_in_use
>= abbrev_die_table_allocated
)
6241 n_alloc
= abbrev_die_table_allocated
+ ABBREV_DIE_TABLE_INCREMENT
;
6242 abbrev_die_table
= ggc_realloc (abbrev_die_table
,
6243 sizeof (dw_die_ref
) * n_alloc
);
6245 memset ((char *) &abbrev_die_table
[abbrev_die_table_allocated
], 0,
6246 (n_alloc
- abbrev_die_table_allocated
) * sizeof (dw_die_ref
));
6247 abbrev_die_table_allocated
= n_alloc
;
6250 ++abbrev_die_table_in_use
;
6251 abbrev_die_table
[abbrev_id
] = die
;
6254 die
->die_abbrev
= abbrev_id
;
6255 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
6256 build_abbrev_table (c
);
6259 /* Return the power-of-two number of bytes necessary to represent VALUE. */
6262 constant_size (value
)
6263 long unsigned value
;
6270 log
= floor_log2 (value
);
6273 log
= 1 << (floor_log2 (log
) + 1);
6278 /* Return the size of a DIE as it is represented in the
6279 .debug_info section. */
6281 static unsigned long
6285 unsigned long size
= 0;
6288 size
+= size_of_uleb128 (die
->die_abbrev
);
6289 for (a
= die
->die_attr
; a
!= NULL
; a
= a
->dw_attr_next
)
6291 switch (AT_class (a
))
6293 case dw_val_class_addr
:
6294 size
+= DWARF2_ADDR_SIZE
;
6296 case dw_val_class_offset
:
6297 size
+= DWARF_OFFSET_SIZE
;
6299 case dw_val_class_loc
:
6301 unsigned long lsize
= size_of_locs (AT_loc (a
));
6304 size
+= constant_size (lsize
);
6308 case dw_val_class_loc_list
:
6309 size
+= DWARF_OFFSET_SIZE
;
6311 case dw_val_class_range_list
:
6312 size
+= DWARF_OFFSET_SIZE
;
6314 case dw_val_class_const
:
6315 size
+= size_of_sleb128 (AT_int (a
));
6317 case dw_val_class_unsigned_const
:
6318 size
+= constant_size (AT_unsigned (a
));
6320 case dw_val_class_long_long
:
6321 size
+= 1 + 2*HOST_BITS_PER_LONG
/HOST_BITS_PER_CHAR
; /* block */
6323 case dw_val_class_float
:
6324 size
+= 1 + a
->dw_attr_val
.v
.val_float
.length
* 4; /* block */
6326 case dw_val_class_flag
:
6329 case dw_val_class_die_ref
:
6330 size
+= DWARF_OFFSET_SIZE
;
6332 case dw_val_class_fde_ref
:
6333 size
+= DWARF_OFFSET_SIZE
;
6335 case dw_val_class_lbl_id
:
6336 size
+= DWARF2_ADDR_SIZE
;
6338 case dw_val_class_lbl_offset
:
6339 size
+= DWARF_OFFSET_SIZE
;
6341 case dw_val_class_str
:
6342 if (AT_string_form (a
) == DW_FORM_strp
)
6343 size
+= DWARF_OFFSET_SIZE
;
6345 size
+= strlen (a
->dw_attr_val
.v
.val_str
->str
) + 1;
6355 /* Size the debugging information associated with a given DIE. Visits the
6356 DIE's children recursively. Updates the global variable next_die_offset, on
6357 each time through. Uses the current value of next_die_offset to update the
6358 die_offset field in each DIE. */
6361 calc_die_sizes (die
)
6366 die
->die_offset
= next_die_offset
;
6367 next_die_offset
+= size_of_die (die
);
6369 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
6372 if (die
->die_child
!= NULL
)
6373 /* Count the null byte used to terminate sibling lists. */
6374 next_die_offset
+= 1;
6377 /* Set the marks for a die and its children. We do this so
6378 that we know whether or not a reference needs to use FORM_ref_addr; only
6379 DIEs in the same CU will be marked. We used to clear out the offset
6380 and use that as the flag, but ran into ordering problems. */
6392 for (c
= die
->die_child
; c
; c
= c
->die_sib
)
6396 /* Clear the marks for a die and its children. */
6408 for (c
= die
->die_child
; c
; c
= c
->die_sib
)
6412 /* Clear the marks for a die, its children and referred dies. */
6415 unmark_all_dies (die
)
6425 for (c
= die
->die_child
; c
; c
= c
->die_sib
)
6426 unmark_all_dies (c
);
6428 for (a
= die
->die_attr
; a
; a
= a
->dw_attr_next
)
6429 if (AT_class (a
) == dw_val_class_die_ref
)
6430 unmark_all_dies (AT_ref (a
));
6433 /* Return the size of the .debug_pubnames table generated for the
6434 compilation unit. */
6436 static unsigned long
6442 size
= DWARF_PUBNAMES_HEADER_SIZE
;
6443 for (i
= 0; i
< pubname_table_in_use
; i
++)
6445 pubname_ref p
= &pubname_table
[i
];
6446 size
+= DWARF_OFFSET_SIZE
+ strlen (p
->name
) + 1;
6449 size
+= DWARF_OFFSET_SIZE
;
6453 /* Return the size of the information in the .debug_aranges section. */
6455 static unsigned long
6460 size
= DWARF_ARANGES_HEADER_SIZE
;
6462 /* Count the address/length pair for this compilation unit. */
6463 size
+= 2 * DWARF2_ADDR_SIZE
;
6464 size
+= 2 * DWARF2_ADDR_SIZE
* arange_table_in_use
;
6466 /* Count the two zero words used to terminated the address range table. */
6467 size
+= 2 * DWARF2_ADDR_SIZE
;
6471 /* Select the encoding of an attribute value. */
6473 static enum dwarf_form
6477 switch (a
->dw_attr_val
.val_class
)
6479 case dw_val_class_addr
:
6480 return DW_FORM_addr
;
6481 case dw_val_class_range_list
:
6482 case dw_val_class_offset
:
6483 if (DWARF_OFFSET_SIZE
== 4)
6484 return DW_FORM_data4
;
6485 if (DWARF_OFFSET_SIZE
== 8)
6486 return DW_FORM_data8
;
6488 case dw_val_class_loc_list
:
6489 /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
6490 .debug_loc section */
6491 return DW_FORM_data4
;
6492 case dw_val_class_loc
:
6493 switch (constant_size (size_of_locs (AT_loc (a
))))
6496 return DW_FORM_block1
;
6498 return DW_FORM_block2
;
6502 case dw_val_class_const
:
6503 return DW_FORM_sdata
;
6504 case dw_val_class_unsigned_const
:
6505 switch (constant_size (AT_unsigned (a
)))
6508 return DW_FORM_data1
;
6510 return DW_FORM_data2
;
6512 return DW_FORM_data4
;
6514 return DW_FORM_data8
;
6518 case dw_val_class_long_long
:
6519 return DW_FORM_block1
;
6520 case dw_val_class_float
:
6521 return DW_FORM_block1
;
6522 case dw_val_class_flag
:
6523 return DW_FORM_flag
;
6524 case dw_val_class_die_ref
:
6525 if (AT_ref_external (a
))
6526 return DW_FORM_ref_addr
;
6529 case dw_val_class_fde_ref
:
6530 return DW_FORM_data
;
6531 case dw_val_class_lbl_id
:
6532 return DW_FORM_addr
;
6533 case dw_val_class_lbl_offset
:
6534 return DW_FORM_data
;
6535 case dw_val_class_str
:
6536 return AT_string_form (a
);
6543 /* Output the encoding of an attribute value. */
6546 output_value_format (a
)
6549 enum dwarf_form form
= value_format (a
);
6551 dw2_asm_output_data_uleb128 (form
, "(%s)", dwarf_form_name (form
));
6554 /* Output the .debug_abbrev section which defines the DIE abbreviation
6558 output_abbrev_section ()
6560 unsigned long abbrev_id
;
6564 for (abbrev_id
= 1; abbrev_id
< abbrev_die_table_in_use
; ++abbrev_id
)
6566 dw_die_ref abbrev
= abbrev_die_table
[abbrev_id
];
6568 dw2_asm_output_data_uleb128 (abbrev_id
, "(abbrev code)");
6569 dw2_asm_output_data_uleb128 (abbrev
->die_tag
, "(TAG: %s)",
6570 dwarf_tag_name (abbrev
->die_tag
));
6572 if (abbrev
->die_child
!= NULL
)
6573 dw2_asm_output_data (1, DW_children_yes
, "DW_children_yes");
6575 dw2_asm_output_data (1, DW_children_no
, "DW_children_no");
6577 for (a_attr
= abbrev
->die_attr
; a_attr
!= NULL
;
6578 a_attr
= a_attr
->dw_attr_next
)
6580 dw2_asm_output_data_uleb128 (a_attr
->dw_attr
, "(%s)",
6581 dwarf_attr_name (a_attr
->dw_attr
));
6582 output_value_format (a_attr
);
6585 dw2_asm_output_data (1, 0, NULL
);
6586 dw2_asm_output_data (1, 0, NULL
);
6589 /* Terminate the table. */
6590 dw2_asm_output_data (1, 0, NULL
);
6593 /* Output a symbol we can use to refer to this DIE from another CU. */
6596 output_die_symbol (die
)
6599 char *sym
= die
->die_symbol
;
6604 if (strncmp (sym
, DIE_LABEL_PREFIX
, sizeof (DIE_LABEL_PREFIX
) - 1) == 0)
6605 /* We make these global, not weak; if the target doesn't support
6606 .linkonce, it doesn't support combining the sections, so debugging
6608 (*targetm
.asm_out
.globalize_label
) (asm_out_file
, sym
);
6610 ASM_OUTPUT_LABEL (asm_out_file
, sym
);
6613 /* Return a new location list, given the begin and end range, and the
6614 expression. gensym tells us whether to generate a new internal symbol for
6615 this location list node, which is done for the head of the list only. */
6617 static inline dw_loc_list_ref
6618 new_loc_list (expr
, begin
, end
, section
, gensym
)
6619 dw_loc_descr_ref expr
;
6622 const char *section
;
6625 dw_loc_list_ref retlist
= ggc_alloc_cleared (sizeof (dw_loc_list_node
));
6627 retlist
->begin
= begin
;
6629 retlist
->expr
= expr
;
6630 retlist
->section
= section
;
6632 retlist
->ll_symbol
= gen_internal_sym ("LLST");
6637 /* Add a location description expression to a location list */
6640 add_loc_descr_to_loc_list (list_head
, descr
, begin
, end
, section
)
6641 dw_loc_list_ref
*list_head
;
6642 dw_loc_descr_ref descr
;
6645 const char *section
;
6649 /* Find the end of the chain. */
6650 for (d
= list_head
; (*d
) != NULL
; d
= &(*d
)->dw_loc_next
)
6653 /* Add a new location list node to the list */
6654 *d
= new_loc_list (descr
, begin
, end
, section
, 0);
6657 /* Output the location list given to us */
6660 output_loc_list (list_head
)
6661 dw_loc_list_ref list_head
;
6663 dw_loc_list_ref curr
= list_head
;
6665 ASM_OUTPUT_LABEL (asm_out_file
, list_head
->ll_symbol
);
6667 /* ??? This shouldn't be needed now that we've forced the
6668 compilation unit base address to zero when there is code
6669 in more than one section. */
6670 if (strcmp (curr
->section
, ".text") == 0)
6672 /* dw2_asm_output_data will mask off any extra bits in the ~0. */
6673 dw2_asm_output_data (DWARF2_ADDR_SIZE
, ~(unsigned HOST_WIDE_INT
) 0,
6674 "Location list base address specifier fake entry");
6675 dw2_asm_output_offset (DWARF2_ADDR_SIZE
, curr
->section
,
6676 "Location list base address specifier base");
6679 for (curr
= list_head
; curr
!= NULL
; curr
= curr
->dw_loc_next
)
6683 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, curr
->begin
, curr
->section
,
6684 "Location list begin address (%s)",
6685 list_head
->ll_symbol
);
6686 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, curr
->end
, curr
->section
,
6687 "Location list end address (%s)",
6688 list_head
->ll_symbol
);
6689 size
= size_of_locs (curr
->expr
);
6691 /* Output the block length for this list of location operations. */
6694 dw2_asm_output_data (2, size
, "%s", "Location expression size");
6696 output_loc_sequence (curr
->expr
);
6699 dw2_asm_output_data (DWARF_OFFSET_SIZE
, 0,
6700 "Location list terminator begin (%s)",
6701 list_head
->ll_symbol
);
6702 dw2_asm_output_data (DWARF_OFFSET_SIZE
, 0,
6703 "Location list terminator end (%s)",
6704 list_head
->ll_symbol
);
6707 /* Output the DIE and its attributes. Called recursively to generate
6708 the definitions of each child DIE. */
6718 /* If someone in another CU might refer to us, set up a symbol for
6719 them to point to. */
6720 if (die
->die_symbol
)
6721 output_die_symbol (die
);
6723 dw2_asm_output_data_uleb128 (die
->die_abbrev
, "(DIE (0x%lx) %s)",
6724 die
->die_offset
, dwarf_tag_name (die
->die_tag
));
6726 for (a
= die
->die_attr
; a
!= NULL
; a
= a
->dw_attr_next
)
6728 const char *name
= dwarf_attr_name (a
->dw_attr
);
6730 switch (AT_class (a
))
6732 case dw_val_class_addr
:
6733 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
, AT_addr (a
), "%s", name
);
6736 case dw_val_class_offset
:
6737 dw2_asm_output_data (DWARF_OFFSET_SIZE
, a
->dw_attr_val
.v
.val_offset
,
6741 case dw_val_class_range_list
:
6743 char *p
= strchr (ranges_section_label
, '\0');
6745 sprintf (p
, "+0x%lx", a
->dw_attr_val
.v
.val_offset
);
6746 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, ranges_section_label
,
6752 case dw_val_class_loc
:
6753 size
= size_of_locs (AT_loc (a
));
6755 /* Output the block length for this list of location operations. */
6756 dw2_asm_output_data (constant_size (size
), size
, "%s", name
);
6758 output_loc_sequence (AT_loc (a
));
6761 case dw_val_class_const
:
6762 /* ??? It would be slightly more efficient to use a scheme like is
6763 used for unsigned constants below, but gdb 4.x does not sign
6764 extend. Gdb 5.x does sign extend. */
6765 dw2_asm_output_data_sleb128 (AT_int (a
), "%s", name
);
6768 case dw_val_class_unsigned_const
:
6769 dw2_asm_output_data (constant_size (AT_unsigned (a
)),
6770 AT_unsigned (a
), "%s", name
);
6773 case dw_val_class_long_long
:
6775 unsigned HOST_WIDE_INT first
, second
;
6777 dw2_asm_output_data (1,
6778 2 * HOST_BITS_PER_LONG
/ HOST_BITS_PER_CHAR
,
6781 if (WORDS_BIG_ENDIAN
)
6783 first
= a
->dw_attr_val
.v
.val_long_long
.hi
;
6784 second
= a
->dw_attr_val
.v
.val_long_long
.low
;
6788 first
= a
->dw_attr_val
.v
.val_long_long
.low
;
6789 second
= a
->dw_attr_val
.v
.val_long_long
.hi
;
6792 dw2_asm_output_data (HOST_BITS_PER_LONG
/ HOST_BITS_PER_CHAR
,
6793 first
, "long long constant");
6794 dw2_asm_output_data (HOST_BITS_PER_LONG
/ HOST_BITS_PER_CHAR
,
6799 case dw_val_class_float
:
6803 dw2_asm_output_data (1, a
->dw_attr_val
.v
.val_float
.length
* 4,
6806 for (i
= 0; i
< a
->dw_attr_val
.v
.val_float
.length
; i
++)
6807 dw2_asm_output_data (4, a
->dw_attr_val
.v
.val_float
.array
[i
],
6808 "fp constant word %u", i
);
6812 case dw_val_class_flag
:
6813 dw2_asm_output_data (1, AT_flag (a
), "%s", name
);
6816 case dw_val_class_loc_list
:
6818 char *sym
= AT_loc_list (a
)->ll_symbol
;
6822 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, sym
,
6823 loc_section_label
, "%s", name
);
6827 case dw_val_class_die_ref
:
6828 if (AT_ref_external (a
))
6830 char *sym
= AT_ref (a
)->die_symbol
;
6834 dw2_asm_output_offset (DWARF2_ADDR_SIZE
, sym
, "%s", name
);
6836 else if (AT_ref (a
)->die_offset
== 0)
6839 dw2_asm_output_data (DWARF_OFFSET_SIZE
, AT_ref (a
)->die_offset
,
6843 case dw_val_class_fde_ref
:
6847 ASM_GENERATE_INTERNAL_LABEL (l1
, FDE_LABEL
,
6848 a
->dw_attr_val
.v
.val_fde_index
* 2);
6849 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, l1
, "%s", name
);
6853 case dw_val_class_lbl_id
:
6854 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, AT_lbl (a
), "%s", name
);
6857 case dw_val_class_lbl_offset
:
6858 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, AT_lbl (a
), "%s", name
);
6861 case dw_val_class_str
:
6862 if (AT_string_form (a
) == DW_FORM_strp
)
6863 dw2_asm_output_offset (DWARF_OFFSET_SIZE
,
6864 a
->dw_attr_val
.v
.val_str
->label
,
6865 "%s: \"%s\"", name
, AT_string (a
));
6867 dw2_asm_output_nstring (AT_string (a
), -1, "%s", name
);
6875 for (c
= die
->die_child
; c
!= NULL
; c
= c
->die_sib
)
6878 /* Add null byte to terminate sibling list. */
6879 if (die
->die_child
!= NULL
)
6880 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
6884 /* Output the compilation unit that appears at the beginning of the
6885 .debug_info section, and precedes the DIE descriptions. */
6888 output_compilation_unit_header ()
6890 dw2_asm_output_data (DWARF_OFFSET_SIZE
, next_die_offset
- DWARF_OFFSET_SIZE
,
6891 "Length of Compilation Unit Info");
6892 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF version number");
6893 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, abbrev_section_label
,
6894 "Offset Into Abbrev. Section");
6895 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Pointer Size (in bytes)");
6898 /* Output the compilation unit DIE and its children. */
6901 output_comp_unit (die
, output_if_empty
)
6903 int output_if_empty
;
6905 const char *secname
;
6908 /* Unless we are outputting main CU, we may throw away empty ones. */
6909 if (!output_if_empty
&& die
->die_child
== NULL
)
6912 /* Even if there are no children of this DIE, we must output the information
6913 about the compilation unit. Otherwise, on an empty translation unit, we
6914 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
6915 will then complain when examining the file. First mark all the DIEs in
6916 this CU so we know which get local refs. */
6919 build_abbrev_table (die
);
6921 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
6922 next_die_offset
= DWARF_COMPILE_UNIT_HEADER_SIZE
;
6923 calc_die_sizes (die
);
6925 oldsym
= die
->die_symbol
;
6928 tmp
= (char *) alloca (strlen (oldsym
) + 24);
6930 sprintf (tmp
, ".gnu.linkonce.wi.%s", oldsym
);
6932 die
->die_symbol
= NULL
;
6935 secname
= (const char *) DEBUG_INFO_SECTION
;
6937 /* Output debugging information. */
6938 named_section_flags (secname
, SECTION_DEBUG
);
6939 output_compilation_unit_header ();
6942 /* Leave the marks on the main CU, so we can check them in
6947 die
->die_symbol
= oldsym
;
6951 /* The DWARF2 pubname for a nested thingy looks like "A::f". The
6952 output of lang_hooks.decl_printable_name for C++ looks like
6953 "A::f(int)". Let's drop the argument list, and maybe the scope. */
6956 dwarf2_name (decl
, scope
)
6960 return (*lang_hooks
.decl_printable_name
) (decl
, scope
? 1 : 0);
6963 /* Add a new entry to .debug_pubnames if appropriate. */
6966 add_pubname (decl
, die
)
6972 if (! TREE_PUBLIC (decl
))
6975 if (pubname_table_in_use
== pubname_table_allocated
)
6977 pubname_table_allocated
+= PUBNAME_TABLE_INCREMENT
;
6979 = (pubname_ref
) ggc_realloc (pubname_table
,
6980 (pubname_table_allocated
6981 * sizeof (pubname_entry
)));
6982 memset (pubname_table
+ pubname_table_in_use
, 0,
6983 PUBNAME_TABLE_INCREMENT
* sizeof (pubname_entry
));
6986 p
= &pubname_table
[pubname_table_in_use
++];
6988 p
->name
= xstrdup (dwarf2_name (decl
, 1));
6991 /* Output the public names table used to speed up access to externally
6992 visible names. For now, only generate entries for externally
6993 visible procedures. */
6999 unsigned long pubnames_length
= size_of_pubnames ();
7001 dw2_asm_output_data (DWARF_OFFSET_SIZE
, pubnames_length
,
7002 "Length of Public Names Info");
7003 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF Version");
7004 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_info_section_label
,
7005 "Offset of Compilation Unit Info");
7006 dw2_asm_output_data (DWARF_OFFSET_SIZE
, next_die_offset
,
7007 "Compilation Unit Length");
7009 for (i
= 0; i
< pubname_table_in_use
; i
++)
7011 pubname_ref pub
= &pubname_table
[i
];
7013 /* We shouldn't see pubnames for DIEs outside of the main CU. */
7014 if (pub
->die
->die_mark
== 0)
7017 dw2_asm_output_data (DWARF_OFFSET_SIZE
, pub
->die
->die_offset
,
7020 dw2_asm_output_nstring (pub
->name
, -1, "external name");
7023 dw2_asm_output_data (DWARF_OFFSET_SIZE
, 0, NULL
);
7026 /* Add a new entry to .debug_aranges if appropriate. */
7029 add_arange (decl
, die
)
7033 if (! DECL_SECTION_NAME (decl
))
7036 if (arange_table_in_use
== arange_table_allocated
)
7038 arange_table_allocated
+= ARANGE_TABLE_INCREMENT
;
7039 arange_table
= ggc_realloc (arange_table
,
7040 (arange_table_allocated
7041 * sizeof (dw_die_ref
)));
7042 memset (arange_table
+ arange_table_in_use
, 0,
7043 ARANGE_TABLE_INCREMENT
* sizeof (dw_die_ref
));
7046 arange_table
[arange_table_in_use
++] = die
;
7049 /* Output the information that goes into the .debug_aranges table.
7050 Namely, define the beginning and ending address range of the
7051 text section generated for this compilation unit. */
7057 unsigned long aranges_length
= size_of_aranges ();
7059 dw2_asm_output_data (DWARF_OFFSET_SIZE
, aranges_length
,
7060 "Length of Address Ranges Info");
7061 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF Version");
7062 dw2_asm_output_offset (DWARF_OFFSET_SIZE
, debug_info_section_label
,
7063 "Offset of Compilation Unit Info");
7064 dw2_asm_output_data (1, DWARF2_ADDR_SIZE
, "Size of Address");
7065 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7067 /* We need to align to twice the pointer size here. */
7068 if (DWARF_ARANGES_PAD_SIZE
)
7070 /* Pad using a 2 byte words so that padding is correct for any
7072 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7073 2 * DWARF2_ADDR_SIZE
);
7074 for (i
= 2; i
< (unsigned) DWARF_ARANGES_PAD_SIZE
; i
+= 2)
7075 dw2_asm_output_data (2, 0, NULL
);
7078 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, text_section_label
, "Address");
7079 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, text_end_label
,
7080 text_section_label
, "Length");
7082 for (i
= 0; i
< arange_table_in_use
; i
++)
7084 dw_die_ref die
= arange_table
[i
];
7086 /* We shouldn't see aranges for DIEs outside of the main CU. */
7087 if (die
->die_mark
== 0)
7090 if (die
->die_tag
== DW_TAG_subprogram
)
7092 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, get_AT_low_pc (die
),
7094 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, get_AT_hi_pc (die
),
7095 get_AT_low_pc (die
), "Length");
7099 /* A static variable; extract the symbol from DW_AT_location.
7100 Note that this code isn't currently hit, as we only emit
7101 aranges for functions (jason 9/23/99). */
7102 dw_attr_ref a
= get_AT (die
, DW_AT_location
);
7103 dw_loc_descr_ref loc
;
7105 if (! a
|| AT_class (a
) != dw_val_class_loc
)
7109 if (loc
->dw_loc_opc
!= DW_OP_addr
)
7112 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE
,
7113 loc
->dw_loc_oprnd1
.v
.val_addr
, "Address");
7114 dw2_asm_output_data (DWARF2_ADDR_SIZE
,
7115 get_AT_unsigned (die
, DW_AT_byte_size
),
7120 /* Output the terminator words. */
7121 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
7122 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
7125 /* Add a new entry to .debug_ranges. Return the offset at which it
7132 unsigned int in_use
= ranges_table_in_use
;
7134 if (in_use
== ranges_table_allocated
)
7136 ranges_table_allocated
+= RANGES_TABLE_INCREMENT
;
7137 ranges_table
= (dw_ranges_ref
)
7138 ggc_realloc (ranges_table
, (ranges_table_allocated
7139 * sizeof (struct dw_ranges_struct
)));
7140 memset (ranges_table
+ ranges_table_in_use
, 0,
7141 RANGES_TABLE_INCREMENT
* sizeof (struct dw_ranges_struct
));
7144 ranges_table
[in_use
].block_num
= (block
? BLOCK_NUMBER (block
) : 0);
7145 ranges_table_in_use
= in_use
+ 1;
7147 return in_use
* 2 * DWARF2_ADDR_SIZE
;
7154 static const char *const start_fmt
= "Offset 0x%x";
7155 const char *fmt
= start_fmt
;
7157 for (i
= 0; i
< ranges_table_in_use
; i
++)
7159 int block_num
= ranges_table
[i
].block_num
;
7163 char blabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
7164 char elabel
[MAX_ARTIFICIAL_LABEL_BYTES
];
7166 ASM_GENERATE_INTERNAL_LABEL (blabel
, BLOCK_BEGIN_LABEL
, block_num
);
7167 ASM_GENERATE_INTERNAL_LABEL (elabel
, BLOCK_END_LABEL
, block_num
);
7169 /* If all code is in the text section, then the compilation
7170 unit base address defaults to DW_AT_low_pc, which is the
7171 base of the text section. */
7172 if (separate_line_info_table_in_use
== 0)
7174 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, blabel
,
7176 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
7177 dw2_asm_output_delta (DWARF2_ADDR_SIZE
, elabel
,
7178 text_section_label
, NULL
);
7181 /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7182 compilation unit base address to zero, which allows us to
7183 use absolute addresses, and not worry about whether the
7184 target supports cross-section arithmetic. */
7187 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, blabel
,
7188 fmt
, i
* 2 * DWARF2_ADDR_SIZE
);
7189 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, elabel
, NULL
);
7196 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
7197 dw2_asm_output_data (DWARF2_ADDR_SIZE
, 0, NULL
);
7203 /* Data structure containing information about input files. */
7206 char *path
; /* Complete file name. */
7207 char *fname
; /* File name part. */
7208 int length
; /* Length of entire string. */
7209 int file_idx
; /* Index in input file table. */
7210 int dir_idx
; /* Index in directory table. */
7213 /* Data structure containing information about directories with source
7217 char *path
; /* Path including directory name. */
7218 int length
; /* Path length. */
7219 int prefix
; /* Index of directory entry which is a prefix. */
7220 int count
; /* Number of files in this directory. */
7221 int dir_idx
; /* Index of directory used as base. */
7222 int used
; /* Used in the end? */
7225 /* Callback function for file_info comparison. We sort by looking at
7226 the directories in the path. */
7229 file_info_cmp (p1
, p2
)
7233 const struct file_info
*s1
= p1
;
7234 const struct file_info
*s2
= p2
;
7238 /* Take care of file names without directories. We need to make sure that
7239 we return consistent values to qsort since some will get confused if
7240 we return the same value when identical operands are passed in opposite
7241 orders. So if neither has a directory, return 0 and otherwise return
7242 1 or -1 depending on which one has the directory. */
7243 if ((s1
->path
== s1
->fname
|| s2
->path
== s2
->fname
))
7244 return (s2
->path
== s2
->fname
) - (s1
->path
== s1
->fname
);
7246 cp1
= (unsigned char *) s1
->path
;
7247 cp2
= (unsigned char *) s2
->path
;
7253 /* Reached the end of the first path? If so, handle like above. */
7254 if ((cp1
== (unsigned char *) s1
->fname
)
7255 || (cp2
== (unsigned char *) s2
->fname
))
7256 return ((cp2
== (unsigned char *) s2
->fname
)
7257 - (cp1
== (unsigned char *) s1
->fname
));
7259 /* Character of current path component the same? */
7260 else if (*cp1
!= *cp2
)
7265 /* Output the directory table and the file name table. We try to minimize
7266 the total amount of memory needed. A heuristic is used to avoid large
7267 slowdowns with many input files. */
7270 output_file_names ()
7272 struct file_info
*files
;
7273 struct dir_info
*dirs
;
7282 /* Allocate the various arrays we need. */
7283 files
= (struct file_info
*) alloca (file_table
.in_use
7284 * sizeof (struct file_info
));
7285 dirs
= (struct dir_info
*) alloca (file_table
.in_use
7286 * sizeof (struct dir_info
));
7288 /* Sort the file names. */
7289 for (i
= 1; i
< (int) file_table
.in_use
; i
++)
7293 /* Skip all leading "./". */
7294 f
= file_table
.table
[i
];
7295 while (f
[0] == '.' && f
[1] == '/')
7298 /* Create a new array entry. */
7300 files
[i
].length
= strlen (f
);
7301 files
[i
].file_idx
= i
;
7303 /* Search for the file name part. */
7304 f
= strrchr (f
, '/');
7305 files
[i
].fname
= f
== NULL
? files
[i
].path
: f
+ 1;
7308 qsort (files
+ 1, file_table
.in_use
- 1, sizeof (files
[0]), file_info_cmp
);
7310 /* Find all the different directories used. */
7311 dirs
[0].path
= files
[1].path
;
7312 dirs
[0].length
= files
[1].fname
- files
[1].path
;
7313 dirs
[0].prefix
= -1;
7315 dirs
[0].dir_idx
= 0;
7317 files
[1].dir_idx
= 0;
7320 for (i
= 2; i
< (int) file_table
.in_use
; i
++)
7321 if (files
[i
].fname
- files
[i
].path
== dirs
[ndirs
- 1].length
7322 && memcmp (dirs
[ndirs
- 1].path
, files
[i
].path
,
7323 dirs
[ndirs
- 1].length
) == 0)
7325 /* Same directory as last entry. */
7326 files
[i
].dir_idx
= ndirs
- 1;
7327 ++dirs
[ndirs
- 1].count
;
7333 /* This is a new directory. */
7334 dirs
[ndirs
].path
= files
[i
].path
;
7335 dirs
[ndirs
].length
= files
[i
].fname
- files
[i
].path
;
7336 dirs
[ndirs
].count
= 1;
7337 dirs
[ndirs
].dir_idx
= ndirs
;
7338 dirs
[ndirs
].used
= 0;
7339 files
[i
].dir_idx
= ndirs
;
7341 /* Search for a prefix. */
7342 dirs
[ndirs
].prefix
= -1;
7343 for (j
= 0; j
< ndirs
; j
++)
7344 if (dirs
[j
].length
< dirs
[ndirs
].length
7345 && dirs
[j
].length
> 1
7346 && (dirs
[ndirs
].prefix
== -1
7347 || dirs
[j
].length
> dirs
[dirs
[ndirs
].prefix
].length
)
7348 && memcmp (dirs
[j
].path
, dirs
[ndirs
].path
, dirs
[j
].length
) == 0)
7349 dirs
[ndirs
].prefix
= j
;
7354 /* Now to the actual work. We have to find a subset of the directories which
7355 allow expressing the file name using references to the directory table
7356 with the least amount of characters. We do not do an exhaustive search
7357 where we would have to check out every combination of every single
7358 possible prefix. Instead we use a heuristic which provides nearly optimal
7359 results in most cases and never is much off. */
7360 saved
= (int *) alloca (ndirs
* sizeof (int));
7361 savehere
= (int *) alloca (ndirs
* sizeof (int));
7363 memset (saved
, '\0', ndirs
* sizeof (saved
[0]));
7364 for (i
= 0; i
< ndirs
; i
++)
7369 /* We can always save some space for the current directory. But this
7370 does not mean it will be enough to justify adding the directory. */
7371 savehere
[i
] = dirs
[i
].length
;
7372 total
= (savehere
[i
] - saved
[i
]) * dirs
[i
].count
;
7374 for (j
= i
+ 1; j
< ndirs
; j
++)
7377 if (saved
[j
] < dirs
[i
].length
)
7379 /* Determine whether the dirs[i] path is a prefix of the
7384 while (k
!= -1 && k
!= i
)
7389 /* Yes it is. We can possibly safe some memory but
7390 writing the filenames in dirs[j] relative to
7392 savehere
[j
] = dirs
[i
].length
;
7393 total
+= (savehere
[j
] - saved
[j
]) * dirs
[j
].count
;
7398 /* Check whether we can safe enough to justify adding the dirs[i]
7400 if (total
> dirs
[i
].length
+ 1)
7402 /* It's worthwhile adding. */
7403 for (j
= i
; j
< ndirs
; j
++)
7404 if (savehere
[j
] > 0)
7406 /* Remember how much we saved for this directory so far. */
7407 saved
[j
] = savehere
[j
];
7409 /* Remember the prefix directory. */
7410 dirs
[j
].dir_idx
= i
;
7415 /* We have to emit them in the order they appear in the file_table array
7416 since the index is used in the debug info generation. To do this
7417 efficiently we generate a back-mapping of the indices first. */
7418 backmap
= (int *) alloca (file_table
.in_use
* sizeof (int));
7419 for (i
= 1; i
< (int) file_table
.in_use
; i
++)
7421 backmap
[files
[i
].file_idx
] = i
;
7423 /* Mark this directory as used. */
7424 dirs
[dirs
[files
[i
].dir_idx
].dir_idx
].used
= 1;
7427 /* That was it. We are ready to emit the information. First emit the
7428 directory name table. We have to make sure the first actually emitted
7429 directory name has index one; zero is reserved for the current working
7430 directory. Make sure we do not confuse these indices with the one for the
7431 constructed table (even though most of the time they are identical). */
7433 idx_offset
= dirs
[0].length
> 0 ? 1 : 0;
7434 for (i
= 1 - idx_offset
; i
< ndirs
; i
++)
7435 if (dirs
[i
].used
!= 0)
7437 dirs
[i
].used
= idx
++;
7438 dw2_asm_output_nstring (dirs
[i
].path
, dirs
[i
].length
- 1,
7439 "Directory Entry: 0x%x", dirs
[i
].used
);
7442 dw2_asm_output_data (1, 0, "End directory table");
7444 /* Correct the index for the current working directory entry if it
7446 if (idx_offset
== 0)
7449 /* Now write all the file names. */
7450 for (i
= 1; i
< (int) file_table
.in_use
; i
++)
7452 int file_idx
= backmap
[i
];
7453 int dir_idx
= dirs
[files
[file_idx
].dir_idx
].dir_idx
;
7455 dw2_asm_output_nstring (files
[file_idx
].path
+ dirs
[dir_idx
].length
, -1,
7456 "File Entry: 0x%x", i
);
7458 /* Include directory index. */
7459 dw2_asm_output_data_uleb128 (dirs
[dir_idx
].used
, NULL
);
7461 /* Modification time. */
7462 dw2_asm_output_data_uleb128 (0, NULL
);
7464 /* File length in bytes. */
7465 dw2_asm_output_data_uleb128 (0, NULL
);
7468 dw2_asm_output_data (1, 0, "End file name table");
7472 /* Output the source line number correspondence information. This
7473 information goes into the .debug_line section. */
7478 char l1
[20], l2
[20], p1
[20], p2
[20];
7479 char line_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
7480 char prev_line_label
[MAX_ARTIFICIAL_LABEL_BYTES
];
7483 unsigned long lt_index
;
7484 unsigned long current_line
;
7487 unsigned long current_file
;
7488 unsigned long function
;
7490 ASM_GENERATE_INTERNAL_LABEL (l1
, LINE_NUMBER_BEGIN_LABEL
, 0);
7491 ASM_GENERATE_INTERNAL_LABEL (l2
, LINE_NUMBER_END_LABEL
, 0);
7492 ASM_GENERATE_INTERNAL_LABEL (p1
, LN_PROLOG_AS_LABEL
, 0);
7493 ASM_GENERATE_INTERNAL_LABEL (p2
, LN_PROLOG_END_LABEL
, 0);
7495 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, l2
, l1
,
7496 "Length of Source Line Info");
7497 ASM_OUTPUT_LABEL (asm_out_file
, l1
);
7499 dw2_asm_output_data (2, DWARF_VERSION
, "DWARF Version");
7500 dw2_asm_output_delta (DWARF_OFFSET_SIZE
, p2
, p1
, "Prolog Length");
7501 ASM_OUTPUT_LABEL (asm_out_file
, p1
);
7503 /* Define the architecture-dependent minimum instruction length (in
7504 bytes). In this implementation of DWARF, this field is used for
7505 information purposes only. Since GCC generates assembly language,
7506 we have no a priori knowledge of how many instruction bytes are
7507 generated for each source line, and therefore can use only the
7508 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7509 commands. Accordingly, we fix this as `1', which is "correct
7510 enough" for all architectures, and don't let the target override. */
7511 dw2_asm_output_data (1, 1,
7512 "Minimum Instruction Length");
7514 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START
,
7515 "Default is_stmt_start flag");
7516 dw2_asm_output_data (1, DWARF_LINE_BASE
,
7517 "Line Base Value (Special Opcodes)");
7518 dw2_asm_output_data (1, DWARF_LINE_RANGE
,
7519 "Line Range Value (Special Opcodes)");
7520 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
,
7521 "Special Opcode Base");
7523 for (opc
= 1; opc
< DWARF_LINE_OPCODE_BASE
; opc
++)
7527 case DW_LNS_advance_pc
:
7528 case DW_LNS_advance_line
:
7529 case DW_LNS_set_file
:
7530 case DW_LNS_set_column
:
7531 case DW_LNS_fixed_advance_pc
:
7539 dw2_asm_output_data (1, n_op_args
, "opcode: 0x%x has %d args",
7543 /* Write out the information about the files we use. */
7544 output_file_names ();
7545 ASM_OUTPUT_LABEL (asm_out_file
, p2
);
7547 /* We used to set the address register to the first location in the text
7548 section here, but that didn't accomplish anything since we already
7549 have a line note for the opening brace of the first function. */
7551 /* Generate the line number to PC correspondence table, encoded as
7552 a series of state machine operations. */
7555 strcpy (prev_line_label
, text_section_label
);
7556 for (lt_index
= 1; lt_index
< line_info_table_in_use
; ++lt_index
)
7558 dw_line_info_ref line_info
= &line_info_table
[lt_index
];
7561 /* Disable this optimization for now; GDB wants to see two line notes
7562 at the beginning of a function so it can find the end of the
7565 /* Don't emit anything for redundant notes. Just updating the
7566 address doesn't accomplish anything, because we already assume
7567 that anything after the last address is this line. */
7568 if (line_info
->dw_line_num
== current_line
7569 && line_info
->dw_file_num
== current_file
)
7573 /* Emit debug info for the address of the current line.
7575 Unfortunately, we have little choice here currently, and must always
7576 use the most general form. GCC does not know the address delta
7577 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
7578 attributes which will give an upper bound on the address range. We
7579 could perhaps use length attributes to determine when it is safe to
7580 use DW_LNS_fixed_advance_pc. */
7582 ASM_GENERATE_INTERNAL_LABEL (line_label
, LINE_CODE_LABEL
, lt_index
);
7585 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
7586 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
7587 "DW_LNS_fixed_advance_pc");
7588 dw2_asm_output_delta (2, line_label
, prev_line_label
, NULL
);
7592 /* This can handle any delta. This takes
7593 4+DWARF2_ADDR_SIZE bytes. */
7594 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7595 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
7596 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
7597 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
7600 strcpy (prev_line_label
, line_label
);
7602 /* Emit debug info for the source file of the current line, if
7603 different from the previous line. */
7604 if (line_info
->dw_file_num
!= current_file
)
7606 current_file
= line_info
->dw_file_num
;
7607 dw2_asm_output_data (1, DW_LNS_set_file
, "DW_LNS_set_file");
7608 dw2_asm_output_data_uleb128 (current_file
, "(\"%s\")",
7609 file_table
.table
[current_file
]);
7612 /* Emit debug info for the current line number, choosing the encoding
7613 that uses the least amount of space. */
7614 if (line_info
->dw_line_num
!= current_line
)
7616 line_offset
= line_info
->dw_line_num
- current_line
;
7617 line_delta
= line_offset
- DWARF_LINE_BASE
;
7618 current_line
= line_info
->dw_line_num
;
7619 if (line_delta
>= 0 && line_delta
< (DWARF_LINE_RANGE
- 1))
7620 /* This can handle deltas from -10 to 234, using the current
7621 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
7623 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
+ line_delta
,
7624 "line %lu", current_line
);
7627 /* This can handle any delta. This takes at least 4 bytes,
7628 depending on the value being encoded. */
7629 dw2_asm_output_data (1, DW_LNS_advance_line
,
7630 "advance to line %lu", current_line
);
7631 dw2_asm_output_data_sleb128 (line_offset
, NULL
);
7632 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
7636 /* We still need to start a new row, so output a copy insn. */
7637 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
7640 /* Emit debug info for the address of the end of the function. */
7643 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
7644 "DW_LNS_fixed_advance_pc");
7645 dw2_asm_output_delta (2, text_end_label
, prev_line_label
, NULL
);
7649 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7650 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
7651 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
7652 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, text_end_label
, NULL
);
7655 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7656 dw2_asm_output_data_uleb128 (1, NULL
);
7657 dw2_asm_output_data (1, DW_LNE_end_sequence
, NULL
);
7662 for (lt_index
= 0; lt_index
< separate_line_info_table_in_use
;)
7664 dw_separate_line_info_ref line_info
7665 = &separate_line_info_table
[lt_index
];
7668 /* Don't emit anything for redundant notes. */
7669 if (line_info
->dw_line_num
== current_line
7670 && line_info
->dw_file_num
== current_file
7671 && line_info
->function
== function
)
7675 /* Emit debug info for the address of the current line. If this is
7676 a new function, or the first line of a function, then we need
7677 to handle it differently. */
7678 ASM_GENERATE_INTERNAL_LABEL (line_label
, SEPARATE_LINE_CODE_LABEL
,
7680 if (function
!= line_info
->function
)
7682 function
= line_info
->function
;
7684 /* Set the address register to the first line in the function */
7685 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7686 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
7687 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
7688 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
7692 /* ??? See the DW_LNS_advance_pc comment above. */
7695 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
7696 "DW_LNS_fixed_advance_pc");
7697 dw2_asm_output_delta (2, line_label
, prev_line_label
, NULL
);
7701 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7702 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
7703 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
7704 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
7708 strcpy (prev_line_label
, line_label
);
7710 /* Emit debug info for the source file of the current line, if
7711 different from the previous line. */
7712 if (line_info
->dw_file_num
!= current_file
)
7714 current_file
= line_info
->dw_file_num
;
7715 dw2_asm_output_data (1, DW_LNS_set_file
, "DW_LNS_set_file");
7716 dw2_asm_output_data_uleb128 (current_file
, "(\"%s\")",
7717 file_table
.table
[current_file
]);
7720 /* Emit debug info for the current line number, choosing the encoding
7721 that uses the least amount of space. */
7722 if (line_info
->dw_line_num
!= current_line
)
7724 line_offset
= line_info
->dw_line_num
- current_line
;
7725 line_delta
= line_offset
- DWARF_LINE_BASE
;
7726 current_line
= line_info
->dw_line_num
;
7727 if (line_delta
>= 0 && line_delta
< (DWARF_LINE_RANGE
- 1))
7728 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE
+ line_delta
,
7729 "line %lu", current_line
);
7732 dw2_asm_output_data (1, DW_LNS_advance_line
,
7733 "advance to line %lu", current_line
);
7734 dw2_asm_output_data_sleb128 (line_offset
, NULL
);
7735 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
7739 dw2_asm_output_data (1, DW_LNS_copy
, "DW_LNS_copy");
7747 /* If we're done with a function, end its sequence. */
7748 if (lt_index
== separate_line_info_table_in_use
7749 || separate_line_info_table
[lt_index
].function
!= function
)
7754 /* Emit debug info for the address of the end of the function. */
7755 ASM_GENERATE_INTERNAL_LABEL (line_label
, FUNC_END_LABEL
, function
);
7758 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc
,
7759 "DW_LNS_fixed_advance_pc");
7760 dw2_asm_output_delta (2, line_label
, prev_line_label
, NULL
);
7764 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7765 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE
, NULL
);
7766 dw2_asm_output_data (1, DW_LNE_set_address
, NULL
);
7767 dw2_asm_output_addr (DWARF2_ADDR_SIZE
, line_label
, NULL
);
7770 /* Output the marker for the end of this sequence. */
7771 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7772 dw2_asm_output_data_uleb128 (1, NULL
);
7773 dw2_asm_output_data (1, DW_LNE_end_sequence
, NULL
);
7777 /* Output the marker for the end of the line number info. */
7778 ASM_OUTPUT_LABEL (asm_out_file
, l2
);
7781 /* Given a pointer to a tree node for some base type, return a pointer to
7782 a DIE that describes the given type.
7784 This routine must only be called for GCC type nodes that correspond to
7785 Dwarf base (fundamental) types. */
7788 base_type_die (type
)
7791 dw_die_ref base_type_result
;
7792 const char *type_name
;
7793 enum dwarf_type encoding
;
7794 tree name
= TYPE_NAME (type
);
7796 if (TREE_CODE (type
) == ERROR_MARK
|| TREE_CODE (type
) == VOID_TYPE
)
7801 if (TREE_CODE (name
) == TYPE_DECL
)
7802 name
= DECL_NAME (name
);
7804 type_name
= IDENTIFIER_POINTER (name
);
7807 type_name
= "__unknown__";
7809 switch (TREE_CODE (type
))
7812 /* Carefully distinguish the C character types, without messing
7813 up if the language is not C. Note that we check only for the names
7814 that contain spaces; other names might occur by coincidence in other
7816 if (! (TYPE_PRECISION (type
) == CHAR_TYPE_SIZE
7817 && (type
== char_type_node
7818 || ! strcmp (type_name
, "signed char")
7819 || ! strcmp (type_name
, "unsigned char"))))
7821 if (TREE_UNSIGNED (type
))
7822 encoding
= DW_ATE_unsigned
;
7824 encoding
= DW_ATE_signed
;
7827 /* else fall through. */
7830 /* GNU Pascal/Ada CHAR type. Not used in C. */
7831 if (TREE_UNSIGNED (type
))
7832 encoding
= DW_ATE_unsigned_char
;
7834 encoding
= DW_ATE_signed_char
;
7838 encoding
= DW_ATE_float
;
7841 /* Dwarf2 doesn't know anything about complex ints, so use
7842 a user defined type for it. */
7844 if (TREE_CODE (TREE_TYPE (type
)) == REAL_TYPE
)
7845 encoding
= DW_ATE_complex_float
;
7847 encoding
= DW_ATE_lo_user
;
7851 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
7852 encoding
= DW_ATE_boolean
;
7856 /* No other TREE_CODEs are Dwarf fundamental types. */
7860 base_type_result
= new_die (DW_TAG_base_type
, comp_unit_die
, type
);
7861 if (demangle_name_func
)
7862 type_name
= (*demangle_name_func
) (type_name
);
7864 add_AT_string (base_type_result
, DW_AT_name
, type_name
);
7865 add_AT_unsigned (base_type_result
, DW_AT_byte_size
,
7866 int_size_in_bytes (type
));
7867 add_AT_unsigned (base_type_result
, DW_AT_encoding
, encoding
);
7869 return base_type_result
;
7872 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
7873 the Dwarf "root" type for the given input type. The Dwarf "root" type of
7874 a given type is generally the same as the given type, except that if the
7875 given type is a pointer or reference type, then the root type of the given
7876 type is the root type of the "basis" type for the pointer or reference
7877 type. (This definition of the "root" type is recursive.) Also, the root
7878 type of a `const' qualified type or a `volatile' qualified type is the
7879 root type of the given type without the qualifiers. */
7885 if (TREE_CODE (type
) == ERROR_MARK
)
7886 return error_mark_node
;
7888 switch (TREE_CODE (type
))
7891 return error_mark_node
;
7894 case REFERENCE_TYPE
:
7895 return type_main_variant (root_type (TREE_TYPE (type
)));
7898 return type_main_variant (type
);
7902 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
7903 given input type is a Dwarf "fundamental" type. Otherwise return null. */
7909 switch (TREE_CODE (type
))
7924 case QUAL_UNION_TYPE
:
7929 case REFERENCE_TYPE
:
7943 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
7944 node, return the size in bits for the type if it is a constant, or else
7945 return the alignment for the type if the type's size is not constant, or
7946 else return BITS_PER_WORD if the type actually turns out to be an
7949 static inline unsigned HOST_WIDE_INT
7950 simple_type_size_in_bits (type
)
7954 if (TREE_CODE (type
) == ERROR_MARK
)
7955 return BITS_PER_WORD
;
7956 else if (TYPE_SIZE (type
) == NULL_TREE
)
7958 else if (host_integerp (TYPE_SIZE (type
), 1))
7959 return tree_low_cst (TYPE_SIZE (type
), 1);
7961 return TYPE_ALIGN (type
);
7964 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
7965 entry that chains various modifiers in front of the given type. */
7968 modified_type_die (type
, is_const_type
, is_volatile_type
, context_die
)
7971 int is_volatile_type
;
7972 dw_die_ref context_die
;
7974 enum tree_code code
= TREE_CODE (type
);
7975 dw_die_ref mod_type_die
= NULL
;
7976 dw_die_ref sub_die
= NULL
;
7977 tree item_type
= NULL
;
7979 if (code
!= ERROR_MARK
)
7981 tree qualified_type
;
7983 /* See if we already have the appropriately qualified variant of
7986 = get_qualified_type (type
,
7987 ((is_const_type
? TYPE_QUAL_CONST
: 0)
7989 ? TYPE_QUAL_VOLATILE
: 0)));
7991 /* If we do, then we can just use its DIE, if it exists. */
7994 mod_type_die
= lookup_type_die (qualified_type
);
7996 return mod_type_die
;
7999 /* Handle C typedef types. */
8000 if (qualified_type
&& TYPE_NAME (qualified_type
)
8001 && TREE_CODE (TYPE_NAME (qualified_type
)) == TYPE_DECL
8002 && DECL_ORIGINAL_TYPE (TYPE_NAME (qualified_type
)))
8004 tree type_name
= TYPE_NAME (qualified_type
);
8005 tree dtype
= TREE_TYPE (type_name
);
8007 if (qualified_type
== dtype
)
8009 /* For a named type, use the typedef. */
8010 gen_type_die (qualified_type
, context_die
);
8011 mod_type_die
= lookup_type_die (qualified_type
);
8013 else if (is_const_type
< TYPE_READONLY (dtype
)
8014 || is_volatile_type
< TYPE_VOLATILE (dtype
))
8015 /* cv-unqualified version of named type. Just use the unnamed
8016 type to which it refers. */
8018 = modified_type_die (DECL_ORIGINAL_TYPE (type_name
),
8019 is_const_type
, is_volatile_type
,
8022 /* Else cv-qualified version of named type; fall through. */
8028 else if (is_const_type
)
8030 mod_type_die
= new_die (DW_TAG_const_type
, comp_unit_die
, type
);
8031 sub_die
= modified_type_die (type
, 0, is_volatile_type
, context_die
);
8033 else if (is_volatile_type
)
8035 mod_type_die
= new_die (DW_TAG_volatile_type
, comp_unit_die
, type
);
8036 sub_die
= modified_type_die (type
, 0, 0, context_die
);
8038 else if (code
== POINTER_TYPE
)
8040 mod_type_die
= new_die (DW_TAG_pointer_type
, comp_unit_die
, type
);
8041 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
,
8042 simple_type_size_in_bits (type
) / BITS_PER_UNIT
);
8044 add_AT_unsigned (mod_type_die
, DW_AT_address_class
, 0);
8046 item_type
= TREE_TYPE (type
);
8048 else if (code
== REFERENCE_TYPE
)
8050 mod_type_die
= new_die (DW_TAG_reference_type
, comp_unit_die
, type
);
8051 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
,
8052 simple_type_size_in_bits (type
) / BITS_PER_UNIT
);
8054 add_AT_unsigned (mod_type_die
, DW_AT_address_class
, 0);
8056 item_type
= TREE_TYPE (type
);
8058 else if (is_base_type (type
))
8059 mod_type_die
= base_type_die (type
);
8062 gen_type_die (type
, context_die
);
8064 /* We have to get the type_main_variant here (and pass that to the
8065 `lookup_type_die' routine) because the ..._TYPE node we have
8066 might simply be a *copy* of some original type node (where the
8067 copy was created to help us keep track of typedef names) and
8068 that copy might have a different TYPE_UID from the original
8070 if (TREE_CODE (type
) != VECTOR_TYPE
)
8071 mod_type_die
= lookup_type_die (type_main_variant (type
));
8073 /* Vectors have the debugging information in the type,
8074 not the main variant. */
8075 mod_type_die
= lookup_type_die (type
);
8076 if (mod_type_die
== NULL
)
8080 /* We want to equate the qualified type to the die below. */
8081 type
= qualified_type
;
8085 equate_type_number_to_die (type
, mod_type_die
);
8087 /* We must do this after the equate_type_number_to_die call, in case
8088 this is a recursive type. This ensures that the modified_type_die
8089 recursion will terminate even if the type is recursive. Recursive
8090 types are possible in Ada. */
8091 sub_die
= modified_type_die (item_type
,
8092 TYPE_READONLY (item_type
),
8093 TYPE_VOLATILE (item_type
),
8096 if (sub_die
!= NULL
)
8097 add_AT_die_ref (mod_type_die
, DW_AT_type
, sub_die
);
8099 return mod_type_die
;
8102 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8103 an enumerated type. */
8109 return TREE_CODE (type
) == ENUMERAL_TYPE
;
8112 /* Return the register number described by a given RTL node. */
8118 unsigned regno
= REGNO (rtl
);
8120 if (regno
>= FIRST_PSEUDO_REGISTER
)
8123 return DBX_REGISTER_NUMBER (regno
);
8126 /* Return a location descriptor that designates a machine register or
8127 zero if there is no such. */
8129 static dw_loc_descr_ref
8130 reg_loc_descriptor (rtl
)
8133 dw_loc_descr_ref loc_result
= NULL
;
8136 if (REGNO (rtl
) >= FIRST_PSEUDO_REGISTER
)
8139 reg
= reg_number (rtl
);
8141 loc_result
= new_loc_descr (DW_OP_reg0
+ reg
, 0, 0);
8143 loc_result
= new_loc_descr (DW_OP_regx
, reg
, 0);
8148 /* Return a location descriptor that designates a constant. */
8150 static dw_loc_descr_ref
8151 int_loc_descriptor (i
)
8154 enum dwarf_location_atom op
;
8156 /* Pick the smallest representation of a constant, rather than just
8157 defaulting to the LEB encoding. */
8161 op
= DW_OP_lit0
+ i
;
8164 else if (i
<= 0xffff)
8166 else if (HOST_BITS_PER_WIDE_INT
== 32
8176 else if (i
>= -0x8000)
8178 else if (HOST_BITS_PER_WIDE_INT
== 32
8179 || i
>= -0x80000000)
8185 return new_loc_descr (op
, i
, 0);
8188 /* Return a location descriptor that designates a base+offset location. */
8190 static dw_loc_descr_ref
8191 based_loc_descr (reg
, offset
)
8195 dw_loc_descr_ref loc_result
;
8196 /* For the "frame base", we use the frame pointer or stack pointer
8197 registers, since the RTL for local variables is relative to one of
8199 unsigned fp_reg
= DBX_REGISTER_NUMBER (frame_pointer_needed
8200 ? HARD_FRAME_POINTER_REGNUM
8201 : STACK_POINTER_REGNUM
);
8204 loc_result
= new_loc_descr (DW_OP_fbreg
, offset
, 0);
8206 loc_result
= new_loc_descr (DW_OP_breg0
+ reg
, offset
, 0);
8208 loc_result
= new_loc_descr (DW_OP_bregx
, reg
, offset
);
8213 /* Return true if this RTL expression describes a base+offset calculation. */
8219 return (GET_CODE (rtl
) == PLUS
8220 && ((GET_CODE (XEXP (rtl
, 0)) == REG
8221 && REGNO (XEXP (rtl
, 0)) < FIRST_PSEUDO_REGISTER
8222 && GET_CODE (XEXP (rtl
, 1)) == CONST_INT
)));
8225 /* The following routine converts the RTL for a variable or parameter
8226 (resident in memory) into an equivalent Dwarf representation of a
8227 mechanism for getting the address of that same variable onto the top of a
8228 hypothetical "address evaluation" stack.
8230 When creating memory location descriptors, we are effectively transforming
8231 the RTL for a memory-resident object into its Dwarf postfix expression
8232 equivalent. This routine recursively descends an RTL tree, turning
8233 it into Dwarf postfix code as it goes.
8235 MODE is the mode of the memory reference, needed to handle some
8236 autoincrement addressing modes.
8238 Return 0 if we can't represent the location. */
8240 static dw_loc_descr_ref
8241 mem_loc_descriptor (rtl
, mode
)
8243 enum machine_mode mode
;
8245 dw_loc_descr_ref mem_loc_result
= NULL
;
8247 /* Note that for a dynamically sized array, the location we will generate a
8248 description of here will be the lowest numbered location which is
8249 actually within the array. That's *not* necessarily the same as the
8250 zeroth element of the array. */
8252 #ifdef ASM_SIMPLIFY_DWARF_ADDR
8253 rtl
= ASM_SIMPLIFY_DWARF_ADDR (rtl
);
8256 switch (GET_CODE (rtl
))
8261 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
8262 just fall into the SUBREG code. */
8264 /* ... fall through ... */
8267 /* The case of a subreg may arise when we have a local (register)
8268 variable or a formal (register) parameter which doesn't quite fill
8269 up an entire register. For now, just assume that it is
8270 legitimate to make the Dwarf info refer to the whole register which
8271 contains the given subreg. */
8272 rtl
= SUBREG_REG (rtl
);
8274 /* ... fall through ... */
8277 /* Whenever a register number forms a part of the description of the
8278 method for calculating the (dynamic) address of a memory resident
8279 object, DWARF rules require the register number be referred to as
8280 a "base register". This distinction is not based in any way upon
8281 what category of register the hardware believes the given register
8282 belongs to. This is strictly DWARF terminology we're dealing with
8283 here. Note that in cases where the location of a memory-resident
8284 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8285 OP_CONST (0)) the actual DWARF location descriptor that we generate
8286 may just be OP_BASEREG (basereg). This may look deceptively like
8287 the object in question was allocated to a register (rather than in
8288 memory) so DWARF consumers need to be aware of the subtle
8289 distinction between OP_REG and OP_BASEREG. */
8290 if (REGNO (rtl
) < FIRST_PSEUDO_REGISTER
)
8291 mem_loc_result
= based_loc_descr (reg_number (rtl
), 0);
8295 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), GET_MODE (rtl
));
8296 if (mem_loc_result
!= 0)
8297 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_deref
, 0, 0));
8301 /* Some ports can transform a symbol ref into a label ref, because
8302 the symbol ref is too far away and has to be dumped into a constant
8306 /* Alternatively, the symbol in the constant pool might be referenced
8307 by a different symbol. */
8308 if (GET_CODE (rtl
) == SYMBOL_REF
&& CONSTANT_POOL_ADDRESS_P (rtl
))
8311 rtx tmp
= get_pool_constant_mark (rtl
, &marked
);
8313 if (GET_CODE (tmp
) == SYMBOL_REF
)
8316 if (CONSTANT_POOL_ADDRESS_P (tmp
))
8317 get_pool_constant_mark (tmp
, &marked
);
8322 /* If all references to this pool constant were optimized away,
8323 it was not output and thus we can't represent it.
8324 FIXME: might try to use DW_OP_const_value here, though
8325 DW_OP_piece complicates it. */
8330 mem_loc_result
= new_loc_descr (DW_OP_addr
, 0, 0);
8331 mem_loc_result
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
8332 mem_loc_result
->dw_loc_oprnd1
.v
.val_addr
= rtl
;
8333 VARRAY_PUSH_RTX (used_rtx_varray
, rtl
);
8337 /* Extract the PLUS expression nested inside and fall into
8339 rtl
= XEXP (rtl
, 1);
8344 /* Turn these into a PLUS expression and fall into the PLUS code
8346 rtl
= gen_rtx_PLUS (word_mode
, XEXP (rtl
, 0),
8347 GEN_INT (GET_CODE (rtl
) == PRE_INC
8348 ? GET_MODE_UNIT_SIZE (mode
)
8349 : -GET_MODE_UNIT_SIZE (mode
)));
8351 /* ... fall through ... */
8355 if (is_based_loc (rtl
))
8356 mem_loc_result
= based_loc_descr (reg_number (XEXP (rtl
, 0)),
8357 INTVAL (XEXP (rtl
, 1)));
8360 mem_loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), mode
);
8361 if (mem_loc_result
== 0)
8364 if (GET_CODE (XEXP (rtl
, 1)) == CONST_INT
8365 && INTVAL (XEXP (rtl
, 1)) >= 0)
8366 add_loc_descr (&mem_loc_result
,
8367 new_loc_descr (DW_OP_plus_uconst
,
8368 INTVAL (XEXP (rtl
, 1)), 0));
8371 add_loc_descr (&mem_loc_result
,
8372 mem_loc_descriptor (XEXP (rtl
, 1), mode
));
8373 add_loc_descr (&mem_loc_result
,
8374 new_loc_descr (DW_OP_plus
, 0, 0));
8381 /* If a pseudo-reg is optimized away, it is possible for it to
8382 be replaced with a MEM containing a multiply. */
8383 dw_loc_descr_ref op0
= mem_loc_descriptor (XEXP (rtl
, 0), mode
);
8384 dw_loc_descr_ref op1
= mem_loc_descriptor (XEXP (rtl
, 1), mode
);
8386 if (op0
== 0 || op1
== 0)
8389 mem_loc_result
= op0
;
8390 add_loc_descr (&mem_loc_result
, op1
);
8391 add_loc_descr (&mem_loc_result
, new_loc_descr (DW_OP_mul
, 0, 0));
8396 mem_loc_result
= int_loc_descriptor (INTVAL (rtl
));
8400 /* If this is a MEM, return its address. Otherwise, we can't
8402 if (GET_CODE (XEXP (rtl
, 0)) == MEM
)
8403 return mem_loc_descriptor (XEXP (XEXP (rtl
, 0), 0), mode
);
8411 return mem_loc_result
;
8414 /* Return a descriptor that describes the concatenation of two locations.
8415 This is typically a complex variable. */
8417 static dw_loc_descr_ref
8418 concat_loc_descriptor (x0
, x1
)
8421 dw_loc_descr_ref cc_loc_result
= NULL
;
8422 dw_loc_descr_ref x0_ref
= loc_descriptor (x0
);
8423 dw_loc_descr_ref x1_ref
= loc_descriptor (x1
);
8425 if (x0_ref
== 0 || x1_ref
== 0)
8428 cc_loc_result
= x0_ref
;
8429 add_loc_descr (&cc_loc_result
,
8430 new_loc_descr (DW_OP_piece
,
8431 GET_MODE_SIZE (GET_MODE (x0
)), 0));
8433 add_loc_descr (&cc_loc_result
, x1_ref
);
8434 add_loc_descr (&cc_loc_result
,
8435 new_loc_descr (DW_OP_piece
,
8436 GET_MODE_SIZE (GET_MODE (x1
)), 0));
8438 return cc_loc_result
;
8441 /* Output a proper Dwarf location descriptor for a variable or parameter
8442 which is either allocated in a register or in a memory location. For a
8443 register, we just generate an OP_REG and the register number. For a
8444 memory location we provide a Dwarf postfix expression describing how to
8445 generate the (dynamic) address of the object onto the address stack.
8447 If we don't know how to describe it, return 0. */
8449 static dw_loc_descr_ref
8450 loc_descriptor (rtl
)
8453 dw_loc_descr_ref loc_result
= NULL
;
8455 switch (GET_CODE (rtl
))
8458 /* The case of a subreg may arise when we have a local (register)
8459 variable or a formal (register) parameter which doesn't quite fill
8460 up an entire register. For now, just assume that it is
8461 legitimate to make the Dwarf info refer to the whole register which
8462 contains the given subreg. */
8463 rtl
= SUBREG_REG (rtl
);
8465 /* ... fall through ... */
8468 loc_result
= reg_loc_descriptor (rtl
);
8472 loc_result
= mem_loc_descriptor (XEXP (rtl
, 0), GET_MODE (rtl
));
8476 loc_result
= concat_loc_descriptor (XEXP (rtl
, 0), XEXP (rtl
, 1));
8486 /* Similar, but generate the descriptor from trees instead of rtl. This comes
8487 up particularly with variable length arrays. If ADDRESSP is nonzero, we are
8488 looking for an address. Otherwise, we return a value. If we can't make a
8489 descriptor, return 0. */
8491 static dw_loc_descr_ref
8492 loc_descriptor_from_tree (loc
, addressp
)
8496 dw_loc_descr_ref ret
, ret1
;
8498 int unsignedp
= TREE_UNSIGNED (TREE_TYPE (loc
));
8499 enum dwarf_location_atom op
;
8501 /* ??? Most of the time we do not take proper care for sign/zero
8502 extending the values properly. Hopefully this won't be a real
8505 switch (TREE_CODE (loc
))
8510 case WITH_RECORD_EXPR
:
8511 case PLACEHOLDER_EXPR
:
8512 /* This case involves extracting fields from an object to determine the
8513 position of other fields. We don't try to encode this here. The
8514 only user of this is Ada, which encodes the needed information using
8515 the names of types. */
8522 /* We can support this only if we can look through conversions and
8523 find an INDIRECT_EXPR. */
8524 for (loc
= TREE_OPERAND (loc
, 0);
8525 TREE_CODE (loc
) == CONVERT_EXPR
|| TREE_CODE (loc
) == NOP_EXPR
8526 || TREE_CODE (loc
) == NON_LVALUE_EXPR
8527 || TREE_CODE (loc
) == VIEW_CONVERT_EXPR
8528 || TREE_CODE (loc
) == SAVE_EXPR
;
8529 loc
= TREE_OPERAND (loc
, 0))
8532 return (TREE_CODE (loc
) == INDIRECT_REF
8533 ? loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), addressp
)
8537 if (DECL_THREAD_LOCAL (loc
))
8541 #ifndef ASM_OUTPUT_DWARF_DTPREL
8542 /* If this is not defined, we have no way to emit the data. */
8546 /* The way DW_OP_GNU_push_tls_address is specified, we can only
8547 look up addresses of objects in the current module. */
8548 if (DECL_EXTERNAL (loc
))
8551 rtl
= rtl_for_decl_location (loc
);
8552 if (rtl
== NULL_RTX
)
8555 if (GET_CODE (rtl
) != MEM
)
8557 rtl
= XEXP (rtl
, 0);
8558 if (! CONSTANT_P (rtl
))
8561 ret
= new_loc_descr (INTERNAL_DW_OP_tls_addr
, 0, 0);
8562 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
8563 ret
->dw_loc_oprnd1
.v
.val_addr
= rtl
;
8565 ret1
= new_loc_descr (DW_OP_GNU_push_tls_address
, 0, 0);
8566 add_loc_descr (&ret
, ret1
);
8575 rtx rtl
= rtl_for_decl_location (loc
);
8577 if (rtl
== NULL_RTX
)
8579 else if (CONSTANT_P (rtl
))
8581 ret
= new_loc_descr (DW_OP_addr
, 0, 0);
8582 ret
->dw_loc_oprnd1
.val_class
= dw_val_class_addr
;
8583 ret
->dw_loc_oprnd1
.v
.val_addr
= rtl
;
8588 enum machine_mode mode
= GET_MODE (rtl
);
8590 if (GET_CODE (rtl
) == MEM
)
8593 rtl
= XEXP (rtl
, 0);
8596 ret
= mem_loc_descriptor (rtl
, mode
);
8602 ret
= loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), 0);
8607 return loc_descriptor_from_tree (TREE_OPERAND (loc
, 1), addressp
);
8611 case NON_LVALUE_EXPR
:
8612 case VIEW_CONVERT_EXPR
:
8614 return loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), addressp
);
8619 case ARRAY_RANGE_REF
:
8622 HOST_WIDE_INT bitsize
, bitpos
, bytepos
;
8623 enum machine_mode mode
;
8626 obj
= get_inner_reference (loc
, &bitsize
, &bitpos
, &offset
, &mode
,
8627 &unsignedp
, &volatilep
);
8632 ret
= loc_descriptor_from_tree (obj
, 1);
8634 || bitpos
% BITS_PER_UNIT
!= 0 || bitsize
% BITS_PER_UNIT
!= 0)
8637 if (offset
!= NULL_TREE
)
8639 /* Variable offset. */
8640 add_loc_descr (&ret
, loc_descriptor_from_tree (offset
, 0));
8641 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus
, 0, 0));
8647 bytepos
= bitpos
/ BITS_PER_UNIT
;
8649 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus_uconst
, bytepos
, 0));
8650 else if (bytepos
< 0)
8652 add_loc_descr (&ret
, int_loc_descriptor (bytepos
));
8653 add_loc_descr (&ret
, new_loc_descr (DW_OP_plus
, 0, 0));
8659 if (host_integerp (loc
, 0))
8660 ret
= int_loc_descriptor (tree_low_cst (loc
, 0));
8665 case TRUTH_AND_EXPR
:
8666 case TRUTH_ANDIF_EXPR
:
8671 case TRUTH_XOR_EXPR
:
8677 case TRUTH_ORIF_EXPR
:
8682 case TRUNC_DIV_EXPR
:
8690 case TRUNC_MOD_EXPR
:
8703 op
= (unsignedp
? DW_OP_shr
: DW_OP_shra
);
8707 if (TREE_CODE (TREE_OPERAND (loc
, 1)) == INTEGER_CST
8708 && host_integerp (TREE_OPERAND (loc
, 1), 0))
8710 ret
= loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), 0);
8714 add_loc_descr (&ret
,
8715 new_loc_descr (DW_OP_plus_uconst
,
8716 tree_low_cst (TREE_OPERAND (loc
, 1),
8726 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
8733 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
8740 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
8747 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc
, 0))))
8762 ret
= loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), 0);
8763 ret1
= loc_descriptor_from_tree (TREE_OPERAND (loc
, 1), 0);
8764 if (ret
== 0 || ret1
== 0)
8767 add_loc_descr (&ret
, ret1
);
8768 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
8771 case TRUTH_NOT_EXPR
:
8785 ret
= loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), 0);
8789 add_loc_descr (&ret
, new_loc_descr (op
, 0, 0));
8793 loc
= build (COND_EXPR
, TREE_TYPE (loc
),
8794 build (LT_EXPR
, integer_type_node
,
8795 TREE_OPERAND (loc
, 0), TREE_OPERAND (loc
, 1)),
8796 TREE_OPERAND (loc
, 1), TREE_OPERAND (loc
, 0));
8798 /* ... fall through ... */
8802 dw_loc_descr_ref lhs
8803 = loc_descriptor_from_tree (TREE_OPERAND (loc
, 1), 0);
8804 dw_loc_descr_ref rhs
8805 = loc_descriptor_from_tree (TREE_OPERAND (loc
, 2), 0);
8806 dw_loc_descr_ref bra_node
, jump_node
, tmp
;
8808 ret
= loc_descriptor_from_tree (TREE_OPERAND (loc
, 0), 0);
8809 if (ret
== 0 || lhs
== 0 || rhs
== 0)
8812 bra_node
= new_loc_descr (DW_OP_bra
, 0, 0);
8813 add_loc_descr (&ret
, bra_node
);
8815 add_loc_descr (&ret
, rhs
);
8816 jump_node
= new_loc_descr (DW_OP_skip
, 0, 0);
8817 add_loc_descr (&ret
, jump_node
);
8819 add_loc_descr (&ret
, lhs
);
8820 bra_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
8821 bra_node
->dw_loc_oprnd1
.v
.val_loc
= lhs
;
8823 /* ??? Need a node to point the skip at. Use a nop. */
8824 tmp
= new_loc_descr (DW_OP_nop
, 0, 0);
8825 add_loc_descr (&ret
, tmp
);
8826 jump_node
->dw_loc_oprnd1
.val_class
= dw_val_class_loc
;
8827 jump_node
->dw_loc_oprnd1
.v
.val_loc
= tmp
;
8835 /* Show if we can't fill the request for an address. */
8836 if (addressp
&& indirect_p
== 0)
8839 /* If we've got an address and don't want one, dereference. */
8840 if (!addressp
&& indirect_p
> 0)
8842 HOST_WIDE_INT size
= int_size_in_bytes (TREE_TYPE (loc
));
8844 if (size
> DWARF2_ADDR_SIZE
|| size
== -1)
8846 else if (size
== DWARF2_ADDR_SIZE
)
8849 op
= DW_OP_deref_size
;
8851 add_loc_descr (&ret
, new_loc_descr (op
, size
, 0));
8857 /* Given a value, round it up to the lowest multiple of `boundary'
8858 which is not less than the value itself. */
8860 static inline HOST_WIDE_INT
8861 ceiling (value
, boundary
)
8862 HOST_WIDE_INT value
;
8863 unsigned int boundary
;
8865 return (((value
+ boundary
- 1) / boundary
) * boundary
);
8868 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
8869 pointer to the declared type for the relevant field variable, or return
8870 `integer_type_node' if the given node turns out to be an
8879 if (TREE_CODE (decl
) == ERROR_MARK
)
8880 return integer_type_node
;
8882 type
= DECL_BIT_FIELD_TYPE (decl
);
8883 if (type
== NULL_TREE
)
8884 type
= TREE_TYPE (decl
);
8889 /* Given a pointer to a tree node, return the alignment in bits for
8890 it, or else return BITS_PER_WORD if the node actually turns out to
8891 be an ERROR_MARK node. */
8893 static inline unsigned
8894 simple_type_align_in_bits (type
)
8897 return (TREE_CODE (type
) != ERROR_MARK
) ? TYPE_ALIGN (type
) : BITS_PER_WORD
;
8900 static inline unsigned
8901 simple_decl_align_in_bits (decl
)
8904 return (TREE_CODE (decl
) != ERROR_MARK
) ? DECL_ALIGN (decl
) : BITS_PER_WORD
;
8907 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
8908 lowest addressed byte of the "containing object" for the given FIELD_DECL,
8909 or return 0 if we are unable to determine what that offset is, either
8910 because the argument turns out to be a pointer to an ERROR_MARK node, or
8911 because the offset is actually variable. (We can't handle the latter case
8914 static HOST_WIDE_INT
8915 field_byte_offset (decl
)
8918 unsigned int type_align_in_bits
;
8919 unsigned int decl_align_in_bits
;
8920 unsigned HOST_WIDE_INT type_size_in_bits
;
8921 HOST_WIDE_INT object_offset_in_bits
;
8923 tree field_size_tree
;
8924 HOST_WIDE_INT bitpos_int
;
8925 HOST_WIDE_INT deepest_bitpos
;
8926 unsigned HOST_WIDE_INT field_size_in_bits
;
8928 if (TREE_CODE (decl
) == ERROR_MARK
)
8930 else if (TREE_CODE (decl
) != FIELD_DECL
)
8933 type
= field_type (decl
);
8934 field_size_tree
= DECL_SIZE (decl
);
8936 /* The size could be unspecified if there was an error, or for
8937 a flexible array member. */
8938 if (! field_size_tree
)
8939 field_size_tree
= bitsize_zero_node
;
8941 /* We cannot yet cope with fields whose positions are variable, so
8942 for now, when we see such things, we simply return 0. Someday, we may
8943 be able to handle such cases, but it will be damn difficult. */
8944 if (! host_integerp (bit_position (decl
), 0))
8947 bitpos_int
= int_bit_position (decl
);
8949 /* If we don't know the size of the field, pretend it's a full word. */
8950 if (host_integerp (field_size_tree
, 1))
8951 field_size_in_bits
= tree_low_cst (field_size_tree
, 1);
8953 field_size_in_bits
= BITS_PER_WORD
;
8955 type_size_in_bits
= simple_type_size_in_bits (type
);
8956 type_align_in_bits
= simple_type_align_in_bits (type
);
8957 decl_align_in_bits
= simple_decl_align_in_bits (decl
);
8959 /* The GCC front-end doesn't make any attempt to keep track of the starting
8960 bit offset (relative to the start of the containing structure type) of the
8961 hypothetical "containing object" for a bit-field. Thus, when computing
8962 the byte offset value for the start of the "containing object" of a
8963 bit-field, we must deduce this information on our own. This can be rather
8964 tricky to do in some cases. For example, handling the following structure
8965 type definition when compiling for an i386/i486 target (which only aligns
8966 long long's to 32-bit boundaries) can be very tricky:
8968 struct S { int field1; long long field2:31; };
8970 Fortunately, there is a simple rule-of-thumb which can be used in such
8971 cases. When compiling for an i386/i486, GCC will allocate 8 bytes for the
8972 structure shown above. It decides to do this based upon one simple rule
8973 for bit-field allocation. GCC allocates each "containing object" for each
8974 bit-field at the first (i.e. lowest addressed) legitimate alignment
8975 boundary (based upon the required minimum alignment for the declared type
8976 of the field) which it can possibly use, subject to the condition that
8977 there is still enough available space remaining in the containing object
8978 (when allocated at the selected point) to fully accommodate all of the
8979 bits of the bit-field itself.
8981 This simple rule makes it obvious why GCC allocates 8 bytes for each
8982 object of the structure type shown above. When looking for a place to
8983 allocate the "containing object" for `field2', the compiler simply tries
8984 to allocate a 64-bit "containing object" at each successive 32-bit
8985 boundary (starting at zero) until it finds a place to allocate that 64-
8986 bit field such that at least 31 contiguous (and previously unallocated)
8987 bits remain within that selected 64 bit field. (As it turns out, for the
8988 example above, the compiler finds it is OK to allocate the "containing
8989 object" 64-bit field at bit-offset zero within the structure type.)
8991 Here we attempt to work backwards from the limited set of facts we're
8992 given, and we try to deduce from those facts, where GCC must have believed
8993 that the containing object started (within the structure type). The value
8994 we deduce is then used (by the callers of this routine) to generate
8995 DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
8996 and, in the case of DW_AT_location, regular fields as well). */
8998 /* Figure out the bit-distance from the start of the structure to the
8999 "deepest" bit of the bit-field. */
9000 deepest_bitpos
= bitpos_int
+ field_size_in_bits
;
9002 /* This is the tricky part. Use some fancy footwork to deduce where the
9003 lowest addressed bit of the containing object must be. */
9004 object_offset_in_bits
= deepest_bitpos
- type_size_in_bits
;
9006 /* Round up to type_align by default. This works best for bitfields. */
9007 object_offset_in_bits
+= type_align_in_bits
- 1;
9008 object_offset_in_bits
/= type_align_in_bits
;
9009 object_offset_in_bits
*= type_align_in_bits
;
9011 if (object_offset_in_bits
> bitpos_int
)
9013 /* Sigh, the decl must be packed. */
9014 object_offset_in_bits
= deepest_bitpos
- type_size_in_bits
;
9016 /* Round up to decl_align instead. */
9017 object_offset_in_bits
+= decl_align_in_bits
- 1;
9018 object_offset_in_bits
/= decl_align_in_bits
;
9019 object_offset_in_bits
*= decl_align_in_bits
;
9022 return object_offset_in_bits
/ BITS_PER_UNIT
;
9025 /* The following routines define various Dwarf attributes and any data
9026 associated with them. */
9028 /* Add a location description attribute value to a DIE.
9030 This emits location attributes suitable for whole variables and
9031 whole parameters. Note that the location attributes for struct fields are
9032 generated by the routine `data_member_location_attribute' below. */
9035 add_AT_location_description (die
, attr_kind
, descr
)
9037 enum dwarf_attribute attr_kind
;
9038 dw_loc_descr_ref descr
;
9041 add_AT_loc (die
, attr_kind
, descr
);
9044 /* Attach the specialized form of location attribute used for data members of
9045 struct and union types. In the special case of a FIELD_DECL node which
9046 represents a bit-field, the "offset" part of this special location
9047 descriptor must indicate the distance in bytes from the lowest-addressed
9048 byte of the containing struct or union type to the lowest-addressed byte of
9049 the "containing object" for the bit-field. (See the `field_byte_offset'
9052 For any given bit-field, the "containing object" is a hypothetical object
9053 (of some integral or enum type) within which the given bit-field lives. The
9054 type of this hypothetical "containing object" is always the same as the
9055 declared type of the individual bit-field itself (for GCC anyway... the
9056 DWARF spec doesn't actually mandate this). Note that it is the size (in
9057 bytes) of the hypothetical "containing object" which will be given in the
9058 DW_AT_byte_size attribute for this bit-field. (See the
9059 `byte_size_attribute' function below.) It is also used when calculating the
9060 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
9064 add_data_member_location_attribute (die
, decl
)
9069 dw_loc_descr_ref loc_descr
= 0;
9071 if (TREE_CODE (decl
) == TREE_VEC
)
9073 /* We're working on the TAG_inheritance for a base class. */
9074 if (TREE_VIA_VIRTUAL (decl
) && is_cxx ())
9076 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9077 aren't at a fixed offset from all (sub)objects of the same
9078 type. We need to extract the appropriate offset from our
9079 vtable. The following dwarf expression means
9081 BaseAddr = ObAddr + *((*ObAddr) - Offset)
9083 This is specific to the V3 ABI, of course. */
9085 dw_loc_descr_ref tmp
;
9087 /* Make a copy of the object address. */
9088 tmp
= new_loc_descr (DW_OP_dup
, 0, 0);
9089 add_loc_descr (&loc_descr
, tmp
);
9091 /* Extract the vtable address. */
9092 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
9093 add_loc_descr (&loc_descr
, tmp
);
9095 /* Calculate the address of the offset. */
9096 offset
= tree_low_cst (BINFO_VPTR_FIELD (decl
), 0);
9100 tmp
= int_loc_descriptor (-offset
);
9101 add_loc_descr (&loc_descr
, tmp
);
9102 tmp
= new_loc_descr (DW_OP_minus
, 0, 0);
9103 add_loc_descr (&loc_descr
, tmp
);
9105 /* Extract the offset. */
9106 tmp
= new_loc_descr (DW_OP_deref
, 0, 0);
9107 add_loc_descr (&loc_descr
, tmp
);
9109 /* Add it to the object address. */
9110 tmp
= new_loc_descr (DW_OP_plus
, 0, 0);
9111 add_loc_descr (&loc_descr
, tmp
);
9114 offset
= tree_low_cst (BINFO_OFFSET (decl
), 0);
9117 offset
= field_byte_offset (decl
);
9121 enum dwarf_location_atom op
;
9123 /* The DWARF2 standard says that we should assume that the structure
9124 address is already on the stack, so we can specify a structure field
9125 address by using DW_OP_plus_uconst. */
9127 #ifdef MIPS_DEBUGGING_INFO
9128 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9129 operator correctly. It works only if we leave the offset on the
9133 op
= DW_OP_plus_uconst
;
9136 loc_descr
= new_loc_descr (op
, offset
, 0);
9139 add_AT_loc (die
, DW_AT_data_member_location
, loc_descr
);
9142 /* Attach an DW_AT_const_value attribute for a variable or a parameter which
9143 does not have a "location" either in memory or in a register. These
9144 things can arise in GNU C when a constant is passed as an actual parameter
9145 to an inlined function. They can also arise in C++ where declared
9146 constants do not necessarily get memory "homes". */
9149 add_const_value_attribute (die
, rtl
)
9153 switch (GET_CODE (rtl
))
9156 /* Note that a CONST_INT rtx could represent either an integer
9157 or a floating-point constant. A CONST_INT is used whenever
9158 the constant will fit into a single word. In all such
9159 cases, the original mode of the constant value is wiped
9160 out, and the CONST_INT rtx is assigned VOIDmode. */
9162 HOST_WIDE_INT val
= INTVAL (rtl
);
9164 /* ??? We really should be using HOST_WIDE_INT throughout. */
9165 if (val
< 0 && (long) val
== val
)
9166 add_AT_int (die
, DW_AT_const_value
, (long) val
);
9167 else if ((unsigned long) val
== (unsigned HOST_WIDE_INT
) val
)
9168 add_AT_unsigned (die
, DW_AT_const_value
, (unsigned long) val
);
9171 #if HOST_BITS_PER_LONG * 2 == HOST_BITS_PER_WIDE_INT
9172 add_AT_long_long (die
, DW_AT_const_value
,
9173 val
>> HOST_BITS_PER_LONG
, val
);
9182 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9183 floating-point constant. A CONST_DOUBLE is used whenever the
9184 constant requires more than one word in order to be adequately
9185 represented. We output CONST_DOUBLEs as blocks. */
9187 enum machine_mode mode
= GET_MODE (rtl
);
9189 if (GET_MODE_CLASS (mode
) == MODE_FLOAT
)
9191 unsigned length
= GET_MODE_SIZE (mode
) / 4;
9192 long *array
= (long *) ggc_alloc (sizeof (long) * length
);
9195 REAL_VALUE_FROM_CONST_DOUBLE (rv
, rtl
);
9199 REAL_VALUE_TO_TARGET_SINGLE (rv
, array
[0]);
9203 REAL_VALUE_TO_TARGET_DOUBLE (rv
, array
);
9208 REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv
, array
);
9215 add_AT_float (die
, DW_AT_const_value
, length
, array
);
9219 /* ??? We really should be using HOST_WIDE_INT throughout. */
9220 if (HOST_BITS_PER_LONG
!= HOST_BITS_PER_WIDE_INT
)
9223 add_AT_long_long (die
, DW_AT_const_value
,
9224 CONST_DOUBLE_HIGH (rtl
), CONST_DOUBLE_LOW (rtl
));
9230 add_AT_string (die
, DW_AT_const_value
, XSTR (rtl
, 0));
9236 add_AT_addr (die
, DW_AT_const_value
, rtl
);
9237 VARRAY_PUSH_RTX (used_rtx_varray
, rtl
);
9241 /* In cases where an inlined instance of an inline function is passed
9242 the address of an `auto' variable (which is local to the caller) we
9243 can get a situation where the DECL_RTL of the artificial local
9244 variable (for the inlining) which acts as a stand-in for the
9245 corresponding formal parameter (of the inline function) will look
9246 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
9247 exactly a compile-time constant expression, but it isn't the address
9248 of the (artificial) local variable either. Rather, it represents the
9249 *value* which the artificial local variable always has during its
9250 lifetime. We currently have no way to represent such quasi-constant
9251 values in Dwarf, so for now we just punt and generate nothing. */
9255 /* No other kinds of rtx should be possible here. */
9262 rtl_for_decl_location (decl
)
9267 /* Here we have to decide where we are going to say the parameter "lives"
9268 (as far as the debugger is concerned). We only have a couple of
9269 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
9271 DECL_RTL normally indicates where the parameter lives during most of the
9272 activation of the function. If optimization is enabled however, this
9273 could be either NULL or else a pseudo-reg. Both of those cases indicate
9274 that the parameter doesn't really live anywhere (as far as the code
9275 generation parts of GCC are concerned) during most of the function's
9276 activation. That will happen (for example) if the parameter is never
9277 referenced within the function.
9279 We could just generate a location descriptor here for all non-NULL
9280 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
9281 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
9282 where DECL_RTL is NULL or is a pseudo-reg.
9284 Note however that we can only get away with using DECL_INCOMING_RTL as
9285 a backup substitute for DECL_RTL in certain limited cases. In cases
9286 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
9287 we can be sure that the parameter was passed using the same type as it is
9288 declared to have within the function, and that its DECL_INCOMING_RTL
9289 points us to a place where a value of that type is passed.
9291 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
9292 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
9293 because in these cases DECL_INCOMING_RTL points us to a value of some
9294 type which is *different* from the type of the parameter itself. Thus,
9295 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
9296 such cases, the debugger would end up (for example) trying to fetch a
9297 `float' from a place which actually contains the first part of a
9298 `double'. That would lead to really incorrect and confusing
9299 output at debug-time.
9301 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
9302 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
9303 are a couple of exceptions however. On little-endian machines we can
9304 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
9305 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
9306 an integral type that is smaller than TREE_TYPE (decl). These cases arise
9307 when (on a little-endian machine) a non-prototyped function has a
9308 parameter declared to be of type `short' or `char'. In such cases,
9309 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
9310 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
9311 passed `int' value. If the debugger then uses that address to fetch
9312 a `short' or a `char' (on a little-endian machine) the result will be
9313 the correct data, so we allow for such exceptional cases below.
9315 Note that our goal here is to describe the place where the given formal
9316 parameter lives during most of the function's activation (i.e. between the
9317 end of the prologue and the start of the epilogue). We'll do that as best
9318 as we can. Note however that if the given formal parameter is modified
9319 sometime during the execution of the function, then a stack backtrace (at
9320 debug-time) will show the function as having been called with the *new*
9321 value rather than the value which was originally passed in. This happens
9322 rarely enough that it is not a major problem, but it *is* a problem, and
9325 A future version of dwarf2out.c may generate two additional attributes for
9326 any given DW_TAG_formal_parameter DIE which will describe the "passed
9327 type" and the "passed location" for the given formal parameter in addition
9328 to the attributes we now generate to indicate the "declared type" and the
9329 "active location" for each parameter. This additional set of attributes
9330 could be used by debuggers for stack backtraces. Separately, note that
9331 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
9332 This happens (for example) for inlined-instances of inline function formal
9333 parameters which are never referenced. This really shouldn't be
9334 happening. All PARM_DECL nodes should get valid non-NULL
9335 DECL_INCOMING_RTL values, but integrate.c doesn't currently generate these
9336 values for inlined instances of inline function parameters, so when we see
9337 such cases, we are just out-of-luck for the time being (until integrate.c
9340 /* Use DECL_RTL as the "location" unless we find something better. */
9341 rtl
= DECL_RTL_IF_SET (decl
);
9343 /* When generating abstract instances, ignore everything except
9344 constants and symbols living in memory. */
9345 if (! reload_completed
)
9348 && (CONSTANT_P (rtl
)
9349 || (GET_CODE (rtl
) == MEM
9350 && CONSTANT_P (XEXP (rtl
, 0)))))
9352 #ifdef ASM_SIMPLIFY_DWARF_ADDR
9353 rtl
= ASM_SIMPLIFY_DWARF_ADDR (rtl
);
9359 else if (TREE_CODE (decl
) == PARM_DECL
)
9361 if (rtl
== NULL_RTX
|| is_pseudo_reg (rtl
))
9363 tree declared_type
= type_main_variant (TREE_TYPE (decl
));
9364 tree passed_type
= type_main_variant (DECL_ARG_TYPE (decl
));
9366 /* This decl represents a formal parameter which was optimized out.
9367 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
9368 all cases where (rtl == NULL_RTX) just below. */
9369 if (declared_type
== passed_type
)
9370 rtl
= DECL_INCOMING_RTL (decl
);
9371 else if (! BYTES_BIG_ENDIAN
9372 && TREE_CODE (declared_type
) == INTEGER_TYPE
9373 && (GET_MODE_SIZE (TYPE_MODE (declared_type
))
9374 <= GET_MODE_SIZE (TYPE_MODE (passed_type
))))
9375 rtl
= DECL_INCOMING_RTL (decl
);
9378 /* If the parm was passed in registers, but lives on the stack, then
9379 make a big endian correction if the mode of the type of the
9380 parameter is not the same as the mode of the rtl. */
9381 /* ??? This is the same series of checks that are made in dbxout.c before
9382 we reach the big endian correction code there. It isn't clear if all
9383 of these checks are necessary here, but keeping them all is the safe
9385 else if (GET_CODE (rtl
) == MEM
9386 && XEXP (rtl
, 0) != const0_rtx
9387 && ! CONSTANT_P (XEXP (rtl
, 0))
9388 /* Not passed in memory. */
9389 && GET_CODE (DECL_INCOMING_RTL (decl
)) != MEM
9390 /* Not passed by invisible reference. */
9391 && (GET_CODE (XEXP (rtl
, 0)) != REG
9392 || REGNO (XEXP (rtl
, 0)) == HARD_FRAME_POINTER_REGNUM
9393 || REGNO (XEXP (rtl
, 0)) == STACK_POINTER_REGNUM
9394 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
9395 || REGNO (XEXP (rtl
, 0)) == ARG_POINTER_REGNUM
9398 /* Big endian correction check. */
9400 && TYPE_MODE (TREE_TYPE (decl
)) != GET_MODE (rtl
)
9401 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
)))
9404 int offset
= (UNITS_PER_WORD
9405 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl
))));
9407 rtl
= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl
)),
9408 plus_constant (XEXP (rtl
, 0), offset
));
9412 if (rtl
!= NULL_RTX
)
9414 rtl
= eliminate_regs (rtl
, 0, NULL_RTX
);
9415 #ifdef LEAF_REG_REMAP
9416 if (current_function_uses_only_leaf_regs
)
9417 leaf_renumber_regs_insn (rtl
);
9421 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
9422 and will have been substituted directly into all expressions that use it.
9423 C does not have such a concept, but C++ and other languages do. */
9424 else if (TREE_CODE (decl
) == VAR_DECL
&& DECL_INITIAL (decl
))
9426 /* If a variable is initialized with a string constant without embedded
9427 zeros, build CONST_STRING. */
9428 if (TREE_CODE (DECL_INITIAL (decl
)) == STRING_CST
9429 && TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
)
9431 tree arrtype
= TREE_TYPE (decl
);
9432 tree enttype
= TREE_TYPE (arrtype
);
9433 tree domain
= TYPE_DOMAIN (arrtype
);
9434 tree init
= DECL_INITIAL (decl
);
9435 enum machine_mode mode
= TYPE_MODE (enttype
);
9437 if (GET_MODE_CLASS (mode
) == MODE_INT
&& GET_MODE_SIZE (mode
) == 1
9439 && integer_zerop (TYPE_MIN_VALUE (domain
))
9440 && compare_tree_int (TYPE_MAX_VALUE (domain
),
9441 TREE_STRING_LENGTH (init
) - 1) == 0
9442 && ((size_t) TREE_STRING_LENGTH (init
)
9443 == strlen (TREE_STRING_POINTER (init
)) + 1))
9444 rtl
= gen_rtx_CONST_STRING (VOIDmode
, TREE_STRING_POINTER (init
));
9446 /* If the initializer is something that we know will expand into an
9447 immediate RTL constant, expand it now. Expanding anything else
9448 tends to produce unresolved symbols; see debug/5770 and c++/6381. */
9449 else if (TREE_CODE (DECL_INITIAL (decl
)) == INTEGER_CST
9450 || TREE_CODE (DECL_INITIAL (decl
)) == REAL_CST
)
9452 rtl
= expand_expr (DECL_INITIAL (decl
), NULL_RTX
, VOIDmode
,
9453 EXPAND_INITIALIZER
);
9454 /* If expand_expr returns a MEM, it wasn't immediate. */
9455 if (rtl
&& GET_CODE (rtl
) == MEM
)
9460 #ifdef ASM_SIMPLIFY_DWARF_ADDR
9462 rtl
= ASM_SIMPLIFY_DWARF_ADDR (rtl
);
9465 /* If we don't look past the constant pool, we risk emitting a
9466 reference to a constant pool entry that isn't referenced from
9467 code, and thus is not emitted. */
9469 rtl
= avoid_constant_pool_reference (rtl
);
9474 /* Generate *either* an DW_AT_location attribute or else an DW_AT_const_value
9475 data attribute for a variable or a parameter. We generate the
9476 DW_AT_const_value attribute only in those cases where the given variable
9477 or parameter does not have a true "location" either in memory or in a
9478 register. This can happen (for example) when a constant is passed as an
9479 actual argument in a call to an inline function. (It's possible that
9480 these things can crop up in other ways also.) Note that one type of
9481 constant value which can be passed into an inlined function is a constant
9482 pointer. This can happen for example if an actual argument in an inlined
9483 function call evaluates to a compile-time constant address. */
9486 add_location_or_const_value_attribute (die
, decl
)
9491 dw_loc_descr_ref descr
;
9493 if (TREE_CODE (decl
) == ERROR_MARK
)
9495 else if (TREE_CODE (decl
) != VAR_DECL
&& TREE_CODE (decl
) != PARM_DECL
)
9498 rtl
= rtl_for_decl_location (decl
);
9499 if (rtl
== NULL_RTX
)
9502 switch (GET_CODE (rtl
))
9505 /* The address of a variable that was optimized away;
9506 don't emit anything. */
9516 /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
9517 add_const_value_attribute (die
, rtl
);
9521 if (TREE_CODE (decl
) == VAR_DECL
&& DECL_THREAD_LOCAL (decl
))
9523 /* Need loc_descriptor_from_tree since that's where we know
9524 how to handle TLS variables. Want the object's address
9525 since the top-level DW_AT_location assumes such. See
9526 the confusion in loc_descriptor for reference. */
9527 descr
= loc_descriptor_from_tree (decl
, 1);
9534 descr
= loc_descriptor (rtl
);
9536 add_AT_location_description (die
, DW_AT_location
, descr
);
9544 /* If we don't have a copy of this variable in memory for some reason (such
9545 as a C++ member constant that doesn't have an out-of-line definition),
9546 we should tell the debugger about the constant value. */
9549 tree_add_const_value_attribute (var_die
, decl
)
9553 tree init
= DECL_INITIAL (decl
);
9554 tree type
= TREE_TYPE (decl
);
9556 if (TREE_READONLY (decl
) && ! TREE_THIS_VOLATILE (decl
) && init
9557 && initializer_constant_valid_p (init
, type
) == null_pointer_node
)
9562 switch (TREE_CODE (type
))
9565 if (host_integerp (init
, 0))
9566 add_AT_unsigned (var_die
, DW_AT_const_value
,
9567 tree_low_cst (init
, 0));
9569 add_AT_long_long (var_die
, DW_AT_const_value
,
9570 TREE_INT_CST_HIGH (init
),
9571 TREE_INT_CST_LOW (init
));
9578 /* Generate an DW_AT_name attribute given some string value to be included as
9579 the value of the attribute. */
9582 add_name_attribute (die
, name_string
)
9584 const char *name_string
;
9586 if (name_string
!= NULL
&& *name_string
!= 0)
9588 if (demangle_name_func
)
9589 name_string
= (*demangle_name_func
) (name_string
);
9591 add_AT_string (die
, DW_AT_name
, name_string
);
9595 /* Given a tree node describing an array bound (either lower or upper) output
9596 a representation for that bound. */
9599 add_bound_info (subrange_die
, bound_attr
, bound
)
9600 dw_die_ref subrange_die
;
9601 enum dwarf_attribute bound_attr
;
9604 switch (TREE_CODE (bound
))
9609 /* All fixed-bounds are represented by INTEGER_CST nodes. */
9611 if (! host_integerp (bound
, 0)
9612 || (bound_attr
== DW_AT_lower_bound
9613 && (((is_c_family () || is_java ()) && integer_zerop (bound
))
9614 || (is_fortran () && integer_onep (bound
)))))
9615 /* use the default */
9618 add_AT_unsigned (subrange_die
, bound_attr
, tree_low_cst (bound
, 0));
9623 case NON_LVALUE_EXPR
:
9624 case VIEW_CONVERT_EXPR
:
9625 add_bound_info (subrange_die
, bound_attr
, TREE_OPERAND (bound
, 0));
9629 /* If optimization is turned on, the SAVE_EXPRs that describe how to
9630 access the upper bound values may be bogus. If they refer to a
9631 register, they may only describe how to get at these values at the
9632 points in the generated code right after they have just been
9633 computed. Worse yet, in the typical case, the upper bound values
9634 will not even *be* computed in the optimized code (though the
9635 number of elements will), so these SAVE_EXPRs are entirely
9636 bogus. In order to compensate for this fact, we check here to see
9637 if optimization is enabled, and if so, we don't add an attribute
9638 for the (unknown and unknowable) upper bound. This should not
9639 cause too much trouble for existing (stupid?) debuggers because
9640 they have to deal with empty upper bounds location descriptions
9641 anyway in order to be able to deal with incomplete array types.
9642 Of course an intelligent debugger (GDB?) should be able to
9643 comprehend that a missing upper bound specification in an array
9644 type used for a storage class `auto' local array variable
9645 indicates that the upper bound is both unknown (at compile- time)
9646 and unknowable (at run-time) due to optimization.
9648 We assume that a MEM rtx is safe because gcc wouldn't put the
9649 value there unless it was going to be used repeatedly in the
9650 function, i.e. for cleanups. */
9651 if (SAVE_EXPR_RTL (bound
)
9652 && (! optimize
|| GET_CODE (SAVE_EXPR_RTL (bound
)) == MEM
))
9654 dw_die_ref ctx
= lookup_decl_die (current_function_decl
);
9655 dw_die_ref decl_die
= new_die (DW_TAG_variable
, ctx
, bound
);
9656 rtx loc
= SAVE_EXPR_RTL (bound
);
9658 /* If the RTL for the SAVE_EXPR is memory, handle the case where
9659 it references an outer function's frame. */
9660 if (GET_CODE (loc
) == MEM
)
9662 rtx new_addr
= fix_lexical_addr (XEXP (loc
, 0), bound
);
9664 if (XEXP (loc
, 0) != new_addr
)
9665 loc
= gen_rtx_MEM (GET_MODE (loc
), new_addr
);
9668 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
9669 add_type_attribute (decl_die
, TREE_TYPE (bound
), 1, 0, ctx
);
9670 add_AT_location_description (decl_die
, DW_AT_location
,
9671 loc_descriptor (loc
));
9672 add_AT_die_ref (subrange_die
, bound_attr
, decl_die
);
9675 /* Else leave out the attribute. */
9681 dw_die_ref decl_die
= lookup_decl_die (bound
);
9683 /* ??? Can this happen, or should the variable have been bound
9684 first? Probably it can, since I imagine that we try to create
9685 the types of parameters in the order in which they exist in
9686 the list, and won't have created a forward reference to a
9688 if (decl_die
!= NULL
)
9689 add_AT_die_ref (subrange_die
, bound_attr
, decl_die
);
9695 /* Otherwise try to create a stack operation procedure to
9696 evaluate the value of the array bound. */
9698 dw_die_ref ctx
, decl_die
;
9699 dw_loc_descr_ref loc
;
9701 loc
= loc_descriptor_from_tree (bound
, 0);
9705 if (current_function_decl
== 0)
9706 ctx
= comp_unit_die
;
9708 ctx
= lookup_decl_die (current_function_decl
);
9710 /* If we weren't able to find a context, it's most likely the case
9711 that we are processing the return type of the function. So
9712 make a SAVE_EXPR to point to it and have the limbo DIE code
9713 find the proper die. The save_expr function doesn't always
9714 make a SAVE_EXPR, so do it ourselves. */
9716 bound
= build (SAVE_EXPR
, TREE_TYPE (bound
), bound
,
9717 current_function_decl
, NULL_TREE
);
9719 decl_die
= new_die (DW_TAG_variable
, ctx
, bound
);
9720 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
9721 add_type_attribute (decl_die
, TREE_TYPE (bound
), 1, 0, ctx
);
9722 add_AT_loc (decl_die
, DW_AT_location
, loc
);
9724 add_AT_die_ref (subrange_die
, bound_attr
, decl_die
);
9730 /* Note that the block of subscript information for an array type also
9731 includes information about the element type of type given array type. */
9734 add_subscript_info (type_die
, type
)
9735 dw_die_ref type_die
;
9738 #ifndef MIPS_DEBUGGING_INFO
9739 unsigned dimension_number
;
9742 dw_die_ref subrange_die
;
9744 /* The GNU compilers represent multidimensional array types as sequences of
9745 one dimensional array types whose element types are themselves array
9746 types. Here we squish that down, so that each multidimensional array
9747 type gets only one array_type DIE in the Dwarf debugging info. The draft
9748 Dwarf specification say that we are allowed to do this kind of
9749 compression in C (because there is no difference between an array or
9750 arrays and a multidimensional array in C) but for other source languages
9751 (e.g. Ada) we probably shouldn't do this. */
9753 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
9754 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
9755 We work around this by disabling this feature. See also
9756 gen_array_type_die. */
9757 #ifndef MIPS_DEBUGGING_INFO
9758 for (dimension_number
= 0;
9759 TREE_CODE (type
) == ARRAY_TYPE
;
9760 type
= TREE_TYPE (type
), dimension_number
++)
9763 tree domain
= TYPE_DOMAIN (type
);
9765 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
9766 and (in GNU C only) variable bounds. Handle all three forms
9768 subrange_die
= new_die (DW_TAG_subrange_type
, type_die
, NULL
);
9771 /* We have an array type with specified bounds. */
9772 lower
= TYPE_MIN_VALUE (domain
);
9773 upper
= TYPE_MAX_VALUE (domain
);
9775 /* define the index type. */
9776 if (TREE_TYPE (domain
))
9778 /* ??? This is probably an Ada unnamed subrange type. Ignore the
9779 TREE_TYPE field. We can't emit debug info for this
9780 because it is an unnamed integral type. */
9781 if (TREE_CODE (domain
) == INTEGER_TYPE
9782 && TYPE_NAME (domain
) == NULL_TREE
9783 && TREE_CODE (TREE_TYPE (domain
)) == INTEGER_TYPE
9784 && TYPE_NAME (TREE_TYPE (domain
)) == NULL_TREE
)
9787 add_type_attribute (subrange_die
, TREE_TYPE (domain
), 0, 0,
9791 /* ??? If upper is NULL, the array has unspecified length,
9792 but it does have a lower bound. This happens with Fortran
9794 Since the debugger is definitely going to need to know N
9795 to produce useful results, go ahead and output the lower
9796 bound solo, and hope the debugger can cope. */
9798 add_bound_info (subrange_die
, DW_AT_lower_bound
, lower
);
9800 add_bound_info (subrange_die
, DW_AT_upper_bound
, upper
);
9803 /* Otherwise we have an array type with an unspecified length. The
9804 DWARF-2 spec does not say how to handle this; let's just leave out the
9810 add_byte_size_attribute (die
, tree_node
)
9816 switch (TREE_CODE (tree_node
))
9824 case QUAL_UNION_TYPE
:
9825 size
= int_size_in_bytes (tree_node
);
9828 /* For a data member of a struct or union, the DW_AT_byte_size is
9829 generally given as the number of bytes normally allocated for an
9830 object of the *declared* type of the member itself. This is true
9831 even for bit-fields. */
9832 size
= simple_type_size_in_bits (field_type (tree_node
)) / BITS_PER_UNIT
;
9838 /* Note that `size' might be -1 when we get to this point. If it is, that
9839 indicates that the byte size of the entity in question is variable. We
9840 have no good way of expressing this fact in Dwarf at the present time,
9841 so just let the -1 pass on through. */
9842 add_AT_unsigned (die
, DW_AT_byte_size
, size
);
9845 /* For a FIELD_DECL node which represents a bit-field, output an attribute
9846 which specifies the distance in bits from the highest order bit of the
9847 "containing object" for the bit-field to the highest order bit of the
9850 For any given bit-field, the "containing object" is a hypothetical object
9851 (of some integral or enum type) within which the given bit-field lives. The
9852 type of this hypothetical "containing object" is always the same as the
9853 declared type of the individual bit-field itself. The determination of the
9854 exact location of the "containing object" for a bit-field is rather
9855 complicated. It's handled by the `field_byte_offset' function (above).
9857 Note that it is the size (in bytes) of the hypothetical "containing object"
9858 which will be given in the DW_AT_byte_size attribute for this bit-field.
9859 (See `byte_size_attribute' above). */
9862 add_bit_offset_attribute (die
, decl
)
9866 HOST_WIDE_INT object_offset_in_bytes
= field_byte_offset (decl
);
9867 tree type
= DECL_BIT_FIELD_TYPE (decl
);
9868 HOST_WIDE_INT bitpos_int
;
9869 HOST_WIDE_INT highest_order_object_bit_offset
;
9870 HOST_WIDE_INT highest_order_field_bit_offset
;
9871 HOST_WIDE_INT
unsigned bit_offset
;
9873 /* Must be a field and a bit field. */
9875 || TREE_CODE (decl
) != FIELD_DECL
)
9878 /* We can't yet handle bit-fields whose offsets are variable, so if we
9879 encounter such things, just return without generating any attribute
9880 whatsoever. Likewise for variable or too large size. */
9881 if (! host_integerp (bit_position (decl
), 0)
9882 || ! host_integerp (DECL_SIZE (decl
), 1))
9885 bitpos_int
= int_bit_position (decl
);
9887 /* Note that the bit offset is always the distance (in bits) from the
9888 highest-order bit of the "containing object" to the highest-order bit of
9889 the bit-field itself. Since the "high-order end" of any object or field
9890 is different on big-endian and little-endian machines, the computation
9891 below must take account of these differences. */
9892 highest_order_object_bit_offset
= object_offset_in_bytes
* BITS_PER_UNIT
;
9893 highest_order_field_bit_offset
= bitpos_int
;
9895 if (! BYTES_BIG_ENDIAN
)
9897 highest_order_field_bit_offset
+= tree_low_cst (DECL_SIZE (decl
), 0);
9898 highest_order_object_bit_offset
+= simple_type_size_in_bits (type
);
9902 = (! BYTES_BIG_ENDIAN
9903 ? highest_order_object_bit_offset
- highest_order_field_bit_offset
9904 : highest_order_field_bit_offset
- highest_order_object_bit_offset
);
9906 add_AT_unsigned (die
, DW_AT_bit_offset
, bit_offset
);
9909 /* For a FIELD_DECL node which represents a bit field, output an attribute
9910 which specifies the length in bits of the given field. */
9913 add_bit_size_attribute (die
, decl
)
9917 /* Must be a field and a bit field. */
9918 if (TREE_CODE (decl
) != FIELD_DECL
9919 || ! DECL_BIT_FIELD_TYPE (decl
))
9922 if (host_integerp (DECL_SIZE (decl
), 1))
9923 add_AT_unsigned (die
, DW_AT_bit_size
, tree_low_cst (DECL_SIZE (decl
), 1));
9926 /* If the compiled language is ANSI C, then add a 'prototyped'
9927 attribute, if arg types are given for the parameters of a function. */
9930 add_prototyped_attribute (die
, func_type
)
9934 if (get_AT_unsigned (comp_unit_die
, DW_AT_language
) == DW_LANG_C89
9935 && TYPE_ARG_TYPES (func_type
) != NULL
)
9936 add_AT_flag (die
, DW_AT_prototyped
, 1);
9939 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
9940 by looking in either the type declaration or object declaration
9944 add_abstract_origin_attribute (die
, origin
)
9948 dw_die_ref origin_die
= NULL
;
9950 if (TREE_CODE (origin
) != FUNCTION_DECL
)
9952 /* We may have gotten separated from the block for the inlined
9953 function, if we're in an exception handler or some such; make
9954 sure that the abstract function has been written out.
9956 Doing this for nested functions is wrong, however; functions are
9957 distinct units, and our context might not even be inline. */
9961 fn
= TYPE_STUB_DECL (fn
);
9963 fn
= decl_function_context (fn
);
9965 dwarf2out_abstract_function (fn
);
9968 if (DECL_P (origin
))
9969 origin_die
= lookup_decl_die (origin
);
9970 else if (TYPE_P (origin
))
9971 origin_die
= lookup_type_die (origin
);
9973 if (origin_die
== NULL
)
9976 add_AT_die_ref (die
, DW_AT_abstract_origin
, origin_die
);
9979 /* We do not currently support the pure_virtual attribute. */
9982 add_pure_or_virtual_attribute (die
, func_decl
)
9986 if (DECL_VINDEX (func_decl
))
9988 add_AT_unsigned (die
, DW_AT_virtuality
, DW_VIRTUALITY_virtual
);
9990 if (host_integerp (DECL_VINDEX (func_decl
), 0))
9991 add_AT_loc (die
, DW_AT_vtable_elem_location
,
9992 new_loc_descr (DW_OP_constu
,
9993 tree_low_cst (DECL_VINDEX (func_decl
), 0),
9996 /* GNU extension: Record what type this method came from originally. */
9997 if (debug_info_level
> DINFO_LEVEL_TERSE
)
9998 add_AT_die_ref (die
, DW_AT_containing_type
,
9999 lookup_type_die (DECL_CONTEXT (func_decl
)));
10003 /* Add source coordinate attributes for the given decl. */
10006 add_src_coords_attributes (die
, decl
)
10010 unsigned file_index
= lookup_filename (DECL_SOURCE_FILE (decl
));
10012 add_AT_unsigned (die
, DW_AT_decl_file
, file_index
);
10013 add_AT_unsigned (die
, DW_AT_decl_line
, DECL_SOURCE_LINE (decl
));
10016 /* Add an DW_AT_name attribute and source coordinate attribute for the
10017 given decl, but only if it actually has a name. */
10020 add_name_and_src_coords_attributes (die
, decl
)
10026 decl_name
= DECL_NAME (decl
);
10027 if (decl_name
!= NULL
&& IDENTIFIER_POINTER (decl_name
) != NULL
)
10029 add_name_attribute (die
, dwarf2_name (decl
, 0));
10030 if (! DECL_ARTIFICIAL (decl
))
10031 add_src_coords_attributes (die
, decl
);
10033 if ((TREE_CODE (decl
) == FUNCTION_DECL
|| TREE_CODE (decl
) == VAR_DECL
)
10034 && TREE_PUBLIC (decl
)
10035 && DECL_ASSEMBLER_NAME (decl
) != DECL_NAME (decl
)
10036 && !DECL_ABSTRACT (decl
))
10037 add_AT_string (die
, DW_AT_MIPS_linkage_name
,
10038 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl
)));
10041 #ifdef VMS_DEBUGGING_INFO
10042 /* Get the function's name, as described by its RTL. This may be different
10043 from the DECL_NAME name used in the source file. */
10044 if (TREE_CODE (decl
) == FUNCTION_DECL
&& TREE_ASM_WRITTEN (decl
))
10046 add_AT_addr (die
, DW_AT_VMS_rtnbeg_pd_address
,
10047 XEXP (DECL_RTL (decl
), 0));
10048 VARRAY_PUSH_RTX (used_rtx_varray
, XEXP (DECL_RTL (decl
), 0));
10053 /* Push a new declaration scope. */
10056 push_decl_scope (scope
)
10059 VARRAY_PUSH_TREE (decl_scope_table
, scope
);
10062 /* Pop a declaration scope. */
10067 if (VARRAY_ACTIVE_SIZE (decl_scope_table
) <= 0)
10070 VARRAY_POP (decl_scope_table
);
10073 /* Return the DIE for the scope that immediately contains this type.
10074 Non-named types get global scope. Named types nested in other
10075 types get their containing scope if it's open, or global scope
10076 otherwise. All other types (i.e. function-local named types) get
10077 the current active scope. */
10080 scope_die_for (t
, context_die
)
10082 dw_die_ref context_die
;
10084 dw_die_ref scope_die
= NULL
;
10085 tree containing_scope
;
10088 /* Non-types always go in the current scope. */
10092 containing_scope
= TYPE_CONTEXT (t
);
10094 /* Ignore namespaces for the moment. */
10095 if (containing_scope
&& TREE_CODE (containing_scope
) == NAMESPACE_DECL
)
10096 containing_scope
= NULL_TREE
;
10098 /* Ignore function type "scopes" from the C frontend. They mean that
10099 a tagged type is local to a parmlist of a function declarator, but
10100 that isn't useful to DWARF. */
10101 if (containing_scope
&& TREE_CODE (containing_scope
) == FUNCTION_TYPE
)
10102 containing_scope
= NULL_TREE
;
10104 if (containing_scope
== NULL_TREE
)
10105 scope_die
= comp_unit_die
;
10106 else if (TYPE_P (containing_scope
))
10108 /* For types, we can just look up the appropriate DIE. But
10109 first we check to see if we're in the middle of emitting it
10110 so we know where the new DIE should go. */
10111 for (i
= VARRAY_ACTIVE_SIZE (decl_scope_table
) - 1; i
>= 0; --i
)
10112 if (VARRAY_TREE (decl_scope_table
, i
) == containing_scope
)
10117 if (debug_info_level
> DINFO_LEVEL_TERSE
10118 && !TREE_ASM_WRITTEN (containing_scope
))
10121 /* If none of the current dies are suitable, we get file scope. */
10122 scope_die
= comp_unit_die
;
10125 scope_die
= lookup_type_die (containing_scope
);
10128 scope_die
= context_die
;
10133 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
10136 local_scope_p (context_die
)
10137 dw_die_ref context_die
;
10139 for (; context_die
; context_die
= context_die
->die_parent
)
10140 if (context_die
->die_tag
== DW_TAG_inlined_subroutine
10141 || context_die
->die_tag
== DW_TAG_subprogram
)
10147 /* Returns nonzero if CONTEXT_DIE is a class. */
10150 class_scope_p (context_die
)
10151 dw_die_ref context_die
;
10153 return (context_die
10154 && (context_die
->die_tag
== DW_TAG_structure_type
10155 || context_die
->die_tag
== DW_TAG_union_type
));
10158 /* Many forms of DIEs require a "type description" attribute. This
10159 routine locates the proper "type descriptor" die for the type given
10160 by 'type', and adds an DW_AT_type attribute below the given die. */
10163 add_type_attribute (object_die
, type
, decl_const
, decl_volatile
, context_die
)
10164 dw_die_ref object_die
;
10168 dw_die_ref context_die
;
10170 enum tree_code code
= TREE_CODE (type
);
10171 dw_die_ref type_die
= NULL
;
10173 /* ??? If this type is an unnamed subrange type of an integral or
10174 floating-point type, use the inner type. This is because we have no
10175 support for unnamed types in base_type_die. This can happen if this is
10176 an Ada subrange type. Correct solution is emit a subrange type die. */
10177 if ((code
== INTEGER_TYPE
|| code
== REAL_TYPE
)
10178 && TREE_TYPE (type
) != 0 && TYPE_NAME (type
) == 0)
10179 type
= TREE_TYPE (type
), code
= TREE_CODE (type
);
10181 if (code
== ERROR_MARK
10182 /* Handle a special case. For functions whose return type is void, we
10183 generate *no* type attribute. (Note that no object may have type
10184 `void', so this only applies to function return types). */
10185 || code
== VOID_TYPE
)
10188 type_die
= modified_type_die (type
,
10189 decl_const
|| TYPE_READONLY (type
),
10190 decl_volatile
|| TYPE_VOLATILE (type
),
10193 if (type_die
!= NULL
)
10194 add_AT_die_ref (object_die
, DW_AT_type
, type_die
);
10197 /* Given a tree pointer to a struct, class, union, or enum type node, return
10198 a pointer to the (string) tag name for the given type, or zero if the type
10199 was declared without a tag. */
10201 static const char *
10205 const char *name
= 0;
10207 if (TYPE_NAME (type
) != 0)
10211 /* Find the IDENTIFIER_NODE for the type name. */
10212 if (TREE_CODE (TYPE_NAME (type
)) == IDENTIFIER_NODE
)
10213 t
= TYPE_NAME (type
);
10215 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
10216 a TYPE_DECL node, regardless of whether or not a `typedef' was
10218 else if (TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
10219 && ! DECL_IGNORED_P (TYPE_NAME (type
)))
10220 t
= DECL_NAME (TYPE_NAME (type
));
10222 /* Now get the name as a string, or invent one. */
10224 name
= IDENTIFIER_POINTER (t
);
10227 return (name
== 0 || *name
== '\0') ? 0 : name
;
10230 /* Return the type associated with a data member, make a special check
10231 for bit field types. */
10234 member_declared_type (member
)
10237 return (DECL_BIT_FIELD_TYPE (member
)
10238 ? DECL_BIT_FIELD_TYPE (member
) : TREE_TYPE (member
));
10241 /* Get the decl's label, as described by its RTL. This may be different
10242 from the DECL_NAME name used in the source file. */
10245 static const char *
10246 decl_start_label (decl
)
10250 const char *fnname
;
10252 x
= DECL_RTL (decl
);
10253 if (GET_CODE (x
) != MEM
)
10257 if (GET_CODE (x
) != SYMBOL_REF
)
10260 fnname
= XSTR (x
, 0);
10265 /* These routines generate the internal representation of the DIE's for
10266 the compilation unit. Debugging information is collected by walking
10267 the declaration trees passed in from dwarf2out_decl(). */
10270 gen_array_type_die (type
, context_die
)
10272 dw_die_ref context_die
;
10274 dw_die_ref scope_die
= scope_die_for (type
, context_die
);
10275 dw_die_ref array_die
;
10278 /* ??? The SGI dwarf reader fails for array of array of enum types unless
10279 the inner array type comes before the outer array type. Thus we must
10280 call gen_type_die before we call new_die. See below also. */
10281 #ifdef MIPS_DEBUGGING_INFO
10282 gen_type_die (TREE_TYPE (type
), context_die
);
10285 array_die
= new_die (DW_TAG_array_type
, scope_die
, type
);
10286 add_name_attribute (array_die
, type_tag (type
));
10287 equate_type_number_to_die (type
, array_die
);
10289 if (TREE_CODE (type
) == VECTOR_TYPE
)
10291 /* The frontend feeds us a representation for the vector as a struct
10292 containing an array. Pull out the array type. */
10293 type
= TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type
)));
10294 add_AT_flag (array_die
, DW_AT_GNU_vector
, 1);
10298 /* We default the array ordering. SDB will probably do
10299 the right things even if DW_AT_ordering is not present. It's not even
10300 an issue until we start to get into multidimensional arrays anyway. If
10301 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
10302 then we'll have to put the DW_AT_ordering attribute back in. (But if
10303 and when we find out that we need to put these in, we will only do so
10304 for multidimensional arrays. */
10305 add_AT_unsigned (array_die
, DW_AT_ordering
, DW_ORD_row_major
);
10308 #ifdef MIPS_DEBUGGING_INFO
10309 /* The SGI compilers handle arrays of unknown bound by setting
10310 AT_declaration and not emitting any subrange DIEs. */
10311 if (! TYPE_DOMAIN (type
))
10312 add_AT_unsigned (array_die
, DW_AT_declaration
, 1);
10315 add_subscript_info (array_die
, type
);
10317 /* Add representation of the type of the elements of this array type. */
10318 element_type
= TREE_TYPE (type
);
10320 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10321 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
10322 We work around this by disabling this feature. See also
10323 add_subscript_info. */
10324 #ifndef MIPS_DEBUGGING_INFO
10325 while (TREE_CODE (element_type
) == ARRAY_TYPE
)
10326 element_type
= TREE_TYPE (element_type
);
10328 gen_type_die (element_type
, context_die
);
10331 add_type_attribute (array_die
, element_type
, 0, 0, context_die
);
10335 gen_set_type_die (type
, context_die
)
10337 dw_die_ref context_die
;
10339 dw_die_ref type_die
10340 = new_die (DW_TAG_set_type
, scope_die_for (type
, context_die
), type
);
10342 equate_type_number_to_die (type
, type_die
);
10343 add_type_attribute (type_die
, TREE_TYPE (type
), 0, 0, context_die
);
10348 gen_entry_point_die (decl
, context_die
)
10350 dw_die_ref context_die
;
10352 tree origin
= decl_ultimate_origin (decl
);
10353 dw_die_ref decl_die
= new_die (DW_TAG_entry_point
, context_die
, decl
);
10355 if (origin
!= NULL
)
10356 add_abstract_origin_attribute (decl_die
, origin
);
10359 add_name_and_src_coords_attributes (decl_die
, decl
);
10360 add_type_attribute (decl_die
, TREE_TYPE (TREE_TYPE (decl
)),
10361 0, 0, context_die
);
10364 if (DECL_ABSTRACT (decl
))
10365 equate_decl_number_to_die (decl
, decl_die
);
10367 add_AT_lbl_id (decl_die
, DW_AT_low_pc
, decl_start_label (decl
));
10371 /* Walk through the list of incomplete types again, trying once more to
10372 emit full debugging info for them. */
10375 retry_incomplete_types ()
10379 for (i
= VARRAY_ACTIVE_SIZE (incomplete_types
) - 1; i
>= 0; i
--)
10380 gen_type_die (VARRAY_TREE (incomplete_types
, i
), comp_unit_die
);
10383 /* Generate a DIE to represent an inlined instance of an enumeration type. */
10386 gen_inlined_enumeration_type_die (type
, context_die
)
10388 dw_die_ref context_die
;
10390 dw_die_ref type_die
= new_die (DW_TAG_enumeration_type
, context_die
, type
);
10392 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10393 be incomplete and such types are not marked. */
10394 add_abstract_origin_attribute (type_die
, type
);
10397 /* Generate a DIE to represent an inlined instance of a structure type. */
10400 gen_inlined_structure_type_die (type
, context_die
)
10402 dw_die_ref context_die
;
10404 dw_die_ref type_die
= new_die (DW_TAG_structure_type
, context_die
, type
);
10406 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10407 be incomplete and such types are not marked. */
10408 add_abstract_origin_attribute (type_die
, type
);
10411 /* Generate a DIE to represent an inlined instance of a union type. */
10414 gen_inlined_union_type_die (type
, context_die
)
10416 dw_die_ref context_die
;
10418 dw_die_ref type_die
= new_die (DW_TAG_union_type
, context_die
, type
);
10420 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10421 be incomplete and such types are not marked. */
10422 add_abstract_origin_attribute (type_die
, type
);
10425 /* Generate a DIE to represent an enumeration type. Note that these DIEs
10426 include all of the information about the enumeration values also. Each
10427 enumerated type name/value is listed as a child of the enumerated type
10431 gen_enumeration_type_die (type
, context_die
)
10433 dw_die_ref context_die
;
10435 dw_die_ref type_die
= lookup_type_die (type
);
10437 if (type_die
== NULL
)
10439 type_die
= new_die (DW_TAG_enumeration_type
,
10440 scope_die_for (type
, context_die
), type
);
10441 equate_type_number_to_die (type
, type_die
);
10442 add_name_attribute (type_die
, type_tag (type
));
10444 else if (! TYPE_SIZE (type
))
10447 remove_AT (type_die
, DW_AT_declaration
);
10449 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
10450 given enum type is incomplete, do not generate the DW_AT_byte_size
10451 attribute or the DW_AT_element_list attribute. */
10452 if (TYPE_SIZE (type
))
10456 TREE_ASM_WRITTEN (type
) = 1;
10457 add_byte_size_attribute (type_die
, type
);
10458 if (TYPE_STUB_DECL (type
) != NULL_TREE
)
10459 add_src_coords_attributes (type_die
, TYPE_STUB_DECL (type
));
10461 /* If the first reference to this type was as the return type of an
10462 inline function, then it may not have a parent. Fix this now. */
10463 if (type_die
->die_parent
== NULL
)
10464 add_child_die (scope_die_for (type
, context_die
), type_die
);
10466 for (link
= TYPE_FIELDS (type
);
10467 link
!= NULL
; link
= TREE_CHAIN (link
))
10469 dw_die_ref enum_die
= new_die (DW_TAG_enumerator
, type_die
, link
);
10471 add_name_attribute (enum_die
,
10472 IDENTIFIER_POINTER (TREE_PURPOSE (link
)));
10474 if (host_integerp (TREE_VALUE (link
), 0))
10476 if (tree_int_cst_sgn (TREE_VALUE (link
)) < 0)
10477 add_AT_int (enum_die
, DW_AT_const_value
,
10478 tree_low_cst (TREE_VALUE (link
), 0));
10480 add_AT_unsigned (enum_die
, DW_AT_const_value
,
10481 tree_low_cst (TREE_VALUE (link
), 0));
10486 add_AT_flag (type_die
, DW_AT_declaration
, 1);
10489 /* Generate a DIE to represent either a real live formal parameter decl or to
10490 represent just the type of some formal parameter position in some function
10493 Note that this routine is a bit unusual because its argument may be a
10494 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
10495 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
10496 node. If it's the former then this function is being called to output a
10497 DIE to represent a formal parameter object (or some inlining thereof). If
10498 it's the latter, then this function is only being called to output a
10499 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
10500 argument type of some subprogram type. */
10503 gen_formal_parameter_die (node
, context_die
)
10505 dw_die_ref context_die
;
10507 dw_die_ref parm_die
10508 = new_die (DW_TAG_formal_parameter
, context_die
, node
);
10511 switch (TREE_CODE_CLASS (TREE_CODE (node
)))
10514 origin
= decl_ultimate_origin (node
);
10515 if (origin
!= NULL
)
10516 add_abstract_origin_attribute (parm_die
, origin
);
10519 add_name_and_src_coords_attributes (parm_die
, node
);
10520 add_type_attribute (parm_die
, TREE_TYPE (node
),
10521 TREE_READONLY (node
),
10522 TREE_THIS_VOLATILE (node
),
10524 if (DECL_ARTIFICIAL (node
))
10525 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
10528 equate_decl_number_to_die (node
, parm_die
);
10529 if (! DECL_ABSTRACT (node
))
10530 add_location_or_const_value_attribute (parm_die
, node
);
10535 /* We were called with some kind of a ..._TYPE node. */
10536 add_type_attribute (parm_die
, node
, 0, 0, context_die
);
10546 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
10547 at the end of an (ANSI prototyped) formal parameters list. */
10550 gen_unspecified_parameters_die (decl_or_type
, context_die
)
10552 dw_die_ref context_die
;
10554 new_die (DW_TAG_unspecified_parameters
, context_die
, decl_or_type
);
10557 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
10558 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
10559 parameters as specified in some function type specification (except for
10560 those which appear as part of a function *definition*). */
10563 gen_formal_types_die (function_or_method_type
, context_die
)
10564 tree function_or_method_type
;
10565 dw_die_ref context_die
;
10568 tree formal_type
= NULL
;
10569 tree first_parm_type
;
10572 if (TREE_CODE (function_or_method_type
) == FUNCTION_DECL
)
10574 arg
= DECL_ARGUMENTS (function_or_method_type
);
10575 function_or_method_type
= TREE_TYPE (function_or_method_type
);
10580 first_parm_type
= TYPE_ARG_TYPES (function_or_method_type
);
10582 /* Make our first pass over the list of formal parameter types and output a
10583 DW_TAG_formal_parameter DIE for each one. */
10584 for (link
= first_parm_type
; link
; )
10586 dw_die_ref parm_die
;
10588 formal_type
= TREE_VALUE (link
);
10589 if (formal_type
== void_type_node
)
10592 /* Output a (nameless) DIE to represent the formal parameter itself. */
10593 parm_die
= gen_formal_parameter_die (formal_type
, context_die
);
10594 if ((TREE_CODE (function_or_method_type
) == METHOD_TYPE
10595 && link
== first_parm_type
)
10596 || (arg
&& DECL_ARTIFICIAL (arg
)))
10597 add_AT_flag (parm_die
, DW_AT_artificial
, 1);
10599 link
= TREE_CHAIN (link
);
10601 arg
= TREE_CHAIN (arg
);
10604 /* If this function type has an ellipsis, add a
10605 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
10606 if (formal_type
!= void_type_node
)
10607 gen_unspecified_parameters_die (function_or_method_type
, context_die
);
10609 /* Make our second (and final) pass over the list of formal parameter types
10610 and output DIEs to represent those types (as necessary). */
10611 for (link
= TYPE_ARG_TYPES (function_or_method_type
);
10612 link
&& TREE_VALUE (link
);
10613 link
= TREE_CHAIN (link
))
10614 gen_type_die (TREE_VALUE (link
), context_die
);
10617 /* We want to generate the DIE for TYPE so that we can generate the
10618 die for MEMBER, which has been defined; we will need to refer back
10619 to the member declaration nested within TYPE. If we're trying to
10620 generate minimal debug info for TYPE, processing TYPE won't do the
10621 trick; we need to attach the member declaration by hand. */
10624 gen_type_die_for_member (type
, member
, context_die
)
10626 dw_die_ref context_die
;
10628 gen_type_die (type
, context_die
);
10630 /* If we're trying to avoid duplicate debug info, we may not have
10631 emitted the member decl for this function. Emit it now. */
10632 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type
))
10633 && ! lookup_decl_die (member
))
10635 if (decl_ultimate_origin (member
))
10638 push_decl_scope (type
);
10639 if (TREE_CODE (member
) == FUNCTION_DECL
)
10640 gen_subprogram_die (member
, lookup_type_die (type
));
10642 gen_variable_die (member
, lookup_type_die (type
));
10648 /* Generate the DWARF2 info for the "abstract" instance of a function which we
10649 may later generate inlined and/or out-of-line instances of. */
10652 dwarf2out_abstract_function (decl
)
10655 dw_die_ref old_die
;
10658 int was_abstract
= DECL_ABSTRACT (decl
);
10660 /* Make sure we have the actual abstract inline, not a clone. */
10661 decl
= DECL_ORIGIN (decl
);
10663 old_die
= lookup_decl_die (decl
);
10664 if (old_die
&& get_AT_unsigned (old_die
, DW_AT_inline
))
10665 /* We've already generated the abstract instance. */
10668 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
10669 we don't get confused by DECL_ABSTRACT. */
10670 if (debug_info_level
> DINFO_LEVEL_TERSE
)
10672 context
= decl_class_context (decl
);
10674 gen_type_die_for_member
10675 (context
, decl
, decl_function_context (decl
) ? NULL
: comp_unit_die
);
10678 /* Pretend we've just finished compiling this function. */
10679 save_fn
= current_function_decl
;
10680 current_function_decl
= decl
;
10682 set_decl_abstract_flags (decl
, 1);
10683 dwarf2out_decl (decl
);
10684 if (! was_abstract
)
10685 set_decl_abstract_flags (decl
, 0);
10687 current_function_decl
= save_fn
;
10690 /* Generate a DIE to represent a declared function (either file-scope or
10694 gen_subprogram_die (decl
, context_die
)
10696 dw_die_ref context_die
;
10698 char label_id
[MAX_ARTIFICIAL_LABEL_BYTES
];
10699 tree origin
= decl_ultimate_origin (decl
);
10700 dw_die_ref subr_die
;
10704 dw_die_ref old_die
= lookup_decl_die (decl
);
10705 int declaration
= (current_function_decl
!= decl
10706 || class_scope_p (context_die
));
10708 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
10709 started to generate the abstract instance of an inline, decided to output
10710 its containing class, and proceeded to emit the declaration of the inline
10711 from the member list for the class. If so, DECLARATION takes priority;
10712 we'll get back to the abstract instance when done with the class. */
10714 /* The class-scope declaration DIE must be the primary DIE. */
10715 if (origin
&& declaration
&& class_scope_p (context_die
))
10722 if (origin
!= NULL
)
10724 if (declaration
&& ! local_scope_p (context_die
))
10727 /* Fixup die_parent for the abstract instance of a nested
10728 inline function. */
10729 if (old_die
&& old_die
->die_parent
== NULL
)
10730 add_child_die (context_die
, old_die
);
10732 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
10733 add_abstract_origin_attribute (subr_die
, origin
);
10737 unsigned file_index
= lookup_filename (DECL_SOURCE_FILE (decl
));
10739 if (!get_AT_flag (old_die
, DW_AT_declaration
)
10740 /* We can have a normal definition following an inline one in the
10741 case of redefinition of GNU C extern inlines.
10742 It seems reasonable to use AT_specification in this case. */
10743 && !get_AT_unsigned (old_die
, DW_AT_inline
))
10745 /* ??? This can happen if there is a bug in the program, for
10746 instance, if it has duplicate function definitions. Ideally,
10747 we should detect this case and ignore it. For now, if we have
10748 already reported an error, any error at all, then assume that
10749 we got here because of an input error, not a dwarf2 bug. */
10755 /* If the definition comes from the same place as the declaration,
10756 maybe use the old DIE. We always want the DIE for this function
10757 that has the *_pc attributes to be under comp_unit_die so the
10758 debugger can find it. We also need to do this for abstract
10759 instances of inlines, since the spec requires the out-of-line copy
10760 to have the same parent. For local class methods, this doesn't
10761 apply; we just use the old DIE. */
10762 if ((old_die
->die_parent
== comp_unit_die
|| context_die
== NULL
)
10763 && (DECL_ARTIFICIAL (decl
)
10764 || (get_AT_unsigned (old_die
, DW_AT_decl_file
) == file_index
10765 && (get_AT_unsigned (old_die
, DW_AT_decl_line
)
10766 == (unsigned) DECL_SOURCE_LINE (decl
)))))
10768 subr_die
= old_die
;
10770 /* Clear out the declaration attribute and the parm types. */
10771 remove_AT (subr_die
, DW_AT_declaration
);
10772 remove_children (subr_die
);
10776 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
10777 add_AT_die_ref (subr_die
, DW_AT_specification
, old_die
);
10778 if (get_AT_unsigned (old_die
, DW_AT_decl_file
) != file_index
)
10779 add_AT_unsigned (subr_die
, DW_AT_decl_file
, file_index
);
10780 if (get_AT_unsigned (old_die
, DW_AT_decl_line
)
10781 != (unsigned) DECL_SOURCE_LINE (decl
))
10783 (subr_die
, DW_AT_decl_line
, DECL_SOURCE_LINE (decl
));
10788 subr_die
= new_die (DW_TAG_subprogram
, context_die
, decl
);
10790 if (TREE_PUBLIC (decl
))
10791 add_AT_flag (subr_die
, DW_AT_external
, 1);
10793 add_name_and_src_coords_attributes (subr_die
, decl
);
10794 if (debug_info_level
> DINFO_LEVEL_TERSE
)
10796 add_prototyped_attribute (subr_die
, TREE_TYPE (decl
));
10797 add_type_attribute (subr_die
, TREE_TYPE (TREE_TYPE (decl
)),
10798 0, 0, context_die
);
10801 add_pure_or_virtual_attribute (subr_die
, decl
);
10802 if (DECL_ARTIFICIAL (decl
))
10803 add_AT_flag (subr_die
, DW_AT_artificial
, 1);
10805 if (TREE_PROTECTED (decl
))
10806 add_AT_unsigned (subr_die
, DW_AT_accessibility
, DW_ACCESS_protected
);
10807 else if (TREE_PRIVATE (decl
))
10808 add_AT_unsigned (subr_die
, DW_AT_accessibility
, DW_ACCESS_private
);
10813 if (!old_die
|| !get_AT_unsigned (old_die
, DW_AT_inline
))
10815 add_AT_flag (subr_die
, DW_AT_declaration
, 1);
10817 /* The first time we see a member function, it is in the context of
10818 the class to which it belongs. We make sure of this by emitting
10819 the class first. The next time is the definition, which is
10820 handled above. The two may come from the same source text. */
10821 if (DECL_CONTEXT (decl
) || DECL_ABSTRACT (decl
))
10822 equate_decl_number_to_die (decl
, subr_die
);
10825 else if (DECL_ABSTRACT (decl
))
10827 if (DECL_INLINE (decl
) && !flag_no_inline
)
10829 /* ??? Checking DECL_DEFER_OUTPUT is correct for static
10830 inline functions, but not for extern inline functions.
10831 We can't get this completely correct because information
10832 about whether the function was declared inline is not
10834 if (DECL_DEFER_OUTPUT (decl
))
10835 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_declared_inlined
);
10837 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_inlined
);
10840 add_AT_unsigned (subr_die
, DW_AT_inline
, DW_INL_declared_not_inlined
);
10842 equate_decl_number_to_die (decl
, subr_die
);
10844 else if (!DECL_EXTERNAL (decl
))
10846 if (!old_die
|| !get_AT_unsigned (old_die
, DW_AT_inline
))
10847 equate_decl_number_to_die (decl
, subr_die
);
10849 ASM_GENERATE_INTERNAL_LABEL (label_id
, FUNC_BEGIN_LABEL
,
10850 current_function_funcdef_no
);
10851 add_AT_lbl_id (subr_die
, DW_AT_low_pc
, label_id
);
10852 ASM_GENERATE_INTERNAL_LABEL (label_id
, FUNC_END_LABEL
,
10853 current_function_funcdef_no
);
10854 add_AT_lbl_id (subr_die
, DW_AT_high_pc
, label_id
);
10856 add_pubname (decl
, subr_die
);
10857 add_arange (decl
, subr_die
);
10859 #ifdef MIPS_DEBUGGING_INFO
10860 /* Add a reference to the FDE for this routine. */
10861 add_AT_fde_ref (subr_die
, DW_AT_MIPS_fde
, current_funcdef_fde
);
10864 /* Define the "frame base" location for this routine. We use the
10865 frame pointer or stack pointer registers, since the RTL for local
10866 variables is relative to one of them. */
10868 = frame_pointer_needed
? hard_frame_pointer_rtx
: stack_pointer_rtx
;
10869 add_AT_loc (subr_die
, DW_AT_frame_base
, reg_loc_descriptor (fp_reg
));
10872 /* ??? This fails for nested inline functions, because context_display
10873 is not part of the state saved/restored for inline functions. */
10874 if (current_function_needs_context
)
10875 add_AT_location_description (subr_die
, DW_AT_static_link
,
10876 loc_descriptor (lookup_static_chain (decl
)));
10880 /* Now output descriptions of the arguments for this function. This gets
10881 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
10882 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
10883 `...' at the end of the formal parameter list. In order to find out if
10884 there was a trailing ellipsis or not, we must instead look at the type
10885 associated with the FUNCTION_DECL. This will be a node of type
10886 FUNCTION_TYPE. If the chain of type nodes hanging off of this
10887 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
10888 an ellipsis at the end. */
10890 /* In the case where we are describing a mere function declaration, all we
10891 need to do here (and all we *can* do here) is to describe the *types* of
10892 its formal parameters. */
10893 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
10895 else if (declaration
)
10896 gen_formal_types_die (decl
, subr_die
);
10899 /* Generate DIEs to represent all known formal parameters */
10900 tree arg_decls
= DECL_ARGUMENTS (decl
);
10903 /* When generating DIEs, generate the unspecified_parameters DIE
10904 instead if we come across the arg "__builtin_va_alist" */
10905 for (parm
= arg_decls
; parm
; parm
= TREE_CHAIN (parm
))
10906 if (TREE_CODE (parm
) == PARM_DECL
)
10908 if (DECL_NAME (parm
)
10909 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm
)),
10910 "__builtin_va_alist"))
10911 gen_unspecified_parameters_die (parm
, subr_die
);
10913 gen_decl_die (parm
, subr_die
);
10916 /* Decide whether we need an unspecified_parameters DIE at the end.
10917 There are 2 more cases to do this for: 1) the ansi ... declaration -
10918 this is detectable when the end of the arg list is not a
10919 void_type_node 2) an unprototyped function declaration (not a
10920 definition). This just means that we have no info about the
10921 parameters at all. */
10922 fn_arg_types
= TYPE_ARG_TYPES (TREE_TYPE (decl
));
10923 if (fn_arg_types
!= NULL
)
10925 /* this is the prototyped case, check for ... */
10926 if (TREE_VALUE (tree_last (fn_arg_types
)) != void_type_node
)
10927 gen_unspecified_parameters_die (decl
, subr_die
);
10929 else if (DECL_INITIAL (decl
) == NULL_TREE
)
10930 gen_unspecified_parameters_die (decl
, subr_die
);
10933 /* Output Dwarf info for all of the stuff within the body of the function
10934 (if it has one - it may be just a declaration). */
10935 outer_scope
= DECL_INITIAL (decl
);
10937 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
10938 a function. This BLOCK actually represents the outermost binding contour
10939 for the function, i.e. the contour in which the function's formal
10940 parameters and labels get declared. Curiously, it appears that the front
10941 end doesn't actually put the PARM_DECL nodes for the current function onto
10942 the BLOCK_VARS list for this outer scope, but are strung off of the
10943 DECL_ARGUMENTS list for the function instead.
10945 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
10946 the LABEL_DECL nodes for the function however, and we output DWARF info
10947 for those in decls_for_scope. Just within the `outer_scope' there will be
10948 a BLOCK node representing the function's outermost pair of curly braces,
10949 and any blocks used for the base and member initializers of a C++
10950 constructor function. */
10951 if (! declaration
&& TREE_CODE (outer_scope
) != ERROR_MARK
)
10953 current_function_has_inlines
= 0;
10954 decls_for_scope (outer_scope
, subr_die
, 0);
10956 #if 0 && defined (MIPS_DEBUGGING_INFO)
10957 if (current_function_has_inlines
)
10959 add_AT_flag (subr_die
, DW_AT_MIPS_has_inlines
, 1);
10960 if (! comp_unit_has_inlines
)
10962 add_AT_flag (comp_unit_die
, DW_AT_MIPS_has_inlines
, 1);
10963 comp_unit_has_inlines
= 1;
10970 /* Generate a DIE to represent a declared data object. */
10973 gen_variable_die (decl
, context_die
)
10975 dw_die_ref context_die
;
10977 tree origin
= decl_ultimate_origin (decl
);
10978 dw_die_ref var_die
= new_die (DW_TAG_variable
, context_die
, decl
);
10980 dw_die_ref old_die
= lookup_decl_die (decl
);
10981 int declaration
= (DECL_EXTERNAL (decl
)
10982 || class_scope_p (context_die
));
10984 if (origin
!= NULL
)
10985 add_abstract_origin_attribute (var_die
, origin
);
10987 /* Loop unrolling can create multiple blocks that refer to the same
10988 static variable, so we must test for the DW_AT_declaration flag.
10990 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
10991 copy decls and set the DECL_ABSTRACT flag on them instead of
10994 ??? Duplicated blocks have been rewritten to use .debug_ranges. */
10995 else if (old_die
&& TREE_STATIC (decl
)
10996 && get_AT_flag (old_die
, DW_AT_declaration
) == 1)
10998 /* This is a definition of a C++ class level static. */
10999 add_AT_die_ref (var_die
, DW_AT_specification
, old_die
);
11000 if (DECL_NAME (decl
))
11002 unsigned file_index
= lookup_filename (DECL_SOURCE_FILE (decl
));
11004 if (get_AT_unsigned (old_die
, DW_AT_decl_file
) != file_index
)
11005 add_AT_unsigned (var_die
, DW_AT_decl_file
, file_index
);
11007 if (get_AT_unsigned (old_die
, DW_AT_decl_line
)
11008 != (unsigned) DECL_SOURCE_LINE (decl
))
11010 add_AT_unsigned (var_die
, DW_AT_decl_line
,
11011 DECL_SOURCE_LINE (decl
));
11016 add_name_and_src_coords_attributes (var_die
, decl
);
11017 add_type_attribute (var_die
, TREE_TYPE (decl
), TREE_READONLY (decl
),
11018 TREE_THIS_VOLATILE (decl
), context_die
);
11020 if (TREE_PUBLIC (decl
))
11021 add_AT_flag (var_die
, DW_AT_external
, 1);
11023 if (DECL_ARTIFICIAL (decl
))
11024 add_AT_flag (var_die
, DW_AT_artificial
, 1);
11026 if (TREE_PROTECTED (decl
))
11027 add_AT_unsigned (var_die
, DW_AT_accessibility
, DW_ACCESS_protected
);
11028 else if (TREE_PRIVATE (decl
))
11029 add_AT_unsigned (var_die
, DW_AT_accessibility
, DW_ACCESS_private
);
11033 add_AT_flag (var_die
, DW_AT_declaration
, 1);
11035 if (class_scope_p (context_die
) || DECL_ABSTRACT (decl
))
11036 equate_decl_number_to_die (decl
, var_die
);
11038 if (! declaration
&& ! DECL_ABSTRACT (decl
))
11040 add_location_or_const_value_attribute (var_die
, decl
);
11041 add_pubname (decl
, var_die
);
11044 tree_add_const_value_attribute (var_die
, decl
);
11047 /* Generate a DIE to represent a label identifier. */
11050 gen_label_die (decl
, context_die
)
11052 dw_die_ref context_die
;
11054 tree origin
= decl_ultimate_origin (decl
);
11055 dw_die_ref lbl_die
= new_die (DW_TAG_label
, context_die
, decl
);
11057 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
11059 if (origin
!= NULL
)
11060 add_abstract_origin_attribute (lbl_die
, origin
);
11062 add_name_and_src_coords_attributes (lbl_die
, decl
);
11064 if (DECL_ABSTRACT (decl
))
11065 equate_decl_number_to_die (decl
, lbl_die
);
11068 insn
= DECL_RTL (decl
);
11070 /* Deleted labels are programmer specified labels which have been
11071 eliminated because of various optimisations. We still emit them
11072 here so that it is possible to put breakpoints on them. */
11073 if (GET_CODE (insn
) == CODE_LABEL
11074 || ((GET_CODE (insn
) == NOTE
11075 && NOTE_LINE_NUMBER (insn
) == NOTE_INSN_DELETED_LABEL
)))
11077 /* When optimization is enabled (via -O) some parts of the compiler
11078 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11079 represent source-level labels which were explicitly declared by
11080 the user. This really shouldn't be happening though, so catch
11081 it if it ever does happen. */
11082 if (INSN_DELETED_P (insn
))
11085 ASM_GENERATE_INTERNAL_LABEL (label
, "L", CODE_LABEL_NUMBER (insn
));
11086 add_AT_lbl_id (lbl_die
, DW_AT_low_pc
, label
);
11091 /* Generate a DIE for a lexical block. */
11094 gen_lexical_block_die (stmt
, context_die
, depth
)
11096 dw_die_ref context_die
;
11099 dw_die_ref stmt_die
= new_die (DW_TAG_lexical_block
, context_die
, stmt
);
11100 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
11102 if (! BLOCK_ABSTRACT (stmt
))
11104 if (BLOCK_FRAGMENT_CHAIN (stmt
))
11108 add_AT_range_list (stmt_die
, DW_AT_ranges
, add_ranges (stmt
));
11110 chain
= BLOCK_FRAGMENT_CHAIN (stmt
);
11113 add_ranges (chain
);
11114 chain
= BLOCK_FRAGMENT_CHAIN (chain
);
11121 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_BEGIN_LABEL
,
11122 BLOCK_NUMBER (stmt
));
11123 add_AT_lbl_id (stmt_die
, DW_AT_low_pc
, label
);
11124 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_END_LABEL
,
11125 BLOCK_NUMBER (stmt
));
11126 add_AT_lbl_id (stmt_die
, DW_AT_high_pc
, label
);
11130 decls_for_scope (stmt
, stmt_die
, depth
);
11133 /* Generate a DIE for an inlined subprogram. */
11136 gen_inlined_subroutine_die (stmt
, context_die
, depth
)
11138 dw_die_ref context_die
;
11141 if (! BLOCK_ABSTRACT (stmt
))
11143 dw_die_ref subr_die
11144 = new_die (DW_TAG_inlined_subroutine
, context_die
, stmt
);
11145 tree decl
= block_ultimate_origin (stmt
);
11146 char label
[MAX_ARTIFICIAL_LABEL_BYTES
];
11148 /* Emit info for the abstract instance first, if we haven't yet. */
11149 dwarf2out_abstract_function (decl
);
11151 add_abstract_origin_attribute (subr_die
, decl
);
11152 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_BEGIN_LABEL
,
11153 BLOCK_NUMBER (stmt
));
11154 add_AT_lbl_id (subr_die
, DW_AT_low_pc
, label
);
11155 ASM_GENERATE_INTERNAL_LABEL (label
, BLOCK_END_LABEL
,
11156 BLOCK_NUMBER (stmt
));
11157 add_AT_lbl_id (subr_die
, DW_AT_high_pc
, label
);
11158 decls_for_scope (stmt
, subr_die
, depth
);
11159 current_function_has_inlines
= 1;
11162 /* We may get here if we're the outer block of function A that was
11163 inlined into function B that was inlined into function C. When
11164 generating debugging info for C, dwarf2out_abstract_function(B)
11165 would mark all inlined blocks as abstract, including this one.
11166 So, we wouldn't (and shouldn't) expect labels to be generated
11167 for this one. Instead, just emit debugging info for
11168 declarations within the block. This is particularly important
11169 in the case of initializers of arguments passed from B to us:
11170 if they're statement expressions containing declarations, we
11171 wouldn't generate dies for their abstract variables, and then,
11172 when generating dies for the real variables, we'd die (pun
11174 gen_lexical_block_die (stmt
, context_die
, depth
);
11177 /* Generate a DIE for a field in a record, or structure. */
11180 gen_field_die (decl
, context_die
)
11182 dw_die_ref context_die
;
11184 dw_die_ref decl_die
= new_die (DW_TAG_member
, context_die
, decl
);
11186 add_name_and_src_coords_attributes (decl_die
, decl
);
11187 add_type_attribute (decl_die
, member_declared_type (decl
),
11188 TREE_READONLY (decl
), TREE_THIS_VOLATILE (decl
),
11191 if (DECL_BIT_FIELD_TYPE (decl
))
11193 add_byte_size_attribute (decl_die
, decl
);
11194 add_bit_size_attribute (decl_die
, decl
);
11195 add_bit_offset_attribute (decl_die
, decl
);
11198 if (TREE_CODE (DECL_FIELD_CONTEXT (decl
)) != UNION_TYPE
)
11199 add_data_member_location_attribute (decl_die
, decl
);
11201 if (DECL_ARTIFICIAL (decl
))
11202 add_AT_flag (decl_die
, DW_AT_artificial
, 1);
11204 if (TREE_PROTECTED (decl
))
11205 add_AT_unsigned (decl_die
, DW_AT_accessibility
, DW_ACCESS_protected
);
11206 else if (TREE_PRIVATE (decl
))
11207 add_AT_unsigned (decl_die
, DW_AT_accessibility
, DW_ACCESS_private
);
11211 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
11212 Use modified_type_die instead.
11213 We keep this code here just in case these types of DIEs may be needed to
11214 represent certain things in other languages (e.g. Pascal) someday. */
11217 gen_pointer_type_die (type
, context_die
)
11219 dw_die_ref context_die
;
11222 = new_die (DW_TAG_pointer_type
, scope_die_for (type
, context_die
), type
);
11224 equate_type_number_to_die (type
, ptr_die
);
11225 add_type_attribute (ptr_die
, TREE_TYPE (type
), 0, 0, context_die
);
11226 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
, PTR_SIZE
);
11229 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
11230 Use modified_type_die instead.
11231 We keep this code here just in case these types of DIEs may be needed to
11232 represent certain things in other languages (e.g. Pascal) someday. */
11235 gen_reference_type_die (type
, context_die
)
11237 dw_die_ref context_die
;
11240 = new_die (DW_TAG_reference_type
, scope_die_for (type
, context_die
), type
);
11242 equate_type_number_to_die (type
, ref_die
);
11243 add_type_attribute (ref_die
, TREE_TYPE (type
), 0, 0, context_die
);
11244 add_AT_unsigned (mod_type_die
, DW_AT_byte_size
, PTR_SIZE
);
11248 /* Generate a DIE for a pointer to a member type. */
11251 gen_ptr_to_mbr_type_die (type
, context_die
)
11253 dw_die_ref context_die
;
11256 = new_die (DW_TAG_ptr_to_member_type
,
11257 scope_die_for (type
, context_die
), type
);
11259 equate_type_number_to_die (type
, ptr_die
);
11260 add_AT_die_ref (ptr_die
, DW_AT_containing_type
,
11261 lookup_type_die (TYPE_OFFSET_BASETYPE (type
)));
11262 add_type_attribute (ptr_die
, TREE_TYPE (type
), 0, 0, context_die
);
11265 /* Generate the DIE for the compilation unit. */
11268 gen_compile_unit_die (filename
)
11269 const char *filename
;
11272 char producer
[250];
11273 const char *wd
= getpwd ();
11274 const char *language_string
= lang_hooks
.name
;
11277 die
= new_die (DW_TAG_compile_unit
, NULL
, NULL
);
11278 add_name_attribute (die
, filename
);
11280 if (wd
!= NULL
&& filename
[0] != DIR_SEPARATOR
)
11281 add_AT_string (die
, DW_AT_comp_dir
, wd
);
11283 sprintf (producer
, "%s %s", language_string
, version_string
);
11285 #ifdef MIPS_DEBUGGING_INFO
11286 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
11287 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
11288 not appear in the producer string, the debugger reaches the conclusion
11289 that the object file is stripped and has no debugging information.
11290 To get the MIPS/SGI debugger to believe that there is debugging
11291 information in the object file, we add a -g to the producer string. */
11292 if (debug_info_level
> DINFO_LEVEL_TERSE
)
11293 strcat (producer
, " -g");
11296 add_AT_string (die
, DW_AT_producer
, producer
);
11298 if (strcmp (language_string
, "GNU C++") == 0)
11299 language
= DW_LANG_C_plus_plus
;
11300 else if (strcmp (language_string
, "GNU Ada") == 0)
11301 language
= DW_LANG_Ada83
;
11302 else if (strcmp (language_string
, "GNU F77") == 0)
11303 language
= DW_LANG_Fortran77
;
11304 else if (strcmp (language_string
, "GNU Pascal") == 0)
11305 language
= DW_LANG_Pascal83
;
11306 else if (strcmp (language_string
, "GNU Java") == 0)
11307 language
= DW_LANG_Java
;
11309 language
= DW_LANG_C89
;
11311 add_AT_unsigned (die
, DW_AT_language
, language
);
11315 /* Generate a DIE for a string type. */
11318 gen_string_type_die (type
, context_die
)
11320 dw_die_ref context_die
;
11322 dw_die_ref type_die
11323 = new_die (DW_TAG_string_type
, scope_die_for (type
, context_die
), type
);
11325 equate_type_number_to_die (type
, type_die
);
11327 /* ??? Fudge the string length attribute for now.
11328 TODO: add string length info. */
11330 string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type
)));
11331 bound_representation (upper_bound
, 0, 'u');
11335 /* Generate the DIE for a base class. */
11338 gen_inheritance_die (binfo
, context_die
)
11340 dw_die_ref context_die
;
11342 dw_die_ref die
= new_die (DW_TAG_inheritance
, context_die
, binfo
);
11344 add_type_attribute (die
, BINFO_TYPE (binfo
), 0, 0, context_die
);
11345 add_data_member_location_attribute (die
, binfo
);
11347 if (TREE_VIA_VIRTUAL (binfo
))
11348 add_AT_unsigned (die
, DW_AT_virtuality
, DW_VIRTUALITY_virtual
);
11350 if (TREE_VIA_PUBLIC (binfo
))
11351 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_public
);
11352 else if (TREE_VIA_PROTECTED (binfo
))
11353 add_AT_unsigned (die
, DW_AT_accessibility
, DW_ACCESS_protected
);
11356 /* Generate a DIE for a class member. */
11359 gen_member_die (type
, context_die
)
11361 dw_die_ref context_die
;
11366 /* If this is not an incomplete type, output descriptions of each of its
11367 members. Note that as we output the DIEs necessary to represent the
11368 members of this record or union type, we will also be trying to output
11369 DIEs to represent the *types* of those members. However the `type'
11370 function (above) will specifically avoid generating type DIEs for member
11371 types *within* the list of member DIEs for this (containing) type except
11372 for those types (of members) which are explicitly marked as also being
11373 members of this (containing) type themselves. The g++ front- end can
11374 force any given type to be treated as a member of some other (containing)
11375 type by setting the TYPE_CONTEXT of the given (member) type to point to
11376 the TREE node representing the appropriate (containing) type. */
11378 /* First output info about the base classes. */
11379 if (TYPE_BINFO (type
) && TYPE_BINFO_BASETYPES (type
))
11381 tree bases
= TYPE_BINFO_BASETYPES (type
);
11382 int n_bases
= TREE_VEC_LENGTH (bases
);
11385 for (i
= 0; i
< n_bases
; i
++)
11386 gen_inheritance_die (TREE_VEC_ELT (bases
, i
), context_die
);
11389 /* Now output info about the data members and type members. */
11390 for (member
= TYPE_FIELDS (type
); member
; member
= TREE_CHAIN (member
))
11392 /* If we thought we were generating minimal debug info for TYPE
11393 and then changed our minds, some of the member declarations
11394 may have already been defined. Don't define them again, but
11395 do put them in the right order. */
11397 child
= lookup_decl_die (member
);
11399 splice_child_die (context_die
, child
);
11401 gen_decl_die (member
, context_die
);
11404 /* Now output info about the function members (if any). */
11405 for (member
= TYPE_METHODS (type
); member
; member
= TREE_CHAIN (member
))
11407 /* Don't include clones in the member list. */
11408 if (DECL_ABSTRACT_ORIGIN (member
))
11411 child
= lookup_decl_die (member
);
11413 splice_child_die (context_die
, child
);
11415 gen_decl_die (member
, context_die
);
11419 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
11420 is set, we pretend that the type was never defined, so we only get the
11421 member DIEs needed by later specification DIEs. */
11424 gen_struct_or_union_type_die (type
, context_die
)
11426 dw_die_ref context_die
;
11428 dw_die_ref type_die
= lookup_type_die (type
);
11429 dw_die_ref scope_die
= 0;
11431 int complete
= (TYPE_SIZE (type
)
11432 && (! TYPE_STUB_DECL (type
)
11433 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type
))));
11435 if (type_die
&& ! complete
)
11438 if (TYPE_CONTEXT (type
) != NULL_TREE
11439 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type
)))
11442 scope_die
= scope_die_for (type
, context_die
);
11444 if (! type_die
|| (nested
&& scope_die
== comp_unit_die
))
11445 /* First occurrence of type or toplevel definition of nested class. */
11447 dw_die_ref old_die
= type_die
;
11449 type_die
= new_die (TREE_CODE (type
) == RECORD_TYPE
11450 ? DW_TAG_structure_type
: DW_TAG_union_type
,
11452 equate_type_number_to_die (type
, type_die
);
11454 add_AT_die_ref (type_die
, DW_AT_specification
, old_die
);
11456 add_name_attribute (type_die
, type_tag (type
));
11459 remove_AT (type_die
, DW_AT_declaration
);
11461 /* If this type has been completed, then give it a byte_size attribute and
11462 then give a list of members. */
11465 /* Prevent infinite recursion in cases where the type of some member of
11466 this type is expressed in terms of this type itself. */
11467 TREE_ASM_WRITTEN (type
) = 1;
11468 add_byte_size_attribute (type_die
, type
);
11469 if (TYPE_STUB_DECL (type
) != NULL_TREE
)
11470 add_src_coords_attributes (type_die
, TYPE_STUB_DECL (type
));
11472 /* If the first reference to this type was as the return type of an
11473 inline function, then it may not have a parent. Fix this now. */
11474 if (type_die
->die_parent
== NULL
)
11475 add_child_die (scope_die
, type_die
);
11477 push_decl_scope (type
);
11478 gen_member_die (type
, type_die
);
11481 /* GNU extension: Record what type our vtable lives in. */
11482 if (TYPE_VFIELD (type
))
11484 tree vtype
= DECL_FCONTEXT (TYPE_VFIELD (type
));
11486 gen_type_die (vtype
, context_die
);
11487 add_AT_die_ref (type_die
, DW_AT_containing_type
,
11488 lookup_type_die (vtype
));
11493 add_AT_flag (type_die
, DW_AT_declaration
, 1);
11495 /* We don't need to do this for function-local types. */
11496 if (TYPE_STUB_DECL (type
)
11497 && ! decl_function_context (TYPE_STUB_DECL (type
)))
11498 VARRAY_PUSH_TREE (incomplete_types
, type
);
11502 /* Generate a DIE for a subroutine _type_. */
11505 gen_subroutine_type_die (type
, context_die
)
11507 dw_die_ref context_die
;
11509 tree return_type
= TREE_TYPE (type
);
11510 dw_die_ref subr_die
11511 = new_die (DW_TAG_subroutine_type
,
11512 scope_die_for (type
, context_die
), type
);
11514 equate_type_number_to_die (type
, subr_die
);
11515 add_prototyped_attribute (subr_die
, type
);
11516 add_type_attribute (subr_die
, return_type
, 0, 0, context_die
);
11517 gen_formal_types_die (type
, subr_die
);
11520 /* Generate a DIE for a type definition */
11523 gen_typedef_die (decl
, context_die
)
11525 dw_die_ref context_die
;
11527 dw_die_ref type_die
;
11530 if (TREE_ASM_WRITTEN (decl
))
11533 TREE_ASM_WRITTEN (decl
) = 1;
11534 type_die
= new_die (DW_TAG_typedef
, context_die
, decl
);
11535 origin
= decl_ultimate_origin (decl
);
11536 if (origin
!= NULL
)
11537 add_abstract_origin_attribute (type_die
, origin
);
11542 add_name_and_src_coords_attributes (type_die
, decl
);
11543 if (DECL_ORIGINAL_TYPE (decl
))
11545 type
= DECL_ORIGINAL_TYPE (decl
);
11547 if (type
== TREE_TYPE (decl
))
11550 equate_type_number_to_die (TREE_TYPE (decl
), type_die
);
11553 type
= TREE_TYPE (decl
);
11555 add_type_attribute (type_die
, type
, TREE_READONLY (decl
),
11556 TREE_THIS_VOLATILE (decl
), context_die
);
11559 if (DECL_ABSTRACT (decl
))
11560 equate_decl_number_to_die (decl
, type_die
);
11563 /* Generate a type description DIE. */
11566 gen_type_die (type
, context_die
)
11568 dw_die_ref context_die
;
11572 if (type
== NULL_TREE
|| type
== error_mark_node
)
11575 /* We are going to output a DIE to represent the unqualified version
11576 of this type (i.e. without any const or volatile qualifiers) so
11577 get the main variant (i.e. the unqualified version) of this type
11578 now. (Vectors are special because the debugging info is in the
11579 cloned type itself). */
11580 if (TREE_CODE (type
) != VECTOR_TYPE
)
11581 type
= type_main_variant (type
);
11583 if (TREE_ASM_WRITTEN (type
))
11586 if (TYPE_NAME (type
) && TREE_CODE (TYPE_NAME (type
)) == TYPE_DECL
11587 && DECL_ORIGINAL_TYPE (TYPE_NAME (type
)))
11589 /* Prevent broken recursion; we can't hand off to the same type. */
11590 if (DECL_ORIGINAL_TYPE (TYPE_NAME (type
)) == type
)
11593 TREE_ASM_WRITTEN (type
) = 1;
11594 gen_decl_die (TYPE_NAME (type
), context_die
);
11598 switch (TREE_CODE (type
))
11604 case REFERENCE_TYPE
:
11605 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
11606 ensures that the gen_type_die recursion will terminate even if the
11607 type is recursive. Recursive types are possible in Ada. */
11608 /* ??? We could perhaps do this for all types before the switch
11610 TREE_ASM_WRITTEN (type
) = 1;
11612 /* For these types, all that is required is that we output a DIE (or a
11613 set of DIEs) to represent the "basis" type. */
11614 gen_type_die (TREE_TYPE (type
), context_die
);
11618 /* This code is used for C++ pointer-to-data-member types.
11619 Output a description of the relevant class type. */
11620 gen_type_die (TYPE_OFFSET_BASETYPE (type
), context_die
);
11622 /* Output a description of the type of the object pointed to. */
11623 gen_type_die (TREE_TYPE (type
), context_die
);
11625 /* Now output a DIE to represent this pointer-to-data-member type
11627 gen_ptr_to_mbr_type_die (type
, context_die
);
11631 gen_type_die (TYPE_DOMAIN (type
), context_die
);
11632 gen_set_type_die (type
, context_die
);
11636 gen_type_die (TREE_TYPE (type
), context_die
);
11637 abort (); /* No way to represent these in Dwarf yet! */
11640 case FUNCTION_TYPE
:
11641 /* Force out return type (in case it wasn't forced out already). */
11642 gen_type_die (TREE_TYPE (type
), context_die
);
11643 gen_subroutine_type_die (type
, context_die
);
11647 /* Force out return type (in case it wasn't forced out already). */
11648 gen_type_die (TREE_TYPE (type
), context_die
);
11649 gen_subroutine_type_die (type
, context_die
);
11653 if (TYPE_STRING_FLAG (type
) && TREE_CODE (TREE_TYPE (type
)) == CHAR_TYPE
)
11655 gen_type_die (TREE_TYPE (type
), context_die
);
11656 gen_string_type_die (type
, context_die
);
11659 gen_array_type_die (type
, context_die
);
11663 gen_array_type_die (type
, context_die
);
11666 case ENUMERAL_TYPE
:
11669 case QUAL_UNION_TYPE
:
11670 /* If this is a nested type whose containing class hasn't been written
11671 out yet, writing it out will cover this one, too. This does not apply
11672 to instantiations of member class templates; they need to be added to
11673 the containing class as they are generated. FIXME: This hurts the
11674 idea of combining type decls from multiple TUs, since we can't predict
11675 what set of template instantiations we'll get. */
11676 if (TYPE_CONTEXT (type
)
11677 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type
))
11678 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type
)))
11680 gen_type_die (TYPE_CONTEXT (type
), context_die
);
11682 if (TREE_ASM_WRITTEN (type
))
11685 /* If that failed, attach ourselves to the stub. */
11686 push_decl_scope (TYPE_CONTEXT (type
));
11687 context_die
= lookup_type_die (TYPE_CONTEXT (type
));
11693 if (TREE_CODE (type
) == ENUMERAL_TYPE
)
11694 gen_enumeration_type_die (type
, context_die
);
11696 gen_struct_or_union_type_die (type
, context_die
);
11701 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
11702 it up if it is ever completed. gen_*_type_die will set it for us
11703 when appropriate. */
11712 /* No DIEs needed for fundamental types. */
11716 /* No Dwarf representation currently defined. */
11723 TREE_ASM_WRITTEN (type
) = 1;
11726 /* Generate a DIE for a tagged type instantiation. */
11729 gen_tagged_type_instantiation_die (type
, context_die
)
11731 dw_die_ref context_die
;
11733 if (type
== NULL_TREE
|| type
== error_mark_node
)
11736 /* We are going to output a DIE to represent the unqualified version of
11737 this type (i.e. without any const or volatile qualifiers) so make sure
11738 that we have the main variant (i.e. the unqualified version) of this
11740 if (type
!= type_main_variant (type
))
11743 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
11744 an instance of an unresolved type. */
11746 switch (TREE_CODE (type
))
11751 case ENUMERAL_TYPE
:
11752 gen_inlined_enumeration_type_die (type
, context_die
);
11756 gen_inlined_structure_type_die (type
, context_die
);
11760 case QUAL_UNION_TYPE
:
11761 gen_inlined_union_type_die (type
, context_die
);
11769 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
11770 things which are local to the given block. */
11773 gen_block_die (stmt
, context_die
, depth
)
11775 dw_die_ref context_die
;
11778 int must_output_die
= 0;
11781 enum tree_code origin_code
;
11783 /* Ignore blocks never really used to make RTL. */
11784 if (stmt
== NULL_TREE
|| !TREE_USED (stmt
)
11785 || (!TREE_ASM_WRITTEN (stmt
) && !BLOCK_ABSTRACT (stmt
)))
11788 /* If the block is one fragment of a non-contiguous block, do not
11789 process the variables, since they will have been done by the
11790 origin block. Do process subblocks. */
11791 if (BLOCK_FRAGMENT_ORIGIN (stmt
))
11795 for (sub
= BLOCK_SUBBLOCKS (stmt
); sub
; sub
= BLOCK_CHAIN (sub
))
11796 gen_block_die (sub
, context_die
, depth
+ 1);
11801 /* Determine the "ultimate origin" of this block. This block may be an
11802 inlined instance of an inlined instance of inline function, so we have
11803 to trace all of the way back through the origin chain to find out what
11804 sort of node actually served as the original seed for the creation of
11805 the current block. */
11806 origin
= block_ultimate_origin (stmt
);
11807 origin_code
= (origin
!= NULL
) ? TREE_CODE (origin
) : ERROR_MARK
;
11809 /* Determine if we need to output any Dwarf DIEs at all to represent this
11811 if (origin_code
== FUNCTION_DECL
)
11812 /* The outer scopes for inlinings *must* always be represented. We
11813 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
11814 must_output_die
= 1;
11817 /* In the case where the current block represents an inlining of the
11818 "body block" of an inline function, we must *NOT* output any DIE for
11819 this block because we have already output a DIE to represent the whole
11820 inlined function scope and the "body block" of any function doesn't
11821 really represent a different scope according to ANSI C rules. So we
11822 check here to make sure that this block does not represent a "body
11823 block inlining" before trying to set the MUST_OUTPUT_DIE flag. */
11824 if (! is_body_block (origin
? origin
: stmt
))
11826 /* Determine if this block directly contains any "significant"
11827 local declarations which we will need to output DIEs for. */
11828 if (debug_info_level
> DINFO_LEVEL_TERSE
)
11829 /* We are not in terse mode so *any* local declaration counts
11830 as being a "significant" one. */
11831 must_output_die
= (BLOCK_VARS (stmt
) != NULL
);
11833 /* We are in terse mode, so only local (nested) function
11834 definitions count as "significant" local declarations. */
11835 for (decl
= BLOCK_VARS (stmt
);
11836 decl
!= NULL
; decl
= TREE_CHAIN (decl
))
11837 if (TREE_CODE (decl
) == FUNCTION_DECL
11838 && DECL_INITIAL (decl
))
11840 must_output_die
= 1;
11846 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
11847 DIE for any block which contains no significant local declarations at
11848 all. Rather, in such cases we just call `decls_for_scope' so that any
11849 needed Dwarf info for any sub-blocks will get properly generated. Note
11850 that in terse mode, our definition of what constitutes a "significant"
11851 local declaration gets restricted to include only inlined function
11852 instances and local (nested) function definitions. */
11853 if (must_output_die
)
11855 if (origin_code
== FUNCTION_DECL
)
11856 gen_inlined_subroutine_die (stmt
, context_die
, depth
);
11858 gen_lexical_block_die (stmt
, context_die
, depth
);
11861 decls_for_scope (stmt
, context_die
, depth
);
11864 /* Generate all of the decls declared within a given scope and (recursively)
11865 all of its sub-blocks. */
11868 decls_for_scope (stmt
, context_die
, depth
)
11870 dw_die_ref context_die
;
11876 /* Ignore blocks never really used to make RTL. */
11877 if (stmt
== NULL_TREE
|| ! TREE_USED (stmt
))
11880 /* Output the DIEs to represent all of the data objects and typedefs
11881 declared directly within this block but not within any nested
11882 sub-blocks. Also, nested function and tag DIEs have been
11883 generated with a parent of NULL; fix that up now. */
11884 for (decl
= BLOCK_VARS (stmt
); decl
!= NULL
; decl
= TREE_CHAIN (decl
))
11888 if (TREE_CODE (decl
) == FUNCTION_DECL
)
11889 die
= lookup_decl_die (decl
);
11890 else if (TREE_CODE (decl
) == TYPE_DECL
&& TYPE_DECL_IS_STUB (decl
))
11891 die
= lookup_type_die (TREE_TYPE (decl
));
11895 if (die
!= NULL
&& die
->die_parent
== NULL
)
11896 add_child_die (context_die
, die
);
11898 gen_decl_die (decl
, context_die
);
11901 /* Output the DIEs to represent all sub-blocks (and the items declared
11902 therein) of this block. */
11903 for (subblocks
= BLOCK_SUBBLOCKS (stmt
);
11905 subblocks
= BLOCK_CHAIN (subblocks
))
11906 gen_block_die (subblocks
, context_die
, depth
+ 1);
11909 /* Is this a typedef we can avoid emitting? */
11912 is_redundant_typedef (decl
)
11915 if (TYPE_DECL_IS_STUB (decl
))
11918 if (DECL_ARTIFICIAL (decl
)
11919 && DECL_CONTEXT (decl
)
11920 && is_tagged_type (DECL_CONTEXT (decl
))
11921 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl
))) == TYPE_DECL
11922 && DECL_NAME (decl
) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl
))))
11923 /* Also ignore the artificial member typedef for the class name. */
11929 /* Generate Dwarf debug information for a decl described by DECL. */
11932 gen_decl_die (decl
, context_die
)
11934 dw_die_ref context_die
;
11938 if (DECL_P (decl
) && DECL_IGNORED_P (decl
))
11941 switch (TREE_CODE (decl
))
11947 /* The individual enumerators of an enum type get output when we output
11948 the Dwarf representation of the relevant enum type itself. */
11951 case FUNCTION_DECL
:
11952 /* Don't output any DIEs to represent mere function declarations,
11953 unless they are class members or explicit block externs. */
11954 if (DECL_INITIAL (decl
) == NULL_TREE
&& DECL_CONTEXT (decl
) == NULL_TREE
11955 && (current_function_decl
== NULL_TREE
|| DECL_ARTIFICIAL (decl
)))
11958 /* If we're emitting a clone, emit info for the abstract instance. */
11959 if (DECL_ORIGIN (decl
) != decl
)
11960 dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl
));
11962 /* If we're emitting an out-of-line copy of an inline function,
11963 emit info for the abstract instance and set up to refer to it. */
11964 else if (DECL_INLINE (decl
) && ! DECL_ABSTRACT (decl
)
11965 && ! class_scope_p (context_die
)
11966 /* dwarf2out_abstract_function won't emit a die if this is just
11967 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
11968 that case, because that works only if we have a die. */
11969 && DECL_INITIAL (decl
) != NULL_TREE
)
11971 dwarf2out_abstract_function (decl
);
11972 set_decl_origin_self (decl
);
11975 /* Otherwise we're emitting the primary DIE for this decl. */
11976 else if (debug_info_level
> DINFO_LEVEL_TERSE
)
11978 /* Before we describe the FUNCTION_DECL itself, make sure that we
11979 have described its return type. */
11980 gen_type_die (TREE_TYPE (TREE_TYPE (decl
)), context_die
);
11982 /* And its virtual context. */
11983 if (DECL_VINDEX (decl
) != NULL_TREE
)
11984 gen_type_die (DECL_CONTEXT (decl
), context_die
);
11986 /* And its containing type. */
11987 origin
= decl_class_context (decl
);
11988 if (origin
!= NULL_TREE
)
11989 gen_type_die_for_member (origin
, decl
, context_die
);
11992 /* Now output a DIE to represent the function itself. */
11993 gen_subprogram_die (decl
, context_die
);
11997 /* If we are in terse mode, don't generate any DIEs to represent any
11998 actual typedefs. */
11999 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
12002 /* In the special case of a TYPE_DECL node representing the declaration
12003 of some type tag, if the given TYPE_DECL is marked as having been
12004 instantiated from some other (original) TYPE_DECL node (e.g. one which
12005 was generated within the original definition of an inline function) we
12006 have to generate a special (abbreviated) DW_TAG_structure_type,
12007 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */
12008 if (TYPE_DECL_IS_STUB (decl
) && decl_ultimate_origin (decl
) != NULL_TREE
)
12010 gen_tagged_type_instantiation_die (TREE_TYPE (decl
), context_die
);
12014 if (is_redundant_typedef (decl
))
12015 gen_type_die (TREE_TYPE (decl
), context_die
);
12017 /* Output a DIE to represent the typedef itself. */
12018 gen_typedef_die (decl
, context_die
);
12022 if (debug_info_level
>= DINFO_LEVEL_NORMAL
)
12023 gen_label_die (decl
, context_die
);
12027 /* If we are in terse mode, don't generate any DIEs to represent any
12028 variable declarations or definitions. */
12029 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
12032 /* Output any DIEs that are needed to specify the type of this data
12034 gen_type_die (TREE_TYPE (decl
), context_die
);
12036 /* And its containing type. */
12037 origin
= decl_class_context (decl
);
12038 if (origin
!= NULL_TREE
)
12039 gen_type_die_for_member (origin
, decl
, context_die
);
12041 /* Now output the DIE to represent the data object itself. This gets
12042 complicated because of the possibility that the VAR_DECL really
12043 represents an inlined instance of a formal parameter for an inline
12045 origin
= decl_ultimate_origin (decl
);
12046 if (origin
!= NULL_TREE
&& TREE_CODE (origin
) == PARM_DECL
)
12047 gen_formal_parameter_die (decl
, context_die
);
12049 gen_variable_die (decl
, context_die
);
12053 /* Ignore the nameless fields that are used to skip bits but handle C++
12054 anonymous unions. */
12055 if (DECL_NAME (decl
) != NULL_TREE
12056 || TREE_CODE (TREE_TYPE (decl
)) == UNION_TYPE
)
12058 gen_type_die (member_declared_type (decl
), context_die
);
12059 gen_field_die (decl
, context_die
);
12064 gen_type_die (TREE_TYPE (decl
), context_die
);
12065 gen_formal_parameter_die (decl
, context_die
);
12068 case NAMESPACE_DECL
:
12069 /* Ignore for now. */
12077 /* Add Ada "use" clause information for SGI Workshop debugger. */
12080 dwarf2out_add_library_unit_info (filename
, context_list
)
12081 const char *filename
;
12082 const char *context_list
;
12084 unsigned int file_index
;
12086 if (filename
!= NULL
)
12088 dw_die_ref unit_die
= new_die (DW_TAG_module
, comp_unit_die
, NULL
);
12089 tree context_list_decl
12090 = build_decl (LABEL_DECL
, get_identifier (context_list
),
12093 TREE_PUBLIC (context_list_decl
) = TRUE
;
12094 add_name_attribute (unit_die
, context_list
);
12095 file_index
= lookup_filename (filename
);
12096 add_AT_unsigned (unit_die
, DW_AT_decl_file
, file_index
);
12097 add_pubname (context_list_decl
, unit_die
);
12101 /* Output debug information for global decl DECL. Called from toplev.c after
12102 compilation proper has finished. */
12105 dwarf2out_global_decl (decl
)
12108 /* Output DWARF2 information for file-scope tentative data object
12109 declarations, file-scope (extern) function declarations (which had no
12110 corresponding body) and file-scope tagged type declarations and
12111 definitions which have not yet been forced out. */
12112 if (TREE_CODE (decl
) != FUNCTION_DECL
|| !DECL_INITIAL (decl
))
12113 dwarf2out_decl (decl
);
12116 /* Write the debugging output for DECL. */
12119 dwarf2out_decl (decl
)
12122 dw_die_ref context_die
= comp_unit_die
;
12124 switch (TREE_CODE (decl
))
12129 case FUNCTION_DECL
:
12130 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of a
12131 builtin function. Explicit programmer-supplied declarations of
12132 these same functions should NOT be ignored however. */
12133 if (DECL_EXTERNAL (decl
) && DECL_BUILT_IN (decl
))
12136 /* What we would really like to do here is to filter out all mere
12137 file-scope declarations of file-scope functions which are never
12138 referenced later within this translation unit (and keep all of ones
12139 that *are* referenced later on) but we aren't clairvoyant, so we have
12140 no idea which functions will be referenced in the future (i.e. later
12141 on within the current translation unit). So here we just ignore all
12142 file-scope function declarations which are not also definitions. If
12143 and when the debugger needs to know something about these functions,
12144 it will have to hunt around and find the DWARF information associated
12145 with the definition of the function.
12147 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
12148 nodes represent definitions and which ones represent mere
12149 declarations. We have to check DECL_INITIAL instead. That's because
12150 the C front-end supports some weird semantics for "extern inline"
12151 function definitions. These can get inlined within the current
12152 translation unit (an thus, we need to generate Dwarf info for their
12153 abstract instances so that the Dwarf info for the concrete inlined
12154 instances can have something to refer to) but the compiler never
12155 generates any out-of-lines instances of such things (despite the fact
12156 that they *are* definitions).
12158 The important point is that the C front-end marks these "extern
12159 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
12160 them anyway. Note that the C++ front-end also plays some similar games
12161 for inline function definitions appearing within include files which
12162 also contain `#pragma interface' pragmas. */
12163 if (DECL_INITIAL (decl
) == NULL_TREE
)
12166 /* If we're a nested function, initially use a parent of NULL; if we're
12167 a plain function, this will be fixed up in decls_for_scope. If
12168 we're a method, it will be ignored, since we already have a DIE. */
12169 if (decl_function_context (decl
))
12170 context_die
= NULL
;
12174 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
12175 declaration and if the declaration was never even referenced from
12176 within this entire compilation unit. We suppress these DIEs in
12177 order to save space in the .debug section (by eliminating entries
12178 which are probably useless). Note that we must not suppress
12179 block-local extern declarations (whether used or not) because that
12180 would screw-up the debugger's name lookup mechanism and cause it to
12181 miss things which really ought to be in scope at a given point. */
12182 if (DECL_EXTERNAL (decl
) && !TREE_USED (decl
))
12185 /* If we are in terse mode, don't generate any DIEs to represent any
12186 variable declarations or definitions. */
12187 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
12192 /* Don't emit stubs for types unless they are needed by other DIEs. */
12193 if (TYPE_DECL_SUPPRESS_DEBUG (decl
))
12196 /* Don't bother trying to generate any DIEs to represent any of the
12197 normal built-in types for the language we are compiling. */
12198 if (DECL_SOURCE_LINE (decl
) == 0)
12200 /* OK, we need to generate one for `bool' so GDB knows what type
12201 comparisons have. */
12202 if ((get_AT_unsigned (comp_unit_die
, DW_AT_language
)
12203 == DW_LANG_C_plus_plus
)
12204 && TREE_CODE (TREE_TYPE (decl
)) == BOOLEAN_TYPE
12205 && ! DECL_IGNORED_P (decl
))
12206 modified_type_die (TREE_TYPE (decl
), 0, 0, NULL
);
12211 /* If we are in terse mode, don't generate any DIEs for types. */
12212 if (debug_info_level
<= DINFO_LEVEL_TERSE
)
12215 /* If we're a function-scope tag, initially use a parent of NULL;
12216 this will be fixed up in decls_for_scope. */
12217 if (decl_function_context (decl
))
12218 context_die
= NULL
;
12226 gen_decl_die (decl
, context_die
);
12229 /* Output a marker (i.e. a label) for the beginning of the generated code for
12230 a lexical block. */
12233 dwarf2out_begin_block (line
, blocknum
)
12234 unsigned int line ATTRIBUTE_UNUSED
;
12235 unsigned int blocknum
;
12237 function_section (current_function_decl
);
12238 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, BLOCK_BEGIN_LABEL
, blocknum
);
12241 /* Output a marker (i.e. a label) for the end of the generated code for a
12245 dwarf2out_end_block (line
, blocknum
)
12246 unsigned int line ATTRIBUTE_UNUSED
;
12247 unsigned int blocknum
;
12249 function_section (current_function_decl
);
12250 ASM_OUTPUT_DEBUG_LABEL (asm_out_file
, BLOCK_END_LABEL
, blocknum
);
12253 /* Returns nonzero if it is appropriate not to emit any debugging
12254 information for BLOCK, because it doesn't contain any instructions.
12256 Don't allow this for blocks with nested functions or local classes
12257 as we would end up with orphans, and in the presence of scheduling
12258 we may end up calling them anyway. */
12261 dwarf2out_ignore_block (block
)
12266 for (decl
= BLOCK_VARS (block
); decl
; decl
= TREE_CHAIN (decl
))
12267 if (TREE_CODE (decl
) == FUNCTION_DECL
12268 || (TREE_CODE (decl
) == TYPE_DECL
&& TYPE_DECL_IS_STUB (decl
)))
12274 /* Lookup FILE_NAME (in the list of filenames that we know about here in
12275 dwarf2out.c) and return its "index". The index of each (known) filename is
12276 just a unique number which is associated with only that one filename. We
12277 need such numbers for the sake of generating labels (in the .debug_sfnames
12278 section) and references to those files numbers (in the .debug_srcinfo
12279 and.debug_macinfo sections). If the filename given as an argument is not
12280 found in our current list, add it to the list and assign it the next
12281 available unique index number. In order to speed up searches, we remember
12282 the index of the filename was looked up last. This handles the majority of
12286 lookup_filename (file_name
)
12287 const char *file_name
;
12291 /* ??? Why isn't DECL_SOURCE_FILE left null instead. */
12292 if (strcmp (file_name
, "<internal>") == 0
12293 || strcmp (file_name
, "<built-in>") == 0)
12296 /* Check to see if the file name that was searched on the previous
12297 call matches this file name. If so, return the index. */
12298 if (file_table
.last_lookup_index
!= 0)
12299 if (0 == strcmp (file_name
,
12300 file_table
.table
[file_table
.last_lookup_index
]))
12301 return file_table
.last_lookup_index
;
12303 /* Didn't match the previous lookup, search the table */
12304 for (i
= 1; i
< file_table
.in_use
; i
++)
12305 if (strcmp (file_name
, file_table
.table
[i
]) == 0)
12307 file_table
.last_lookup_index
= i
;
12311 /* Prepare to add a new table entry by making sure there is enough space in
12312 the table to do so. If not, expand the current table. */
12313 if (i
== file_table
.allocated
)
12315 file_table
.allocated
= i
+ FILE_TABLE_INCREMENT
;
12316 file_table
.table
= (char **)
12317 xrealloc (file_table
.table
, file_table
.allocated
* sizeof (char *));
12318 memset (file_table
.table
+ i
, 0,
12319 FILE_TABLE_INCREMENT
* sizeof (char *));
12322 /* Add the new entry to the end of the filename table. */
12323 file_table
.table
[i
] = xstrdup (file_name
);
12324 file_table
.in_use
= i
+ 1;
12325 file_table
.last_lookup_index
= i
;
12327 if (DWARF2_ASM_LINE_DEBUG_INFO
)
12329 fprintf (asm_out_file
, "\t.file %u ", i
);
12330 output_quoted_string (asm_out_file
, file_name
);
12331 fputc ('\n', asm_out_file
);
12340 /* Allocate the initial hunk of the file_table. */
12341 file_table
.table
= (char **) xcalloc (FILE_TABLE_INCREMENT
, sizeof (char *));
12342 file_table
.allocated
= FILE_TABLE_INCREMENT
;
12344 /* Skip the first entry - file numbers begin at 1. */
12345 file_table
.in_use
= 1;
12346 file_table
.last_lookup_index
= 0;
12349 /* Output a label to mark the beginning of a source code line entry
12350 and record information relating to this source line, in
12351 'line_info_table' for later output of the .debug_line section. */
12354 dwarf2out_source_line (line
, filename
)
12356 const char *filename
;
12358 if (debug_info_level
>= DINFO_LEVEL_NORMAL
)
12360 function_section (current_function_decl
);
12362 /* If requested, emit something human-readable. */
12363 if (flag_debug_asm
)
12364 fprintf (asm_out_file
, "\t%s %s:%d\n", ASM_COMMENT_START
,
12367 if (DWARF2_ASM_LINE_DEBUG_INFO
)
12369 unsigned file_num
= lookup_filename (filename
);
12371 /* Emit the .loc directive understood by GNU as. */
12372 fprintf (asm_out_file
, "\t.loc %d %d 0\n", file_num
, line
);
12374 /* Indicate that line number info exists. */
12375 line_info_table_in_use
++;
12377 /* Indicate that multiple line number tables exist. */
12378 if (DECL_SECTION_NAME (current_function_decl
))
12379 separate_line_info_table_in_use
++;
12381 else if (DECL_SECTION_NAME (current_function_decl
))
12383 dw_separate_line_info_ref line_info
;
12384 (*targetm
.asm_out
.internal_label
) (asm_out_file
, SEPARATE_LINE_CODE_LABEL
,
12385 separate_line_info_table_in_use
);
12387 /* expand the line info table if necessary */
12388 if (separate_line_info_table_in_use
12389 == separate_line_info_table_allocated
)
12391 separate_line_info_table_allocated
+= LINE_INFO_TABLE_INCREMENT
;
12392 separate_line_info_table
12393 = (dw_separate_line_info_ref
)
12394 ggc_realloc (separate_line_info_table
,
12395 separate_line_info_table_allocated
12396 * sizeof (dw_separate_line_info_entry
));
12397 memset ((separate_line_info_table
12398 + separate_line_info_table_in_use
),
12400 (LINE_INFO_TABLE_INCREMENT
12401 * sizeof (dw_separate_line_info_entry
)));
12404 /* Add the new entry at the end of the line_info_table. */
12406 = &separate_line_info_table
[separate_line_info_table_in_use
++];
12407 line_info
->dw_file_num
= lookup_filename (filename
);
12408 line_info
->dw_line_num
= line
;
12409 line_info
->function
= current_function_funcdef_no
;
12413 dw_line_info_ref line_info
;
12415 (*targetm
.asm_out
.internal_label
) (asm_out_file
, LINE_CODE_LABEL
,
12416 line_info_table_in_use
);
12418 /* Expand the line info table if necessary. */
12419 if (line_info_table_in_use
== line_info_table_allocated
)
12421 line_info_table_allocated
+= LINE_INFO_TABLE_INCREMENT
;
12423 = ggc_realloc (line_info_table
,
12424 (line_info_table_allocated
12425 * sizeof (dw_line_info_entry
)));
12426 memset (line_info_table
+ line_info_table_in_use
, 0,
12427 LINE_INFO_TABLE_INCREMENT
* sizeof (dw_line_info_entry
));
12430 /* Add the new entry at the end of the line_info_table. */
12431 line_info
= &line_info_table
[line_info_table_in_use
++];
12432 line_info
->dw_file_num
= lookup_filename (filename
);
12433 line_info
->dw_line_num
= line
;
12438 /* Record the beginning of a new source file. */
12441 dwarf2out_start_source_file (lineno
, filename
)
12442 unsigned int lineno
;
12443 const char *filename
;
12445 if (flag_eliminate_dwarf2_dups
&& !is_main_source
)
12447 /* Record the beginning of the file for break_out_includes. */
12448 dw_die_ref bincl_die
;
12450 bincl_die
= new_die (DW_TAG_GNU_BINCL
, comp_unit_die
, NULL
);
12451 add_AT_string (bincl_die
, DW_AT_name
, filename
);
12454 is_main_source
= 0;
12456 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12458 named_section_flags (DEBUG_MACINFO_SECTION
, SECTION_DEBUG
);
12459 dw2_asm_output_data (1, DW_MACINFO_start_file
, "Start new file");
12460 dw2_asm_output_data_uleb128 (lineno
, "Included from line number %d",
12462 dw2_asm_output_data_uleb128 (lookup_filename (filename
),
12463 "Filename we just started");
12467 /* Record the end of a source file. */
12470 dwarf2out_end_source_file (lineno
)
12471 unsigned int lineno ATTRIBUTE_UNUSED
;
12473 if (flag_eliminate_dwarf2_dups
)
12474 /* Record the end of the file for break_out_includes. */
12475 new_die (DW_TAG_GNU_EINCL
, comp_unit_die
, NULL
);
12477 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12479 named_section_flags (DEBUG_MACINFO_SECTION
, SECTION_DEBUG
);
12480 dw2_asm_output_data (1, DW_MACINFO_end_file
, "End file");
12484 /* Called from debug_define in toplev.c. The `buffer' parameter contains
12485 the tail part of the directive line, i.e. the part which is past the
12486 initial whitespace, #, whitespace, directive-name, whitespace part. */
12489 dwarf2out_define (lineno
, buffer
)
12490 unsigned lineno ATTRIBUTE_UNUSED
;
12491 const char *buffer ATTRIBUTE_UNUSED
;
12493 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12495 named_section_flags (DEBUG_MACINFO_SECTION
, SECTION_DEBUG
);
12496 dw2_asm_output_data (1, DW_MACINFO_define
, "Define macro");
12497 dw2_asm_output_data_uleb128 (lineno
, "At line number %d", lineno
);
12498 dw2_asm_output_nstring (buffer
, -1, "The macro");
12502 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
12503 the tail part of the directive line, i.e. the part which is past the
12504 initial whitespace, #, whitespace, directive-name, whitespace part. */
12507 dwarf2out_undef (lineno
, buffer
)
12508 unsigned lineno ATTRIBUTE_UNUSED
;
12509 const char *buffer ATTRIBUTE_UNUSED
;
12511 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12513 named_section_flags (DEBUG_MACINFO_SECTION
, SECTION_DEBUG
);
12514 dw2_asm_output_data (1, DW_MACINFO_undef
, "Undefine macro");
12515 dw2_asm_output_data_uleb128 (lineno
, "At line number %d", lineno
);
12516 dw2_asm_output_nstring (buffer
, -1, "The macro");
12520 /* Set up for Dwarf output at the start of compilation. */
12523 dwarf2out_init (main_input_filename
)
12524 const char *main_input_filename
;
12526 init_file_table ();
12528 /* Add the name of the primary input file to the file table first,
12529 under the assumption that we'll be emitting line number data for
12530 it first, which avoids having to add an initial DW_LNS_set_file. */
12531 lookup_filename (main_input_filename
);
12533 /* Allocate the initial hunk of the decl_die_table. */
12534 decl_die_table
= ggc_alloc_cleared (DECL_DIE_TABLE_INCREMENT
12535 * sizeof (dw_die_ref
));
12536 decl_die_table_allocated
= DECL_DIE_TABLE_INCREMENT
;
12537 decl_die_table_in_use
= 0;
12539 /* Allocate the initial hunk of the decl_scope_table. */
12540 VARRAY_TREE_INIT (decl_scope_table
, 256, "decl_scope_table");
12542 /* Allocate the initial hunk of the abbrev_die_table. */
12543 abbrev_die_table
= ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
12544 * sizeof (dw_die_ref
));
12545 abbrev_die_table_allocated
= ABBREV_DIE_TABLE_INCREMENT
;
12546 /* Zero-th entry is allocated, but unused */
12547 abbrev_die_table_in_use
= 1;
12549 /* Allocate the initial hunk of the line_info_table. */
12550 line_info_table
= ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
12551 * sizeof (dw_line_info_entry
));
12552 line_info_table_allocated
= LINE_INFO_TABLE_INCREMENT
;
12554 /* Zero-th entry is allocated, but unused */
12555 line_info_table_in_use
= 1;
12557 /* Generate the initial DIE for the .debug section. Note that the (string)
12558 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
12559 will (typically) be a relative pathname and that this pathname should be
12560 taken as being relative to the directory from which the compiler was
12561 invoked when the given (base) source file was compiled. */
12562 comp_unit_die
= gen_compile_unit_die (main_input_filename
);
12563 is_main_source
= 1;
12565 VARRAY_TREE_INIT (incomplete_types
, 64, "incomplete_types");
12567 VARRAY_RTX_INIT (used_rtx_varray
, 32, "used_rtx_varray");
12569 ASM_GENERATE_INTERNAL_LABEL (text_end_label
, TEXT_END_LABEL
, 0);
12570 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label
,
12571 DEBUG_ABBREV_SECTION_LABEL
, 0);
12572 if (DWARF2_GENERATE_TEXT_SECTION_LABEL
)
12573 ASM_GENERATE_INTERNAL_LABEL (text_section_label
, TEXT_SECTION_LABEL
, 0);
12575 strcpy (text_section_label
, stripattributes (TEXT_SECTION_NAME
));
12577 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label
,
12578 DEBUG_INFO_SECTION_LABEL
, 0);
12579 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label
,
12580 DEBUG_LINE_SECTION_LABEL
, 0);
12581 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label
,
12582 DEBUG_RANGES_SECTION_LABEL
, 0);
12583 named_section_flags (DEBUG_ABBREV_SECTION
, SECTION_DEBUG
);
12584 ASM_OUTPUT_LABEL (asm_out_file
, abbrev_section_label
);
12585 named_section_flags (DEBUG_INFO_SECTION
, SECTION_DEBUG
);
12586 ASM_OUTPUT_LABEL (asm_out_file
, debug_info_section_label
);
12587 named_section_flags (DEBUG_LINE_SECTION
, SECTION_DEBUG
);
12588 ASM_OUTPUT_LABEL (asm_out_file
, debug_line_section_label
);
12590 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12592 named_section_flags (DEBUG_MACINFO_SECTION
, SECTION_DEBUG
);
12593 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label
,
12594 DEBUG_MACINFO_SECTION_LABEL
, 0);
12595 ASM_OUTPUT_LABEL (asm_out_file
, macinfo_section_label
);
12598 if (DWARF2_GENERATE_TEXT_SECTION_LABEL
)
12601 ASM_OUTPUT_LABEL (asm_out_file
, text_section_label
);
12605 /* A helper function for dwarf2out_finish called through
12606 ht_forall. Emit one queued .debug_str string. */
12609 output_indirect_string (h
, v
)
12611 void *v ATTRIBUTE_UNUSED
;
12613 struct indirect_string_node
*node
= (struct indirect_string_node
*) *h
;
12615 if (node
->form
== DW_FORM_strp
)
12617 named_section_flags (DEBUG_STR_SECTION
, DEBUG_STR_SECTION_FLAGS
);
12618 ASM_OUTPUT_LABEL (asm_out_file
, node
->label
);
12619 assemble_string (node
->str
, strlen (node
->str
) + 1);
12625 /* Output stuff that dwarf requires at the end of every file,
12626 and generate the DWARF-2 debugging info. */
12629 dwarf2out_finish (input_filename
)
12630 const char *input_filename ATTRIBUTE_UNUSED
;
12632 limbo_die_node
*node
, *next_node
;
12633 dw_die_ref die
= 0;
12635 /* Traverse the limbo die list, and add parent/child links. The only
12636 dies without parents that should be here are concrete instances of
12637 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
12638 For concrete instances, we can get the parent die from the abstract
12640 for (node
= limbo_die_list
; node
; node
= next_node
)
12642 next_node
= node
->next
;
12645 if (die
->die_parent
== NULL
)
12647 dw_die_ref origin
= get_AT_ref (die
, DW_AT_abstract_origin
);
12651 add_child_die (origin
->die_parent
, die
);
12652 else if (die
== comp_unit_die
)
12654 /* If this was an expression for a bound involved in a function
12655 return type, it may be a SAVE_EXPR for which we weren't able
12656 to find a DIE previously. So try now. */
12657 else if (node
->created_for
12658 && TREE_CODE (node
->created_for
) == SAVE_EXPR
12659 && 0 != (origin
= (lookup_decl_die
12661 (node
->created_for
)))))
12662 add_child_die (origin
, die
);
12663 else if (errorcount
> 0 || sorrycount
> 0)
12664 /* It's OK to be confused by errors in the input. */
12665 add_child_die (comp_unit_die
, die
);
12666 else if (node
->created_for
12667 && ((DECL_P (node
->created_for
)
12668 && (context
= DECL_CONTEXT (node
->created_for
)))
12669 || (TYPE_P (node
->created_for
)
12670 && (context
= TYPE_CONTEXT (node
->created_for
))))
12671 && TREE_CODE (context
) == FUNCTION_DECL
)
12673 /* In certain situations, the lexical block containing a
12674 nested function can be optimized away, which results
12675 in the nested function die being orphaned. Likewise
12676 with the return type of that nested function. Force
12677 this to be a child of the containing function. */
12678 origin
= lookup_decl_die (context
);
12681 add_child_die (origin
, die
);
12688 limbo_die_list
= NULL
;
12690 /* Walk through the list of incomplete types again, trying once more to
12691 emit full debugging info for them. */
12692 retry_incomplete_types ();
12694 /* We need to reverse all the dies before break_out_includes, or
12695 we'll see the end of an include file before the beginning. */
12696 reverse_all_dies (comp_unit_die
);
12698 /* Generate separate CUs for each of the include files we've seen.
12699 They will go into limbo_die_list. */
12700 if (flag_eliminate_dwarf2_dups
)
12701 break_out_includes (comp_unit_die
);
12703 /* Traverse the DIE's and add add sibling attributes to those DIE's
12704 that have children. */
12705 add_sibling_attributes (comp_unit_die
);
12706 for (node
= limbo_die_list
; node
; node
= node
->next
)
12707 add_sibling_attributes (node
->die
);
12709 /* Output a terminator label for the .text section. */
12711 (*targetm
.asm_out
.internal_label
) (asm_out_file
, TEXT_END_LABEL
, 0);
12713 /* Output the source line correspondence table. We must do this
12714 even if there is no line information. Otherwise, on an empty
12715 translation unit, we will generate a present, but empty,
12716 .debug_info section. IRIX 6.5 `nm' will then complain when
12717 examining the file. */
12718 if (! DWARF2_ASM_LINE_DEBUG_INFO
)
12720 named_section_flags (DEBUG_LINE_SECTION
, SECTION_DEBUG
);
12721 output_line_info ();
12724 /* Output location list section if necessary. */
12725 if (have_location_lists
)
12727 /* Output the location lists info. */
12728 named_section_flags (DEBUG_LOC_SECTION
, SECTION_DEBUG
);
12729 ASM_GENERATE_INTERNAL_LABEL (loc_section_label
,
12730 DEBUG_LOC_SECTION_LABEL
, 0);
12731 ASM_OUTPUT_LABEL (asm_out_file
, loc_section_label
);
12732 output_location_lists (die
);
12733 have_location_lists
= 0;
12736 /* We can only use the low/high_pc attributes if all of the code was
12738 if (separate_line_info_table_in_use
== 0)
12740 add_AT_lbl_id (comp_unit_die
, DW_AT_low_pc
, text_section_label
);
12741 add_AT_lbl_id (comp_unit_die
, DW_AT_high_pc
, text_end_label
);
12744 /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
12745 "base address". Use zero so that these addresses become absolute. */
12746 else if (have_location_lists
|| ranges_table_in_use
)
12747 add_AT_addr (comp_unit_die
, DW_AT_entry_pc
, const0_rtx
);
12749 if (debug_info_level
>= DINFO_LEVEL_NORMAL
)
12750 add_AT_lbl_offset (comp_unit_die
, DW_AT_stmt_list
,
12751 debug_line_section_label
);
12753 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12754 add_AT_lbl_offset (comp_unit_die
, DW_AT_macro_info
, macinfo_section_label
);
12756 /* Output all of the compilation units. We put the main one last so that
12757 the offsets are available to output_pubnames. */
12758 for (node
= limbo_die_list
; node
; node
= node
->next
)
12759 output_comp_unit (node
->die
, 0);
12761 output_comp_unit (comp_unit_die
, 0);
12763 /* Output the abbreviation table. */
12764 named_section_flags (DEBUG_ABBREV_SECTION
, SECTION_DEBUG
);
12765 output_abbrev_section ();
12767 /* Output public names table if necessary. */
12768 if (pubname_table_in_use
)
12770 named_section_flags (DEBUG_PUBNAMES_SECTION
, SECTION_DEBUG
);
12771 output_pubnames ();
12774 /* Output the address range information. We only put functions in the arange
12775 table, so don't write it out if we don't have any. */
12776 if (fde_table_in_use
)
12778 named_section_flags (DEBUG_ARANGES_SECTION
, SECTION_DEBUG
);
12782 /* Output ranges section if necessary. */
12783 if (ranges_table_in_use
)
12785 named_section_flags (DEBUG_RANGES_SECTION
, SECTION_DEBUG
);
12786 ASM_OUTPUT_LABEL (asm_out_file
, ranges_section_label
);
12790 /* Have to end the primary source file. */
12791 if (debug_info_level
>= DINFO_LEVEL_VERBOSE
)
12793 named_section_flags (DEBUG_MACINFO_SECTION
, SECTION_DEBUG
);
12794 dw2_asm_output_data (1, DW_MACINFO_end_file
, "End file");
12795 dw2_asm_output_data (1, 0, "End compilation unit");
12798 /* If we emitted any DW_FORM_strp form attribute, output the string
12800 if (debug_str_hash
)
12801 htab_traverse (debug_str_hash
, output_indirect_string
, NULL
);
12805 /* This should never be used, but its address is needed for comparisons. */
12806 const struct gcc_debug_hooks dwarf2_debug_hooks
;
12808 #endif /* DWARF2_DEBUGGING_INFO */
12810 #include "gt-dwarf2out.h"