Fix DealII type problems.
[official-gcc/Ramakrishna.git] / gcc / dwarf2out.c
blob3e3cf316acbe6b4f0e7dd84268d05b53a905d36a
1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
4 Contributed by Gary Funck (gary@intrepid.com).
5 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
6 Extensively modified by Jason Merrill (jason@cygnus.com).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
13 version.
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
24 /* TODO: Emit .debug_line header even when there are no functions, since
25 the file numbers are used by .debug_info. Alternately, leave
26 out locations for types and decls.
27 Avoid talking about ctors and op= for PODs.
28 Factor out common prologue sequences into multiple CIEs. */
30 /* The first part of this file deals with the DWARF 2 frame unwind
31 information, which is also used by the GCC efficient exception handling
32 mechanism. The second part, controlled only by an #ifdef
33 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
34 information. */
36 /* DWARF2 Abbreviation Glossary:
38 CFA = Canonical Frame Address
39 a fixed address on the stack which identifies a call frame.
40 We define it to be the value of SP just before the call insn.
41 The CFA register and offset, which may change during the course
42 of the function, are used to calculate its value at runtime.
44 CFI = Call Frame Instruction
45 an instruction for the DWARF2 abstract machine
47 CIE = Common Information Entry
48 information describing information common to one or more FDEs
50 DIE = Debugging Information Entry
52 FDE = Frame Description Entry
53 information describing the stack call frame, in particular,
54 how to restore registers
56 DW_CFA_... = DWARF2 CFA call frame instruction
57 DW_TAG_... = DWARF2 DIE tag */
59 #include "config.h"
60 #include "system.h"
61 #include "coretypes.h"
62 #include "tm.h"
63 #include "tree.h"
64 #include "version.h"
65 #include "flags.h"
66 #include "real.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "varray.h"
82 #include "ggc.h"
83 #include "md5.h"
84 #include "tm_p.h"
85 #include "diagnostic.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "langhooks.h"
89 #include "hashtab.h"
90 #include "cgraph.h"
91 #include "input.h"
92 #include "gimple.h"
93 #include "tree-pass.h"
95 #ifdef DWARF2_DEBUGGING_INFO
96 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
98 static rtx last_var_location_insn;
99 #endif
101 #ifdef VMS_DEBUGGING_INFO
102 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
104 /* Define this macro to be a nonzero value if the directory specifications
105 which are output in the debug info should end with a separator. */
106 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
107 /* Define this macro to evaluate to a nonzero value if GCC should refrain
108 from generating indirect strings in DWARF2 debug information, for instance
109 if your target is stuck with an old version of GDB that is unable to
110 process them properly or uses VMS Debug. */
111 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
112 #else
113 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
114 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
115 #endif
117 #ifndef DWARF2_FRAME_INFO
118 # ifdef DWARF2_DEBUGGING_INFO
119 # define DWARF2_FRAME_INFO \
120 (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
121 # else
122 # define DWARF2_FRAME_INFO 0
123 # endif
124 #endif
126 /* Map register numbers held in the call frame info that gcc has
127 collected using DWARF_FRAME_REGNUM to those that should be output in
128 .debug_frame and .eh_frame. */
129 #ifndef DWARF2_FRAME_REG_OUT
130 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
131 #endif
133 /* Save the result of dwarf2out_do_frame across PCH. */
134 static GTY(()) bool saved_do_cfi_asm = 0;
136 /* Decide whether we want to emit frame unwind information for the current
137 translation unit. */
140 dwarf2out_do_frame (void)
142 /* We want to emit correct CFA location expressions or lists, so we
143 have to return true if we're going to output debug info, even if
144 we're not going to output frame or unwind info. */
145 return (write_symbols == DWARF2_DEBUG
146 || write_symbols == VMS_AND_DWARF2_DEBUG
147 || DWARF2_FRAME_INFO || saved_do_cfi_asm
148 #ifdef DWARF2_UNWIND_INFO
149 || (DWARF2_UNWIND_INFO
150 && (flag_unwind_tables
151 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
152 #endif
156 /* Decide whether to emit frame unwind via assembler directives. */
159 dwarf2out_do_cfi_asm (void)
161 int enc;
163 #ifdef MIPS_DEBUGGING_INFO
164 return false;
165 #endif
166 if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
167 return false;
168 if (saved_do_cfi_asm)
169 return true;
170 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
171 return false;
173 /* Make sure the personality encoding is one the assembler can support.
174 In particular, aligned addresses can't be handled. */
175 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
176 if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
177 return false;
178 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
179 if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
180 return false;
182 if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
184 #ifdef TARGET_UNWIND_INFO
185 return false;
186 #else
187 if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
188 return false;
189 #endif
192 saved_do_cfi_asm = true;
193 return true;
196 /* The size of the target's pointer type. */
197 #ifndef PTR_SIZE
198 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
199 #endif
201 /* Array of RTXes referenced by the debugging information, which therefore
202 must be kept around forever. */
203 static GTY(()) VEC(rtx,gc) *used_rtx_array;
205 /* A pointer to the base of a list of incomplete types which might be
206 completed at some later time. incomplete_types_list needs to be a
207 VEC(tree,gc) because we want to tell the garbage collector about
208 it. */
209 static GTY(()) VEC(tree,gc) *incomplete_types;
211 /* A pointer to the base of a table of references to declaration
212 scopes. This table is a display which tracks the nesting
213 of declaration scopes at the current scope and containing
214 scopes. This table is used to find the proper place to
215 define type declaration DIE's. */
216 static GTY(()) VEC(tree,gc) *decl_scope_table;
218 /* Pointers to various DWARF2 sections. */
219 static GTY(()) section *debug_info_section;
220 static GTY(()) section *debug_abbrev_section;
221 static GTY(()) section *debug_aranges_section;
222 static GTY(()) section *debug_macinfo_section;
223 static GTY(()) section *debug_line_section;
224 static GTY(()) section *debug_loc_section;
225 static GTY(()) section *debug_pubnames_section;
226 static GTY(()) section *debug_pubtypes_section;
227 static GTY(()) section *debug_dcall_section;
228 static GTY(()) section *debug_vcall_section;
229 static GTY(()) section *debug_str_section;
230 static GTY(()) section *debug_ranges_section;
231 static GTY(()) section *debug_frame_section;
233 /* Personality decl of current unit. Used only when assembler does not support
234 personality CFI. */
235 static GTY(()) rtx current_unit_personality;
237 /* How to start an assembler comment. */
238 #ifndef ASM_COMMENT_START
239 #define ASM_COMMENT_START ";#"
240 #endif
242 typedef struct dw_cfi_struct *dw_cfi_ref;
243 typedef struct dw_fde_struct *dw_fde_ref;
244 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
246 /* Call frames are described using a sequence of Call Frame
247 Information instructions. The register number, offset
248 and address fields are provided as possible operands;
249 their use is selected by the opcode field. */
251 enum dw_cfi_oprnd_type {
252 dw_cfi_oprnd_unused,
253 dw_cfi_oprnd_reg_num,
254 dw_cfi_oprnd_offset,
255 dw_cfi_oprnd_addr,
256 dw_cfi_oprnd_loc
259 typedef union GTY(()) dw_cfi_oprnd_struct {
260 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
261 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
262 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
263 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
265 dw_cfi_oprnd;
267 typedef struct GTY(()) dw_cfi_struct {
268 dw_cfi_ref dw_cfi_next;
269 enum dwarf_call_frame_info dw_cfi_opc;
270 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
271 dw_cfi_oprnd1;
272 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
273 dw_cfi_oprnd2;
275 dw_cfi_node;
277 /* This is how we define the location of the CFA. We use to handle it
278 as REG + OFFSET all the time, but now it can be more complex.
279 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
280 Instead of passing around REG and OFFSET, we pass a copy
281 of this structure. */
282 typedef struct GTY(()) cfa_loc {
283 HOST_WIDE_INT offset;
284 HOST_WIDE_INT base_offset;
285 unsigned int reg;
286 BOOL_BITFIELD indirect : 1; /* 1 if CFA is accessed via a dereference. */
287 BOOL_BITFIELD in_use : 1; /* 1 if a saved cfa is stored here. */
288 } dw_cfa_location;
290 /* All call frame descriptions (FDE's) in the GCC generated DWARF
291 refer to a single Common Information Entry (CIE), defined at
292 the beginning of the .debug_frame section. This use of a single
293 CIE obviates the need to keep track of multiple CIE's
294 in the DWARF generation routines below. */
296 typedef struct GTY(()) dw_fde_struct {
297 tree decl;
298 const char *dw_fde_begin;
299 const char *dw_fde_current_label;
300 const char *dw_fde_end;
301 const char *dw_fde_hot_section_label;
302 const char *dw_fde_hot_section_end_label;
303 const char *dw_fde_unlikely_section_label;
304 const char *dw_fde_unlikely_section_end_label;
305 dw_cfi_ref dw_fde_cfi;
306 dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections. */
307 unsigned funcdef_number;
308 HOST_WIDE_INT stack_realignment;
309 /* Dynamic realign argument pointer register. */
310 unsigned int drap_reg;
311 /* Virtual dynamic realign argument pointer register. */
312 unsigned int vdrap_reg;
313 unsigned all_throwers_are_sibcalls : 1;
314 unsigned nothrow : 1;
315 unsigned uses_eh_lsda : 1;
316 /* Whether we did stack realign in this call frame. */
317 unsigned stack_realign : 1;
318 /* Whether dynamic realign argument pointer register has been saved. */
319 unsigned drap_reg_saved: 1;
320 /* True iff dw_fde_begin label is in text_section or cold_text_section. */
321 unsigned in_std_section : 1;
322 /* True iff dw_fde_unlikely_section_label is in text_section or
323 cold_text_section. */
324 unsigned cold_in_std_section : 1;
325 /* True iff switched sections. */
326 unsigned dw_fde_switched_sections : 1;
327 /* True iff switching from cold to hot section. */
328 unsigned dw_fde_switched_cold_to_hot : 1;
330 dw_fde_node;
332 /* Maximum size (in bytes) of an artificially generated label. */
333 #define MAX_ARTIFICIAL_LABEL_BYTES 30
335 /* The size of addresses as they appear in the Dwarf 2 data.
336 Some architectures use word addresses to refer to code locations,
337 but Dwarf 2 info always uses byte addresses. On such machines,
338 Dwarf 2 addresses need to be larger than the architecture's
339 pointers. */
340 #ifndef DWARF2_ADDR_SIZE
341 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
342 #endif
344 /* The size in bytes of a DWARF field indicating an offset or length
345 relative to a debug info section, specified to be 4 bytes in the
346 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
347 as PTR_SIZE. */
349 #ifndef DWARF_OFFSET_SIZE
350 #define DWARF_OFFSET_SIZE 4
351 #endif
353 /* The size in bytes of a DWARF 4 type signature. */
355 #ifndef DWARF_TYPE_SIGNATURE_SIZE
356 #define DWARF_TYPE_SIGNATURE_SIZE 8
357 #endif
359 /* According to the (draft) DWARF 3 specification, the initial length
360 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
361 bytes are 0xffffffff, followed by the length stored in the next 8
362 bytes.
364 However, the SGI/MIPS ABI uses an initial length which is equal to
365 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
367 #ifndef DWARF_INITIAL_LENGTH_SIZE
368 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
369 #endif
371 /* Round SIZE up to the nearest BOUNDARY. */
372 #define DWARF_ROUND(SIZE,BOUNDARY) \
373 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
375 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
376 #ifndef DWARF_CIE_DATA_ALIGNMENT
377 #ifdef STACK_GROWS_DOWNWARD
378 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
379 #else
380 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
381 #endif
382 #endif
384 /* CIE identifier. */
385 #if HOST_BITS_PER_WIDE_INT >= 64
386 #define DWARF_CIE_ID \
387 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
388 #else
389 #define DWARF_CIE_ID DW_CIE_ID
390 #endif
392 /* A pointer to the base of a table that contains frame description
393 information for each routine. */
394 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
396 /* Number of elements currently allocated for fde_table. */
397 static GTY(()) unsigned fde_table_allocated;
399 /* Number of elements in fde_table currently in use. */
400 static GTY(()) unsigned fde_table_in_use;
402 /* Size (in elements) of increments by which we may expand the
403 fde_table. */
404 #define FDE_TABLE_INCREMENT 256
406 /* Get the current fde_table entry we should use. */
408 static inline dw_fde_ref
409 current_fde (void)
411 return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
414 /* A list of call frame insns for the CIE. */
415 static GTY(()) dw_cfi_ref cie_cfi_head;
417 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
418 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
419 attribute that accelerates the lookup of the FDE associated
420 with the subprogram. This variable holds the table index of the FDE
421 associated with the current function (body) definition. */
422 static unsigned current_funcdef_fde;
423 #endif
425 struct GTY(()) indirect_string_node {
426 const char *str;
427 unsigned int refcount;
428 enum dwarf_form form;
429 char *label;
432 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
434 /* True if the compilation unit has location entries that reference
435 debug strings. */
436 static GTY(()) bool debug_str_hash_forced = false;
438 static GTY(()) int dw2_string_counter;
439 static GTY(()) unsigned long dwarf2out_cfi_label_num;
441 /* True if the compilation unit places functions in more than one section. */
442 static GTY(()) bool have_multiple_function_sections = false;
444 /* Whether the default text and cold text sections have been used at all. */
446 static GTY(()) bool text_section_used = false;
447 static GTY(()) bool cold_text_section_used = false;
449 /* The default cold text section. */
450 static GTY(()) section *cold_text_section;
452 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
454 /* Forward declarations for functions defined in this file. */
456 static char *stripattributes (const char *);
457 static const char *dwarf_cfi_name (unsigned);
458 static dw_cfi_ref new_cfi (void);
459 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
460 static void add_fde_cfi (const char *, dw_cfi_ref);
461 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
462 static void lookup_cfa (dw_cfa_location *);
463 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
464 #ifdef DWARF2_UNWIND_INFO
465 static void initial_return_save (rtx);
466 #endif
467 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
468 HOST_WIDE_INT);
469 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
470 static void output_cfi_directive (dw_cfi_ref);
471 static void output_call_frame_info (int);
472 static void dwarf2out_note_section_used (void);
473 static void flush_queued_reg_saves (void);
474 static bool clobbers_queued_reg_save (const_rtx);
475 static void dwarf2out_frame_debug_expr (rtx, const char *);
477 /* Support for complex CFA locations. */
478 static void output_cfa_loc (dw_cfi_ref);
479 static void output_cfa_loc_raw (dw_cfi_ref);
480 static void get_cfa_from_loc_descr (dw_cfa_location *,
481 struct dw_loc_descr_struct *);
482 static struct dw_loc_descr_struct *build_cfa_loc
483 (dw_cfa_location *, HOST_WIDE_INT);
484 static struct dw_loc_descr_struct *build_cfa_aligned_loc
485 (HOST_WIDE_INT, HOST_WIDE_INT);
486 static void def_cfa_1 (const char *, dw_cfa_location *);
488 /* How to start an assembler comment. */
489 #ifndef ASM_COMMENT_START
490 #define ASM_COMMENT_START ";#"
491 #endif
493 /* Data and reference forms for relocatable data. */
494 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
495 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
497 #ifndef DEBUG_FRAME_SECTION
498 #define DEBUG_FRAME_SECTION ".debug_frame"
499 #endif
501 #ifndef FUNC_BEGIN_LABEL
502 #define FUNC_BEGIN_LABEL "LFB"
503 #endif
505 #ifndef FUNC_END_LABEL
506 #define FUNC_END_LABEL "LFE"
507 #endif
509 #ifndef FRAME_BEGIN_LABEL
510 #define FRAME_BEGIN_LABEL "Lframe"
511 #endif
512 #define CIE_AFTER_SIZE_LABEL "LSCIE"
513 #define CIE_END_LABEL "LECIE"
514 #define FDE_LABEL "LSFDE"
515 #define FDE_AFTER_SIZE_LABEL "LASFDE"
516 #define FDE_END_LABEL "LEFDE"
517 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
518 #define LINE_NUMBER_END_LABEL "LELT"
519 #define LN_PROLOG_AS_LABEL "LASLTP"
520 #define LN_PROLOG_END_LABEL "LELTP"
521 #define DIE_LABEL_PREFIX "DW"
523 /* The DWARF 2 CFA column which tracks the return address. Normally this
524 is the column for PC, or the first column after all of the hard
525 registers. */
526 #ifndef DWARF_FRAME_RETURN_COLUMN
527 #ifdef PC_REGNUM
528 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
529 #else
530 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
531 #endif
532 #endif
534 /* The mapping from gcc register number to DWARF 2 CFA column number. By
535 default, we just provide columns for all registers. */
536 #ifndef DWARF_FRAME_REGNUM
537 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
538 #endif
540 /* Hook used by __throw. */
543 expand_builtin_dwarf_sp_column (void)
545 unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
546 return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
549 /* Return a pointer to a copy of the section string name S with all
550 attributes stripped off, and an asterisk prepended (for assemble_name). */
552 static inline char *
553 stripattributes (const char *s)
555 char *stripped = XNEWVEC (char, strlen (s) + 2);
556 char *p = stripped;
558 *p++ = '*';
560 while (*s && *s != ',')
561 *p++ = *s++;
563 *p = '\0';
564 return stripped;
567 /* MEM is a memory reference for the register size table, each element of
568 which has mode MODE. Initialize column C as a return address column. */
570 static void
571 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
573 HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
574 HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
575 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
578 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder. */
580 static inline HOST_WIDE_INT
581 div_data_align (HOST_WIDE_INT off)
583 HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
584 gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
585 return r;
588 /* Return true if we need a signed version of a given opcode
589 (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended). */
591 static inline bool
592 need_data_align_sf_opcode (HOST_WIDE_INT off)
594 return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
597 /* Generate code to initialize the register size table. */
599 void
600 expand_builtin_init_dwarf_reg_sizes (tree address)
602 unsigned int i;
603 enum machine_mode mode = TYPE_MODE (char_type_node);
604 rtx addr = expand_normal (address);
605 rtx mem = gen_rtx_MEM (BLKmode, addr);
606 bool wrote_return_column = false;
608 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
610 int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
612 if (rnum < DWARF_FRAME_REGISTERS)
614 HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
615 enum machine_mode save_mode = reg_raw_mode[i];
616 HOST_WIDE_INT size;
618 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
619 save_mode = choose_hard_reg_mode (i, 1, true);
620 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
622 if (save_mode == VOIDmode)
623 continue;
624 wrote_return_column = true;
626 size = GET_MODE_SIZE (save_mode);
627 if (offset < 0)
628 continue;
630 emit_move_insn (adjust_address (mem, mode, offset),
631 gen_int_mode (size, mode));
635 if (!wrote_return_column)
636 init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
638 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
639 init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
640 #endif
642 targetm.init_dwarf_reg_sizes_extra (address);
645 /* Convert a DWARF call frame info. operation to its string name */
647 static const char *
648 dwarf_cfi_name (unsigned int cfi_opc)
650 switch (cfi_opc)
652 case DW_CFA_advance_loc:
653 return "DW_CFA_advance_loc";
654 case DW_CFA_offset:
655 return "DW_CFA_offset";
656 case DW_CFA_restore:
657 return "DW_CFA_restore";
658 case DW_CFA_nop:
659 return "DW_CFA_nop";
660 case DW_CFA_set_loc:
661 return "DW_CFA_set_loc";
662 case DW_CFA_advance_loc1:
663 return "DW_CFA_advance_loc1";
664 case DW_CFA_advance_loc2:
665 return "DW_CFA_advance_loc2";
666 case DW_CFA_advance_loc4:
667 return "DW_CFA_advance_loc4";
668 case DW_CFA_offset_extended:
669 return "DW_CFA_offset_extended";
670 case DW_CFA_restore_extended:
671 return "DW_CFA_restore_extended";
672 case DW_CFA_undefined:
673 return "DW_CFA_undefined";
674 case DW_CFA_same_value:
675 return "DW_CFA_same_value";
676 case DW_CFA_register:
677 return "DW_CFA_register";
678 case DW_CFA_remember_state:
679 return "DW_CFA_remember_state";
680 case DW_CFA_restore_state:
681 return "DW_CFA_restore_state";
682 case DW_CFA_def_cfa:
683 return "DW_CFA_def_cfa";
684 case DW_CFA_def_cfa_register:
685 return "DW_CFA_def_cfa_register";
686 case DW_CFA_def_cfa_offset:
687 return "DW_CFA_def_cfa_offset";
689 /* DWARF 3 */
690 case DW_CFA_def_cfa_expression:
691 return "DW_CFA_def_cfa_expression";
692 case DW_CFA_expression:
693 return "DW_CFA_expression";
694 case DW_CFA_offset_extended_sf:
695 return "DW_CFA_offset_extended_sf";
696 case DW_CFA_def_cfa_sf:
697 return "DW_CFA_def_cfa_sf";
698 case DW_CFA_def_cfa_offset_sf:
699 return "DW_CFA_def_cfa_offset_sf";
701 /* SGI/MIPS specific */
702 case DW_CFA_MIPS_advance_loc8:
703 return "DW_CFA_MIPS_advance_loc8";
705 /* GNU extensions */
706 case DW_CFA_GNU_window_save:
707 return "DW_CFA_GNU_window_save";
708 case DW_CFA_GNU_args_size:
709 return "DW_CFA_GNU_args_size";
710 case DW_CFA_GNU_negative_offset_extended:
711 return "DW_CFA_GNU_negative_offset_extended";
713 default:
714 return "DW_CFA_<unknown>";
718 /* Return a pointer to a newly allocated Call Frame Instruction. */
720 static inline dw_cfi_ref
721 new_cfi (void)
723 dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
725 cfi->dw_cfi_next = NULL;
726 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
727 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
729 return cfi;
732 /* Add a Call Frame Instruction to list of instructions. */
734 static inline void
735 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
737 dw_cfi_ref *p;
738 dw_fde_ref fde = current_fde ();
740 /* When DRAP is used, CFA is defined with an expression. Redefine
741 CFA may lead to a different CFA value. */
742 /* ??? Of course, this heuristic fails when we're annotating epilogues,
743 because of course we'll always want to redefine the CFA back to the
744 stack pointer on the way out. Where should we move this check? */
745 if (0 && fde && fde->drap_reg != INVALID_REGNUM)
746 switch (cfi->dw_cfi_opc)
748 case DW_CFA_def_cfa_register:
749 case DW_CFA_def_cfa_offset:
750 case DW_CFA_def_cfa_offset_sf:
751 case DW_CFA_def_cfa:
752 case DW_CFA_def_cfa_sf:
753 gcc_unreachable ();
755 default:
756 break;
759 /* Find the end of the chain. */
760 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
763 *p = cfi;
766 /* Generate a new label for the CFI info to refer to. FORCE is true
767 if a label needs to be output even when using .cfi_* directives. */
769 char *
770 dwarf2out_cfi_label (bool force)
772 static char label[20];
774 if (!force && dwarf2out_do_cfi_asm ())
776 /* In this case, we will be emitting the asm directive instead of
777 the label, so just return a placeholder to keep the rest of the
778 interfaces happy. */
779 strcpy (label, "<do not output>");
781 else
783 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
784 ASM_OUTPUT_LABEL (asm_out_file, label);
787 return label;
790 /* True if remember_state should be emitted before following CFI directive. */
791 static bool emit_cfa_remember;
793 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
794 or to the CIE if LABEL is NULL. */
796 static void
797 add_fde_cfi (const char *label, dw_cfi_ref cfi)
799 dw_cfi_ref *list_head;
801 if (emit_cfa_remember)
803 dw_cfi_ref cfi_remember;
805 /* Emit the state save. */
806 emit_cfa_remember = false;
807 cfi_remember = new_cfi ();
808 cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
809 add_fde_cfi (label, cfi_remember);
812 list_head = &cie_cfi_head;
814 if (dwarf2out_do_cfi_asm ())
816 if (label)
818 dw_fde_ref fde = current_fde ();
820 gcc_assert (fde != NULL);
822 /* We still have to add the cfi to the list so that lookup_cfa
823 works later on. When -g2 and above we even need to force
824 emitting of CFI labels and add to list a DW_CFA_set_loc for
825 convert_cfa_to_fb_loc_list purposes. If we're generating
826 DWARF3 output we use DW_OP_call_frame_cfa and so don't use
827 convert_cfa_to_fb_loc_list. */
828 if (dwarf_version == 2
829 && debug_info_level > DINFO_LEVEL_TERSE
830 && (write_symbols == DWARF2_DEBUG
831 || write_symbols == VMS_AND_DWARF2_DEBUG))
833 switch (cfi->dw_cfi_opc)
835 case DW_CFA_def_cfa_offset:
836 case DW_CFA_def_cfa_offset_sf:
837 case DW_CFA_def_cfa_register:
838 case DW_CFA_def_cfa:
839 case DW_CFA_def_cfa_sf:
840 case DW_CFA_def_cfa_expression:
841 case DW_CFA_restore_state:
842 if (*label == 0 || strcmp (label, "<do not output>") == 0)
843 label = dwarf2out_cfi_label (true);
845 if (fde->dw_fde_current_label == NULL
846 || strcmp (label, fde->dw_fde_current_label) != 0)
848 dw_cfi_ref xcfi;
850 label = xstrdup (label);
852 /* Set the location counter to the new label. */
853 xcfi = new_cfi ();
854 /* It doesn't metter whether DW_CFA_set_loc
855 or DW_CFA_advance_loc4 is added here, those aren't
856 emitted into assembly, only looked up by
857 convert_cfa_to_fb_loc_list. */
858 xcfi->dw_cfi_opc = DW_CFA_set_loc;
859 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
860 add_cfi (&fde->dw_fde_cfi, xcfi);
861 fde->dw_fde_current_label = label;
863 break;
864 default:
865 break;
869 output_cfi_directive (cfi);
871 list_head = &fde->dw_fde_cfi;
873 /* ??? If this is a CFI for the CIE, we don't emit. This
874 assumes that the standard CIE contents that the assembler
875 uses matches the standard CIE contents that the compiler
876 uses. This is probably a bad assumption. I'm not quite
877 sure how to address this for now. */
879 else if (label)
881 dw_fde_ref fde = current_fde ();
883 gcc_assert (fde != NULL);
885 if (*label == 0)
886 label = dwarf2out_cfi_label (false);
888 if (fde->dw_fde_current_label == NULL
889 || strcmp (label, fde->dw_fde_current_label) != 0)
891 dw_cfi_ref xcfi;
893 label = xstrdup (label);
895 /* Set the location counter to the new label. */
896 xcfi = new_cfi ();
897 /* If we have a current label, advance from there, otherwise
898 set the location directly using set_loc. */
899 xcfi->dw_cfi_opc = fde->dw_fde_current_label
900 ? DW_CFA_advance_loc4
901 : DW_CFA_set_loc;
902 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
903 add_cfi (&fde->dw_fde_cfi, xcfi);
905 fde->dw_fde_current_label = label;
908 list_head = &fde->dw_fde_cfi;
911 add_cfi (list_head, cfi);
914 /* Subroutine of lookup_cfa. */
916 static void
917 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
919 switch (cfi->dw_cfi_opc)
921 case DW_CFA_def_cfa_offset:
922 case DW_CFA_def_cfa_offset_sf:
923 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
924 break;
925 case DW_CFA_def_cfa_register:
926 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
927 break;
928 case DW_CFA_def_cfa:
929 case DW_CFA_def_cfa_sf:
930 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
931 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
932 break;
933 case DW_CFA_def_cfa_expression:
934 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
935 break;
937 case DW_CFA_remember_state:
938 gcc_assert (!remember->in_use);
939 *remember = *loc;
940 remember->in_use = 1;
941 break;
942 case DW_CFA_restore_state:
943 gcc_assert (remember->in_use);
944 *loc = *remember;
945 remember->in_use = 0;
946 break;
948 default:
949 break;
953 /* Find the previous value for the CFA. */
955 static void
956 lookup_cfa (dw_cfa_location *loc)
958 dw_cfi_ref cfi;
959 dw_fde_ref fde;
960 dw_cfa_location remember;
962 memset (loc, 0, sizeof (*loc));
963 loc->reg = INVALID_REGNUM;
964 remember = *loc;
966 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
967 lookup_cfa_1 (cfi, loc, &remember);
969 fde = current_fde ();
970 if (fde)
971 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
972 lookup_cfa_1 (cfi, loc, &remember);
975 /* The current rule for calculating the DWARF2 canonical frame address. */
976 static dw_cfa_location cfa;
978 /* The register used for saving registers to the stack, and its offset
979 from the CFA. */
980 static dw_cfa_location cfa_store;
982 /* The current save location around an epilogue. */
983 static dw_cfa_location cfa_remember;
985 /* The running total of the size of arguments pushed onto the stack. */
986 static HOST_WIDE_INT args_size;
988 /* The last args_size we actually output. */
989 static HOST_WIDE_INT old_args_size;
991 /* Entry point to update the canonical frame address (CFA).
992 LABEL is passed to add_fde_cfi. The value of CFA is now to be
993 calculated from REG+OFFSET. */
995 void
996 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
998 dw_cfa_location loc;
999 loc.indirect = 0;
1000 loc.base_offset = 0;
1001 loc.reg = reg;
1002 loc.offset = offset;
1003 def_cfa_1 (label, &loc);
1006 /* Determine if two dw_cfa_location structures define the same data. */
1008 static bool
1009 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1011 return (loc1->reg == loc2->reg
1012 && loc1->offset == loc2->offset
1013 && loc1->indirect == loc2->indirect
1014 && (loc1->indirect == 0
1015 || loc1->base_offset == loc2->base_offset));
1018 /* This routine does the actual work. The CFA is now calculated from
1019 the dw_cfa_location structure. */
1021 static void
1022 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1024 dw_cfi_ref cfi;
1025 dw_cfa_location old_cfa, loc;
1027 cfa = *loc_p;
1028 loc = *loc_p;
1030 if (cfa_store.reg == loc.reg && loc.indirect == 0)
1031 cfa_store.offset = loc.offset;
1033 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1034 lookup_cfa (&old_cfa);
1036 /* If nothing changed, no need to issue any call frame instructions. */
1037 if (cfa_equal_p (&loc, &old_cfa))
1038 return;
1040 cfi = new_cfi ();
1042 if (loc.reg == old_cfa.reg && !loc.indirect)
1044 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1045 the CFA register did not change but the offset did. The data
1046 factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1047 in the assembler via the .cfi_def_cfa_offset directive. */
1048 if (loc.offset < 0)
1049 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1050 else
1051 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1052 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1055 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
1056 else if (loc.offset == old_cfa.offset
1057 && old_cfa.reg != INVALID_REGNUM
1058 && !loc.indirect)
1060 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1061 indicating the CFA register has changed to <register> but the
1062 offset has not changed. */
1063 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1064 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1066 #endif
1068 else if (loc.indirect == 0)
1070 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1071 indicating the CFA register has changed to <register> with
1072 the specified offset. The data factoring for DW_CFA_def_cfa_sf
1073 happens in output_cfi, or in the assembler via the .cfi_def_cfa
1074 directive. */
1075 if (loc.offset < 0)
1076 cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1077 else
1078 cfi->dw_cfi_opc = DW_CFA_def_cfa;
1079 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1080 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1082 else
1084 /* Construct a DW_CFA_def_cfa_expression instruction to
1085 calculate the CFA using a full location expression since no
1086 register-offset pair is available. */
1087 struct dw_loc_descr_struct *loc_list;
1089 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1090 loc_list = build_cfa_loc (&loc, 0);
1091 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1094 add_fde_cfi (label, cfi);
1097 /* Add the CFI for saving a register. REG is the CFA column number.
1098 LABEL is passed to add_fde_cfi.
1099 If SREG is -1, the register is saved at OFFSET from the CFA;
1100 otherwise it is saved in SREG. */
1102 static void
1103 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1105 dw_cfi_ref cfi = new_cfi ();
1106 dw_fde_ref fde = current_fde ();
1108 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1110 /* When stack is aligned, store REG using DW_CFA_expression with
1111 FP. */
1112 if (fde
1113 && fde->stack_realign
1114 && sreg == INVALID_REGNUM)
1116 cfi->dw_cfi_opc = DW_CFA_expression;
1117 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = reg;
1118 cfi->dw_cfi_oprnd1.dw_cfi_loc
1119 = build_cfa_aligned_loc (offset, fde->stack_realignment);
1121 else if (sreg == INVALID_REGNUM)
1123 if (need_data_align_sf_opcode (offset))
1124 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1125 else if (reg & ~0x3f)
1126 cfi->dw_cfi_opc = DW_CFA_offset_extended;
1127 else
1128 cfi->dw_cfi_opc = DW_CFA_offset;
1129 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1131 else if (sreg == reg)
1132 cfi->dw_cfi_opc = DW_CFA_same_value;
1133 else
1135 cfi->dw_cfi_opc = DW_CFA_register;
1136 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1139 add_fde_cfi (label, cfi);
1142 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
1143 This CFI tells the unwinder that it needs to restore the window registers
1144 from the previous frame's window save area.
1146 ??? Perhaps we should note in the CIE where windows are saved (instead of
1147 assuming 0(cfa)) and what registers are in the window. */
1149 void
1150 dwarf2out_window_save (const char *label)
1152 dw_cfi_ref cfi = new_cfi ();
1154 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1155 add_fde_cfi (label, cfi);
1158 /* Entry point for saving a register to the stack. REG is the GCC register
1159 number. LABEL and OFFSET are passed to reg_save. */
1161 void
1162 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1164 reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1167 /* Entry point for saving the return address in the stack.
1168 LABEL and OFFSET are passed to reg_save. */
1170 void
1171 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1173 reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1176 /* Entry point for saving the return address in a register.
1177 LABEL and SREG are passed to reg_save. */
1179 void
1180 dwarf2out_return_reg (const char *label, unsigned int sreg)
1182 reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1185 #ifdef DWARF2_UNWIND_INFO
1186 /* Record the initial position of the return address. RTL is
1187 INCOMING_RETURN_ADDR_RTX. */
1189 static void
1190 initial_return_save (rtx rtl)
1192 unsigned int reg = INVALID_REGNUM;
1193 HOST_WIDE_INT offset = 0;
1195 switch (GET_CODE (rtl))
1197 case REG:
1198 /* RA is in a register. */
1199 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1200 break;
1202 case MEM:
1203 /* RA is on the stack. */
1204 rtl = XEXP (rtl, 0);
1205 switch (GET_CODE (rtl))
1207 case REG:
1208 gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1209 offset = 0;
1210 break;
1212 case PLUS:
1213 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1214 offset = INTVAL (XEXP (rtl, 1));
1215 break;
1217 case MINUS:
1218 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1219 offset = -INTVAL (XEXP (rtl, 1));
1220 break;
1222 default:
1223 gcc_unreachable ();
1226 break;
1228 case PLUS:
1229 /* The return address is at some offset from any value we can
1230 actually load. For instance, on the SPARC it is in %i7+8. Just
1231 ignore the offset for now; it doesn't matter for unwinding frames. */
1232 gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1233 initial_return_save (XEXP (rtl, 0));
1234 return;
1236 default:
1237 gcc_unreachable ();
1240 if (reg != DWARF_FRAME_RETURN_COLUMN)
1241 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1243 #endif
1245 /* Given a SET, calculate the amount of stack adjustment it
1246 contains. */
1248 static HOST_WIDE_INT
1249 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1250 HOST_WIDE_INT cur_offset)
1252 const_rtx src = SET_SRC (pattern);
1253 const_rtx dest = SET_DEST (pattern);
1254 HOST_WIDE_INT offset = 0;
1255 enum rtx_code code;
1257 if (dest == stack_pointer_rtx)
1259 code = GET_CODE (src);
1261 /* Assume (set (reg sp) (reg whatever)) sets args_size
1262 level to 0. */
1263 if (code == REG && src != stack_pointer_rtx)
1265 offset = -cur_args_size;
1266 #ifndef STACK_GROWS_DOWNWARD
1267 offset = -offset;
1268 #endif
1269 return offset - cur_offset;
1272 if (! (code == PLUS || code == MINUS)
1273 || XEXP (src, 0) != stack_pointer_rtx
1274 || !CONST_INT_P (XEXP (src, 1)))
1275 return 0;
1277 /* (set (reg sp) (plus (reg sp) (const_int))) */
1278 offset = INTVAL (XEXP (src, 1));
1279 if (code == PLUS)
1280 offset = -offset;
1281 return offset;
1284 if (MEM_P (src) && !MEM_P (dest))
1285 dest = src;
1286 if (MEM_P (dest))
1288 /* (set (mem (pre_dec (reg sp))) (foo)) */
1289 src = XEXP (dest, 0);
1290 code = GET_CODE (src);
1292 switch (code)
1294 case PRE_MODIFY:
1295 case POST_MODIFY:
1296 if (XEXP (src, 0) == stack_pointer_rtx)
1298 rtx val = XEXP (XEXP (src, 1), 1);
1299 /* We handle only adjustments by constant amount. */
1300 gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1301 && CONST_INT_P (val));
1302 offset = -INTVAL (val);
1303 break;
1305 return 0;
1307 case PRE_DEC:
1308 case POST_DEC:
1309 if (XEXP (src, 0) == stack_pointer_rtx)
1311 offset = GET_MODE_SIZE (GET_MODE (dest));
1312 break;
1314 return 0;
1316 case PRE_INC:
1317 case POST_INC:
1318 if (XEXP (src, 0) == stack_pointer_rtx)
1320 offset = -GET_MODE_SIZE (GET_MODE (dest));
1321 break;
1323 return 0;
1325 default:
1326 return 0;
1329 else
1330 return 0;
1332 return offset;
1335 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1336 indexed by INSN_UID. */
1338 static HOST_WIDE_INT *barrier_args_size;
1340 /* Helper function for compute_barrier_args_size. Handle one insn. */
1342 static HOST_WIDE_INT
1343 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1344 VEC (rtx, heap) **next)
1346 HOST_WIDE_INT offset = 0;
1347 int i;
1349 if (! RTX_FRAME_RELATED_P (insn))
1351 if (prologue_epilogue_contains (insn))
1352 /* Nothing */;
1353 else if (GET_CODE (PATTERN (insn)) == SET)
1354 offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1355 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1356 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1358 /* There may be stack adjustments inside compound insns. Search
1359 for them. */
1360 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1361 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1362 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1363 cur_args_size, offset);
1366 else
1368 rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1370 if (expr)
1372 expr = XEXP (expr, 0);
1373 if (GET_CODE (expr) == PARALLEL
1374 || GET_CODE (expr) == SEQUENCE)
1375 for (i = 1; i < XVECLEN (expr, 0); i++)
1377 rtx elem = XVECEXP (expr, 0, i);
1379 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1380 offset += stack_adjust_offset (elem, cur_args_size, offset);
1385 #ifndef STACK_GROWS_DOWNWARD
1386 offset = -offset;
1387 #endif
1389 cur_args_size += offset;
1390 if (cur_args_size < 0)
1391 cur_args_size = 0;
1393 if (JUMP_P (insn))
1395 rtx dest = JUMP_LABEL (insn);
1397 if (dest)
1399 if (barrier_args_size [INSN_UID (dest)] < 0)
1401 barrier_args_size [INSN_UID (dest)] = cur_args_size;
1402 VEC_safe_push (rtx, heap, *next, dest);
1407 return cur_args_size;
1410 /* Walk the whole function and compute args_size on BARRIERs. */
1412 static void
1413 compute_barrier_args_size (void)
1415 int max_uid = get_max_uid (), i;
1416 rtx insn;
1417 VEC (rtx, heap) *worklist, *next, *tmp;
1419 barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1420 for (i = 0; i < max_uid; i++)
1421 barrier_args_size[i] = -1;
1423 worklist = VEC_alloc (rtx, heap, 20);
1424 next = VEC_alloc (rtx, heap, 20);
1425 insn = get_insns ();
1426 barrier_args_size[INSN_UID (insn)] = 0;
1427 VEC_quick_push (rtx, worklist, insn);
1428 for (;;)
1430 while (!VEC_empty (rtx, worklist))
1432 rtx prev, body, first_insn;
1433 HOST_WIDE_INT cur_args_size;
1435 first_insn = insn = VEC_pop (rtx, worklist);
1436 cur_args_size = barrier_args_size[INSN_UID (insn)];
1437 prev = prev_nonnote_insn (insn);
1438 if (prev && BARRIER_P (prev))
1439 barrier_args_size[INSN_UID (prev)] = cur_args_size;
1441 for (; insn; insn = NEXT_INSN (insn))
1443 if (INSN_DELETED_P (insn) || NOTE_P (insn))
1444 continue;
1445 if (BARRIER_P (insn))
1446 break;
1448 if (LABEL_P (insn))
1450 if (insn == first_insn)
1451 continue;
1452 else if (barrier_args_size[INSN_UID (insn)] < 0)
1454 barrier_args_size[INSN_UID (insn)] = cur_args_size;
1455 continue;
1457 else
1459 /* The insns starting with this label have been
1460 already scanned or are in the worklist. */
1461 break;
1465 body = PATTERN (insn);
1466 if (GET_CODE (body) == SEQUENCE)
1468 HOST_WIDE_INT dest_args_size = cur_args_size;
1469 for (i = 1; i < XVECLEN (body, 0); i++)
1470 if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1471 && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1472 dest_args_size
1473 = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1474 dest_args_size, &next);
1475 else
1476 cur_args_size
1477 = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1478 cur_args_size, &next);
1480 if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1481 compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1482 dest_args_size, &next);
1483 else
1484 cur_args_size
1485 = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1486 cur_args_size, &next);
1488 else
1489 cur_args_size
1490 = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1494 if (VEC_empty (rtx, next))
1495 break;
1497 /* Swap WORKLIST with NEXT and truncate NEXT for next iteration. */
1498 tmp = next;
1499 next = worklist;
1500 worklist = tmp;
1501 VEC_truncate (rtx, next, 0);
1504 VEC_free (rtx, heap, worklist);
1505 VEC_free (rtx, heap, next);
1508 /* Add a CFI to update the running total of the size of arguments
1509 pushed onto the stack. */
1511 static void
1512 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1514 dw_cfi_ref cfi;
1516 if (size == old_args_size)
1517 return;
1519 old_args_size = size;
1521 cfi = new_cfi ();
1522 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1523 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1524 add_fde_cfi (label, cfi);
1527 /* Record a stack adjustment of OFFSET bytes. */
1529 static void
1530 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1532 if (cfa.reg == STACK_POINTER_REGNUM)
1533 cfa.offset += offset;
1535 if (cfa_store.reg == STACK_POINTER_REGNUM)
1536 cfa_store.offset += offset;
1538 if (ACCUMULATE_OUTGOING_ARGS)
1539 return;
1541 #ifndef STACK_GROWS_DOWNWARD
1542 offset = -offset;
1543 #endif
1545 args_size += offset;
1546 if (args_size < 0)
1547 args_size = 0;
1549 def_cfa_1 (label, &cfa);
1550 if (flag_asynchronous_unwind_tables)
1551 dwarf2out_args_size (label, args_size);
1554 /* Check INSN to see if it looks like a push or a stack adjustment, and
1555 make a note of it if it does. EH uses this information to find out
1556 how much extra space it needs to pop off the stack. */
1558 static void
1559 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1561 HOST_WIDE_INT offset;
1562 const char *label;
1563 int i;
1565 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1566 with this function. Proper support would require all frame-related
1567 insns to be marked, and to be able to handle saving state around
1568 epilogues textually in the middle of the function. */
1569 if (prologue_epilogue_contains (insn))
1570 return;
1572 /* If INSN is an instruction from target of an annulled branch, the
1573 effects are for the target only and so current argument size
1574 shouldn't change at all. */
1575 if (final_sequence
1576 && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1577 && INSN_FROM_TARGET_P (insn))
1578 return;
1580 /* If only calls can throw, and we have a frame pointer,
1581 save up adjustments until we see the CALL_INSN. */
1582 if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1584 if (CALL_P (insn) && !after_p)
1586 /* Extract the size of the args from the CALL rtx itself. */
1587 insn = PATTERN (insn);
1588 if (GET_CODE (insn) == PARALLEL)
1589 insn = XVECEXP (insn, 0, 0);
1590 if (GET_CODE (insn) == SET)
1591 insn = SET_SRC (insn);
1592 gcc_assert (GET_CODE (insn) == CALL);
1593 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1595 return;
1598 if (CALL_P (insn) && !after_p)
1600 if (!flag_asynchronous_unwind_tables)
1601 dwarf2out_args_size ("", args_size);
1602 return;
1604 else if (BARRIER_P (insn))
1606 /* Don't call compute_barrier_args_size () if the only
1607 BARRIER is at the end of function. */
1608 if (barrier_args_size == NULL && next_nonnote_insn (insn))
1609 compute_barrier_args_size ();
1610 if (barrier_args_size == NULL)
1611 offset = 0;
1612 else
1614 offset = barrier_args_size[INSN_UID (insn)];
1615 if (offset < 0)
1616 offset = 0;
1619 offset -= args_size;
1620 #ifndef STACK_GROWS_DOWNWARD
1621 offset = -offset;
1622 #endif
1624 else if (GET_CODE (PATTERN (insn)) == SET)
1625 offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1626 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1627 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1629 /* There may be stack adjustments inside compound insns. Search
1630 for them. */
1631 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1632 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1633 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1634 args_size, offset);
1636 else
1637 return;
1639 if (offset == 0)
1640 return;
1642 label = dwarf2out_cfi_label (false);
1643 dwarf2out_stack_adjust (offset, label);
1646 #endif
1648 /* We delay emitting a register save until either (a) we reach the end
1649 of the prologue or (b) the register is clobbered. This clusters
1650 register saves so that there are fewer pc advances. */
1652 struct GTY(()) queued_reg_save {
1653 struct queued_reg_save *next;
1654 rtx reg;
1655 HOST_WIDE_INT cfa_offset;
1656 rtx saved_reg;
1659 static GTY(()) struct queued_reg_save *queued_reg_saves;
1661 /* The caller's ORIG_REG is saved in SAVED_IN_REG. */
1662 struct GTY(()) reg_saved_in_data {
1663 rtx orig_reg;
1664 rtx saved_in_reg;
1667 /* A list of registers saved in other registers.
1668 The list intentionally has a small maximum capacity of 4; if your
1669 port needs more than that, you might consider implementing a
1670 more efficient data structure. */
1671 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1672 static GTY(()) size_t num_regs_saved_in_regs;
1674 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1675 static const char *last_reg_save_label;
1677 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1678 SREG, or if SREG is NULL then it is saved at OFFSET to the CFA. */
1680 static void
1681 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1683 struct queued_reg_save *q;
1685 /* Duplicates waste space, but it's also necessary to remove them
1686 for correctness, since the queue gets output in reverse
1687 order. */
1688 for (q = queued_reg_saves; q != NULL; q = q->next)
1689 if (REGNO (q->reg) == REGNO (reg))
1690 break;
1692 if (q == NULL)
1694 q = GGC_NEW (struct queued_reg_save);
1695 q->next = queued_reg_saves;
1696 queued_reg_saves = q;
1699 q->reg = reg;
1700 q->cfa_offset = offset;
1701 q->saved_reg = sreg;
1703 last_reg_save_label = label;
1706 /* Output all the entries in QUEUED_REG_SAVES. */
1708 static void
1709 flush_queued_reg_saves (void)
1711 struct queued_reg_save *q;
1713 for (q = queued_reg_saves; q; q = q->next)
1715 size_t i;
1716 unsigned int reg, sreg;
1718 for (i = 0; i < num_regs_saved_in_regs; i++)
1719 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1720 break;
1721 if (q->saved_reg && i == num_regs_saved_in_regs)
1723 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1724 num_regs_saved_in_regs++;
1726 if (i != num_regs_saved_in_regs)
1728 regs_saved_in_regs[i].orig_reg = q->reg;
1729 regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1732 reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1733 if (q->saved_reg)
1734 sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1735 else
1736 sreg = INVALID_REGNUM;
1737 reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1740 queued_reg_saves = NULL;
1741 last_reg_save_label = NULL;
1744 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1745 location for? Or, does it clobber a register which we've previously
1746 said that some other register is saved in, and for which we now
1747 have a new location for? */
1749 static bool
1750 clobbers_queued_reg_save (const_rtx insn)
1752 struct queued_reg_save *q;
1754 for (q = queued_reg_saves; q; q = q->next)
1756 size_t i;
1757 if (modified_in_p (q->reg, insn))
1758 return true;
1759 for (i = 0; i < num_regs_saved_in_regs; i++)
1760 if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1761 && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1762 return true;
1765 return false;
1768 /* Entry point for saving the first register into the second. */
1770 void
1771 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1773 size_t i;
1774 unsigned int regno, sregno;
1776 for (i = 0; i < num_regs_saved_in_regs; i++)
1777 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1778 break;
1779 if (i == num_regs_saved_in_regs)
1781 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1782 num_regs_saved_in_regs++;
1784 regs_saved_in_regs[i].orig_reg = reg;
1785 regs_saved_in_regs[i].saved_in_reg = sreg;
1787 regno = DWARF_FRAME_REGNUM (REGNO (reg));
1788 sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1789 reg_save (label, regno, sregno, 0);
1792 /* What register, if any, is currently saved in REG? */
1794 static rtx
1795 reg_saved_in (rtx reg)
1797 unsigned int regn = REGNO (reg);
1798 size_t i;
1799 struct queued_reg_save *q;
1801 for (q = queued_reg_saves; q; q = q->next)
1802 if (q->saved_reg && regn == REGNO (q->saved_reg))
1803 return q->reg;
1805 for (i = 0; i < num_regs_saved_in_regs; i++)
1806 if (regs_saved_in_regs[i].saved_in_reg
1807 && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1808 return regs_saved_in_regs[i].orig_reg;
1810 return NULL_RTX;
1814 /* A temporary register holding an integral value used in adjusting SP
1815 or setting up the store_reg. The "offset" field holds the integer
1816 value, not an offset. */
1817 static dw_cfa_location cfa_temp;
1819 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note. */
1821 static void
1822 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1824 memset (&cfa, 0, sizeof (cfa));
1826 switch (GET_CODE (pat))
1828 case PLUS:
1829 cfa.reg = REGNO (XEXP (pat, 0));
1830 cfa.offset = INTVAL (XEXP (pat, 1));
1831 break;
1833 case REG:
1834 cfa.reg = REGNO (pat);
1835 break;
1837 default:
1838 /* Recurse and define an expression. */
1839 gcc_unreachable ();
1842 def_cfa_1 (label, &cfa);
1845 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note. */
1847 static void
1848 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1850 rtx src, dest;
1852 gcc_assert (GET_CODE (pat) == SET);
1853 dest = XEXP (pat, 0);
1854 src = XEXP (pat, 1);
1856 switch (GET_CODE (src))
1858 case PLUS:
1859 gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1860 cfa.offset -= INTVAL (XEXP (src, 1));
1861 break;
1863 case REG:
1864 break;
1866 default:
1867 gcc_unreachable ();
1870 cfa.reg = REGNO (dest);
1871 gcc_assert (cfa.indirect == 0);
1873 def_cfa_1 (label, &cfa);
1876 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note. */
1878 static void
1879 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1881 HOST_WIDE_INT offset;
1882 rtx src, addr, span;
1884 src = XEXP (set, 1);
1885 addr = XEXP (set, 0);
1886 gcc_assert (MEM_P (addr));
1887 addr = XEXP (addr, 0);
1889 /* As documented, only consider extremely simple addresses. */
1890 switch (GET_CODE (addr))
1892 case REG:
1893 gcc_assert (REGNO (addr) == cfa.reg);
1894 offset = -cfa.offset;
1895 break;
1896 case PLUS:
1897 gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1898 offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1899 break;
1900 default:
1901 gcc_unreachable ();
1904 span = targetm.dwarf_register_span (src);
1906 /* ??? We'd like to use queue_reg_save, but we need to come up with
1907 a different flushing heuristic for epilogues. */
1908 if (!span)
1909 reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1910 else
1912 /* We have a PARALLEL describing where the contents of SRC live.
1913 Queue register saves for each piece of the PARALLEL. */
1914 int par_index;
1915 int limit;
1916 HOST_WIDE_INT span_offset = offset;
1918 gcc_assert (GET_CODE (span) == PARALLEL);
1920 limit = XVECLEN (span, 0);
1921 for (par_index = 0; par_index < limit; par_index++)
1923 rtx elem = XVECEXP (span, 0, par_index);
1925 reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1926 INVALID_REGNUM, span_offset);
1927 span_offset += GET_MODE_SIZE (GET_MODE (elem));
1932 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note. */
1934 static void
1935 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1937 rtx src, dest;
1938 unsigned sregno, dregno;
1940 src = XEXP (set, 1);
1941 dest = XEXP (set, 0);
1943 if (src == pc_rtx)
1944 sregno = DWARF_FRAME_RETURN_COLUMN;
1945 else
1946 sregno = DWARF_FRAME_REGNUM (REGNO (src));
1948 dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1950 /* ??? We'd like to use queue_reg_save, but we need to come up with
1951 a different flushing heuristic for epilogues. */
1952 reg_save (label, sregno, dregno, 0);
1955 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note. */
1957 static void
1958 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1960 dw_cfi_ref cfi = new_cfi ();
1961 unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1963 cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1964 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1966 add_fde_cfi (label, cfi);
1969 /* Record call frame debugging information for an expression EXPR,
1970 which either sets SP or FP (adjusting how we calculate the frame
1971 address) or saves a register to the stack or another register.
1972 LABEL indicates the address of EXPR.
1974 This function encodes a state machine mapping rtxes to actions on
1975 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1976 users need not read the source code.
1978 The High-Level Picture
1980 Changes in the register we use to calculate the CFA: Currently we
1981 assume that if you copy the CFA register into another register, we
1982 should take the other one as the new CFA register; this seems to
1983 work pretty well. If it's wrong for some target, it's simple
1984 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1986 Changes in the register we use for saving registers to the stack:
1987 This is usually SP, but not always. Again, we deduce that if you
1988 copy SP into another register (and SP is not the CFA register),
1989 then the new register is the one we will be using for register
1990 saves. This also seems to work.
1992 Register saves: There's not much guesswork about this one; if
1993 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1994 register save, and the register used to calculate the destination
1995 had better be the one we think we're using for this purpose.
1996 It's also assumed that a copy from a call-saved register to another
1997 register is saving that register if RTX_FRAME_RELATED_P is set on
1998 that instruction. If the copy is from a call-saved register to
1999 the *same* register, that means that the register is now the same
2000 value as in the caller.
2002 Except: If the register being saved is the CFA register, and the
2003 offset is nonzero, we are saving the CFA, so we assume we have to
2004 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
2005 the intent is to save the value of SP from the previous frame.
2007 In addition, if a register has previously been saved to a different
2008 register,
2010 Invariants / Summaries of Rules
2012 cfa current rule for calculating the CFA. It usually
2013 consists of a register and an offset.
2014 cfa_store register used by prologue code to save things to the stack
2015 cfa_store.offset is the offset from the value of
2016 cfa_store.reg to the actual CFA
2017 cfa_temp register holding an integral value. cfa_temp.offset
2018 stores the value, which will be used to adjust the
2019 stack pointer. cfa_temp is also used like cfa_store,
2020 to track stores to the stack via fp or a temp reg.
2022 Rules 1- 4: Setting a register's value to cfa.reg or an expression
2023 with cfa.reg as the first operand changes the cfa.reg and its
2024 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
2025 cfa_temp.offset.
2027 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
2028 expression yielding a constant. This sets cfa_temp.reg
2029 and cfa_temp.offset.
2031 Rule 5: Create a new register cfa_store used to save items to the
2032 stack.
2034 Rules 10-14: Save a register to the stack. Define offset as the
2035 difference of the original location and cfa_store's
2036 location (or cfa_temp's location if cfa_temp is used).
2038 Rules 16-20: If AND operation happens on sp in prologue, we assume
2039 stack is realigned. We will use a group of DW_OP_XXX
2040 expressions to represent the location of the stored
2041 register instead of CFA+offset.
2043 The Rules
2045 "{a,b}" indicates a choice of a xor b.
2046 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2048 Rule 1:
2049 (set <reg1> <reg2>:cfa.reg)
2050 effects: cfa.reg = <reg1>
2051 cfa.offset unchanged
2052 cfa_temp.reg = <reg1>
2053 cfa_temp.offset = cfa.offset
2055 Rule 2:
2056 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2057 {<const_int>,<reg>:cfa_temp.reg}))
2058 effects: cfa.reg = sp if fp used
2059 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2060 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2061 if cfa_store.reg==sp
2063 Rule 3:
2064 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2065 effects: cfa.reg = fp
2066 cfa_offset += +/- <const_int>
2068 Rule 4:
2069 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2070 constraints: <reg1> != fp
2071 <reg1> != sp
2072 effects: cfa.reg = <reg1>
2073 cfa_temp.reg = <reg1>
2074 cfa_temp.offset = cfa.offset
2076 Rule 5:
2077 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2078 constraints: <reg1> != fp
2079 <reg1> != sp
2080 effects: cfa_store.reg = <reg1>
2081 cfa_store.offset = cfa.offset - cfa_temp.offset
2083 Rule 6:
2084 (set <reg> <const_int>)
2085 effects: cfa_temp.reg = <reg>
2086 cfa_temp.offset = <const_int>
2088 Rule 7:
2089 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2090 effects: cfa_temp.reg = <reg1>
2091 cfa_temp.offset |= <const_int>
2093 Rule 8:
2094 (set <reg> (high <exp>))
2095 effects: none
2097 Rule 9:
2098 (set <reg> (lo_sum <exp> <const_int>))
2099 effects: cfa_temp.reg = <reg>
2100 cfa_temp.offset = <const_int>
2102 Rule 10:
2103 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2104 effects: cfa_store.offset -= <const_int>
2105 cfa.offset = cfa_store.offset if cfa.reg == sp
2106 cfa.reg = sp
2107 cfa.base_offset = -cfa_store.offset
2109 Rule 11:
2110 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2111 effects: cfa_store.offset += -/+ mode_size(mem)
2112 cfa.offset = cfa_store.offset if cfa.reg == sp
2113 cfa.reg = sp
2114 cfa.base_offset = -cfa_store.offset
2116 Rule 12:
2117 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2119 <reg2>)
2120 effects: cfa.reg = <reg1>
2121 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2123 Rule 13:
2124 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2125 effects: cfa.reg = <reg1>
2126 cfa.base_offset = -{cfa_store,cfa_temp}.offset
2128 Rule 14:
2129 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2130 effects: cfa.reg = <reg1>
2131 cfa.base_offset = -cfa_temp.offset
2132 cfa_temp.offset -= mode_size(mem)
2134 Rule 15:
2135 (set <reg> {unspec, unspec_volatile})
2136 effects: target-dependent
2138 Rule 16:
2139 (set sp (and: sp <const_int>))
2140 constraints: cfa_store.reg == sp
2141 effects: current_fde.stack_realign = 1
2142 cfa_store.offset = 0
2143 fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2145 Rule 17:
2146 (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2147 effects: cfa_store.offset += -/+ mode_size(mem)
2149 Rule 18:
2150 (set (mem ({pre_inc, pre_dec} sp)) fp)
2151 constraints: fde->stack_realign == 1
2152 effects: cfa_store.offset = 0
2153 cfa.reg != HARD_FRAME_POINTER_REGNUM
2155 Rule 19:
2156 (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2157 constraints: fde->stack_realign == 1
2158 && cfa.offset == 0
2159 && cfa.indirect == 0
2160 && cfa.reg != HARD_FRAME_POINTER_REGNUM
2161 effects: Use DW_CFA_def_cfa_expression to define cfa
2162 cfa.reg == fde->drap_reg
2164 Rule 20:
2165 (set reg fde->drap_reg)
2166 constraints: fde->vdrap_reg == INVALID_REGNUM
2167 effects: fde->vdrap_reg = reg.
2168 (set mem fde->drap_reg)
2169 constraints: fde->drap_reg_saved == 1
2170 effects: none. */
2172 static void
2173 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2175 rtx src, dest, span;
2176 HOST_WIDE_INT offset;
2177 dw_fde_ref fde;
2179 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2180 the PARALLEL independently. The first element is always processed if
2181 it is a SET. This is for backward compatibility. Other elements
2182 are processed only if they are SETs and the RTX_FRAME_RELATED_P
2183 flag is set in them. */
2184 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2186 int par_index;
2187 int limit = XVECLEN (expr, 0);
2188 rtx elem;
2190 /* PARALLELs have strict read-modify-write semantics, so we
2191 ought to evaluate every rvalue before changing any lvalue.
2192 It's cumbersome to do that in general, but there's an
2193 easy approximation that is enough for all current users:
2194 handle register saves before register assignments. */
2195 if (GET_CODE (expr) == PARALLEL)
2196 for (par_index = 0; par_index < limit; par_index++)
2198 elem = XVECEXP (expr, 0, par_index);
2199 if (GET_CODE (elem) == SET
2200 && MEM_P (SET_DEST (elem))
2201 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2202 dwarf2out_frame_debug_expr (elem, label);
2205 for (par_index = 0; par_index < limit; par_index++)
2207 elem = XVECEXP (expr, 0, par_index);
2208 if (GET_CODE (elem) == SET
2209 && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2210 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2211 dwarf2out_frame_debug_expr (elem, label);
2212 else if (GET_CODE (elem) == SET
2213 && par_index != 0
2214 && !RTX_FRAME_RELATED_P (elem))
2216 /* Stack adjustment combining might combine some post-prologue
2217 stack adjustment into a prologue stack adjustment. */
2218 HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2220 if (offset != 0)
2221 dwarf2out_stack_adjust (offset, label);
2224 return;
2227 gcc_assert (GET_CODE (expr) == SET);
2229 src = SET_SRC (expr);
2230 dest = SET_DEST (expr);
2232 if (REG_P (src))
2234 rtx rsi = reg_saved_in (src);
2235 if (rsi)
2236 src = rsi;
2239 fde = current_fde ();
2241 if (REG_P (src)
2242 && fde
2243 && fde->drap_reg == REGNO (src)
2244 && (fde->drap_reg_saved
2245 || REG_P (dest)))
2247 /* Rule 20 */
2248 /* If we are saving dynamic realign argument pointer to a
2249 register, the destination is virtual dynamic realign
2250 argument pointer. It may be used to access argument. */
2251 if (REG_P (dest))
2253 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2254 fde->vdrap_reg = REGNO (dest);
2256 return;
2259 switch (GET_CODE (dest))
2261 case REG:
2262 switch (GET_CODE (src))
2264 /* Setting FP from SP. */
2265 case REG:
2266 if (cfa.reg == (unsigned) REGNO (src))
2268 /* Rule 1 */
2269 /* Update the CFA rule wrt SP or FP. Make sure src is
2270 relative to the current CFA register.
2272 We used to require that dest be either SP or FP, but the
2273 ARM copies SP to a temporary register, and from there to
2274 FP. So we just rely on the backends to only set
2275 RTX_FRAME_RELATED_P on appropriate insns. */
2276 cfa.reg = REGNO (dest);
2277 cfa_temp.reg = cfa.reg;
2278 cfa_temp.offset = cfa.offset;
2280 else
2282 /* Saving a register in a register. */
2283 gcc_assert (!fixed_regs [REGNO (dest)]
2284 /* For the SPARC and its register window. */
2285 || (DWARF_FRAME_REGNUM (REGNO (src))
2286 == DWARF_FRAME_RETURN_COLUMN));
2288 /* After stack is aligned, we can only save SP in FP
2289 if drap register is used. In this case, we have
2290 to restore stack pointer with the CFA value and we
2291 don't generate this DWARF information. */
2292 if (fde
2293 && fde->stack_realign
2294 && REGNO (src) == STACK_POINTER_REGNUM)
2295 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2296 && fde->drap_reg != INVALID_REGNUM
2297 && cfa.reg != REGNO (src));
2298 else
2299 queue_reg_save (label, src, dest, 0);
2301 break;
2303 case PLUS:
2304 case MINUS:
2305 case LO_SUM:
2306 if (dest == stack_pointer_rtx)
2308 /* Rule 2 */
2309 /* Adjusting SP. */
2310 switch (GET_CODE (XEXP (src, 1)))
2312 case CONST_INT:
2313 offset = INTVAL (XEXP (src, 1));
2314 break;
2315 case REG:
2316 gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2317 == cfa_temp.reg);
2318 offset = cfa_temp.offset;
2319 break;
2320 default:
2321 gcc_unreachable ();
2324 if (XEXP (src, 0) == hard_frame_pointer_rtx)
2326 /* Restoring SP from FP in the epilogue. */
2327 gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2328 cfa.reg = STACK_POINTER_REGNUM;
2330 else if (GET_CODE (src) == LO_SUM)
2331 /* Assume we've set the source reg of the LO_SUM from sp. */
2333 else
2334 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2336 if (GET_CODE (src) != MINUS)
2337 offset = -offset;
2338 if (cfa.reg == STACK_POINTER_REGNUM)
2339 cfa.offset += offset;
2340 if (cfa_store.reg == STACK_POINTER_REGNUM)
2341 cfa_store.offset += offset;
2343 else if (dest == hard_frame_pointer_rtx)
2345 /* Rule 3 */
2346 /* Either setting the FP from an offset of the SP,
2347 or adjusting the FP */
2348 gcc_assert (frame_pointer_needed);
2350 gcc_assert (REG_P (XEXP (src, 0))
2351 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2352 && CONST_INT_P (XEXP (src, 1)));
2353 offset = INTVAL (XEXP (src, 1));
2354 if (GET_CODE (src) != MINUS)
2355 offset = -offset;
2356 cfa.offset += offset;
2357 cfa.reg = HARD_FRAME_POINTER_REGNUM;
2359 else
2361 gcc_assert (GET_CODE (src) != MINUS);
2363 /* Rule 4 */
2364 if (REG_P (XEXP (src, 0))
2365 && REGNO (XEXP (src, 0)) == cfa.reg
2366 && CONST_INT_P (XEXP (src, 1)))
2368 /* Setting a temporary CFA register that will be copied
2369 into the FP later on. */
2370 offset = - INTVAL (XEXP (src, 1));
2371 cfa.offset += offset;
2372 cfa.reg = REGNO (dest);
2373 /* Or used to save regs to the stack. */
2374 cfa_temp.reg = cfa.reg;
2375 cfa_temp.offset = cfa.offset;
2378 /* Rule 5 */
2379 else if (REG_P (XEXP (src, 0))
2380 && REGNO (XEXP (src, 0)) == cfa_temp.reg
2381 && XEXP (src, 1) == stack_pointer_rtx)
2383 /* Setting a scratch register that we will use instead
2384 of SP for saving registers to the stack. */
2385 gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2386 cfa_store.reg = REGNO (dest);
2387 cfa_store.offset = cfa.offset - cfa_temp.offset;
2390 /* Rule 9 */
2391 else if (GET_CODE (src) == LO_SUM
2392 && CONST_INT_P (XEXP (src, 1)))
2394 cfa_temp.reg = REGNO (dest);
2395 cfa_temp.offset = INTVAL (XEXP (src, 1));
2397 else
2398 gcc_unreachable ();
2400 break;
2402 /* Rule 6 */
2403 case CONST_INT:
2404 cfa_temp.reg = REGNO (dest);
2405 cfa_temp.offset = INTVAL (src);
2406 break;
2408 /* Rule 7 */
2409 case IOR:
2410 gcc_assert (REG_P (XEXP (src, 0))
2411 && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2412 && CONST_INT_P (XEXP (src, 1)));
2414 if ((unsigned) REGNO (dest) != cfa_temp.reg)
2415 cfa_temp.reg = REGNO (dest);
2416 cfa_temp.offset |= INTVAL (XEXP (src, 1));
2417 break;
2419 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2420 which will fill in all of the bits. */
2421 /* Rule 8 */
2422 case HIGH:
2423 break;
2425 /* Rule 15 */
2426 case UNSPEC:
2427 case UNSPEC_VOLATILE:
2428 gcc_assert (targetm.dwarf_handle_frame_unspec);
2429 targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2430 return;
2432 /* Rule 16 */
2433 case AND:
2434 /* If this AND operation happens on stack pointer in prologue,
2435 we assume the stack is realigned and we extract the
2436 alignment. */
2437 if (fde && XEXP (src, 0) == stack_pointer_rtx)
2439 gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2440 fde->stack_realign = 1;
2441 fde->stack_realignment = INTVAL (XEXP (src, 1));
2442 cfa_store.offset = 0;
2444 if (cfa.reg != STACK_POINTER_REGNUM
2445 && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2446 fde->drap_reg = cfa.reg;
2448 return;
2450 default:
2451 gcc_unreachable ();
2454 def_cfa_1 (label, &cfa);
2455 break;
2457 case MEM:
2459 /* Saving a register to the stack. Make sure dest is relative to the
2460 CFA register. */
2461 switch (GET_CODE (XEXP (dest, 0)))
2463 /* Rule 10 */
2464 /* With a push. */
2465 case PRE_MODIFY:
2466 /* We can't handle variable size modifications. */
2467 gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2468 == CONST_INT);
2469 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2471 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2472 && cfa_store.reg == STACK_POINTER_REGNUM);
2474 cfa_store.offset += offset;
2475 if (cfa.reg == STACK_POINTER_REGNUM)
2476 cfa.offset = cfa_store.offset;
2478 offset = -cfa_store.offset;
2479 break;
2481 /* Rule 11 */
2482 case PRE_INC:
2483 case PRE_DEC:
2484 offset = GET_MODE_SIZE (GET_MODE (dest));
2485 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2486 offset = -offset;
2488 gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2489 == STACK_POINTER_REGNUM)
2490 && cfa_store.reg == STACK_POINTER_REGNUM);
2492 cfa_store.offset += offset;
2494 /* Rule 18: If stack is aligned, we will use FP as a
2495 reference to represent the address of the stored
2496 regiser. */
2497 if (fde
2498 && fde->stack_realign
2499 && src == hard_frame_pointer_rtx)
2501 gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2502 cfa_store.offset = 0;
2505 if (cfa.reg == STACK_POINTER_REGNUM)
2506 cfa.offset = cfa_store.offset;
2508 offset = -cfa_store.offset;
2509 break;
2511 /* Rule 12 */
2512 /* With an offset. */
2513 case PLUS:
2514 case MINUS:
2515 case LO_SUM:
2517 int regno;
2519 gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2520 && REG_P (XEXP (XEXP (dest, 0), 0)));
2521 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2522 if (GET_CODE (XEXP (dest, 0)) == MINUS)
2523 offset = -offset;
2525 regno = REGNO (XEXP (XEXP (dest, 0), 0));
2527 if (cfa_store.reg == (unsigned) regno)
2528 offset -= cfa_store.offset;
2529 else
2531 gcc_assert (cfa_temp.reg == (unsigned) regno);
2532 offset -= cfa_temp.offset;
2535 break;
2537 /* Rule 13 */
2538 /* Without an offset. */
2539 case REG:
2541 int regno = REGNO (XEXP (dest, 0));
2543 if (cfa_store.reg == (unsigned) regno)
2544 offset = -cfa_store.offset;
2545 else
2547 gcc_assert (cfa_temp.reg == (unsigned) regno);
2548 offset = -cfa_temp.offset;
2551 break;
2553 /* Rule 14 */
2554 case POST_INC:
2555 gcc_assert (cfa_temp.reg
2556 == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2557 offset = -cfa_temp.offset;
2558 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2559 break;
2561 default:
2562 gcc_unreachable ();
2565 /* Rule 17 */
2566 /* If the source operand of this MEM operation is not a
2567 register, basically the source is return address. Here
2568 we only care how much stack grew and we don't save it. */
2569 if (!REG_P (src))
2570 break;
2572 if (REGNO (src) != STACK_POINTER_REGNUM
2573 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2574 && (unsigned) REGNO (src) == cfa.reg)
2576 /* We're storing the current CFA reg into the stack. */
2578 if (cfa.offset == 0)
2580 /* Rule 19 */
2581 /* If stack is aligned, putting CFA reg into stack means
2582 we can no longer use reg + offset to represent CFA.
2583 Here we use DW_CFA_def_cfa_expression instead. The
2584 result of this expression equals to the original CFA
2585 value. */
2586 if (fde
2587 && fde->stack_realign
2588 && cfa.indirect == 0
2589 && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2591 dw_cfa_location cfa_exp;
2593 gcc_assert (fde->drap_reg == cfa.reg);
2595 cfa_exp.indirect = 1;
2596 cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2597 cfa_exp.base_offset = offset;
2598 cfa_exp.offset = 0;
2600 fde->drap_reg_saved = 1;
2602 def_cfa_1 (label, &cfa_exp);
2603 break;
2606 /* If the source register is exactly the CFA, assume
2607 we're saving SP like any other register; this happens
2608 on the ARM. */
2609 def_cfa_1 (label, &cfa);
2610 queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2611 break;
2613 else
2615 /* Otherwise, we'll need to look in the stack to
2616 calculate the CFA. */
2617 rtx x = XEXP (dest, 0);
2619 if (!REG_P (x))
2620 x = XEXP (x, 0);
2621 gcc_assert (REG_P (x));
2623 cfa.reg = REGNO (x);
2624 cfa.base_offset = offset;
2625 cfa.indirect = 1;
2626 def_cfa_1 (label, &cfa);
2627 break;
2631 def_cfa_1 (label, &cfa);
2633 span = targetm.dwarf_register_span (src);
2635 if (!span)
2636 queue_reg_save (label, src, NULL_RTX, offset);
2637 else
2639 /* We have a PARALLEL describing where the contents of SRC
2640 live. Queue register saves for each piece of the
2641 PARALLEL. */
2642 int par_index;
2643 int limit;
2644 HOST_WIDE_INT span_offset = offset;
2646 gcc_assert (GET_CODE (span) == PARALLEL);
2648 limit = XVECLEN (span, 0);
2649 for (par_index = 0; par_index < limit; par_index++)
2651 rtx elem = XVECEXP (span, 0, par_index);
2653 queue_reg_save (label, elem, NULL_RTX, span_offset);
2654 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2658 break;
2660 default:
2661 gcc_unreachable ();
2665 /* Record call frame debugging information for INSN, which either
2666 sets SP or FP (adjusting how we calculate the frame address) or saves a
2667 register to the stack. If INSN is NULL_RTX, initialize our state.
2669 If AFTER_P is false, we're being called before the insn is emitted,
2670 otherwise after. Call instructions get invoked twice. */
2672 void
2673 dwarf2out_frame_debug (rtx insn, bool after_p)
2675 const char *label;
2676 rtx note, n;
2677 bool handled_one = false;
2679 if (insn == NULL_RTX)
2681 size_t i;
2683 /* Flush any queued register saves. */
2684 flush_queued_reg_saves ();
2686 /* Set up state for generating call frame debug info. */
2687 lookup_cfa (&cfa);
2688 gcc_assert (cfa.reg
2689 == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2691 cfa.reg = STACK_POINTER_REGNUM;
2692 cfa_store = cfa;
2693 cfa_temp.reg = -1;
2694 cfa_temp.offset = 0;
2696 for (i = 0; i < num_regs_saved_in_regs; i++)
2698 regs_saved_in_regs[i].orig_reg = NULL_RTX;
2699 regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2701 num_regs_saved_in_regs = 0;
2703 if (barrier_args_size)
2705 XDELETEVEC (barrier_args_size);
2706 barrier_args_size = NULL;
2708 return;
2711 if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2712 flush_queued_reg_saves ();
2714 if (!RTX_FRAME_RELATED_P (insn))
2716 /* ??? This should be done unconditionally since stack adjustments
2717 matter if the stack pointer is not the CFA register anymore but
2718 is still used to save registers. */
2719 if (!ACCUMULATE_OUTGOING_ARGS)
2720 dwarf2out_notice_stack_adjust (insn, after_p);
2721 return;
2724 label = dwarf2out_cfi_label (false);
2726 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2727 switch (REG_NOTE_KIND (note))
2729 case REG_FRAME_RELATED_EXPR:
2730 insn = XEXP (note, 0);
2731 goto found;
2733 case REG_CFA_DEF_CFA:
2734 dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2735 handled_one = true;
2736 break;
2738 case REG_CFA_ADJUST_CFA:
2739 n = XEXP (note, 0);
2740 if (n == NULL)
2742 n = PATTERN (insn);
2743 if (GET_CODE (n) == PARALLEL)
2744 n = XVECEXP (n, 0, 0);
2746 dwarf2out_frame_debug_adjust_cfa (n, label);
2747 handled_one = true;
2748 break;
2750 case REG_CFA_OFFSET:
2751 n = XEXP (note, 0);
2752 if (n == NULL)
2753 n = single_set (insn);
2754 dwarf2out_frame_debug_cfa_offset (n, label);
2755 handled_one = true;
2756 break;
2758 case REG_CFA_REGISTER:
2759 n = XEXP (note, 0);
2760 if (n == NULL)
2762 n = PATTERN (insn);
2763 if (GET_CODE (n) == PARALLEL)
2764 n = XVECEXP (n, 0, 0);
2766 dwarf2out_frame_debug_cfa_register (n, label);
2767 handled_one = true;
2768 break;
2770 case REG_CFA_RESTORE:
2771 n = XEXP (note, 0);
2772 if (n == NULL)
2774 n = PATTERN (insn);
2775 if (GET_CODE (n) == PARALLEL)
2776 n = XVECEXP (n, 0, 0);
2777 n = XEXP (n, 0);
2779 dwarf2out_frame_debug_cfa_restore (n, label);
2780 handled_one = true;
2781 break;
2783 default:
2784 break;
2786 if (handled_one)
2787 return;
2789 insn = PATTERN (insn);
2790 found:
2791 dwarf2out_frame_debug_expr (insn, label);
2794 /* Determine if we need to save and restore CFI information around this
2795 epilogue. If SIBCALL is true, then this is a sibcall epilogue. If
2796 we do need to save/restore, then emit the save now, and insert a
2797 NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream. */
2799 void
2800 dwarf2out_begin_epilogue (rtx insn)
2802 bool saw_frp = false;
2803 rtx i;
2805 /* Scan forward to the return insn, noticing if there are possible
2806 frame related insns. */
2807 for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2809 if (!INSN_P (i))
2810 continue;
2812 /* Look for both regular and sibcalls to end the block. */
2813 if (returnjump_p (i))
2814 break;
2815 if (CALL_P (i) && SIBLING_CALL_P (i))
2816 break;
2818 if (GET_CODE (PATTERN (i)) == SEQUENCE)
2820 int idx;
2821 rtx seq = PATTERN (i);
2823 if (returnjump_p (XVECEXP (seq, 0, 0)))
2824 break;
2825 if (CALL_P (XVECEXP (seq, 0, 0))
2826 && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2827 break;
2829 for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2830 if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2831 saw_frp = true;
2834 if (RTX_FRAME_RELATED_P (i))
2835 saw_frp = true;
2838 /* If the port doesn't emit epilogue unwind info, we don't need a
2839 save/restore pair. */
2840 if (!saw_frp)
2841 return;
2843 /* Otherwise, search forward to see if the return insn was the last
2844 basic block of the function. If so, we don't need save/restore. */
2845 gcc_assert (i != NULL);
2846 i = next_real_insn (i);
2847 if (i == NULL)
2848 return;
2850 /* Insert the restore before that next real insn in the stream, and before
2851 a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2852 properly nested. This should be after any label or alignment. This
2853 will be pushed into the CFI stream by the function below. */
2854 while (1)
2856 rtx p = PREV_INSN (i);
2857 if (!NOTE_P (p))
2858 break;
2859 if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2860 break;
2861 i = p;
2863 emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2865 emit_cfa_remember = true;
2867 /* And emulate the state save. */
2868 gcc_assert (!cfa_remember.in_use);
2869 cfa_remember = cfa;
2870 cfa_remember.in_use = 1;
2873 /* A "subroutine" of dwarf2out_begin_epilogue. Emit the restore required. */
2875 void
2876 dwarf2out_frame_debug_restore_state (void)
2878 dw_cfi_ref cfi = new_cfi ();
2879 const char *label = dwarf2out_cfi_label (false);
2881 cfi->dw_cfi_opc = DW_CFA_restore_state;
2882 add_fde_cfi (label, cfi);
2884 gcc_assert (cfa_remember.in_use);
2885 cfa = cfa_remember;
2886 cfa_remember.in_use = 0;
2889 #endif
2891 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
2892 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2893 (enum dwarf_call_frame_info cfi);
2895 static enum dw_cfi_oprnd_type
2896 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2898 switch (cfi)
2900 case DW_CFA_nop:
2901 case DW_CFA_GNU_window_save:
2902 case DW_CFA_remember_state:
2903 case DW_CFA_restore_state:
2904 return dw_cfi_oprnd_unused;
2906 case DW_CFA_set_loc:
2907 case DW_CFA_advance_loc1:
2908 case DW_CFA_advance_loc2:
2909 case DW_CFA_advance_loc4:
2910 case DW_CFA_MIPS_advance_loc8:
2911 return dw_cfi_oprnd_addr;
2913 case DW_CFA_offset:
2914 case DW_CFA_offset_extended:
2915 case DW_CFA_def_cfa:
2916 case DW_CFA_offset_extended_sf:
2917 case DW_CFA_def_cfa_sf:
2918 case DW_CFA_restore:
2919 case DW_CFA_restore_extended:
2920 case DW_CFA_undefined:
2921 case DW_CFA_same_value:
2922 case DW_CFA_def_cfa_register:
2923 case DW_CFA_register:
2924 return dw_cfi_oprnd_reg_num;
2926 case DW_CFA_def_cfa_offset:
2927 case DW_CFA_GNU_args_size:
2928 case DW_CFA_def_cfa_offset_sf:
2929 return dw_cfi_oprnd_offset;
2931 case DW_CFA_def_cfa_expression:
2932 case DW_CFA_expression:
2933 return dw_cfi_oprnd_loc;
2935 default:
2936 gcc_unreachable ();
2940 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
2941 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2942 (enum dwarf_call_frame_info cfi);
2944 static enum dw_cfi_oprnd_type
2945 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2947 switch (cfi)
2949 case DW_CFA_def_cfa:
2950 case DW_CFA_def_cfa_sf:
2951 case DW_CFA_offset:
2952 case DW_CFA_offset_extended_sf:
2953 case DW_CFA_offset_extended:
2954 return dw_cfi_oprnd_offset;
2956 case DW_CFA_register:
2957 return dw_cfi_oprnd_reg_num;
2959 default:
2960 return dw_cfi_oprnd_unused;
2964 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2966 /* Switch [BACK] to eh_frame_section. If we don't have an eh_frame_section,
2967 switch to the data section instead, and write out a synthetic start label
2968 for collect2 the first time around. */
2970 static void
2971 switch_to_eh_frame_section (bool back)
2973 tree label;
2975 #ifdef EH_FRAME_SECTION_NAME
2976 if (eh_frame_section == 0)
2978 int flags;
2980 if (EH_TABLES_CAN_BE_READ_ONLY)
2982 int fde_encoding;
2983 int per_encoding;
2984 int lsda_encoding;
2986 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2987 /*global=*/0);
2988 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2989 /*global=*/1);
2990 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2991 /*global=*/0);
2992 flags = ((! flag_pic
2993 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2994 && (fde_encoding & 0x70) != DW_EH_PE_aligned
2995 && (per_encoding & 0x70) != DW_EH_PE_absptr
2996 && (per_encoding & 0x70) != DW_EH_PE_aligned
2997 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2998 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2999 ? 0 : SECTION_WRITE);
3001 else
3002 flags = SECTION_WRITE;
3003 eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
3005 #endif
3007 if (eh_frame_section)
3008 switch_to_section (eh_frame_section);
3009 else
3011 /* We have no special eh_frame section. Put the information in
3012 the data section and emit special labels to guide collect2. */
3013 switch_to_section (data_section);
3015 if (!back)
3017 label = get_file_function_name ("F");
3018 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3019 targetm.asm_out.globalize_label (asm_out_file,
3020 IDENTIFIER_POINTER (label));
3021 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3026 /* Switch [BACK] to the eh or debug frame table section, depending on
3027 FOR_EH. */
3029 static void
3030 switch_to_frame_table_section (int for_eh, bool back)
3032 if (for_eh)
3033 switch_to_eh_frame_section (back);
3034 else
3036 if (!debug_frame_section)
3037 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3038 SECTION_DEBUG, NULL);
3039 switch_to_section (debug_frame_section);
3043 /* Output a Call Frame Information opcode and its operand(s). */
3045 static void
3046 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3048 unsigned long r;
3049 HOST_WIDE_INT off;
3051 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3052 dw2_asm_output_data (1, (cfi->dw_cfi_opc
3053 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3054 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3055 ((unsigned HOST_WIDE_INT)
3056 cfi->dw_cfi_oprnd1.dw_cfi_offset));
3057 else if (cfi->dw_cfi_opc == DW_CFA_offset)
3059 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3060 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3061 "DW_CFA_offset, column 0x%lx", r);
3062 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3063 dw2_asm_output_data_uleb128 (off, NULL);
3065 else if (cfi->dw_cfi_opc == DW_CFA_restore)
3067 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3068 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3069 "DW_CFA_restore, column 0x%lx", r);
3071 else
3073 dw2_asm_output_data (1, cfi->dw_cfi_opc,
3074 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3076 switch (cfi->dw_cfi_opc)
3078 case DW_CFA_set_loc:
3079 if (for_eh)
3080 dw2_asm_output_encoded_addr_rtx (
3081 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3082 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3083 false, NULL);
3084 else
3085 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3086 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3087 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3088 break;
3090 case DW_CFA_advance_loc1:
3091 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3092 fde->dw_fde_current_label, NULL);
3093 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3094 break;
3096 case DW_CFA_advance_loc2:
3097 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3098 fde->dw_fde_current_label, NULL);
3099 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3100 break;
3102 case DW_CFA_advance_loc4:
3103 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3104 fde->dw_fde_current_label, NULL);
3105 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3106 break;
3108 case DW_CFA_MIPS_advance_loc8:
3109 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3110 fde->dw_fde_current_label, NULL);
3111 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3112 break;
3114 case DW_CFA_offset_extended:
3115 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3116 dw2_asm_output_data_uleb128 (r, NULL);
3117 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3118 dw2_asm_output_data_uleb128 (off, NULL);
3119 break;
3121 case DW_CFA_def_cfa:
3122 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3123 dw2_asm_output_data_uleb128 (r, NULL);
3124 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3125 break;
3127 case DW_CFA_offset_extended_sf:
3128 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3129 dw2_asm_output_data_uleb128 (r, NULL);
3130 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3131 dw2_asm_output_data_sleb128 (off, NULL);
3132 break;
3134 case DW_CFA_def_cfa_sf:
3135 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3136 dw2_asm_output_data_uleb128 (r, NULL);
3137 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3138 dw2_asm_output_data_sleb128 (off, NULL);
3139 break;
3141 case DW_CFA_restore_extended:
3142 case DW_CFA_undefined:
3143 case DW_CFA_same_value:
3144 case DW_CFA_def_cfa_register:
3145 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3146 dw2_asm_output_data_uleb128 (r, NULL);
3147 break;
3149 case DW_CFA_register:
3150 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3151 dw2_asm_output_data_uleb128 (r, NULL);
3152 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3153 dw2_asm_output_data_uleb128 (r, NULL);
3154 break;
3156 case DW_CFA_def_cfa_offset:
3157 case DW_CFA_GNU_args_size:
3158 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3159 break;
3161 case DW_CFA_def_cfa_offset_sf:
3162 off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3163 dw2_asm_output_data_sleb128 (off, NULL);
3164 break;
3166 case DW_CFA_GNU_window_save:
3167 break;
3169 case DW_CFA_def_cfa_expression:
3170 case DW_CFA_expression:
3171 output_cfa_loc (cfi);
3172 break;
3174 case DW_CFA_GNU_negative_offset_extended:
3175 /* Obsoleted by DW_CFA_offset_extended_sf. */
3176 gcc_unreachable ();
3178 default:
3179 break;
3184 /* Similar, but do it via assembler directives instead. */
3186 static void
3187 output_cfi_directive (dw_cfi_ref cfi)
3189 unsigned long r, r2;
3191 switch (cfi->dw_cfi_opc)
3193 case DW_CFA_advance_loc:
3194 case DW_CFA_advance_loc1:
3195 case DW_CFA_advance_loc2:
3196 case DW_CFA_advance_loc4:
3197 case DW_CFA_MIPS_advance_loc8:
3198 case DW_CFA_set_loc:
3199 /* Should only be created by add_fde_cfi in a code path not
3200 followed when emitting via directives. The assembler is
3201 going to take care of this for us. */
3202 gcc_unreachable ();
3204 case DW_CFA_offset:
3205 case DW_CFA_offset_extended:
3206 case DW_CFA_offset_extended_sf:
3207 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3208 fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3209 r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3210 break;
3212 case DW_CFA_restore:
3213 case DW_CFA_restore_extended:
3214 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3215 fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3216 break;
3218 case DW_CFA_undefined:
3219 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3220 fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3221 break;
3223 case DW_CFA_same_value:
3224 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3225 fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3226 break;
3228 case DW_CFA_def_cfa:
3229 case DW_CFA_def_cfa_sf:
3230 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3231 fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3232 r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3233 break;
3235 case DW_CFA_def_cfa_register:
3236 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3237 fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3238 break;
3240 case DW_CFA_register:
3241 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3242 r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3243 fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3244 break;
3246 case DW_CFA_def_cfa_offset:
3247 case DW_CFA_def_cfa_offset_sf:
3248 fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3249 HOST_WIDE_INT_PRINT_DEC"\n",
3250 cfi->dw_cfi_oprnd1.dw_cfi_offset);
3251 break;
3253 case DW_CFA_remember_state:
3254 fprintf (asm_out_file, "\t.cfi_remember_state\n");
3255 break;
3256 case DW_CFA_restore_state:
3257 fprintf (asm_out_file, "\t.cfi_restore_state\n");
3258 break;
3260 case DW_CFA_GNU_args_size:
3261 fprintf (asm_out_file, "\t.cfi_escape 0x%x,", DW_CFA_GNU_args_size);
3262 dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3263 if (flag_debug_asm)
3264 fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3265 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3266 fputc ('\n', asm_out_file);
3267 break;
3269 case DW_CFA_GNU_window_save:
3270 fprintf (asm_out_file, "\t.cfi_window_save\n");
3271 break;
3273 case DW_CFA_def_cfa_expression:
3274 case DW_CFA_expression:
3275 fprintf (asm_out_file, "\t.cfi_escape 0x%x,", cfi->dw_cfi_opc);
3276 output_cfa_loc_raw (cfi);
3277 fputc ('\n', asm_out_file);
3278 break;
3280 default:
3281 gcc_unreachable ();
3285 DEF_VEC_P (dw_cfi_ref);
3286 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3288 /* Output CFIs to bring current FDE to the same state as after executing
3289 CFIs in CFI chain. DO_CFI_ASM is true if .cfi_* directives shall
3290 be emitted, false otherwise. If it is false, FDE and FOR_EH are the
3291 other arguments to pass to output_cfi. */
3293 static void
3294 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3296 struct dw_cfi_struct cfi_buf;
3297 dw_cfi_ref cfi2;
3298 dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3299 VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3300 unsigned int len, idx;
3302 for (;; cfi = cfi->dw_cfi_next)
3303 switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3305 case DW_CFA_advance_loc:
3306 case DW_CFA_advance_loc1:
3307 case DW_CFA_advance_loc2:
3308 case DW_CFA_advance_loc4:
3309 case DW_CFA_MIPS_advance_loc8:
3310 case DW_CFA_set_loc:
3311 /* All advances should be ignored. */
3312 break;
3313 case DW_CFA_remember_state:
3315 dw_cfi_ref args_size = cfi_args_size;
3317 /* Skip everything between .cfi_remember_state and
3318 .cfi_restore_state. */
3319 for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3320 if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3321 break;
3322 else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3323 args_size = cfi2;
3324 else
3325 gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3327 if (cfi2 == NULL)
3328 goto flush_all;
3329 else
3331 cfi = cfi2;
3332 cfi_args_size = args_size;
3334 break;
3336 case DW_CFA_GNU_args_size:
3337 cfi_args_size = cfi;
3338 break;
3339 case DW_CFA_GNU_window_save:
3340 goto flush_all;
3341 case DW_CFA_offset:
3342 case DW_CFA_offset_extended:
3343 case DW_CFA_offset_extended_sf:
3344 case DW_CFA_restore:
3345 case DW_CFA_restore_extended:
3346 case DW_CFA_undefined:
3347 case DW_CFA_same_value:
3348 case DW_CFA_register:
3349 case DW_CFA_val_offset:
3350 case DW_CFA_val_offset_sf:
3351 case DW_CFA_expression:
3352 case DW_CFA_val_expression:
3353 case DW_CFA_GNU_negative_offset_extended:
3354 if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3355 VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3356 cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3357 VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3358 break;
3359 case DW_CFA_def_cfa:
3360 case DW_CFA_def_cfa_sf:
3361 case DW_CFA_def_cfa_expression:
3362 cfi_cfa = cfi;
3363 cfi_cfa_offset = cfi;
3364 break;
3365 case DW_CFA_def_cfa_register:
3366 cfi_cfa = cfi;
3367 break;
3368 case DW_CFA_def_cfa_offset:
3369 case DW_CFA_def_cfa_offset_sf:
3370 cfi_cfa_offset = cfi;
3371 break;
3372 case DW_CFA_nop:
3373 gcc_assert (cfi == NULL);
3374 flush_all:
3375 len = VEC_length (dw_cfi_ref, regs);
3376 for (idx = 0; idx < len; idx++)
3378 cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3379 if (cfi2 != NULL
3380 && cfi2->dw_cfi_opc != DW_CFA_restore
3381 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3383 if (do_cfi_asm)
3384 output_cfi_directive (cfi2);
3385 else
3386 output_cfi (cfi2, fde, for_eh);
3389 if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3391 gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3392 cfi_buf = *cfi_cfa;
3393 switch (cfi_cfa_offset->dw_cfi_opc)
3395 case DW_CFA_def_cfa_offset:
3396 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3397 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3398 break;
3399 case DW_CFA_def_cfa_offset_sf:
3400 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3401 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3402 break;
3403 case DW_CFA_def_cfa:
3404 case DW_CFA_def_cfa_sf:
3405 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3406 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3407 break;
3408 default:
3409 gcc_unreachable ();
3411 cfi_cfa = &cfi_buf;
3413 else if (cfi_cfa_offset)
3414 cfi_cfa = cfi_cfa_offset;
3415 if (cfi_cfa)
3417 if (do_cfi_asm)
3418 output_cfi_directive (cfi_cfa);
3419 else
3420 output_cfi (cfi_cfa, fde, for_eh);
3422 cfi_cfa = NULL;
3423 cfi_cfa_offset = NULL;
3424 if (cfi_args_size
3425 && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3427 if (do_cfi_asm)
3428 output_cfi_directive (cfi_args_size);
3429 else
3430 output_cfi (cfi_args_size, fde, for_eh);
3432 cfi_args_size = NULL;
3433 if (cfi == NULL)
3435 VEC_free (dw_cfi_ref, heap, regs);
3436 return;
3438 else if (do_cfi_asm)
3439 output_cfi_directive (cfi);
3440 else
3441 output_cfi (cfi, fde, for_eh);
3442 break;
3443 default:
3444 gcc_unreachable ();
3448 /* Output one FDE. */
3450 static void
3451 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3452 char *section_start_label, int fde_encoding, char *augmentation,
3453 bool any_lsda_needed, int lsda_encoding)
3455 const char *begin, *end;
3456 static unsigned int j;
3457 char l1[20], l2[20];
3458 dw_cfi_ref cfi;
3460 targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3461 /* empty */ 0);
3462 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3463 for_eh + j);
3464 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3465 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3466 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3467 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3468 " indicating 64-bit DWARF extension");
3469 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3470 "FDE Length");
3471 ASM_OUTPUT_LABEL (asm_out_file, l1);
3473 if (for_eh)
3474 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3475 else
3476 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3477 debug_frame_section, "FDE CIE offset");
3479 if (!fde->dw_fde_switched_sections)
3481 begin = fde->dw_fde_begin;
3482 end = fde->dw_fde_end;
3484 else
3486 /* For the first section, prefer dw_fde_begin over
3487 dw_fde_{hot,cold}_section_label, as the latter
3488 might be separated from the real start of the
3489 function by alignment padding. */
3490 if (!second)
3491 begin = fde->dw_fde_begin;
3492 else if (fde->dw_fde_switched_cold_to_hot)
3493 begin = fde->dw_fde_hot_section_label;
3494 else
3495 begin = fde->dw_fde_unlikely_section_label;
3496 if (second ^ fde->dw_fde_switched_cold_to_hot)
3497 end = fde->dw_fde_unlikely_section_end_label;
3498 else
3499 end = fde->dw_fde_hot_section_end_label;
3502 if (for_eh)
3504 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3505 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3506 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3507 "FDE initial location");
3508 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3509 end, begin, "FDE address range");
3511 else
3513 dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3514 dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3517 if (augmentation[0])
3519 if (any_lsda_needed)
3521 int size = size_of_encoded_value (lsda_encoding);
3523 if (lsda_encoding == DW_EH_PE_aligned)
3525 int offset = ( 4 /* Length */
3526 + 4 /* CIE offset */
3527 + 2 * size_of_encoded_value (fde_encoding)
3528 + 1 /* Augmentation size */ );
3529 int pad = -offset & (PTR_SIZE - 1);
3531 size += pad;
3532 gcc_assert (size_of_uleb128 (size) == 1);
3535 dw2_asm_output_data_uleb128 (size, "Augmentation size");
3537 if (fde->uses_eh_lsda)
3539 ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3540 fde->funcdef_number);
3541 dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3542 gen_rtx_SYMBOL_REF (Pmode, l1),
3543 false,
3544 "Language Specific Data Area");
3546 else
3548 if (lsda_encoding == DW_EH_PE_aligned)
3549 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3550 dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3551 "Language Specific Data Area (none)");
3554 else
3555 dw2_asm_output_data_uleb128 (0, "Augmentation size");
3558 /* Loop through the Call Frame Instructions associated with
3559 this FDE. */
3560 fde->dw_fde_current_label = begin;
3561 if (!fde->dw_fde_switched_sections)
3562 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3563 output_cfi (cfi, fde, for_eh);
3564 else if (!second)
3566 if (fde->dw_fde_switch_cfi)
3567 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3569 output_cfi (cfi, fde, for_eh);
3570 if (cfi == fde->dw_fde_switch_cfi)
3571 break;
3574 else
3576 dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3578 if (fde->dw_fde_switch_cfi)
3580 cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3581 fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3582 output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3583 fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3585 for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3586 output_cfi (cfi, fde, for_eh);
3589 /* If we are to emit a ref/link from function bodies to their frame tables,
3590 do it now. This is typically performed to make sure that tables
3591 associated with functions are dragged with them and not discarded in
3592 garbage collecting links. We need to do this on a per function basis to
3593 cope with -ffunction-sections. */
3595 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3596 /* Switch to the function section, emit the ref to the tables, and
3597 switch *back* into the table section. */
3598 switch_to_section (function_section (fde->decl));
3599 ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3600 switch_to_frame_table_section (for_eh, true);
3601 #endif
3603 /* Pad the FDE out to an address sized boundary. */
3604 ASM_OUTPUT_ALIGN (asm_out_file,
3605 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3606 ASM_OUTPUT_LABEL (asm_out_file, l2);
3608 j += 2;
3611 /* Output the call frame information used to record information
3612 that relates to calculating the frame pointer, and records the
3613 location of saved registers. */
3615 static void
3616 output_call_frame_info (int for_eh)
3618 unsigned int i;
3619 dw_fde_ref fde;
3620 dw_cfi_ref cfi;
3621 char l1[20], l2[20], section_start_label[20];
3622 bool any_lsda_needed = false;
3623 char augmentation[6];
3624 int augmentation_size;
3625 int fde_encoding = DW_EH_PE_absptr;
3626 int per_encoding = DW_EH_PE_absptr;
3627 int lsda_encoding = DW_EH_PE_absptr;
3628 int return_reg;
3629 rtx personality = NULL;
3630 int dw_cie_version;
3632 /* Don't emit a CIE if there won't be any FDEs. */
3633 if (fde_table_in_use == 0)
3634 return;
3636 /* Nothing to do if the assembler's doing it all. */
3637 if (dwarf2out_do_cfi_asm ())
3638 return;
3640 /* If we make FDEs linkonce, we may have to emit an empty label for
3641 an FDE that wouldn't otherwise be emitted. We want to avoid
3642 having an FDE kept around when the function it refers to is
3643 discarded. Example where this matters: a primary function
3644 template in C++ requires EH information, but an explicit
3645 specialization doesn't. */
3646 if (TARGET_USES_WEAK_UNWIND_INFO
3647 && ! flag_asynchronous_unwind_tables
3648 && flag_exceptions
3649 && for_eh)
3650 for (i = 0; i < fde_table_in_use; i++)
3651 if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3652 && !fde_table[i].uses_eh_lsda
3653 && ! DECL_WEAK (fde_table[i].decl))
3654 targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3655 for_eh, /* empty */ 1);
3657 /* If we don't have any functions we'll want to unwind out of, don't
3658 emit any EH unwind information. Note that if exceptions aren't
3659 enabled, we won't have collected nothrow information, and if we
3660 asked for asynchronous tables, we always want this info. */
3661 if (for_eh)
3663 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3665 for (i = 0; i < fde_table_in_use; i++)
3666 if (fde_table[i].uses_eh_lsda)
3667 any_eh_needed = any_lsda_needed = true;
3668 else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3669 any_eh_needed = true;
3670 else if (! fde_table[i].nothrow
3671 && ! fde_table[i].all_throwers_are_sibcalls)
3672 any_eh_needed = true;
3674 if (! any_eh_needed)
3675 return;
3678 /* We're going to be generating comments, so turn on app. */
3679 if (flag_debug_asm)
3680 app_enable ();
3682 /* Switch to the proper frame section, first time. */
3683 switch_to_frame_table_section (for_eh, false);
3685 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3686 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3688 /* Output the CIE. */
3689 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3690 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3691 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3692 dw2_asm_output_data (4, 0xffffffff,
3693 "Initial length escape value indicating 64-bit DWARF extension");
3694 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3695 "Length of Common Information Entry");
3696 ASM_OUTPUT_LABEL (asm_out_file, l1);
3698 /* Now that the CIE pointer is PC-relative for EH,
3699 use 0 to identify the CIE. */
3700 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3701 (for_eh ? 0 : DWARF_CIE_ID),
3702 "CIE Identifier Tag");
3704 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3705 use CIE version 1, unless that would produce incorrect results
3706 due to overflowing the return register column. */
3707 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3708 dw_cie_version = 1;
3709 if (return_reg >= 256 || dwarf_version > 2)
3710 dw_cie_version = 3;
3711 dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3713 augmentation[0] = 0;
3714 augmentation_size = 0;
3716 personality = current_unit_personality;
3717 if (for_eh)
3719 char *p;
3721 /* Augmentation:
3722 z Indicates that a uleb128 is present to size the
3723 augmentation section.
3724 L Indicates the encoding (and thus presence) of
3725 an LSDA pointer in the FDE augmentation.
3726 R Indicates a non-default pointer encoding for
3727 FDE code pointers.
3728 P Indicates the presence of an encoding + language
3729 personality routine in the CIE augmentation. */
3731 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3732 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3733 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3735 p = augmentation + 1;
3736 if (personality)
3738 *p++ = 'P';
3739 augmentation_size += 1 + size_of_encoded_value (per_encoding);
3740 assemble_external_libcall (personality);
3742 if (any_lsda_needed)
3744 *p++ = 'L';
3745 augmentation_size += 1;
3747 if (fde_encoding != DW_EH_PE_absptr)
3749 *p++ = 'R';
3750 augmentation_size += 1;
3752 if (p > augmentation + 1)
3754 augmentation[0] = 'z';
3755 *p = '\0';
3758 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
3759 if (personality && per_encoding == DW_EH_PE_aligned)
3761 int offset = ( 4 /* Length */
3762 + 4 /* CIE Id */
3763 + 1 /* CIE version */
3764 + strlen (augmentation) + 1 /* Augmentation */
3765 + size_of_uleb128 (1) /* Code alignment */
3766 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3767 + 1 /* RA column */
3768 + 1 /* Augmentation size */
3769 + 1 /* Personality encoding */ );
3770 int pad = -offset & (PTR_SIZE - 1);
3772 augmentation_size += pad;
3774 /* Augmentations should be small, so there's scarce need to
3775 iterate for a solution. Die if we exceed one uleb128 byte. */
3776 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3780 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3781 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3782 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3783 "CIE Data Alignment Factor");
3785 if (dw_cie_version == 1)
3786 dw2_asm_output_data (1, return_reg, "CIE RA Column");
3787 else
3788 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3790 if (augmentation[0])
3792 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3793 if (personality)
3795 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3796 eh_data_format_name (per_encoding));
3797 dw2_asm_output_encoded_addr_rtx (per_encoding,
3798 personality,
3799 true, NULL);
3802 if (any_lsda_needed)
3803 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3804 eh_data_format_name (lsda_encoding));
3806 if (fde_encoding != DW_EH_PE_absptr)
3807 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3808 eh_data_format_name (fde_encoding));
3811 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3812 output_cfi (cfi, NULL, for_eh);
3814 /* Pad the CIE out to an address sized boundary. */
3815 ASM_OUTPUT_ALIGN (asm_out_file,
3816 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3817 ASM_OUTPUT_LABEL (asm_out_file, l2);
3819 /* Loop through all of the FDE's. */
3820 for (i = 0; i < fde_table_in_use; i++)
3822 unsigned int k;
3823 fde = &fde_table[i];
3825 /* Don't emit EH unwind info for leaf functions that don't need it. */
3826 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3827 && (fde->nothrow || fde->all_throwers_are_sibcalls)
3828 && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3829 && !fde->uses_eh_lsda)
3830 continue;
3832 for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3833 output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3834 augmentation, any_lsda_needed, lsda_encoding);
3837 if (for_eh && targetm.terminate_dw2_eh_frame_info)
3838 dw2_asm_output_data (4, 0, "End of Table");
3839 #ifdef MIPS_DEBUGGING_INFO
3840 /* Work around Irix 6 assembler bug whereby labels at the end of a section
3841 get a value of 0. Putting .align 0 after the label fixes it. */
3842 ASM_OUTPUT_ALIGN (asm_out_file, 0);
3843 #endif
3845 /* Turn off app to make assembly quicker. */
3846 if (flag_debug_asm)
3847 app_disable ();
3850 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */
3852 static void
3853 dwarf2out_do_cfi_startproc (bool second)
3855 int enc;
3856 rtx ref;
3857 rtx personality = get_personality_function (current_function_decl);
3859 fprintf (asm_out_file, "\t.cfi_startproc\n");
3861 if (personality)
3863 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3864 ref = personality;
3866 /* ??? The GAS support isn't entirely consistent. We have to
3867 handle indirect support ourselves, but PC-relative is done
3868 in the assembler. Further, the assembler can't handle any
3869 of the weirder relocation types. */
3870 if (enc & DW_EH_PE_indirect)
3871 ref = dw2_force_const_mem (ref, true);
3873 fprintf (asm_out_file, "\t.cfi_personality 0x%x,", enc);
3874 output_addr_const (asm_out_file, ref);
3875 fputc ('\n', asm_out_file);
3878 if (crtl->uses_eh_lsda)
3880 char lab[20];
3882 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3883 ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3884 current_function_funcdef_no);
3885 ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3886 SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3888 if (enc & DW_EH_PE_indirect)
3889 ref = dw2_force_const_mem (ref, true);
3891 fprintf (asm_out_file, "\t.cfi_lsda 0x%x,", enc);
3892 output_addr_const (asm_out_file, ref);
3893 fputc ('\n', asm_out_file);
3897 /* Output a marker (i.e. a label) for the beginning of a function, before
3898 the prologue. */
3900 void
3901 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3902 const char *file ATTRIBUTE_UNUSED)
3904 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3905 char * dup_label;
3906 dw_fde_ref fde;
3907 section *fnsec;
3909 current_function_func_begin_label = NULL;
3911 #ifdef TARGET_UNWIND_INFO
3912 /* ??? current_function_func_begin_label is also used by except.c
3913 for call-site information. We must emit this label if it might
3914 be used. */
3915 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3916 && ! dwarf2out_do_frame ())
3917 return;
3918 #else
3919 if (! dwarf2out_do_frame ())
3920 return;
3921 #endif
3923 fnsec = function_section (current_function_decl);
3924 switch_to_section (fnsec);
3925 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3926 current_function_funcdef_no);
3927 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3928 current_function_funcdef_no);
3929 dup_label = xstrdup (label);
3930 current_function_func_begin_label = dup_label;
3932 #ifdef TARGET_UNWIND_INFO
3933 /* We can elide the fde allocation if we're not emitting debug info. */
3934 if (! dwarf2out_do_frame ())
3935 return;
3936 #endif
3938 /* Expand the fde table if necessary. */
3939 if (fde_table_in_use == fde_table_allocated)
3941 fde_table_allocated += FDE_TABLE_INCREMENT;
3942 fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3943 memset (fde_table + fde_table_in_use, 0,
3944 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3947 /* Record the FDE associated with this function. */
3948 current_funcdef_fde = fde_table_in_use;
3950 /* Add the new FDE at the end of the fde_table. */
3951 fde = &fde_table[fde_table_in_use++];
3952 fde->decl = current_function_decl;
3953 fde->dw_fde_begin = dup_label;
3954 fde->dw_fde_current_label = dup_label;
3955 fde->dw_fde_hot_section_label = NULL;
3956 fde->dw_fde_hot_section_end_label = NULL;
3957 fde->dw_fde_unlikely_section_label = NULL;
3958 fde->dw_fde_unlikely_section_end_label = NULL;
3959 fde->dw_fde_switched_sections = 0;
3960 fde->dw_fde_switched_cold_to_hot = 0;
3961 fde->dw_fde_end = NULL;
3962 fde->dw_fde_cfi = NULL;
3963 fde->dw_fde_switch_cfi = NULL;
3964 fde->funcdef_number = current_function_funcdef_no;
3965 fde->nothrow = crtl->nothrow;
3966 fde->uses_eh_lsda = crtl->uses_eh_lsda;
3967 fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3968 fde->drap_reg = INVALID_REGNUM;
3969 fde->vdrap_reg = INVALID_REGNUM;
3970 if (flag_reorder_blocks_and_partition)
3972 section *unlikelysec;
3973 if (first_function_block_is_cold)
3974 fde->in_std_section = 1;
3975 else
3976 fde->in_std_section
3977 = (fnsec == text_section
3978 || (cold_text_section && fnsec == cold_text_section));
3979 unlikelysec = unlikely_text_section ();
3980 fde->cold_in_std_section
3981 = (unlikelysec == text_section
3982 || (cold_text_section && unlikelysec == cold_text_section));
3984 else
3986 fde->in_std_section
3987 = (fnsec == text_section
3988 || (cold_text_section && fnsec == cold_text_section));
3989 fde->cold_in_std_section = 0;
3992 args_size = old_args_size = 0;
3994 /* We only want to output line number information for the genuine dwarf2
3995 prologue case, not the eh frame case. */
3996 #ifdef DWARF2_DEBUGGING_INFO
3997 if (file)
3998 dwarf2out_source_line (line, file, 0, true);
3999 #endif
4001 if (dwarf2out_do_cfi_asm ())
4002 dwarf2out_do_cfi_startproc (false);
4003 else
4005 rtx personality = get_personality_function (current_function_decl);
4006 if (!current_unit_personality)
4007 current_unit_personality = personality;
4009 /* We cannot keep a current personality per function as without CFI
4010 asm at the point where we emit the CFI data there is no current
4011 function anymore. */
4012 if (personality
4013 && current_unit_personality != personality)
4014 sorry ("Multiple EH personalities are supported only with assemblers "
4015 "supporting .cfi.personality directive.");
4019 /* Output a marker (i.e. a label) for the absolute end of the generated code
4020 for a function definition. This gets called *after* the epilogue code has
4021 been generated. */
4023 void
4024 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4025 const char *file ATTRIBUTE_UNUSED)
4027 dw_fde_ref fde;
4028 char label[MAX_ARTIFICIAL_LABEL_BYTES];
4030 #ifdef DWARF2_DEBUGGING_INFO
4031 last_var_location_insn = NULL_RTX;
4032 #endif
4034 if (dwarf2out_do_cfi_asm ())
4035 fprintf (asm_out_file, "\t.cfi_endproc\n");
4037 /* Output a label to mark the endpoint of the code generated for this
4038 function. */
4039 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4040 current_function_funcdef_no);
4041 ASM_OUTPUT_LABEL (asm_out_file, label);
4042 fde = current_fde ();
4043 gcc_assert (fde != NULL);
4044 fde->dw_fde_end = xstrdup (label);
4047 void
4048 dwarf2out_frame_init (void)
4050 /* Allocate the initial hunk of the fde_table. */
4051 fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4052 fde_table_allocated = FDE_TABLE_INCREMENT;
4053 fde_table_in_use = 0;
4055 /* Generate the CFA instructions common to all FDE's. Do it now for the
4056 sake of lookup_cfa. */
4058 /* On entry, the Canonical Frame Address is at SP. */
4059 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4061 #ifdef DWARF2_UNWIND_INFO
4062 if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4063 initial_return_save (INCOMING_RETURN_ADDR_RTX);
4064 #endif
4067 void
4068 dwarf2out_frame_finish (void)
4070 /* Output call frame information. */
4071 if (DWARF2_FRAME_INFO)
4072 output_call_frame_info (0);
4074 #ifndef TARGET_UNWIND_INFO
4075 /* Output another copy for the unwinder. */
4076 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4077 output_call_frame_info (1);
4078 #endif
4081 /* Note that the current function section is being used for code. */
4083 static void
4084 dwarf2out_note_section_used (void)
4086 section *sec = current_function_section ();
4087 if (sec == text_section)
4088 text_section_used = true;
4089 else if (sec == cold_text_section)
4090 cold_text_section_used = true;
4093 void
4094 dwarf2out_switch_text_section (void)
4096 dw_fde_ref fde = current_fde ();
4098 gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4100 fde->dw_fde_switched_sections = 1;
4101 fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4103 fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4104 fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4105 fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4106 fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4107 have_multiple_function_sections = true;
4109 /* Reset the current label on switching text sections, so that we
4110 don't attempt to advance_loc4 between labels in different sections. */
4111 fde->dw_fde_current_label = NULL;
4113 /* There is no need to mark used sections when not debugging. */
4114 if (cold_text_section != NULL)
4115 dwarf2out_note_section_used ();
4117 if (dwarf2out_do_cfi_asm ())
4118 fprintf (asm_out_file, "\t.cfi_endproc\n");
4120 /* Now do the real section switch. */
4121 switch_to_section (current_function_section ());
4123 if (dwarf2out_do_cfi_asm ())
4125 dwarf2out_do_cfi_startproc (true);
4126 /* As this is a different FDE, insert all current CFI instructions
4127 again. */
4128 output_cfis (fde->dw_fde_cfi, true, fde, true);
4130 else
4132 dw_cfi_ref cfi = fde->dw_fde_cfi;
4134 cfi = fde->dw_fde_cfi;
4135 if (cfi)
4136 while (cfi->dw_cfi_next != NULL)
4137 cfi = cfi->dw_cfi_next;
4138 fde->dw_fde_switch_cfi = cfi;
4141 #endif
4143 /* And now, the subset of the debugging information support code necessary
4144 for emitting location expressions. */
4146 /* Data about a single source file. */
4147 struct GTY(()) dwarf_file_data {
4148 const char * filename;
4149 int emitted_number;
4152 typedef struct dw_val_struct *dw_val_ref;
4153 typedef struct die_struct *dw_die_ref;
4154 typedef const struct die_struct *const_dw_die_ref;
4155 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4156 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4158 typedef struct GTY(()) deferred_locations_struct
4160 tree variable;
4161 dw_die_ref die;
4162 } deferred_locations;
4164 DEF_VEC_O(deferred_locations);
4165 DEF_VEC_ALLOC_O(deferred_locations,gc);
4167 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4169 DEF_VEC_P(dw_die_ref);
4170 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4172 /* Each DIE may have a series of attribute/value pairs. Values
4173 can take on several forms. The forms that are used in this
4174 implementation are listed below. */
4176 enum dw_val_class
4178 dw_val_class_addr,
4179 dw_val_class_offset,
4180 dw_val_class_loc,
4181 dw_val_class_loc_list,
4182 dw_val_class_range_list,
4183 dw_val_class_const,
4184 dw_val_class_unsigned_const,
4185 dw_val_class_const_double,
4186 dw_val_class_vec,
4187 dw_val_class_flag,
4188 dw_val_class_die_ref,
4189 dw_val_class_fde_ref,
4190 dw_val_class_lbl_id,
4191 dw_val_class_lineptr,
4192 dw_val_class_str,
4193 dw_val_class_macptr,
4194 dw_val_class_file,
4195 dw_val_class_data8
4198 /* Describe a floating point constant value, or a vector constant value. */
4200 typedef struct GTY(()) dw_vec_struct {
4201 unsigned char * GTY((length ("%h.length"))) array;
4202 unsigned length;
4203 unsigned elt_size;
4205 dw_vec_const;
4207 /* The dw_val_node describes an attribute's value, as it is
4208 represented internally. */
4210 typedef struct GTY(()) dw_val_struct {
4211 enum dw_val_class val_class;
4212 union dw_val_struct_union
4214 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4215 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4216 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4217 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4218 HOST_WIDE_INT GTY ((default)) val_int;
4219 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4220 double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4221 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4222 struct dw_val_die_union
4224 dw_die_ref die;
4225 int external;
4226 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4227 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4228 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4229 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4230 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4231 struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4232 unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4234 GTY ((desc ("%1.val_class"))) v;
4236 dw_val_node;
4238 /* Locations in memory are described using a sequence of stack machine
4239 operations. */
4241 typedef struct GTY(()) dw_loc_descr_struct {
4242 dw_loc_descr_ref dw_loc_next;
4243 ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4244 /* Used to distinguish DW_OP_addr with a direct symbol relocation
4245 from DW_OP_addr with a dtp-relative symbol relocation. */
4246 unsigned int dtprel : 1;
4247 int dw_loc_addr;
4248 dw_val_node dw_loc_oprnd1;
4249 dw_val_node dw_loc_oprnd2;
4251 dw_loc_descr_node;
4253 /* Location lists are ranges + location descriptions for that range,
4254 so you can track variables that are in different places over
4255 their entire life. */
4256 typedef struct GTY(()) dw_loc_list_struct {
4257 dw_loc_list_ref dw_loc_next;
4258 const char *begin; /* Label for begin address of range */
4259 const char *end; /* Label for end address of range */
4260 char *ll_symbol; /* Label for beginning of location list.
4261 Only on head of list */
4262 const char *section; /* Section this loclist is relative to */
4263 dw_loc_descr_ref expr;
4264 } dw_loc_list_node;
4266 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4268 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4270 /* Convert a DWARF stack opcode into its string name. */
4272 static const char *
4273 dwarf_stack_op_name (unsigned int op)
4275 switch (op)
4277 case DW_OP_addr:
4278 return "DW_OP_addr";
4279 case DW_OP_deref:
4280 return "DW_OP_deref";
4281 case DW_OP_const1u:
4282 return "DW_OP_const1u";
4283 case DW_OP_const1s:
4284 return "DW_OP_const1s";
4285 case DW_OP_const2u:
4286 return "DW_OP_const2u";
4287 case DW_OP_const2s:
4288 return "DW_OP_const2s";
4289 case DW_OP_const4u:
4290 return "DW_OP_const4u";
4291 case DW_OP_const4s:
4292 return "DW_OP_const4s";
4293 case DW_OP_const8u:
4294 return "DW_OP_const8u";
4295 case DW_OP_const8s:
4296 return "DW_OP_const8s";
4297 case DW_OP_constu:
4298 return "DW_OP_constu";
4299 case DW_OP_consts:
4300 return "DW_OP_consts";
4301 case DW_OP_dup:
4302 return "DW_OP_dup";
4303 case DW_OP_drop:
4304 return "DW_OP_drop";
4305 case DW_OP_over:
4306 return "DW_OP_over";
4307 case DW_OP_pick:
4308 return "DW_OP_pick";
4309 case DW_OP_swap:
4310 return "DW_OP_swap";
4311 case DW_OP_rot:
4312 return "DW_OP_rot";
4313 case DW_OP_xderef:
4314 return "DW_OP_xderef";
4315 case DW_OP_abs:
4316 return "DW_OP_abs";
4317 case DW_OP_and:
4318 return "DW_OP_and";
4319 case DW_OP_div:
4320 return "DW_OP_div";
4321 case DW_OP_minus:
4322 return "DW_OP_minus";
4323 case DW_OP_mod:
4324 return "DW_OP_mod";
4325 case DW_OP_mul:
4326 return "DW_OP_mul";
4327 case DW_OP_neg:
4328 return "DW_OP_neg";
4329 case DW_OP_not:
4330 return "DW_OP_not";
4331 case DW_OP_or:
4332 return "DW_OP_or";
4333 case DW_OP_plus:
4334 return "DW_OP_plus";
4335 case DW_OP_plus_uconst:
4336 return "DW_OP_plus_uconst";
4337 case DW_OP_shl:
4338 return "DW_OP_shl";
4339 case DW_OP_shr:
4340 return "DW_OP_shr";
4341 case DW_OP_shra:
4342 return "DW_OP_shra";
4343 case DW_OP_xor:
4344 return "DW_OP_xor";
4345 case DW_OP_bra:
4346 return "DW_OP_bra";
4347 case DW_OP_eq:
4348 return "DW_OP_eq";
4349 case DW_OP_ge:
4350 return "DW_OP_ge";
4351 case DW_OP_gt:
4352 return "DW_OP_gt";
4353 case DW_OP_le:
4354 return "DW_OP_le";
4355 case DW_OP_lt:
4356 return "DW_OP_lt";
4357 case DW_OP_ne:
4358 return "DW_OP_ne";
4359 case DW_OP_skip:
4360 return "DW_OP_skip";
4361 case DW_OP_lit0:
4362 return "DW_OP_lit0";
4363 case DW_OP_lit1:
4364 return "DW_OP_lit1";
4365 case DW_OP_lit2:
4366 return "DW_OP_lit2";
4367 case DW_OP_lit3:
4368 return "DW_OP_lit3";
4369 case DW_OP_lit4:
4370 return "DW_OP_lit4";
4371 case DW_OP_lit5:
4372 return "DW_OP_lit5";
4373 case DW_OP_lit6:
4374 return "DW_OP_lit6";
4375 case DW_OP_lit7:
4376 return "DW_OP_lit7";
4377 case DW_OP_lit8:
4378 return "DW_OP_lit8";
4379 case DW_OP_lit9:
4380 return "DW_OP_lit9";
4381 case DW_OP_lit10:
4382 return "DW_OP_lit10";
4383 case DW_OP_lit11:
4384 return "DW_OP_lit11";
4385 case DW_OP_lit12:
4386 return "DW_OP_lit12";
4387 case DW_OP_lit13:
4388 return "DW_OP_lit13";
4389 case DW_OP_lit14:
4390 return "DW_OP_lit14";
4391 case DW_OP_lit15:
4392 return "DW_OP_lit15";
4393 case DW_OP_lit16:
4394 return "DW_OP_lit16";
4395 case DW_OP_lit17:
4396 return "DW_OP_lit17";
4397 case DW_OP_lit18:
4398 return "DW_OP_lit18";
4399 case DW_OP_lit19:
4400 return "DW_OP_lit19";
4401 case DW_OP_lit20:
4402 return "DW_OP_lit20";
4403 case DW_OP_lit21:
4404 return "DW_OP_lit21";
4405 case DW_OP_lit22:
4406 return "DW_OP_lit22";
4407 case DW_OP_lit23:
4408 return "DW_OP_lit23";
4409 case DW_OP_lit24:
4410 return "DW_OP_lit24";
4411 case DW_OP_lit25:
4412 return "DW_OP_lit25";
4413 case DW_OP_lit26:
4414 return "DW_OP_lit26";
4415 case DW_OP_lit27:
4416 return "DW_OP_lit27";
4417 case DW_OP_lit28:
4418 return "DW_OP_lit28";
4419 case DW_OP_lit29:
4420 return "DW_OP_lit29";
4421 case DW_OP_lit30:
4422 return "DW_OP_lit30";
4423 case DW_OP_lit31:
4424 return "DW_OP_lit31";
4425 case DW_OP_reg0:
4426 return "DW_OP_reg0";
4427 case DW_OP_reg1:
4428 return "DW_OP_reg1";
4429 case DW_OP_reg2:
4430 return "DW_OP_reg2";
4431 case DW_OP_reg3:
4432 return "DW_OP_reg3";
4433 case DW_OP_reg4:
4434 return "DW_OP_reg4";
4435 case DW_OP_reg5:
4436 return "DW_OP_reg5";
4437 case DW_OP_reg6:
4438 return "DW_OP_reg6";
4439 case DW_OP_reg7:
4440 return "DW_OP_reg7";
4441 case DW_OP_reg8:
4442 return "DW_OP_reg8";
4443 case DW_OP_reg9:
4444 return "DW_OP_reg9";
4445 case DW_OP_reg10:
4446 return "DW_OP_reg10";
4447 case DW_OP_reg11:
4448 return "DW_OP_reg11";
4449 case DW_OP_reg12:
4450 return "DW_OP_reg12";
4451 case DW_OP_reg13:
4452 return "DW_OP_reg13";
4453 case DW_OP_reg14:
4454 return "DW_OP_reg14";
4455 case DW_OP_reg15:
4456 return "DW_OP_reg15";
4457 case DW_OP_reg16:
4458 return "DW_OP_reg16";
4459 case DW_OP_reg17:
4460 return "DW_OP_reg17";
4461 case DW_OP_reg18:
4462 return "DW_OP_reg18";
4463 case DW_OP_reg19:
4464 return "DW_OP_reg19";
4465 case DW_OP_reg20:
4466 return "DW_OP_reg20";
4467 case DW_OP_reg21:
4468 return "DW_OP_reg21";
4469 case DW_OP_reg22:
4470 return "DW_OP_reg22";
4471 case DW_OP_reg23:
4472 return "DW_OP_reg23";
4473 case DW_OP_reg24:
4474 return "DW_OP_reg24";
4475 case DW_OP_reg25:
4476 return "DW_OP_reg25";
4477 case DW_OP_reg26:
4478 return "DW_OP_reg26";
4479 case DW_OP_reg27:
4480 return "DW_OP_reg27";
4481 case DW_OP_reg28:
4482 return "DW_OP_reg28";
4483 case DW_OP_reg29:
4484 return "DW_OP_reg29";
4485 case DW_OP_reg30:
4486 return "DW_OP_reg30";
4487 case DW_OP_reg31:
4488 return "DW_OP_reg31";
4489 case DW_OP_breg0:
4490 return "DW_OP_breg0";
4491 case DW_OP_breg1:
4492 return "DW_OP_breg1";
4493 case DW_OP_breg2:
4494 return "DW_OP_breg2";
4495 case DW_OP_breg3:
4496 return "DW_OP_breg3";
4497 case DW_OP_breg4:
4498 return "DW_OP_breg4";
4499 case DW_OP_breg5:
4500 return "DW_OP_breg5";
4501 case DW_OP_breg6:
4502 return "DW_OP_breg6";
4503 case DW_OP_breg7:
4504 return "DW_OP_breg7";
4505 case DW_OP_breg8:
4506 return "DW_OP_breg8";
4507 case DW_OP_breg9:
4508 return "DW_OP_breg9";
4509 case DW_OP_breg10:
4510 return "DW_OP_breg10";
4511 case DW_OP_breg11:
4512 return "DW_OP_breg11";
4513 case DW_OP_breg12:
4514 return "DW_OP_breg12";
4515 case DW_OP_breg13:
4516 return "DW_OP_breg13";
4517 case DW_OP_breg14:
4518 return "DW_OP_breg14";
4519 case DW_OP_breg15:
4520 return "DW_OP_breg15";
4521 case DW_OP_breg16:
4522 return "DW_OP_breg16";
4523 case DW_OP_breg17:
4524 return "DW_OP_breg17";
4525 case DW_OP_breg18:
4526 return "DW_OP_breg18";
4527 case DW_OP_breg19:
4528 return "DW_OP_breg19";
4529 case DW_OP_breg20:
4530 return "DW_OP_breg20";
4531 case DW_OP_breg21:
4532 return "DW_OP_breg21";
4533 case DW_OP_breg22:
4534 return "DW_OP_breg22";
4535 case DW_OP_breg23:
4536 return "DW_OP_breg23";
4537 case DW_OP_breg24:
4538 return "DW_OP_breg24";
4539 case DW_OP_breg25:
4540 return "DW_OP_breg25";
4541 case DW_OP_breg26:
4542 return "DW_OP_breg26";
4543 case DW_OP_breg27:
4544 return "DW_OP_breg27";
4545 case DW_OP_breg28:
4546 return "DW_OP_breg28";
4547 case DW_OP_breg29:
4548 return "DW_OP_breg29";
4549 case DW_OP_breg30:
4550 return "DW_OP_breg30";
4551 case DW_OP_breg31:
4552 return "DW_OP_breg31";
4553 case DW_OP_regx:
4554 return "DW_OP_regx";
4555 case DW_OP_fbreg:
4556 return "DW_OP_fbreg";
4557 case DW_OP_bregx:
4558 return "DW_OP_bregx";
4559 case DW_OP_piece:
4560 return "DW_OP_piece";
4561 case DW_OP_deref_size:
4562 return "DW_OP_deref_size";
4563 case DW_OP_xderef_size:
4564 return "DW_OP_xderef_size";
4565 case DW_OP_nop:
4566 return "DW_OP_nop";
4568 case DW_OP_push_object_address:
4569 return "DW_OP_push_object_address";
4570 case DW_OP_call2:
4571 return "DW_OP_call2";
4572 case DW_OP_call4:
4573 return "DW_OP_call4";
4574 case DW_OP_call_ref:
4575 return "DW_OP_call_ref";
4576 case DW_OP_implicit_value:
4577 return "DW_OP_implicit_value";
4578 case DW_OP_stack_value:
4579 return "DW_OP_stack_value";
4580 case DW_OP_form_tls_address:
4581 return "DW_OP_form_tls_address";
4582 case DW_OP_call_frame_cfa:
4583 return "DW_OP_call_frame_cfa";
4584 case DW_OP_bit_piece:
4585 return "DW_OP_bit_piece";
4587 case DW_OP_GNU_push_tls_address:
4588 return "DW_OP_GNU_push_tls_address";
4589 case DW_OP_GNU_uninit:
4590 return "DW_OP_GNU_uninit";
4591 case DW_OP_GNU_encoded_addr:
4592 return "DW_OP_GNU_encoded_addr";
4594 default:
4595 return "OP_<unknown>";
4599 /* Return a pointer to a newly allocated location description. Location
4600 descriptions are simple expression terms that can be strung
4601 together to form more complicated location (address) descriptions. */
4603 static inline dw_loc_descr_ref
4604 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4605 unsigned HOST_WIDE_INT oprnd2)
4607 dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4609 descr->dw_loc_opc = op;
4610 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4611 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4612 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4613 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4615 return descr;
4618 /* Return a pointer to a newly allocated location description for
4619 REG and OFFSET. */
4621 static inline dw_loc_descr_ref
4622 new_reg_loc_descr (unsigned int reg, unsigned HOST_WIDE_INT offset)
4624 if (reg <= 31)
4625 return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4626 offset, 0);
4627 else
4628 return new_loc_descr (DW_OP_bregx, reg, offset);
4631 /* Add a location description term to a location description expression. */
4633 static inline void
4634 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4636 dw_loc_descr_ref *d;
4638 /* Find the end of the chain. */
4639 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4642 *d = descr;
4645 /* Add a constant OFFSET to a location expression. */
4647 static void
4648 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4650 dw_loc_descr_ref loc;
4651 HOST_WIDE_INT *p;
4653 gcc_assert (*list_head != NULL);
4655 if (!offset)
4656 return;
4658 /* Find the end of the chain. */
4659 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4662 p = NULL;
4663 if (loc->dw_loc_opc == DW_OP_fbreg
4664 || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4665 p = &loc->dw_loc_oprnd1.v.val_int;
4666 else if (loc->dw_loc_opc == DW_OP_bregx)
4667 p = &loc->dw_loc_oprnd2.v.val_int;
4669 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4670 offset. Don't optimize if an signed integer overflow would happen. */
4671 if (p != NULL
4672 && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4673 || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4674 *p += offset;
4676 else if (offset > 0)
4677 loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4679 else
4681 loc->dw_loc_next = int_loc_descriptor (offset);
4682 add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4686 #ifdef DWARF2_DEBUGGING_INFO
4687 /* Add a constant OFFSET to a location list. */
4689 static void
4690 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4692 dw_loc_list_ref d;
4693 for (d = list_head; d != NULL; d = d->dw_loc_next)
4694 loc_descr_plus_const (&d->expr, offset);
4696 #endif
4698 /* Return the size of a location descriptor. */
4700 static unsigned long
4701 size_of_loc_descr (dw_loc_descr_ref loc)
4703 unsigned long size = 1;
4705 switch (loc->dw_loc_opc)
4707 case DW_OP_addr:
4708 size += DWARF2_ADDR_SIZE;
4709 break;
4710 case DW_OP_const1u:
4711 case DW_OP_const1s:
4712 size += 1;
4713 break;
4714 case DW_OP_const2u:
4715 case DW_OP_const2s:
4716 size += 2;
4717 break;
4718 case DW_OP_const4u:
4719 case DW_OP_const4s:
4720 size += 4;
4721 break;
4722 case DW_OP_const8u:
4723 case DW_OP_const8s:
4724 size += 8;
4725 break;
4726 case DW_OP_constu:
4727 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4728 break;
4729 case DW_OP_consts:
4730 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4731 break;
4732 case DW_OP_pick:
4733 size += 1;
4734 break;
4735 case DW_OP_plus_uconst:
4736 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4737 break;
4738 case DW_OP_skip:
4739 case DW_OP_bra:
4740 size += 2;
4741 break;
4742 case DW_OP_breg0:
4743 case DW_OP_breg1:
4744 case DW_OP_breg2:
4745 case DW_OP_breg3:
4746 case DW_OP_breg4:
4747 case DW_OP_breg5:
4748 case DW_OP_breg6:
4749 case DW_OP_breg7:
4750 case DW_OP_breg8:
4751 case DW_OP_breg9:
4752 case DW_OP_breg10:
4753 case DW_OP_breg11:
4754 case DW_OP_breg12:
4755 case DW_OP_breg13:
4756 case DW_OP_breg14:
4757 case DW_OP_breg15:
4758 case DW_OP_breg16:
4759 case DW_OP_breg17:
4760 case DW_OP_breg18:
4761 case DW_OP_breg19:
4762 case DW_OP_breg20:
4763 case DW_OP_breg21:
4764 case DW_OP_breg22:
4765 case DW_OP_breg23:
4766 case DW_OP_breg24:
4767 case DW_OP_breg25:
4768 case DW_OP_breg26:
4769 case DW_OP_breg27:
4770 case DW_OP_breg28:
4771 case DW_OP_breg29:
4772 case DW_OP_breg30:
4773 case DW_OP_breg31:
4774 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4775 break;
4776 case DW_OP_regx:
4777 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4778 break;
4779 case DW_OP_fbreg:
4780 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4781 break;
4782 case DW_OP_bregx:
4783 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4784 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4785 break;
4786 case DW_OP_piece:
4787 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4788 break;
4789 case DW_OP_deref_size:
4790 case DW_OP_xderef_size:
4791 size += 1;
4792 break;
4793 case DW_OP_call2:
4794 size += 2;
4795 break;
4796 case DW_OP_call4:
4797 size += 4;
4798 break;
4799 case DW_OP_call_ref:
4800 size += DWARF2_ADDR_SIZE;
4801 break;
4802 case DW_OP_implicit_value:
4803 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4804 + loc->dw_loc_oprnd1.v.val_unsigned;
4805 break;
4806 default:
4807 break;
4810 return size;
4813 /* Return the size of a series of location descriptors. */
4815 static unsigned long
4816 size_of_locs (dw_loc_descr_ref loc)
4818 dw_loc_descr_ref l;
4819 unsigned long size;
4821 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4822 field, to avoid writing to a PCH file. */
4823 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4825 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4826 break;
4827 size += size_of_loc_descr (l);
4829 if (! l)
4830 return size;
4832 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4834 l->dw_loc_addr = size;
4835 size += size_of_loc_descr (l);
4838 return size;
4841 #ifdef DWARF2_DEBUGGING_INFO
4842 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4843 #endif
4845 /* Output location description stack opcode's operands (if any). */
4847 static void
4848 output_loc_operands (dw_loc_descr_ref loc)
4850 dw_val_ref val1 = &loc->dw_loc_oprnd1;
4851 dw_val_ref val2 = &loc->dw_loc_oprnd2;
4853 switch (loc->dw_loc_opc)
4855 #ifdef DWARF2_DEBUGGING_INFO
4856 case DW_OP_const2u:
4857 case DW_OP_const2s:
4858 dw2_asm_output_data (2, val1->v.val_int, NULL);
4859 break;
4860 case DW_OP_const4u:
4861 case DW_OP_const4s:
4862 dw2_asm_output_data (4, val1->v.val_int, NULL);
4863 break;
4864 case DW_OP_const8u:
4865 case DW_OP_const8s:
4866 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4867 dw2_asm_output_data (8, val1->v.val_int, NULL);
4868 break;
4869 case DW_OP_skip:
4870 case DW_OP_bra:
4872 int offset;
4874 gcc_assert (val1->val_class == dw_val_class_loc);
4875 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4877 dw2_asm_output_data (2, offset, NULL);
4879 break;
4880 case DW_OP_implicit_value:
4881 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4882 switch (val2->val_class)
4884 case dw_val_class_const:
4885 dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4886 break;
4887 case dw_val_class_vec:
4889 unsigned int elt_size = val2->v.val_vec.elt_size;
4890 unsigned int len = val2->v.val_vec.length;
4891 unsigned int i;
4892 unsigned char *p;
4894 if (elt_size > sizeof (HOST_WIDE_INT))
4896 elt_size /= 2;
4897 len *= 2;
4899 for (i = 0, p = val2->v.val_vec.array;
4900 i < len;
4901 i++, p += elt_size)
4902 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4903 "fp or vector constant word %u", i);
4905 break;
4906 case dw_val_class_const_double:
4908 unsigned HOST_WIDE_INT first, second;
4910 if (WORDS_BIG_ENDIAN)
4912 first = val2->v.val_double.high;
4913 second = val2->v.val_double.low;
4915 else
4917 first = val2->v.val_double.low;
4918 second = val2->v.val_double.high;
4920 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4921 first, NULL);
4922 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4923 second, NULL);
4925 break;
4926 case dw_val_class_addr:
4927 gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4928 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4929 break;
4930 default:
4931 gcc_unreachable ();
4933 break;
4934 #else
4935 case DW_OP_const2u:
4936 case DW_OP_const2s:
4937 case DW_OP_const4u:
4938 case DW_OP_const4s:
4939 case DW_OP_const8u:
4940 case DW_OP_const8s:
4941 case DW_OP_skip:
4942 case DW_OP_bra:
4943 case DW_OP_implicit_value:
4944 /* We currently don't make any attempt to make sure these are
4945 aligned properly like we do for the main unwind info, so
4946 don't support emitting things larger than a byte if we're
4947 only doing unwinding. */
4948 gcc_unreachable ();
4949 #endif
4950 case DW_OP_const1u:
4951 case DW_OP_const1s:
4952 dw2_asm_output_data (1, val1->v.val_int, NULL);
4953 break;
4954 case DW_OP_constu:
4955 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4956 break;
4957 case DW_OP_consts:
4958 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4959 break;
4960 case DW_OP_pick:
4961 dw2_asm_output_data (1, val1->v.val_int, NULL);
4962 break;
4963 case DW_OP_plus_uconst:
4964 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4965 break;
4966 case DW_OP_breg0:
4967 case DW_OP_breg1:
4968 case DW_OP_breg2:
4969 case DW_OP_breg3:
4970 case DW_OP_breg4:
4971 case DW_OP_breg5:
4972 case DW_OP_breg6:
4973 case DW_OP_breg7:
4974 case DW_OP_breg8:
4975 case DW_OP_breg9:
4976 case DW_OP_breg10:
4977 case DW_OP_breg11:
4978 case DW_OP_breg12:
4979 case DW_OP_breg13:
4980 case DW_OP_breg14:
4981 case DW_OP_breg15:
4982 case DW_OP_breg16:
4983 case DW_OP_breg17:
4984 case DW_OP_breg18:
4985 case DW_OP_breg19:
4986 case DW_OP_breg20:
4987 case DW_OP_breg21:
4988 case DW_OP_breg22:
4989 case DW_OP_breg23:
4990 case DW_OP_breg24:
4991 case DW_OP_breg25:
4992 case DW_OP_breg26:
4993 case DW_OP_breg27:
4994 case DW_OP_breg28:
4995 case DW_OP_breg29:
4996 case DW_OP_breg30:
4997 case DW_OP_breg31:
4998 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4999 break;
5000 case DW_OP_regx:
5001 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5002 break;
5003 case DW_OP_fbreg:
5004 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5005 break;
5006 case DW_OP_bregx:
5007 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5008 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5009 break;
5010 case DW_OP_piece:
5011 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5012 break;
5013 case DW_OP_deref_size:
5014 case DW_OP_xderef_size:
5015 dw2_asm_output_data (1, val1->v.val_int, NULL);
5016 break;
5018 case DW_OP_addr:
5019 if (loc->dtprel)
5021 if (targetm.asm_out.output_dwarf_dtprel)
5023 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5024 DWARF2_ADDR_SIZE,
5025 val1->v.val_addr);
5026 fputc ('\n', asm_out_file);
5028 else
5029 gcc_unreachable ();
5031 else
5033 #ifdef DWARF2_DEBUGGING_INFO
5034 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5035 #else
5036 gcc_unreachable ();
5037 #endif
5039 break;
5041 default:
5042 /* Other codes have no operands. */
5043 break;
5047 /* Output a sequence of location operations. */
5049 static void
5050 output_loc_sequence (dw_loc_descr_ref loc)
5052 for (; loc != NULL; loc = loc->dw_loc_next)
5054 /* Output the opcode. */
5055 dw2_asm_output_data (1, loc->dw_loc_opc,
5056 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5058 /* Output the operand(s) (if any). */
5059 output_loc_operands (loc);
5063 /* Output location description stack opcode's operands (if any).
5064 The output is single bytes on a line, suitable for .cfi_escape. */
5066 static void
5067 output_loc_operands_raw (dw_loc_descr_ref loc)
5069 dw_val_ref val1 = &loc->dw_loc_oprnd1;
5070 dw_val_ref val2 = &loc->dw_loc_oprnd2;
5072 switch (loc->dw_loc_opc)
5074 case DW_OP_addr:
5075 case DW_OP_implicit_value:
5076 /* We cannot output addresses in .cfi_escape, only bytes. */
5077 gcc_unreachable ();
5079 case DW_OP_const1u:
5080 case DW_OP_const1s:
5081 case DW_OP_pick:
5082 case DW_OP_deref_size:
5083 case DW_OP_xderef_size:
5084 fputc (',', asm_out_file);
5085 dw2_asm_output_data_raw (1, val1->v.val_int);
5086 break;
5088 case DW_OP_const2u:
5089 case DW_OP_const2s:
5090 fputc (',', asm_out_file);
5091 dw2_asm_output_data_raw (2, val1->v.val_int);
5092 break;
5094 case DW_OP_const4u:
5095 case DW_OP_const4s:
5096 fputc (',', asm_out_file);
5097 dw2_asm_output_data_raw (4, val1->v.val_int);
5098 break;
5100 case DW_OP_const8u:
5101 case DW_OP_const8s:
5102 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5103 fputc (',', asm_out_file);
5104 dw2_asm_output_data_raw (8, val1->v.val_int);
5105 break;
5107 case DW_OP_skip:
5108 case DW_OP_bra:
5110 int offset;
5112 gcc_assert (val1->val_class == dw_val_class_loc);
5113 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5115 fputc (',', asm_out_file);
5116 dw2_asm_output_data_raw (2, offset);
5118 break;
5120 case DW_OP_constu:
5121 case DW_OP_plus_uconst:
5122 case DW_OP_regx:
5123 case DW_OP_piece:
5124 fputc (',', asm_out_file);
5125 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5126 break;
5128 case DW_OP_consts:
5129 case DW_OP_breg0:
5130 case DW_OP_breg1:
5131 case DW_OP_breg2:
5132 case DW_OP_breg3:
5133 case DW_OP_breg4:
5134 case DW_OP_breg5:
5135 case DW_OP_breg6:
5136 case DW_OP_breg7:
5137 case DW_OP_breg8:
5138 case DW_OP_breg9:
5139 case DW_OP_breg10:
5140 case DW_OP_breg11:
5141 case DW_OP_breg12:
5142 case DW_OP_breg13:
5143 case DW_OP_breg14:
5144 case DW_OP_breg15:
5145 case DW_OP_breg16:
5146 case DW_OP_breg17:
5147 case DW_OP_breg18:
5148 case DW_OP_breg19:
5149 case DW_OP_breg20:
5150 case DW_OP_breg21:
5151 case DW_OP_breg22:
5152 case DW_OP_breg23:
5153 case DW_OP_breg24:
5154 case DW_OP_breg25:
5155 case DW_OP_breg26:
5156 case DW_OP_breg27:
5157 case DW_OP_breg28:
5158 case DW_OP_breg29:
5159 case DW_OP_breg30:
5160 case DW_OP_breg31:
5161 case DW_OP_fbreg:
5162 fputc (',', asm_out_file);
5163 dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5164 break;
5166 case DW_OP_bregx:
5167 fputc (',', asm_out_file);
5168 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5169 fputc (',', asm_out_file);
5170 dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5171 break;
5173 default:
5174 /* Other codes have no operands. */
5175 break;
5179 static void
5180 output_loc_sequence_raw (dw_loc_descr_ref loc)
5182 while (1)
5184 /* Output the opcode. */
5185 fprintf (asm_out_file, "0x%x", loc->dw_loc_opc);
5186 output_loc_operands_raw (loc);
5188 if (!loc->dw_loc_next)
5189 break;
5190 loc = loc->dw_loc_next;
5192 fputc (',', asm_out_file);
5196 /* This routine will generate the correct assembly data for a location
5197 description based on a cfi entry with a complex address. */
5199 static void
5200 output_cfa_loc (dw_cfi_ref cfi)
5202 dw_loc_descr_ref loc;
5203 unsigned long size;
5205 if (cfi->dw_cfi_opc == DW_CFA_expression)
5206 dw2_asm_output_data (1, cfi->dw_cfi_oprnd2.dw_cfi_reg_num, NULL);
5208 /* Output the size of the block. */
5209 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5210 size = size_of_locs (loc);
5211 dw2_asm_output_data_uleb128 (size, NULL);
5213 /* Now output the operations themselves. */
5214 output_loc_sequence (loc);
5217 /* Similar, but used for .cfi_escape. */
5219 static void
5220 output_cfa_loc_raw (dw_cfi_ref cfi)
5222 dw_loc_descr_ref loc;
5223 unsigned long size;
5225 if (cfi->dw_cfi_opc == DW_CFA_expression)
5226 fprintf (asm_out_file, "0x%x,", cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
5228 /* Output the size of the block. */
5229 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5230 size = size_of_locs (loc);
5231 dw2_asm_output_data_uleb128_raw (size);
5232 fputc (',', asm_out_file);
5234 /* Now output the operations themselves. */
5235 output_loc_sequence_raw (loc);
5238 /* This function builds a dwarf location descriptor sequence from a
5239 dw_cfa_location, adding the given OFFSET to the result of the
5240 expression. */
5242 static struct dw_loc_descr_struct *
5243 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5245 struct dw_loc_descr_struct *head, *tmp;
5247 offset += cfa->offset;
5249 if (cfa->indirect)
5251 head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5252 head->dw_loc_oprnd1.val_class = dw_val_class_const;
5253 tmp = new_loc_descr (DW_OP_deref, 0, 0);
5254 add_loc_descr (&head, tmp);
5255 if (offset != 0)
5257 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5258 add_loc_descr (&head, tmp);
5261 else
5262 head = new_reg_loc_descr (cfa->reg, offset);
5264 return head;
5267 /* This function builds a dwarf location descriptor sequence for
5268 the address at OFFSET from the CFA when stack is aligned to
5269 ALIGNMENT byte. */
5271 static struct dw_loc_descr_struct *
5272 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5274 struct dw_loc_descr_struct *head;
5275 unsigned int dwarf_fp
5276 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5278 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
5279 if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5281 head = new_reg_loc_descr (dwarf_fp, 0);
5282 add_loc_descr (&head, int_loc_descriptor (alignment));
5283 add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5284 loc_descr_plus_const (&head, offset);
5286 else
5287 head = new_reg_loc_descr (dwarf_fp, offset);
5288 return head;
5291 /* This function fills in aa dw_cfa_location structure from a dwarf location
5292 descriptor sequence. */
5294 static void
5295 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5297 struct dw_loc_descr_struct *ptr;
5298 cfa->offset = 0;
5299 cfa->base_offset = 0;
5300 cfa->indirect = 0;
5301 cfa->reg = -1;
5303 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5305 enum dwarf_location_atom op = ptr->dw_loc_opc;
5307 switch (op)
5309 case DW_OP_reg0:
5310 case DW_OP_reg1:
5311 case DW_OP_reg2:
5312 case DW_OP_reg3:
5313 case DW_OP_reg4:
5314 case DW_OP_reg5:
5315 case DW_OP_reg6:
5316 case DW_OP_reg7:
5317 case DW_OP_reg8:
5318 case DW_OP_reg9:
5319 case DW_OP_reg10:
5320 case DW_OP_reg11:
5321 case DW_OP_reg12:
5322 case DW_OP_reg13:
5323 case DW_OP_reg14:
5324 case DW_OP_reg15:
5325 case DW_OP_reg16:
5326 case DW_OP_reg17:
5327 case DW_OP_reg18:
5328 case DW_OP_reg19:
5329 case DW_OP_reg20:
5330 case DW_OP_reg21:
5331 case DW_OP_reg22:
5332 case DW_OP_reg23:
5333 case DW_OP_reg24:
5334 case DW_OP_reg25:
5335 case DW_OP_reg26:
5336 case DW_OP_reg27:
5337 case DW_OP_reg28:
5338 case DW_OP_reg29:
5339 case DW_OP_reg30:
5340 case DW_OP_reg31:
5341 cfa->reg = op - DW_OP_reg0;
5342 break;
5343 case DW_OP_regx:
5344 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5345 break;
5346 case DW_OP_breg0:
5347 case DW_OP_breg1:
5348 case DW_OP_breg2:
5349 case DW_OP_breg3:
5350 case DW_OP_breg4:
5351 case DW_OP_breg5:
5352 case DW_OP_breg6:
5353 case DW_OP_breg7:
5354 case DW_OP_breg8:
5355 case DW_OP_breg9:
5356 case DW_OP_breg10:
5357 case DW_OP_breg11:
5358 case DW_OP_breg12:
5359 case DW_OP_breg13:
5360 case DW_OP_breg14:
5361 case DW_OP_breg15:
5362 case DW_OP_breg16:
5363 case DW_OP_breg17:
5364 case DW_OP_breg18:
5365 case DW_OP_breg19:
5366 case DW_OP_breg20:
5367 case DW_OP_breg21:
5368 case DW_OP_breg22:
5369 case DW_OP_breg23:
5370 case DW_OP_breg24:
5371 case DW_OP_breg25:
5372 case DW_OP_breg26:
5373 case DW_OP_breg27:
5374 case DW_OP_breg28:
5375 case DW_OP_breg29:
5376 case DW_OP_breg30:
5377 case DW_OP_breg31:
5378 cfa->reg = op - DW_OP_breg0;
5379 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5380 break;
5381 case DW_OP_bregx:
5382 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5383 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5384 break;
5385 case DW_OP_deref:
5386 cfa->indirect = 1;
5387 break;
5388 case DW_OP_plus_uconst:
5389 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5390 break;
5391 default:
5392 internal_error ("DW_LOC_OP %s not implemented",
5393 dwarf_stack_op_name (ptr->dw_loc_opc));
5397 #endif /* .debug_frame support */
5399 /* And now, the support for symbolic debugging information. */
5400 #ifdef DWARF2_DEBUGGING_INFO
5402 /* .debug_str support. */
5403 static int output_indirect_string (void **, void *);
5405 static void dwarf2out_init (const char *);
5406 static void dwarf2out_finish (const char *);
5407 static void dwarf2out_assembly_start (void);
5408 static void dwarf2out_define (unsigned int, const char *);
5409 static void dwarf2out_undef (unsigned int, const char *);
5410 static void dwarf2out_start_source_file (unsigned, const char *);
5411 static void dwarf2out_end_source_file (unsigned);
5412 static void dwarf2out_begin_block (unsigned, unsigned);
5413 static void dwarf2out_end_block (unsigned, unsigned);
5414 static bool dwarf2out_ignore_block (const_tree);
5415 static void dwarf2out_global_decl (tree);
5416 static void dwarf2out_type_decl (tree, int);
5417 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5418 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5419 dw_die_ref);
5420 static void dwarf2out_abstract_function (tree);
5421 static void dwarf2out_var_location (rtx);
5422 static void dwarf2out_direct_call (tree);
5423 static void dwarf2out_virtual_call_token (tree, int);
5424 static void dwarf2out_copy_call_info (rtx, rtx);
5425 static void dwarf2out_virtual_call (int);
5426 static void dwarf2out_begin_function (tree);
5427 static void dwarf2out_set_name (tree, tree);
5429 /* The debug hooks structure. */
5431 const struct gcc_debug_hooks dwarf2_debug_hooks =
5433 dwarf2out_init,
5434 dwarf2out_finish,
5435 dwarf2out_assembly_start,
5436 dwarf2out_define,
5437 dwarf2out_undef,
5438 dwarf2out_start_source_file,
5439 dwarf2out_end_source_file,
5440 dwarf2out_begin_block,
5441 dwarf2out_end_block,
5442 dwarf2out_ignore_block,
5443 dwarf2out_source_line,
5444 dwarf2out_begin_prologue,
5445 debug_nothing_int_charstar, /* end_prologue */
5446 dwarf2out_end_epilogue,
5447 dwarf2out_begin_function,
5448 debug_nothing_int, /* end_function */
5449 dwarf2out_decl, /* function_decl */
5450 dwarf2out_global_decl,
5451 dwarf2out_type_decl, /* type_decl */
5452 dwarf2out_imported_module_or_decl,
5453 debug_nothing_tree, /* deferred_inline_function */
5454 /* The DWARF 2 backend tries to reduce debugging bloat by not
5455 emitting the abstract description of inline functions until
5456 something tries to reference them. */
5457 dwarf2out_abstract_function, /* outlining_inline_function */
5458 debug_nothing_rtx, /* label */
5459 debug_nothing_int, /* handle_pch */
5460 dwarf2out_var_location,
5461 dwarf2out_switch_text_section,
5462 dwarf2out_direct_call,
5463 dwarf2out_virtual_call_token,
5464 dwarf2out_copy_call_info,
5465 dwarf2out_virtual_call,
5466 dwarf2out_set_name,
5467 1 /* start_end_main_source_file */
5469 #endif
5471 /* NOTE: In the comments in this file, many references are made to
5472 "Debugging Information Entries". This term is abbreviated as `DIE'
5473 throughout the remainder of this file. */
5475 /* An internal representation of the DWARF output is built, and then
5476 walked to generate the DWARF debugging info. The walk of the internal
5477 representation is done after the entire program has been compiled.
5478 The types below are used to describe the internal representation. */
5480 /* Various DIE's use offsets relative to the beginning of the
5481 .debug_info section to refer to each other. */
5483 typedef long int dw_offset;
5485 /* Define typedefs here to avoid circular dependencies. */
5487 typedef struct dw_attr_struct *dw_attr_ref;
5488 typedef struct dw_line_info_struct *dw_line_info_ref;
5489 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5490 typedef struct pubname_struct *pubname_ref;
5491 typedef struct dw_ranges_struct *dw_ranges_ref;
5492 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5493 typedef struct comdat_type_struct *comdat_type_node_ref;
5495 /* Each entry in the line_info_table maintains the file and
5496 line number associated with the label generated for that
5497 entry. The label gives the PC value associated with
5498 the line number entry. */
5500 typedef struct GTY(()) dw_line_info_struct {
5501 unsigned long dw_file_num;
5502 unsigned long dw_line_num;
5504 dw_line_info_entry;
5506 /* Line information for functions in separate sections; each one gets its
5507 own sequence. */
5508 typedef struct GTY(()) dw_separate_line_info_struct {
5509 unsigned long dw_file_num;
5510 unsigned long dw_line_num;
5511 unsigned long function;
5513 dw_separate_line_info_entry;
5515 /* Each DIE attribute has a field specifying the attribute kind,
5516 a link to the next attribute in the chain, and an attribute value.
5517 Attributes are typically linked below the DIE they modify. */
5519 typedef struct GTY(()) dw_attr_struct {
5520 enum dwarf_attribute dw_attr;
5521 dw_val_node dw_attr_val;
5523 dw_attr_node;
5525 DEF_VEC_O(dw_attr_node);
5526 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5528 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
5529 The children of each node form a circular list linked by
5530 die_sib. die_child points to the node *before* the "first" child node. */
5532 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5533 enum dwarf_tag die_tag;
5534 union die_symbol_or_type_node
5536 char * GTY ((tag ("0"))) die_symbol;
5537 comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5539 GTY ((desc ("dwarf_version >= 4"))) die_id;
5540 VEC(dw_attr_node,gc) * die_attr;
5541 dw_die_ref die_parent;
5542 dw_die_ref die_child;
5543 dw_die_ref die_sib;
5544 dw_die_ref die_definition; /* ref from a specification to its definition */
5545 dw_offset die_offset;
5546 unsigned long die_abbrev;
5547 int die_mark;
5548 /* Die is used and must not be pruned as unused. */
5549 int die_perennial_p;
5550 unsigned int decl_id;
5552 die_node;
5554 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
5555 #define FOR_EACH_CHILD(die, c, expr) do { \
5556 c = die->die_child; \
5557 if (c) do { \
5558 c = c->die_sib; \
5559 expr; \
5560 } while (c != die->die_child); \
5561 } while (0)
5563 /* The pubname structure */
5565 typedef struct GTY(()) pubname_struct {
5566 dw_die_ref die;
5567 const char *name;
5569 pubname_entry;
5571 DEF_VEC_O(pubname_entry);
5572 DEF_VEC_ALLOC_O(pubname_entry, gc);
5574 struct GTY(()) dw_ranges_struct {
5575 /* If this is positive, it's a block number, otherwise it's a
5576 bitwise-negated index into dw_ranges_by_label. */
5577 int num;
5580 struct GTY(()) dw_ranges_by_label_struct {
5581 const char *begin;
5582 const char *end;
5585 /* The comdat type node structure. */
5586 typedef struct GTY(()) comdat_type_struct
5588 dw_die_ref root_die;
5589 dw_die_ref type_die;
5590 char signature[DWARF_TYPE_SIGNATURE_SIZE];
5591 struct comdat_type_struct *next;
5593 comdat_type_node;
5595 /* The limbo die list structure. */
5596 typedef struct GTY(()) limbo_die_struct {
5597 dw_die_ref die;
5598 tree created_for;
5599 struct limbo_die_struct *next;
5601 limbo_die_node;
5603 typedef struct GTY(()) skeleton_chain_struct
5605 dw_die_ref old_die;
5606 dw_die_ref new_die;
5607 struct skeleton_chain_struct *parent;
5609 skeleton_chain_node;
5611 /* How to start an assembler comment. */
5612 #ifndef ASM_COMMENT_START
5613 #define ASM_COMMENT_START ";#"
5614 #endif
5616 /* Define a macro which returns nonzero for a TYPE_DECL which was
5617 implicitly generated for a tagged type.
5619 Note that unlike the gcc front end (which generates a NULL named
5620 TYPE_DECL node for each complete tagged type, each array type, and
5621 each function type node created) the g++ front end generates a
5622 _named_ TYPE_DECL node for each tagged type node created.
5623 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5624 generate a DW_TAG_typedef DIE for them. */
5626 #define TYPE_DECL_IS_STUB(decl) \
5627 (DECL_NAME (decl) == NULL_TREE \
5628 || (DECL_ARTIFICIAL (decl) \
5629 && is_tagged_type (TREE_TYPE (decl)) \
5630 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
5631 /* This is necessary for stub decls that \
5632 appear in nested inline functions. */ \
5633 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5634 && (decl_ultimate_origin (decl) \
5635 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5637 /* Information concerning the compilation unit's programming
5638 language, and compiler version. */
5640 /* Fixed size portion of the DWARF compilation unit header. */
5641 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5642 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5644 /* Fixed size portion of the DWARF comdat type unit header. */
5645 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5646 (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5647 + DWARF_OFFSET_SIZE)
5649 /* Fixed size portion of public names info. */
5650 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5652 /* Fixed size portion of the address range info. */
5653 #define DWARF_ARANGES_HEADER_SIZE \
5654 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5655 DWARF2_ADDR_SIZE * 2) \
5656 - DWARF_INITIAL_LENGTH_SIZE)
5658 /* Size of padding portion in the address range info. It must be
5659 aligned to twice the pointer size. */
5660 #define DWARF_ARANGES_PAD_SIZE \
5661 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5662 DWARF2_ADDR_SIZE * 2) \
5663 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5665 /* Use assembler line directives if available. */
5666 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5667 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5668 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5669 #else
5670 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5671 #endif
5672 #endif
5674 /* Minimum line offset in a special line info. opcode.
5675 This value was chosen to give a reasonable range of values. */
5676 #define DWARF_LINE_BASE -10
5678 /* First special line opcode - leave room for the standard opcodes. */
5679 #define DWARF_LINE_OPCODE_BASE 10
5681 /* Range of line offsets in a special line info. opcode. */
5682 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
5684 /* Flag that indicates the initial value of the is_stmt_start flag.
5685 In the present implementation, we do not mark any lines as
5686 the beginning of a source statement, because that information
5687 is not made available by the GCC front-end. */
5688 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5690 #ifdef DWARF2_DEBUGGING_INFO
5691 /* This location is used by calc_die_sizes() to keep track
5692 the offset of each DIE within the .debug_info section. */
5693 static unsigned long next_die_offset;
5694 #endif
5696 /* Record the root of the DIE's built for the current compilation unit. */
5697 static GTY(()) dw_die_ref comp_unit_die;
5699 /* A list of type DIEs that have been separated into comdat sections. */
5700 static GTY(()) comdat_type_node *comdat_type_list;
5702 /* A list of DIEs with a NULL parent waiting to be relocated. */
5703 static GTY(()) limbo_die_node *limbo_die_list;
5705 /* A list of DIEs for which we may have to generate
5706 DW_AT_MIPS_linkage_name once their DECL_ASSEMBLER_NAMEs are
5707 set. */
5708 static GTY(()) limbo_die_node *deferred_asm_name;
5710 /* Filenames referenced by this compilation unit. */
5711 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5713 /* A hash table of references to DIE's that describe declarations.
5714 The key is a DECL_UID() which is a unique number identifying each decl. */
5715 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5717 /* A hash table of references to DIE's that describe COMMON blocks.
5718 The key is DECL_UID() ^ die_parent. */
5719 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5721 typedef struct GTY(()) die_arg_entry_struct {
5722 dw_die_ref die;
5723 tree arg;
5724 } die_arg_entry;
5726 DEF_VEC_O(die_arg_entry);
5727 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5729 /* Node of the variable location list. */
5730 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5731 rtx GTY (()) var_loc_note;
5732 const char * GTY (()) label;
5733 const char * GTY (()) section_label;
5734 struct var_loc_node * GTY (()) next;
5737 /* Variable location list. */
5738 struct GTY (()) var_loc_list_def {
5739 struct var_loc_node * GTY (()) first;
5741 /* Do not mark the last element of the chained list because
5742 it is marked through the chain. */
5743 struct var_loc_node * GTY ((skip ("%h"))) last;
5745 /* DECL_UID of the variable decl. */
5746 unsigned int decl_id;
5748 typedef struct var_loc_list_def var_loc_list;
5751 /* Table of decl location linked lists. */
5752 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5754 /* A pointer to the base of a list of references to DIE's that
5755 are uniquely identified by their tag, presence/absence of
5756 children DIE's, and list of attribute/value pairs. */
5757 static GTY((length ("abbrev_die_table_allocated")))
5758 dw_die_ref *abbrev_die_table;
5760 /* Number of elements currently allocated for abbrev_die_table. */
5761 static GTY(()) unsigned abbrev_die_table_allocated;
5763 /* Number of elements in type_die_table currently in use. */
5764 static GTY(()) unsigned abbrev_die_table_in_use;
5766 /* Size (in elements) of increments by which we may expand the
5767 abbrev_die_table. */
5768 #define ABBREV_DIE_TABLE_INCREMENT 256
5770 /* A pointer to the base of a table that contains line information
5771 for each source code line in .text in the compilation unit. */
5772 static GTY((length ("line_info_table_allocated")))
5773 dw_line_info_ref line_info_table;
5775 /* Number of elements currently allocated for line_info_table. */
5776 static GTY(()) unsigned line_info_table_allocated;
5778 /* Number of elements in line_info_table currently in use. */
5779 static GTY(()) unsigned line_info_table_in_use;
5781 /* A pointer to the base of a table that contains line information
5782 for each source code line outside of .text in the compilation unit. */
5783 static GTY ((length ("separate_line_info_table_allocated")))
5784 dw_separate_line_info_ref separate_line_info_table;
5786 /* Number of elements currently allocated for separate_line_info_table. */
5787 static GTY(()) unsigned separate_line_info_table_allocated;
5789 /* Number of elements in separate_line_info_table currently in use. */
5790 static GTY(()) unsigned separate_line_info_table_in_use;
5792 /* Size (in elements) of increments by which we may expand the
5793 line_info_table. */
5794 #define LINE_INFO_TABLE_INCREMENT 1024
5796 /* A pointer to the base of a table that contains a list of publicly
5797 accessible names. */
5798 static GTY (()) VEC (pubname_entry, gc) * pubname_table;
5800 /* A pointer to the base of a table that contains a list of publicly
5801 accessible types. */
5802 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5804 /* Array of dies for which we should generate .debug_arange info. */
5805 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5807 /* Number of elements currently allocated for arange_table. */
5808 static GTY(()) unsigned arange_table_allocated;
5810 /* Number of elements in arange_table currently in use. */
5811 static GTY(()) unsigned arange_table_in_use;
5813 /* Size (in elements) of increments by which we may expand the
5814 arange_table. */
5815 #define ARANGE_TABLE_INCREMENT 64
5817 /* Array of dies for which we should generate .debug_ranges info. */
5818 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5820 /* Number of elements currently allocated for ranges_table. */
5821 static GTY(()) unsigned ranges_table_allocated;
5823 /* Number of elements in ranges_table currently in use. */
5824 static GTY(()) unsigned ranges_table_in_use;
5826 /* Array of pairs of labels referenced in ranges_table. */
5827 static GTY ((length ("ranges_by_label_allocated")))
5828 dw_ranges_by_label_ref ranges_by_label;
5830 /* Number of elements currently allocated for ranges_by_label. */
5831 static GTY(()) unsigned ranges_by_label_allocated;
5833 /* Number of elements in ranges_by_label currently in use. */
5834 static GTY(()) unsigned ranges_by_label_in_use;
5836 /* Size (in elements) of increments by which we may expand the
5837 ranges_table. */
5838 #define RANGES_TABLE_INCREMENT 64
5840 /* Whether we have location lists that need outputting */
5841 static GTY(()) bool have_location_lists;
5843 /* Unique label counter. */
5844 static GTY(()) unsigned int loclabel_num;
5846 /* Unique label counter for point-of-call tables. */
5847 static GTY(()) unsigned int poc_label_num;
5849 /* The direct call table structure. */
5851 typedef struct GTY(()) dcall_struct {
5852 unsigned int poc_label_num;
5853 tree poc_decl;
5854 dw_die_ref targ_die;
5856 dcall_entry;
5858 DEF_VEC_O(dcall_entry);
5859 DEF_VEC_ALLOC_O(dcall_entry, gc);
5861 /* The virtual call table structure. */
5863 typedef struct GTY(()) vcall_struct {
5864 unsigned int poc_label_num;
5865 unsigned int vtable_slot;
5867 vcall_entry;
5869 DEF_VEC_O(vcall_entry);
5870 DEF_VEC_ALLOC_O(vcall_entry, gc);
5872 /* Pointers to the direct and virtual call tables. */
5873 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5874 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5876 /* A hash table to map INSN_UIDs to vtable slot indexes. */
5878 struct GTY (()) vcall_insn {
5879 int insn_uid;
5880 unsigned int vtable_slot;
5883 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5885 #ifdef DWARF2_DEBUGGING_INFO
5886 /* Record whether the function being analyzed contains inlined functions. */
5887 static int current_function_has_inlines;
5888 #endif
5889 #if 0 && defined (MIPS_DEBUGGING_INFO)
5890 static int comp_unit_has_inlines;
5891 #endif
5893 /* The last file entry emitted by maybe_emit_file(). */
5894 static GTY(()) struct dwarf_file_data * last_emitted_file;
5896 /* Number of internal labels generated by gen_internal_sym(). */
5897 static GTY(()) int label_num;
5899 /* Cached result of previous call to lookup_filename. */
5900 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5902 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5904 #ifdef DWARF2_DEBUGGING_INFO
5906 /* Offset from the "steady-state frame pointer" to the frame base,
5907 within the current function. */
5908 static HOST_WIDE_INT frame_pointer_fb_offset;
5910 /* Forward declarations for functions defined in this file. */
5912 static int is_pseudo_reg (const_rtx);
5913 static tree type_main_variant (tree);
5914 static int is_tagged_type (const_tree);
5915 static const char *dwarf_tag_name (unsigned);
5916 static const char *dwarf_attr_name (unsigned);
5917 static const char *dwarf_form_name (unsigned);
5918 static tree decl_ultimate_origin (const_tree);
5919 static tree decl_class_context (tree);
5920 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5921 static inline enum dw_val_class AT_class (dw_attr_ref);
5922 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5923 static inline unsigned AT_flag (dw_attr_ref);
5924 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5925 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5926 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5927 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5928 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5929 HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5930 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5931 unsigned int, unsigned char *);
5932 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5933 static hashval_t debug_str_do_hash (const void *);
5934 static int debug_str_eq (const void *, const void *);
5935 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5936 static inline const char *AT_string (dw_attr_ref);
5937 static enum dwarf_form AT_string_form (dw_attr_ref);
5938 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5939 static void add_AT_specification (dw_die_ref, dw_die_ref);
5940 static inline dw_die_ref AT_ref (dw_attr_ref);
5941 static inline int AT_ref_external (dw_attr_ref);
5942 static inline void set_AT_ref_external (dw_attr_ref, int);
5943 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5944 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5945 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5946 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5947 dw_loc_list_ref);
5948 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5949 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5950 static inline rtx AT_addr (dw_attr_ref);
5951 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5952 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5953 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5954 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5955 unsigned HOST_WIDE_INT);
5956 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5957 unsigned long);
5958 static inline const char *AT_lbl (dw_attr_ref);
5959 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5960 static const char *get_AT_low_pc (dw_die_ref);
5961 static const char *get_AT_hi_pc (dw_die_ref);
5962 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5963 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5964 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5965 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5966 static bool is_c_family (void);
5967 static bool is_cxx (void);
5968 static bool is_java (void);
5969 static bool is_fortran (void);
5970 static bool is_ada (void);
5971 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5972 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5973 static void add_child_die (dw_die_ref, dw_die_ref);
5974 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5975 static dw_die_ref lookup_type_die (tree);
5976 static void equate_type_number_to_die (tree, dw_die_ref);
5977 static hashval_t decl_die_table_hash (const void *);
5978 static int decl_die_table_eq (const void *, const void *);
5979 static dw_die_ref lookup_decl_die (tree);
5980 static hashval_t common_block_die_table_hash (const void *);
5981 static int common_block_die_table_eq (const void *, const void *);
5982 static hashval_t decl_loc_table_hash (const void *);
5983 static int decl_loc_table_eq (const void *, const void *);
5984 static var_loc_list *lookup_decl_loc (const_tree);
5985 static void equate_decl_number_to_die (tree, dw_die_ref);
5986 static void add_var_loc_to_decl (tree, struct var_loc_node *);
5987 static void print_spaces (FILE *);
5988 static void print_die (dw_die_ref, FILE *);
5989 static void print_dwarf_line_table (FILE *);
5990 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5991 static dw_die_ref pop_compile_unit (dw_die_ref);
5992 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5993 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5994 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5995 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
5996 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
5997 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
5998 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
5999 struct md5_ctx *, int *);
6000 struct checksum_attributes;
6001 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6002 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6003 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6004 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6005 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6006 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6007 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6008 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6009 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6010 static void compute_section_prefix (dw_die_ref);
6011 static int is_type_die (dw_die_ref);
6012 static int is_comdat_die (dw_die_ref);
6013 static int is_symbol_die (dw_die_ref);
6014 static void assign_symbol_names (dw_die_ref);
6015 static void break_out_includes (dw_die_ref);
6016 static int is_declaration_die (dw_die_ref);
6017 static int should_move_die_to_comdat (dw_die_ref);
6018 static dw_die_ref clone_as_declaration (dw_die_ref);
6019 static dw_die_ref clone_die (dw_die_ref);
6020 static dw_die_ref clone_tree (dw_die_ref);
6021 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6022 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6023 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6024 static dw_die_ref generate_skeleton (dw_die_ref);
6025 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6026 dw_die_ref);
6027 static void break_out_comdat_types (dw_die_ref);
6028 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6029 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6030 static void copy_decls_for_unworthy_types (dw_die_ref);
6032 static hashval_t htab_cu_hash (const void *);
6033 static int htab_cu_eq (const void *, const void *);
6034 static void htab_cu_del (void *);
6035 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6036 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6037 static void add_sibling_attributes (dw_die_ref);
6038 static void build_abbrev_table (dw_die_ref);
6039 static void output_location_lists (dw_die_ref);
6040 static int constant_size (unsigned HOST_WIDE_INT);
6041 static unsigned long size_of_die (dw_die_ref);
6042 static void calc_die_sizes (dw_die_ref);
6043 static void mark_dies (dw_die_ref);
6044 static void unmark_dies (dw_die_ref);
6045 static void unmark_all_dies (dw_die_ref);
6046 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6047 static unsigned long size_of_aranges (void);
6048 static enum dwarf_form value_format (dw_attr_ref);
6049 static void output_value_format (dw_attr_ref);
6050 static void output_abbrev_section (void);
6051 static void output_die_symbol (dw_die_ref);
6052 static void output_die (dw_die_ref);
6053 static void output_compilation_unit_header (void);
6054 static void output_comp_unit (dw_die_ref, int);
6055 static void output_comdat_type_unit (comdat_type_node *);
6056 static const char *dwarf2_name (tree, int);
6057 static void add_pubname (tree, dw_die_ref);
6058 static void add_pubname_string (const char *, dw_die_ref);
6059 static void add_pubtype (tree, dw_die_ref);
6060 static void output_pubnames (VEC (pubname_entry,gc) *);
6061 static void add_arange (tree, dw_die_ref);
6062 static void output_aranges (void);
6063 static unsigned int add_ranges_num (int);
6064 static unsigned int add_ranges (const_tree);
6065 static unsigned int add_ranges_by_labels (const char *, const char *);
6066 static void output_ranges (void);
6067 static void output_line_info (void);
6068 static void output_file_names (void);
6069 static dw_die_ref base_type_die (tree);
6070 static int is_base_type (tree);
6071 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6072 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6073 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6074 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6075 static int type_is_enum (const_tree);
6076 static unsigned int dbx_reg_number (const_rtx);
6077 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6078 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6079 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6080 enum var_init_status);
6081 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6082 enum var_init_status);
6083 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6084 enum var_init_status);
6085 static int is_based_loc (const_rtx);
6086 static int resolve_one_addr (rtx *, void *);
6087 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6088 enum var_init_status);
6089 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6090 enum var_init_status);
6091 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6092 enum var_init_status);
6093 static dw_loc_list_ref loc_list_from_tree (tree, int);
6094 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6095 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6096 static tree field_type (const_tree);
6097 static unsigned int simple_type_align_in_bits (const_tree);
6098 static unsigned int simple_decl_align_in_bits (const_tree);
6099 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6100 static HOST_WIDE_INT field_byte_offset (const_tree);
6101 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6102 dw_loc_list_ref);
6103 static void add_data_member_location_attribute (dw_die_ref, tree);
6104 static bool add_const_value_attribute (dw_die_ref, rtx);
6105 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6106 static void insert_float (const_rtx, unsigned char *);
6107 static rtx rtl_for_decl_location (tree);
6108 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6109 enum dwarf_attribute);
6110 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6111 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6112 static void add_name_attribute (dw_die_ref, const char *);
6113 static void add_comp_dir_attribute (dw_die_ref);
6114 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6115 static void add_subscript_info (dw_die_ref, tree, bool);
6116 static void add_byte_size_attribute (dw_die_ref, tree);
6117 static void add_bit_offset_attribute (dw_die_ref, tree);
6118 static void add_bit_size_attribute (dw_die_ref, tree);
6119 static void add_prototyped_attribute (dw_die_ref, tree);
6120 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6121 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6122 static void add_src_coords_attributes (dw_die_ref, tree);
6123 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6124 static void push_decl_scope (tree);
6125 static void pop_decl_scope (void);
6126 static dw_die_ref scope_die_for (tree, dw_die_ref);
6127 static inline int local_scope_p (dw_die_ref);
6128 static inline int class_scope_p (dw_die_ref);
6129 static inline int class_or_namespace_scope_p (dw_die_ref);
6130 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6131 static void add_calling_convention_attribute (dw_die_ref, tree);
6132 static const char *type_tag (const_tree);
6133 static tree member_declared_type (const_tree);
6134 #if 0
6135 static const char *decl_start_label (tree);
6136 #endif
6137 static void gen_array_type_die (tree, dw_die_ref);
6138 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6139 #if 0
6140 static void gen_entry_point_die (tree, dw_die_ref);
6141 #endif
6142 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6143 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6144 static dw_die_ref gen_formal_parameter_pack_die (tree, tree, dw_die_ref, tree*);
6145 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6146 static void gen_formal_types_die (tree, dw_die_ref);
6147 static void gen_subprogram_die (tree, dw_die_ref);
6148 static void gen_variable_die (tree, tree, dw_die_ref);
6149 static void gen_const_die (tree, dw_die_ref);
6150 static void gen_label_die (tree, dw_die_ref);
6151 static void gen_lexical_block_die (tree, dw_die_ref, int);
6152 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6153 static void gen_field_die (tree, dw_die_ref);
6154 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6155 static dw_die_ref gen_compile_unit_die (const char *);
6156 static void gen_inheritance_die (tree, tree, dw_die_ref);
6157 static void gen_member_die (tree, dw_die_ref);
6158 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6159 enum debug_info_usage);
6160 static void gen_subroutine_type_die (tree, dw_die_ref);
6161 static void gen_typedef_die (tree, dw_die_ref);
6162 static void gen_type_die (tree, dw_die_ref);
6163 static void gen_block_die (tree, dw_die_ref, int);
6164 static void decls_for_scope (tree, dw_die_ref, int);
6165 static int is_redundant_typedef (const_tree);
6166 static inline dw_die_ref get_context_die (tree);
6167 static void gen_namespace_die (tree, dw_die_ref);
6168 static void gen_decl_die (tree, tree, dw_die_ref);
6169 static dw_die_ref force_decl_die (tree);
6170 static dw_die_ref force_type_die (tree);
6171 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6172 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6173 static struct dwarf_file_data * lookup_filename (const char *);
6174 static void retry_incomplete_types (void);
6175 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6176 static void gen_generic_params_dies (tree);
6177 static void splice_child_die (dw_die_ref, dw_die_ref);
6178 static int file_info_cmp (const void *, const void *);
6179 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6180 const char *, const char *, unsigned);
6181 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
6182 const char *, const char *,
6183 const char *);
6184 static void output_loc_list (dw_loc_list_ref);
6185 static char *gen_internal_sym (const char *);
6187 static void prune_unmark_dies (dw_die_ref);
6188 static void prune_unused_types_mark (dw_die_ref, int);
6189 static void prune_unused_types_walk (dw_die_ref);
6190 static void prune_unused_types_walk_attribs (dw_die_ref);
6191 static void prune_unused_types_prune (dw_die_ref);
6192 static void prune_unused_types (void);
6193 static int maybe_emit_file (struct dwarf_file_data *fd);
6194 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6195 static void gen_remaining_tmpl_value_param_die_attribute (void);
6197 /* Section names used to hold DWARF debugging information. */
6198 #ifndef DEBUG_INFO_SECTION
6199 #define DEBUG_INFO_SECTION ".debug_info"
6200 #endif
6201 #ifndef DEBUG_ABBREV_SECTION
6202 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
6203 #endif
6204 #ifndef DEBUG_ARANGES_SECTION
6205 #define DEBUG_ARANGES_SECTION ".debug_aranges"
6206 #endif
6207 #ifndef DEBUG_MACINFO_SECTION
6208 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
6209 #endif
6210 #ifndef DEBUG_LINE_SECTION
6211 #define DEBUG_LINE_SECTION ".debug_line"
6212 #endif
6213 #ifndef DEBUG_LOC_SECTION
6214 #define DEBUG_LOC_SECTION ".debug_loc"
6215 #endif
6216 #ifndef DEBUG_PUBNAMES_SECTION
6217 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
6218 #endif
6219 #ifndef DEBUG_PUBTYPES_SECTION
6220 #define DEBUG_PUBTYPES_SECTION ".debug_pubtypes"
6221 #endif
6222 #ifndef DEBUG_DCALL_SECTION
6223 #define DEBUG_DCALL_SECTION ".debug_dcall"
6224 #endif
6225 #ifndef DEBUG_VCALL_SECTION
6226 #define DEBUG_VCALL_SECTION ".debug_vcall"
6227 #endif
6228 #ifndef DEBUG_STR_SECTION
6229 #define DEBUG_STR_SECTION ".debug_str"
6230 #endif
6231 #ifndef DEBUG_RANGES_SECTION
6232 #define DEBUG_RANGES_SECTION ".debug_ranges"
6233 #endif
6235 /* Standard ELF section names for compiled code and data. */
6236 #ifndef TEXT_SECTION_NAME
6237 #define TEXT_SECTION_NAME ".text"
6238 #endif
6240 /* Section flags for .debug_str section. */
6241 #define DEBUG_STR_SECTION_FLAGS \
6242 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
6243 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
6244 : SECTION_DEBUG)
6246 /* Labels we insert at beginning sections we can reference instead of
6247 the section names themselves. */
6249 #ifndef TEXT_SECTION_LABEL
6250 #define TEXT_SECTION_LABEL "Ltext"
6251 #endif
6252 #ifndef COLD_TEXT_SECTION_LABEL
6253 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
6254 #endif
6255 #ifndef DEBUG_LINE_SECTION_LABEL
6256 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
6257 #endif
6258 #ifndef DEBUG_INFO_SECTION_LABEL
6259 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
6260 #endif
6261 #ifndef DEBUG_ABBREV_SECTION_LABEL
6262 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
6263 #endif
6264 #ifndef DEBUG_LOC_SECTION_LABEL
6265 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
6266 #endif
6267 #ifndef DEBUG_RANGES_SECTION_LABEL
6268 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
6269 #endif
6270 #ifndef DEBUG_MACINFO_SECTION_LABEL
6271 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
6272 #endif
6274 /* Definitions of defaults for formats and names of various special
6275 (artificial) labels which may be generated within this file (when the -g
6276 options is used and DWARF2_DEBUGGING_INFO is in effect.
6277 If necessary, these may be overridden from within the tm.h file, but
6278 typically, overriding these defaults is unnecessary. */
6280 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6281 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6282 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6283 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6284 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6285 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6286 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6287 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6288 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6289 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6291 #ifndef TEXT_END_LABEL
6292 #define TEXT_END_LABEL "Letext"
6293 #endif
6294 #ifndef COLD_END_LABEL
6295 #define COLD_END_LABEL "Letext_cold"
6296 #endif
6297 #ifndef BLOCK_BEGIN_LABEL
6298 #define BLOCK_BEGIN_LABEL "LBB"
6299 #endif
6300 #ifndef BLOCK_END_LABEL
6301 #define BLOCK_END_LABEL "LBE"
6302 #endif
6303 #ifndef LINE_CODE_LABEL
6304 #define LINE_CODE_LABEL "LM"
6305 #endif
6306 #ifndef SEPARATE_LINE_CODE_LABEL
6307 #define SEPARATE_LINE_CODE_LABEL "LSM"
6308 #endif
6311 /* We allow a language front-end to designate a function that is to be
6312 called to "demangle" any name before it is put into a DIE. */
6314 static const char *(*demangle_name_func) (const char *);
6316 void
6317 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6319 demangle_name_func = func;
6322 /* Test if rtl node points to a pseudo register. */
6324 static inline int
6325 is_pseudo_reg (const_rtx rtl)
6327 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6328 || (GET_CODE (rtl) == SUBREG
6329 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6332 /* Return a reference to a type, with its const and volatile qualifiers
6333 removed. */
6335 static inline tree
6336 type_main_variant (tree type)
6338 type = TYPE_MAIN_VARIANT (type);
6340 /* ??? There really should be only one main variant among any group of
6341 variants of a given type (and all of the MAIN_VARIANT values for all
6342 members of the group should point to that one type) but sometimes the C
6343 front-end messes this up for array types, so we work around that bug
6344 here. */
6345 if (TREE_CODE (type) == ARRAY_TYPE)
6346 while (type != TYPE_MAIN_VARIANT (type))
6347 type = TYPE_MAIN_VARIANT (type);
6349 return type;
6352 /* Return nonzero if the given type node represents a tagged type. */
6354 static inline int
6355 is_tagged_type (const_tree type)
6357 enum tree_code code = TREE_CODE (type);
6359 return (code == RECORD_TYPE || code == UNION_TYPE
6360 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6363 /* Convert a DIE tag into its string name. */
6365 static const char *
6366 dwarf_tag_name (unsigned int tag)
6368 switch (tag)
6370 case DW_TAG_padding:
6371 return "DW_TAG_padding";
6372 case DW_TAG_array_type:
6373 return "DW_TAG_array_type";
6374 case DW_TAG_class_type:
6375 return "DW_TAG_class_type";
6376 case DW_TAG_entry_point:
6377 return "DW_TAG_entry_point";
6378 case DW_TAG_enumeration_type:
6379 return "DW_TAG_enumeration_type";
6380 case DW_TAG_formal_parameter:
6381 return "DW_TAG_formal_parameter";
6382 case DW_TAG_imported_declaration:
6383 return "DW_TAG_imported_declaration";
6384 case DW_TAG_label:
6385 return "DW_TAG_label";
6386 case DW_TAG_lexical_block:
6387 return "DW_TAG_lexical_block";
6388 case DW_TAG_member:
6389 return "DW_TAG_member";
6390 case DW_TAG_pointer_type:
6391 return "DW_TAG_pointer_type";
6392 case DW_TAG_reference_type:
6393 return "DW_TAG_reference_type";
6394 case DW_TAG_compile_unit:
6395 return "DW_TAG_compile_unit";
6396 case DW_TAG_string_type:
6397 return "DW_TAG_string_type";
6398 case DW_TAG_structure_type:
6399 return "DW_TAG_structure_type";
6400 case DW_TAG_subroutine_type:
6401 return "DW_TAG_subroutine_type";
6402 case DW_TAG_typedef:
6403 return "DW_TAG_typedef";
6404 case DW_TAG_union_type:
6405 return "DW_TAG_union_type";
6406 case DW_TAG_unspecified_parameters:
6407 return "DW_TAG_unspecified_parameters";
6408 case DW_TAG_variant:
6409 return "DW_TAG_variant";
6410 case DW_TAG_common_block:
6411 return "DW_TAG_common_block";
6412 case DW_TAG_common_inclusion:
6413 return "DW_TAG_common_inclusion";
6414 case DW_TAG_inheritance:
6415 return "DW_TAG_inheritance";
6416 case DW_TAG_inlined_subroutine:
6417 return "DW_TAG_inlined_subroutine";
6418 case DW_TAG_module:
6419 return "DW_TAG_module";
6420 case DW_TAG_ptr_to_member_type:
6421 return "DW_TAG_ptr_to_member_type";
6422 case DW_TAG_set_type:
6423 return "DW_TAG_set_type";
6424 case DW_TAG_subrange_type:
6425 return "DW_TAG_subrange_type";
6426 case DW_TAG_with_stmt:
6427 return "DW_TAG_with_stmt";
6428 case DW_TAG_access_declaration:
6429 return "DW_TAG_access_declaration";
6430 case DW_TAG_base_type:
6431 return "DW_TAG_base_type";
6432 case DW_TAG_catch_block:
6433 return "DW_TAG_catch_block";
6434 case DW_TAG_const_type:
6435 return "DW_TAG_const_type";
6436 case DW_TAG_constant:
6437 return "DW_TAG_constant";
6438 case DW_TAG_enumerator:
6439 return "DW_TAG_enumerator";
6440 case DW_TAG_file_type:
6441 return "DW_TAG_file_type";
6442 case DW_TAG_friend:
6443 return "DW_TAG_friend";
6444 case DW_TAG_namelist:
6445 return "DW_TAG_namelist";
6446 case DW_TAG_namelist_item:
6447 return "DW_TAG_namelist_item";
6448 case DW_TAG_packed_type:
6449 return "DW_TAG_packed_type";
6450 case DW_TAG_subprogram:
6451 return "DW_TAG_subprogram";
6452 case DW_TAG_template_type_param:
6453 return "DW_TAG_template_type_param";
6454 case DW_TAG_template_value_param:
6455 return "DW_TAG_template_value_param";
6456 case DW_TAG_thrown_type:
6457 return "DW_TAG_thrown_type";
6458 case DW_TAG_try_block:
6459 return "DW_TAG_try_block";
6460 case DW_TAG_variant_part:
6461 return "DW_TAG_variant_part";
6462 case DW_TAG_variable:
6463 return "DW_TAG_variable";
6464 case DW_TAG_volatile_type:
6465 return "DW_TAG_volatile_type";
6466 case DW_TAG_dwarf_procedure:
6467 return "DW_TAG_dwarf_procedure";
6468 case DW_TAG_restrict_type:
6469 return "DW_TAG_restrict_type";
6470 case DW_TAG_interface_type:
6471 return "DW_TAG_interface_type";
6472 case DW_TAG_namespace:
6473 return "DW_TAG_namespace";
6474 case DW_TAG_imported_module:
6475 return "DW_TAG_imported_module";
6476 case DW_TAG_unspecified_type:
6477 return "DW_TAG_unspecified_type";
6478 case DW_TAG_partial_unit:
6479 return "DW_TAG_partial_unit";
6480 case DW_TAG_imported_unit:
6481 return "DW_TAG_imported_unit";
6482 case DW_TAG_condition:
6483 return "DW_TAG_condition";
6484 case DW_TAG_shared_type:
6485 return "DW_TAG_shared_type";
6486 case DW_TAG_type_unit:
6487 return "DW_TAG_type_unit";
6488 case DW_TAG_rvalue_reference_type:
6489 return "DW_TAG_rvalue_reference_type";
6490 case DW_TAG_template_alias:
6491 return "DW_TAG_template_alias";
6492 case DW_TAG_GNU_template_parameter_pack:
6493 return "DW_TAG_GNU_template_parameter_pack";
6494 case DW_TAG_GNU_formal_parameter_pack:
6495 return "DW_TAG_GNU_formal_parameter_pack";
6496 case DW_TAG_MIPS_loop:
6497 return "DW_TAG_MIPS_loop";
6498 case DW_TAG_format_label:
6499 return "DW_TAG_format_label";
6500 case DW_TAG_function_template:
6501 return "DW_TAG_function_template";
6502 case DW_TAG_class_template:
6503 return "DW_TAG_class_template";
6504 case DW_TAG_GNU_BINCL:
6505 return "DW_TAG_GNU_BINCL";
6506 case DW_TAG_GNU_EINCL:
6507 return "DW_TAG_GNU_EINCL";
6508 case DW_TAG_GNU_template_template_param:
6509 return "DW_TAG_GNU_template_template_param";
6510 default:
6511 return "DW_TAG_<unknown>";
6515 /* Convert a DWARF attribute code into its string name. */
6517 static const char *
6518 dwarf_attr_name (unsigned int attr)
6520 switch (attr)
6522 case DW_AT_sibling:
6523 return "DW_AT_sibling";
6524 case DW_AT_location:
6525 return "DW_AT_location";
6526 case DW_AT_name:
6527 return "DW_AT_name";
6528 case DW_AT_ordering:
6529 return "DW_AT_ordering";
6530 case DW_AT_subscr_data:
6531 return "DW_AT_subscr_data";
6532 case DW_AT_byte_size:
6533 return "DW_AT_byte_size";
6534 case DW_AT_bit_offset:
6535 return "DW_AT_bit_offset";
6536 case DW_AT_bit_size:
6537 return "DW_AT_bit_size";
6538 case DW_AT_element_list:
6539 return "DW_AT_element_list";
6540 case DW_AT_stmt_list:
6541 return "DW_AT_stmt_list";
6542 case DW_AT_low_pc:
6543 return "DW_AT_low_pc";
6544 case DW_AT_high_pc:
6545 return "DW_AT_high_pc";
6546 case DW_AT_language:
6547 return "DW_AT_language";
6548 case DW_AT_member:
6549 return "DW_AT_member";
6550 case DW_AT_discr:
6551 return "DW_AT_discr";
6552 case DW_AT_discr_value:
6553 return "DW_AT_discr_value";
6554 case DW_AT_visibility:
6555 return "DW_AT_visibility";
6556 case DW_AT_import:
6557 return "DW_AT_import";
6558 case DW_AT_string_length:
6559 return "DW_AT_string_length";
6560 case DW_AT_common_reference:
6561 return "DW_AT_common_reference";
6562 case DW_AT_comp_dir:
6563 return "DW_AT_comp_dir";
6564 case DW_AT_const_value:
6565 return "DW_AT_const_value";
6566 case DW_AT_containing_type:
6567 return "DW_AT_containing_type";
6568 case DW_AT_default_value:
6569 return "DW_AT_default_value";
6570 case DW_AT_inline:
6571 return "DW_AT_inline";
6572 case DW_AT_is_optional:
6573 return "DW_AT_is_optional";
6574 case DW_AT_lower_bound:
6575 return "DW_AT_lower_bound";
6576 case DW_AT_producer:
6577 return "DW_AT_producer";
6578 case DW_AT_prototyped:
6579 return "DW_AT_prototyped";
6580 case DW_AT_return_addr:
6581 return "DW_AT_return_addr";
6582 case DW_AT_start_scope:
6583 return "DW_AT_start_scope";
6584 case DW_AT_bit_stride:
6585 return "DW_AT_bit_stride";
6586 case DW_AT_upper_bound:
6587 return "DW_AT_upper_bound";
6588 case DW_AT_abstract_origin:
6589 return "DW_AT_abstract_origin";
6590 case DW_AT_accessibility:
6591 return "DW_AT_accessibility";
6592 case DW_AT_address_class:
6593 return "DW_AT_address_class";
6594 case DW_AT_artificial:
6595 return "DW_AT_artificial";
6596 case DW_AT_base_types:
6597 return "DW_AT_base_types";
6598 case DW_AT_calling_convention:
6599 return "DW_AT_calling_convention";
6600 case DW_AT_count:
6601 return "DW_AT_count";
6602 case DW_AT_data_member_location:
6603 return "DW_AT_data_member_location";
6604 case DW_AT_decl_column:
6605 return "DW_AT_decl_column";
6606 case DW_AT_decl_file:
6607 return "DW_AT_decl_file";
6608 case DW_AT_decl_line:
6609 return "DW_AT_decl_line";
6610 case DW_AT_declaration:
6611 return "DW_AT_declaration";
6612 case DW_AT_discr_list:
6613 return "DW_AT_discr_list";
6614 case DW_AT_encoding:
6615 return "DW_AT_encoding";
6616 case DW_AT_external:
6617 return "DW_AT_external";
6618 case DW_AT_explicit:
6619 return "DW_AT_explicit";
6620 case DW_AT_frame_base:
6621 return "DW_AT_frame_base";
6622 case DW_AT_friend:
6623 return "DW_AT_friend";
6624 case DW_AT_identifier_case:
6625 return "DW_AT_identifier_case";
6626 case DW_AT_macro_info:
6627 return "DW_AT_macro_info";
6628 case DW_AT_namelist_items:
6629 return "DW_AT_namelist_items";
6630 case DW_AT_priority:
6631 return "DW_AT_priority";
6632 case DW_AT_segment:
6633 return "DW_AT_segment";
6634 case DW_AT_specification:
6635 return "DW_AT_specification";
6636 case DW_AT_static_link:
6637 return "DW_AT_static_link";
6638 case DW_AT_type:
6639 return "DW_AT_type";
6640 case DW_AT_use_location:
6641 return "DW_AT_use_location";
6642 case DW_AT_variable_parameter:
6643 return "DW_AT_variable_parameter";
6644 case DW_AT_virtuality:
6645 return "DW_AT_virtuality";
6646 case DW_AT_vtable_elem_location:
6647 return "DW_AT_vtable_elem_location";
6649 case DW_AT_allocated:
6650 return "DW_AT_allocated";
6651 case DW_AT_associated:
6652 return "DW_AT_associated";
6653 case DW_AT_data_location:
6654 return "DW_AT_data_location";
6655 case DW_AT_byte_stride:
6656 return "DW_AT_byte_stride";
6657 case DW_AT_entry_pc:
6658 return "DW_AT_entry_pc";
6659 case DW_AT_use_UTF8:
6660 return "DW_AT_use_UTF8";
6661 case DW_AT_extension:
6662 return "DW_AT_extension";
6663 case DW_AT_ranges:
6664 return "DW_AT_ranges";
6665 case DW_AT_trampoline:
6666 return "DW_AT_trampoline";
6667 case DW_AT_call_column:
6668 return "DW_AT_call_column";
6669 case DW_AT_call_file:
6670 return "DW_AT_call_file";
6671 case DW_AT_call_line:
6672 return "DW_AT_call_line";
6674 case DW_AT_signature:
6675 return "DW_AT_signature";
6676 case DW_AT_main_subprogram:
6677 return "DW_AT_main_subprogram";
6678 case DW_AT_data_bit_offset:
6679 return "DW_AT_data_bit_offset";
6680 case DW_AT_const_expr:
6681 return "DW_AT_const_expr";
6682 case DW_AT_enum_class:
6683 return "DW_AT_enum_class";
6684 case DW_AT_linkage_name:
6685 return "DW_AT_linkage_name";
6687 case DW_AT_MIPS_fde:
6688 return "DW_AT_MIPS_fde";
6689 case DW_AT_MIPS_loop_begin:
6690 return "DW_AT_MIPS_loop_begin";
6691 case DW_AT_MIPS_tail_loop_begin:
6692 return "DW_AT_MIPS_tail_loop_begin";
6693 case DW_AT_MIPS_epilog_begin:
6694 return "DW_AT_MIPS_epilog_begin";
6695 case DW_AT_MIPS_loop_unroll_factor:
6696 return "DW_AT_MIPS_loop_unroll_factor";
6697 case DW_AT_MIPS_software_pipeline_depth:
6698 return "DW_AT_MIPS_software_pipeline_depth";
6699 case DW_AT_MIPS_linkage_name:
6700 return "DW_AT_MIPS_linkage_name";
6701 case DW_AT_MIPS_stride:
6702 return "DW_AT_MIPS_stride";
6703 case DW_AT_MIPS_abstract_name:
6704 return "DW_AT_MIPS_abstract_name";
6705 case DW_AT_MIPS_clone_origin:
6706 return "DW_AT_MIPS_clone_origin";
6707 case DW_AT_MIPS_has_inlines:
6708 return "DW_AT_MIPS_has_inlines";
6710 case DW_AT_sf_names:
6711 return "DW_AT_sf_names";
6712 case DW_AT_src_info:
6713 return "DW_AT_src_info";
6714 case DW_AT_mac_info:
6715 return "DW_AT_mac_info";
6716 case DW_AT_src_coords:
6717 return "DW_AT_src_coords";
6718 case DW_AT_body_begin:
6719 return "DW_AT_body_begin";
6720 case DW_AT_body_end:
6721 return "DW_AT_body_end";
6722 case DW_AT_GNU_vector:
6723 return "DW_AT_GNU_vector";
6724 case DW_AT_GNU_guarded_by:
6725 return "DW_AT_GNU_guarded_by";
6726 case DW_AT_GNU_pt_guarded_by:
6727 return "DW_AT_GNU_pt_guarded_by";
6728 case DW_AT_GNU_guarded:
6729 return "DW_AT_GNU_guarded";
6730 case DW_AT_GNU_pt_guarded:
6731 return "DW_AT_GNU_pt_guarded";
6732 case DW_AT_GNU_locks_excluded:
6733 return "DW_AT_GNU_locks_excluded";
6734 case DW_AT_GNU_exclusive_locks_required:
6735 return "DW_AT_GNU_exclusive_locks_required";
6736 case DW_AT_GNU_shared_locks_required:
6737 return "DW_AT_GNU_shared_locks_required";
6738 case DW_AT_GNU_odr_signature:
6739 return "DW_AT_GNU_odr_signature";
6740 case DW_AT_GNU_template_name:
6741 return "DW_AT_GNU_template_name";
6743 case DW_AT_VMS_rtnbeg_pd_address:
6744 return "DW_AT_VMS_rtnbeg_pd_address";
6746 default:
6747 return "DW_AT_<unknown>";
6751 /* Convert a DWARF value form code into its string name. */
6753 static const char *
6754 dwarf_form_name (unsigned int form)
6756 switch (form)
6758 case DW_FORM_addr:
6759 return "DW_FORM_addr";
6760 case DW_FORM_block2:
6761 return "DW_FORM_block2";
6762 case DW_FORM_block4:
6763 return "DW_FORM_block4";
6764 case DW_FORM_data2:
6765 return "DW_FORM_data2";
6766 case DW_FORM_data4:
6767 return "DW_FORM_data4";
6768 case DW_FORM_data8:
6769 return "DW_FORM_data8";
6770 case DW_FORM_string:
6771 return "DW_FORM_string";
6772 case DW_FORM_block:
6773 return "DW_FORM_block";
6774 case DW_FORM_block1:
6775 return "DW_FORM_block1";
6776 case DW_FORM_data1:
6777 return "DW_FORM_data1";
6778 case DW_FORM_flag:
6779 return "DW_FORM_flag";
6780 case DW_FORM_sdata:
6781 return "DW_FORM_sdata";
6782 case DW_FORM_strp:
6783 return "DW_FORM_strp";
6784 case DW_FORM_udata:
6785 return "DW_FORM_udata";
6786 case DW_FORM_ref_addr:
6787 return "DW_FORM_ref_addr";
6788 case DW_FORM_ref1:
6789 return "DW_FORM_ref1";
6790 case DW_FORM_ref2:
6791 return "DW_FORM_ref2";
6792 case DW_FORM_ref4:
6793 return "DW_FORM_ref4";
6794 case DW_FORM_ref8:
6795 return "DW_FORM_ref8";
6796 case DW_FORM_ref_udata:
6797 return "DW_FORM_ref_udata";
6798 case DW_FORM_indirect:
6799 return "DW_FORM_indirect";
6800 case DW_FORM_sec_offset:
6801 return "DW_FORM_sec_offset";
6802 case DW_FORM_exprloc:
6803 return "DW_FORM_exprloc";
6804 case DW_FORM_flag_present:
6805 return "DW_FORM_flag_present";
6806 case DW_FORM_ref_sig8:
6807 return "DW_FORM_ref_sig8";
6808 default:
6809 return "DW_FORM_<unknown>";
6813 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
6814 instance of an inlined instance of a decl which is local to an inline
6815 function, so we have to trace all of the way back through the origin chain
6816 to find out what sort of node actually served as the original seed for the
6817 given block. */
6819 static tree
6820 decl_ultimate_origin (const_tree decl)
6822 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6823 return NULL_TREE;
6825 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6826 nodes in the function to point to themselves; ignore that if
6827 we're trying to output the abstract instance of this function. */
6828 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6829 return NULL_TREE;
6831 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6832 most distant ancestor, this should never happen. */
6833 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6835 return DECL_ABSTRACT_ORIGIN (decl);
6838 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
6839 of a virtual function may refer to a base class, so we check the 'this'
6840 parameter. */
6842 static tree
6843 decl_class_context (tree decl)
6845 tree context = NULL_TREE;
6847 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6848 context = DECL_CONTEXT (decl);
6849 else
6850 context = TYPE_MAIN_VARIANT
6851 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6853 if (context && !TYPE_P (context))
6854 context = NULL_TREE;
6856 return context;
6859 /* Add an attribute/value pair to a DIE. */
6861 static inline void
6862 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6864 /* Maybe this should be an assert? */
6865 if (die == NULL)
6866 return;
6868 if (die->die_attr == NULL)
6869 die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6870 VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6873 static inline enum dw_val_class
6874 AT_class (dw_attr_ref a)
6876 return a->dw_attr_val.val_class;
6879 /* Add a flag value attribute to a DIE. */
6881 static inline void
6882 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6884 dw_attr_node attr;
6886 attr.dw_attr = attr_kind;
6887 attr.dw_attr_val.val_class = dw_val_class_flag;
6888 attr.dw_attr_val.v.val_flag = flag;
6889 add_dwarf_attr (die, &attr);
6892 static inline unsigned
6893 AT_flag (dw_attr_ref a)
6895 gcc_assert (a && AT_class (a) == dw_val_class_flag);
6896 return a->dw_attr_val.v.val_flag;
6899 /* Add a signed integer attribute value to a DIE. */
6901 static inline void
6902 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6904 dw_attr_node attr;
6906 attr.dw_attr = attr_kind;
6907 attr.dw_attr_val.val_class = dw_val_class_const;
6908 attr.dw_attr_val.v.val_int = int_val;
6909 add_dwarf_attr (die, &attr);
6912 static inline HOST_WIDE_INT
6913 AT_int (dw_attr_ref a)
6915 gcc_assert (a && AT_class (a) == dw_val_class_const);
6916 return a->dw_attr_val.v.val_int;
6919 /* Add an unsigned integer attribute value to a DIE. */
6921 static inline void
6922 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6923 unsigned HOST_WIDE_INT unsigned_val)
6925 dw_attr_node attr;
6927 attr.dw_attr = attr_kind;
6928 attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6929 attr.dw_attr_val.v.val_unsigned = unsigned_val;
6930 add_dwarf_attr (die, &attr);
6933 static inline unsigned HOST_WIDE_INT
6934 AT_unsigned (dw_attr_ref a)
6936 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6937 return a->dw_attr_val.v.val_unsigned;
6940 /* Add an unsigned double integer attribute value to a DIE. */
6942 static inline void
6943 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6944 HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6946 dw_attr_node attr;
6948 attr.dw_attr = attr_kind;
6949 attr.dw_attr_val.val_class = dw_val_class_const_double;
6950 attr.dw_attr_val.v.val_double.high = high;
6951 attr.dw_attr_val.v.val_double.low = low;
6952 add_dwarf_attr (die, &attr);
6955 /* Add a floating point attribute value to a DIE and return it. */
6957 static inline void
6958 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6959 unsigned int length, unsigned int elt_size, unsigned char *array)
6961 dw_attr_node attr;
6963 attr.dw_attr = attr_kind;
6964 attr.dw_attr_val.val_class = dw_val_class_vec;
6965 attr.dw_attr_val.v.val_vec.length = length;
6966 attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6967 attr.dw_attr_val.v.val_vec.array = array;
6968 add_dwarf_attr (die, &attr);
6971 /* Add an 8-byte data attribute value to a DIE. */
6973 static inline void
6974 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6975 unsigned char data8[8])
6977 dw_attr_node attr;
6979 attr.dw_attr = attr_kind;
6980 attr.dw_attr_val.val_class = dw_val_class_data8;
6981 memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6982 add_dwarf_attr (die, &attr);
6985 /* Hash and equality functions for debug_str_hash. */
6987 static hashval_t
6988 debug_str_do_hash (const void *x)
6990 return htab_hash_string (((const struct indirect_string_node *)x)->str);
6993 static int
6994 debug_str_eq (const void *x1, const void *x2)
6996 return strcmp ((((const struct indirect_string_node *)x1)->str),
6997 (const char *)x2) == 0;
7000 /* Add STR to the indirect string hash table. */
7002 static struct indirect_string_node *
7003 find_AT_string (const char *str)
7005 struct indirect_string_node *node;
7006 void **slot;
7008 if (! debug_str_hash)
7009 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7010 debug_str_eq, NULL);
7012 slot = htab_find_slot_with_hash (debug_str_hash, str,
7013 htab_hash_string (str), INSERT);
7014 if (*slot == NULL)
7016 node = (struct indirect_string_node *)
7017 ggc_alloc_cleared (sizeof (struct indirect_string_node));
7018 node->str = ggc_strdup (str);
7019 *slot = node;
7021 else
7022 node = (struct indirect_string_node *) *slot;
7024 node->refcount++;
7025 return node;
7028 /* Add a string attribute value to a DIE. */
7030 static inline void
7031 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7033 dw_attr_node attr;
7034 struct indirect_string_node *node;
7036 node = find_AT_string (str);
7038 attr.dw_attr = attr_kind;
7039 attr.dw_attr_val.val_class = dw_val_class_str;
7040 attr.dw_attr_val.v.val_str = node;
7041 add_dwarf_attr (die, &attr);
7044 /* Create a label for an indirect string node, ensuring it is going to
7045 be output, unless its reference count goes down to zero. */
7047 static inline void
7048 gen_label_for_indirect_string (struct indirect_string_node *node)
7050 char label[32];
7052 if (node->label)
7053 return;
7055 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7056 ++dw2_string_counter;
7057 node->label = xstrdup (label);
7060 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7061 debug string STR. */
7063 static inline rtx
7064 get_debug_string_label (const char *str)
7066 struct indirect_string_node *node = find_AT_string (str);
7068 debug_str_hash_forced = true;
7070 gen_label_for_indirect_string (node);
7072 return gen_rtx_SYMBOL_REF (Pmode, node->label);
7075 static inline const char *
7076 AT_string (dw_attr_ref a)
7078 gcc_assert (a && AT_class (a) == dw_val_class_str);
7079 return a->dw_attr_val.v.val_str->str;
7082 /* Find out whether a string should be output inline in DIE
7083 or out-of-line in .debug_str section. */
7085 static enum dwarf_form
7086 AT_string_form (dw_attr_ref a)
7088 struct indirect_string_node *node;
7089 unsigned int len;
7091 gcc_assert (a && AT_class (a) == dw_val_class_str);
7093 node = a->dw_attr_val.v.val_str;
7094 if (node->form)
7095 return node->form;
7097 len = strlen (node->str) + 1;
7099 /* If the string is shorter or equal to the size of the reference, it is
7100 always better to put it inline. */
7101 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7102 return node->form = DW_FORM_string;
7104 /* If we cannot expect the linker to merge strings in .debug_str
7105 section, only put it into .debug_str if it is worth even in this
7106 single module. */
7107 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7108 || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7109 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7110 return node->form = DW_FORM_string;
7112 gen_label_for_indirect_string (node);
7114 return node->form = DW_FORM_strp;
7117 /* Add a DIE reference attribute value to a DIE. */
7119 static inline void
7120 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7122 dw_attr_node attr;
7124 attr.dw_attr = attr_kind;
7125 attr.dw_attr_val.val_class = dw_val_class_die_ref;
7126 attr.dw_attr_val.v.val_die_ref.die = targ_die;
7127 attr.dw_attr_val.v.val_die_ref.external = 0;
7128 add_dwarf_attr (die, &attr);
7131 /* Add an AT_specification attribute to a DIE, and also make the back
7132 pointer from the specification to the definition. */
7134 static inline void
7135 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7137 add_AT_die_ref (die, DW_AT_specification, targ_die);
7138 gcc_assert (!targ_die->die_definition);
7139 targ_die->die_definition = die;
7142 static inline dw_die_ref
7143 AT_ref (dw_attr_ref a)
7145 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7146 return a->dw_attr_val.v.val_die_ref.die;
7149 static inline int
7150 AT_ref_external (dw_attr_ref a)
7152 if (a && AT_class (a) == dw_val_class_die_ref)
7153 return a->dw_attr_val.v.val_die_ref.external;
7155 return 0;
7158 static inline void
7159 set_AT_ref_external (dw_attr_ref a, int i)
7161 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7162 a->dw_attr_val.v.val_die_ref.external = i;
7165 /* Add an FDE reference attribute value to a DIE. */
7167 static inline void
7168 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7170 dw_attr_node attr;
7172 attr.dw_attr = attr_kind;
7173 attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7174 attr.dw_attr_val.v.val_fde_index = targ_fde;
7175 add_dwarf_attr (die, &attr);
7178 /* Add a location description attribute value to a DIE. */
7180 static inline void
7181 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7183 dw_attr_node attr;
7185 attr.dw_attr = attr_kind;
7186 attr.dw_attr_val.val_class = dw_val_class_loc;
7187 attr.dw_attr_val.v.val_loc = loc;
7188 add_dwarf_attr (die, &attr);
7191 static inline dw_loc_descr_ref
7192 AT_loc (dw_attr_ref a)
7194 gcc_assert (a && AT_class (a) == dw_val_class_loc);
7195 return a->dw_attr_val.v.val_loc;
7198 static inline void
7199 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7201 dw_attr_node attr;
7203 attr.dw_attr = attr_kind;
7204 attr.dw_attr_val.val_class = dw_val_class_loc_list;
7205 attr.dw_attr_val.v.val_loc_list = loc_list;
7206 add_dwarf_attr (die, &attr);
7207 have_location_lists = true;
7210 static inline dw_loc_list_ref
7211 AT_loc_list (dw_attr_ref a)
7213 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7214 return a->dw_attr_val.v.val_loc_list;
7217 /* Add an address constant attribute value to a DIE. */
7219 static inline void
7220 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7222 dw_attr_node attr;
7224 attr.dw_attr = attr_kind;
7225 attr.dw_attr_val.val_class = dw_val_class_addr;
7226 attr.dw_attr_val.v.val_addr = addr;
7227 add_dwarf_attr (die, &attr);
7230 /* Get the RTX from to an address DIE attribute. */
7232 static inline rtx
7233 AT_addr (dw_attr_ref a)
7235 gcc_assert (a && AT_class (a) == dw_val_class_addr);
7236 return a->dw_attr_val.v.val_addr;
7239 /* Add a file attribute value to a DIE. */
7241 static inline void
7242 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7243 struct dwarf_file_data *fd)
7245 dw_attr_node attr;
7247 attr.dw_attr = attr_kind;
7248 attr.dw_attr_val.val_class = dw_val_class_file;
7249 attr.dw_attr_val.v.val_file = fd;
7250 add_dwarf_attr (die, &attr);
7253 /* Get the dwarf_file_data from a file DIE attribute. */
7255 static inline struct dwarf_file_data *
7256 AT_file (dw_attr_ref a)
7258 gcc_assert (a && AT_class (a) == dw_val_class_file);
7259 return a->dw_attr_val.v.val_file;
7262 /* Add a label identifier attribute value to a DIE. */
7264 static inline void
7265 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7267 dw_attr_node attr;
7269 attr.dw_attr = attr_kind;
7270 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7271 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7272 add_dwarf_attr (die, &attr);
7275 /* Add a section offset attribute value to a DIE, an offset into the
7276 debug_line section. */
7278 static inline void
7279 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7280 const char *label)
7282 dw_attr_node attr;
7284 attr.dw_attr = attr_kind;
7285 attr.dw_attr_val.val_class = dw_val_class_lineptr;
7286 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7287 add_dwarf_attr (die, &attr);
7290 /* Add a section offset attribute value to a DIE, an offset into the
7291 debug_macinfo section. */
7293 static inline void
7294 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7295 const char *label)
7297 dw_attr_node attr;
7299 attr.dw_attr = attr_kind;
7300 attr.dw_attr_val.val_class = dw_val_class_macptr;
7301 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7302 add_dwarf_attr (die, &attr);
7305 /* Add an offset attribute value to a DIE. */
7307 static inline void
7308 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7309 unsigned HOST_WIDE_INT offset)
7311 dw_attr_node attr;
7313 attr.dw_attr = attr_kind;
7314 attr.dw_attr_val.val_class = dw_val_class_offset;
7315 attr.dw_attr_val.v.val_offset = offset;
7316 add_dwarf_attr (die, &attr);
7319 /* Add an range_list attribute value to a DIE. */
7321 static void
7322 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7323 long unsigned int offset)
7325 dw_attr_node attr;
7327 attr.dw_attr = attr_kind;
7328 attr.dw_attr_val.val_class = dw_val_class_range_list;
7329 attr.dw_attr_val.v.val_offset = offset;
7330 add_dwarf_attr (die, &attr);
7333 static inline const char *
7334 AT_lbl (dw_attr_ref a)
7336 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7337 || AT_class (a) == dw_val_class_lineptr
7338 || AT_class (a) == dw_val_class_macptr));
7339 return a->dw_attr_val.v.val_lbl_id;
7342 /* Get the attribute of type attr_kind. */
7344 static dw_attr_ref
7345 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7347 dw_attr_ref a;
7348 unsigned ix;
7349 dw_die_ref spec = NULL;
7351 if (! die)
7352 return NULL;
7354 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7355 if (a->dw_attr == attr_kind)
7356 return a;
7357 else if (a->dw_attr == DW_AT_specification
7358 || a->dw_attr == DW_AT_abstract_origin)
7359 spec = AT_ref (a);
7361 if (spec)
7362 return get_AT (spec, attr_kind);
7364 return NULL;
7367 /* Return the "low pc" attribute value, typically associated with a subprogram
7368 DIE. Return null if the "low pc" attribute is either not present, or if it
7369 cannot be represented as an assembler label identifier. */
7371 static inline const char *
7372 get_AT_low_pc (dw_die_ref die)
7374 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7376 return a ? AT_lbl (a) : NULL;
7379 /* Return the "high pc" attribute value, typically associated with a subprogram
7380 DIE. Return null if the "high pc" attribute is either not present, or if it
7381 cannot be represented as an assembler label identifier. */
7383 static inline const char *
7384 get_AT_hi_pc (dw_die_ref die)
7386 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7388 return a ? AT_lbl (a) : NULL;
7391 /* Return the value of the string attribute designated by ATTR_KIND, or
7392 NULL if it is not present. */
7394 static inline const char *
7395 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7397 dw_attr_ref a = get_AT (die, attr_kind);
7399 return a ? AT_string (a) : NULL;
7402 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7403 if it is not present. */
7405 static inline int
7406 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7408 dw_attr_ref a = get_AT (die, attr_kind);
7410 return a ? AT_flag (a) : 0;
7413 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7414 if it is not present. */
7416 static inline unsigned
7417 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7419 dw_attr_ref a = get_AT (die, attr_kind);
7421 return a ? AT_unsigned (a) : 0;
7424 static inline dw_die_ref
7425 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7427 dw_attr_ref a = get_AT (die, attr_kind);
7429 return a ? AT_ref (a) : NULL;
7432 static inline struct dwarf_file_data *
7433 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7435 dw_attr_ref a = get_AT (die, attr_kind);
7437 return a ? AT_file (a) : NULL;
7440 /* Return TRUE if the language is C or C++. */
7442 static inline bool
7443 is_c_family (void)
7445 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7447 return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
7448 || lang == DW_LANG_C99
7449 || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
7452 /* Return TRUE if the language is C++. */
7454 static inline bool
7455 is_cxx (void)
7457 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7459 return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7462 /* Return TRUE if the language is Fortran. */
7464 static inline bool
7465 is_fortran (void)
7467 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7469 return (lang == DW_LANG_Fortran77
7470 || lang == DW_LANG_Fortran90
7471 || lang == DW_LANG_Fortran95);
7474 /* Return TRUE if the language is Java. */
7476 static inline bool
7477 is_java (void)
7479 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7481 return lang == DW_LANG_Java;
7484 /* Return TRUE if the language is Ada. */
7486 static inline bool
7487 is_ada (void)
7489 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7491 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7494 /* Remove the specified attribute if present. */
7496 static void
7497 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7499 dw_attr_ref a;
7500 unsigned ix;
7502 if (! die)
7503 return;
7505 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7506 if (a->dw_attr == attr_kind)
7508 if (AT_class (a) == dw_val_class_str)
7509 if (a->dw_attr_val.v.val_str->refcount)
7510 a->dw_attr_val.v.val_str->refcount--;
7512 /* VEC_ordered_remove should help reduce the number of abbrevs
7513 that are needed. */
7514 VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7515 return;
7519 /* Remove CHILD from its parent. PREV must have the property that
7520 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
7522 static void
7523 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7525 gcc_assert (child->die_parent == prev->die_parent);
7526 gcc_assert (prev->die_sib == child);
7527 if (prev == child)
7529 gcc_assert (child->die_parent->die_child == child);
7530 prev = NULL;
7532 else
7533 prev->die_sib = child->die_sib;
7534 if (child->die_parent->die_child == child)
7535 child->die_parent->die_child = prev;
7538 /* Replace OLD_CHILD with NEW_CHILD. PREV must have the property that
7539 PREV->DIE_SIB == OLD_CHILD. Does not alter OLD_CHILD. */
7541 static void
7542 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7544 dw_die_ref parent = old_child->die_parent;
7546 gcc_assert (parent == prev->die_parent);
7547 gcc_assert (prev->die_sib == old_child);
7549 new_child->die_parent = parent;
7550 if (prev == old_child)
7552 gcc_assert (parent->die_child == old_child);
7553 new_child->die_sib = new_child;
7555 else
7557 prev->die_sib = new_child;
7558 new_child->die_sib = old_child->die_sib;
7560 if (old_child->die_parent->die_child == old_child)
7561 old_child->die_parent->die_child = new_child;
7564 /* Move all children from OLD_PARENT to NEW_PARENT. */
7566 static void
7567 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7569 dw_die_ref c;
7570 new_parent->die_child = old_parent->die_child;
7571 old_parent->die_child = NULL;
7572 FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7575 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
7576 matches TAG. */
7578 static void
7579 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7581 dw_die_ref c;
7583 c = die->die_child;
7584 if (c) do {
7585 dw_die_ref prev = c;
7586 c = c->die_sib;
7587 while (c->die_tag == tag)
7589 remove_child_with_prev (c, prev);
7590 /* Might have removed every child. */
7591 if (c == c->die_sib)
7592 return;
7593 c = c->die_sib;
7595 } while (c != die->die_child);
7598 /* Add a CHILD_DIE as the last child of DIE. */
7600 static void
7601 add_child_die (dw_die_ref die, dw_die_ref child_die)
7603 /* FIXME this should probably be an assert. */
7604 if (! die || ! child_die)
7605 return;
7606 gcc_assert (die != child_die);
7608 child_die->die_parent = die;
7609 if (die->die_child)
7611 child_die->die_sib = die->die_child->die_sib;
7612 die->die_child->die_sib = child_die;
7614 else
7615 child_die->die_sib = child_die;
7616 die->die_child = child_die;
7619 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7620 is the specification, to the end of PARENT's list of children.
7621 This is done by removing and re-adding it. */
7623 static void
7624 splice_child_die (dw_die_ref parent, dw_die_ref child)
7626 dw_die_ref p;
7628 /* We want the declaration DIE from inside the class, not the
7629 specification DIE at toplevel. */
7630 if (child->die_parent != parent)
7632 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7634 if (tmp)
7635 child = tmp;
7638 gcc_assert (child->die_parent == parent
7639 || (child->die_parent
7640 == get_AT_ref (parent, DW_AT_specification)));
7642 for (p = child->die_parent->die_child; ; p = p->die_sib)
7643 if (p->die_sib == child)
7645 remove_child_with_prev (child, p);
7646 break;
7649 add_child_die (parent, child);
7652 /* Return a pointer to a newly created DIE node. */
7654 static inline dw_die_ref
7655 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7657 dw_die_ref die = GGC_CNEW (die_node);
7659 die->die_tag = tag_value;
7661 if (parent_die != NULL)
7662 add_child_die (parent_die, die);
7663 else
7665 limbo_die_node *limbo_node;
7667 limbo_node = GGC_CNEW (limbo_die_node);
7668 limbo_node->die = die;
7669 limbo_node->created_for = t;
7670 limbo_node->next = limbo_die_list;
7671 limbo_die_list = limbo_node;
7674 return die;
7677 /* Return the DIE associated with the given type specifier. */
7679 static inline dw_die_ref
7680 lookup_type_die (tree type)
7682 return TYPE_SYMTAB_DIE (type);
7685 /* Equate a DIE to a given type specifier. */
7687 static inline void
7688 equate_type_number_to_die (tree type, dw_die_ref type_die)
7690 TYPE_SYMTAB_DIE (type) = type_die;
7693 /* Returns a hash value for X (which really is a die_struct). */
7695 static hashval_t
7696 decl_die_table_hash (const void *x)
7698 return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7701 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
7703 static int
7704 decl_die_table_eq (const void *x, const void *y)
7706 return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7709 /* Return the DIE associated with a given declaration. */
7711 static inline dw_die_ref
7712 lookup_decl_die (tree decl)
7714 return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7717 /* Returns a hash value for X (which really is a var_loc_list). */
7719 static hashval_t
7720 decl_loc_table_hash (const void *x)
7722 return (hashval_t) ((const var_loc_list *) x)->decl_id;
7725 /* Return nonzero if decl_id of var_loc_list X is the same as
7726 UID of decl *Y. */
7728 static int
7729 decl_loc_table_eq (const void *x, const void *y)
7731 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7734 /* Return the var_loc list associated with a given declaration. */
7736 static inline var_loc_list *
7737 lookup_decl_loc (const_tree decl)
7739 if (!decl_loc_table)
7740 return NULL;
7741 return (var_loc_list *)
7742 htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7745 /* Equate a DIE to a particular declaration. */
7747 static void
7748 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7750 unsigned int decl_id = DECL_UID (decl);
7751 void **slot;
7753 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7754 *slot = decl_die;
7755 decl_die->decl_id = decl_id;
7758 /* Add a variable location node to the linked list for DECL. */
7760 static void
7761 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
7763 unsigned int decl_id = DECL_UID (decl);
7764 var_loc_list *temp;
7765 void **slot;
7767 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7768 if (*slot == NULL)
7770 temp = GGC_CNEW (var_loc_list);
7771 temp->decl_id = decl_id;
7772 *slot = temp;
7774 else
7775 temp = (var_loc_list *) *slot;
7777 if (temp->last)
7779 /* If the current location is the same as the end of the list,
7780 and either both or neither of the locations is uninitialized,
7781 we have nothing to do. */
7782 if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7783 NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
7784 || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7785 != NOTE_VAR_LOCATION_STATUS (loc->var_loc_note))
7786 && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7787 == VAR_INIT_STATUS_UNINITIALIZED)
7788 || (NOTE_VAR_LOCATION_STATUS (loc->var_loc_note)
7789 == VAR_INIT_STATUS_UNINITIALIZED))))
7791 /* Add LOC to the end of list and update LAST. */
7792 temp->last->next = loc;
7793 temp->last = loc;
7796 /* Do not add empty location to the beginning of the list. */
7797 else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
7799 temp->first = loc;
7800 temp->last = loc;
7804 /* Keep track of the number of spaces used to indent the
7805 output of the debugging routines that print the structure of
7806 the DIE internal representation. */
7807 static int print_indent;
7809 /* Indent the line the number of spaces given by print_indent. */
7811 static inline void
7812 print_spaces (FILE *outfile)
7814 fprintf (outfile, "%*s", print_indent, "");
7817 /* Print a type signature in hex. */
7819 static inline void
7820 print_signature (FILE *outfile, char *sig)
7822 int i;
7824 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7825 fprintf (outfile, "%02x", sig[i] & 0xff);
7828 /* Print the information associated with a given DIE, and its children.
7829 This routine is a debugging aid only. */
7831 static void
7832 print_die (dw_die_ref die, FILE *outfile)
7834 dw_attr_ref a;
7835 dw_die_ref c;
7836 unsigned ix;
7838 print_spaces (outfile);
7839 fprintf (outfile, "DIE %4ld: %s\n",
7840 die->die_offset, dwarf_tag_name (die->die_tag));
7841 print_spaces (outfile);
7842 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
7843 fprintf (outfile, " offset: %ld\n", die->die_offset);
7844 if (dwarf_version >= 4 && die->die_id.die_type_node)
7846 print_spaces (outfile);
7847 fprintf (outfile, " signature: ");
7848 print_signature (outfile, die->die_id.die_type_node->signature);
7849 fprintf (outfile, "\n");
7852 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7854 print_spaces (outfile);
7855 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
7857 switch (AT_class (a))
7859 case dw_val_class_addr:
7860 fprintf (outfile, "address");
7861 break;
7862 case dw_val_class_offset:
7863 fprintf (outfile, "offset");
7864 break;
7865 case dw_val_class_loc:
7866 fprintf (outfile, "location descriptor");
7867 break;
7868 case dw_val_class_loc_list:
7869 fprintf (outfile, "location list -> label:%s",
7870 AT_loc_list (a)->ll_symbol);
7871 break;
7872 case dw_val_class_range_list:
7873 fprintf (outfile, "range list");
7874 break;
7875 case dw_val_class_const:
7876 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7877 break;
7878 case dw_val_class_unsigned_const:
7879 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7880 break;
7881 case dw_val_class_const_double:
7882 fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7883 HOST_WIDE_INT_PRINT_UNSIGNED")",
7884 a->dw_attr_val.v.val_double.high,
7885 a->dw_attr_val.v.val_double.low);
7886 break;
7887 case dw_val_class_vec:
7888 fprintf (outfile, "floating-point or vector constant");
7889 break;
7890 case dw_val_class_flag:
7891 fprintf (outfile, "%u", AT_flag (a));
7892 break;
7893 case dw_val_class_die_ref:
7894 if (AT_ref (a) != NULL)
7896 if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7898 fprintf (outfile, "die -> signature: ");
7899 print_signature (outfile,
7900 AT_ref (a)->die_id.die_type_node->signature);
7902 else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7903 fprintf (outfile, "die -> label: %s",
7904 AT_ref (a)->die_id.die_symbol);
7905 else
7906 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7908 else
7909 fprintf (outfile, "die -> <null>");
7910 break;
7911 case dw_val_class_lbl_id:
7912 case dw_val_class_lineptr:
7913 case dw_val_class_macptr:
7914 fprintf (outfile, "label: %s", AT_lbl (a));
7915 break;
7916 case dw_val_class_str:
7917 if (AT_string (a) != NULL)
7918 fprintf (outfile, "\"%s\"", AT_string (a));
7919 else
7920 fprintf (outfile, "<null>");
7921 break;
7922 case dw_val_class_file:
7923 fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7924 AT_file (a)->emitted_number);
7925 break;
7926 case dw_val_class_data8:
7928 int i;
7930 for (i = 0; i < 8; i++)
7931 fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7932 break;
7934 default:
7935 break;
7938 fprintf (outfile, "\n");
7941 if (die->die_child != NULL)
7943 print_indent += 4;
7944 FOR_EACH_CHILD (die, c, print_die (c, outfile));
7945 print_indent -= 4;
7947 if (print_indent == 0)
7948 fprintf (outfile, "\n");
7951 /* Print the contents of the source code line number correspondence table.
7952 This routine is a debugging aid only. */
7954 static void
7955 print_dwarf_line_table (FILE *outfile)
7957 unsigned i;
7958 dw_line_info_ref line_info;
7960 fprintf (outfile, "\n\nDWARF source line information\n");
7961 for (i = 1; i < line_info_table_in_use; i++)
7963 line_info = &line_info_table[i];
7964 fprintf (outfile, "%5d: %4ld %6ld\n", i,
7965 line_info->dw_file_num,
7966 line_info->dw_line_num);
7969 fprintf (outfile, "\n\n");
7972 /* Print the information collected for a given DIE. */
7974 void
7975 debug_dwarf_die (dw_die_ref die)
7977 print_die (die, stderr);
7980 /* Print all DWARF information collected for the compilation unit.
7981 This routine is a debugging aid only. */
7983 void
7984 debug_dwarf (void)
7986 print_indent = 0;
7987 print_die (comp_unit_die, stderr);
7988 if (! DWARF2_ASM_LINE_DEBUG_INFO)
7989 print_dwarf_line_table (stderr);
7992 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
7993 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
7994 DIE that marks the start of the DIEs for this include file. */
7996 static dw_die_ref
7997 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
7999 const char *filename = get_AT_string (bincl_die, DW_AT_name);
8000 dw_die_ref new_unit = gen_compile_unit_die (filename);
8002 new_unit->die_sib = old_unit;
8003 return new_unit;
8006 /* Close an include-file CU and reopen the enclosing one. */
8008 static dw_die_ref
8009 pop_compile_unit (dw_die_ref old_unit)
8011 dw_die_ref new_unit = old_unit->die_sib;
8013 old_unit->die_sib = NULL;
8014 return new_unit;
8017 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8018 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8020 /* Calculate the checksum of a location expression. */
8022 static inline void
8023 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8025 int tem;
8027 tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8028 CHECKSUM (tem);
8029 CHECKSUM (loc->dw_loc_oprnd1);
8030 CHECKSUM (loc->dw_loc_oprnd2);
8033 /* Calculate the checksum of an attribute. */
8035 static void
8036 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8038 dw_loc_descr_ref loc;
8039 rtx r;
8041 CHECKSUM (at->dw_attr);
8043 /* We don't care that this was compiled with a different compiler
8044 snapshot; if the output is the same, that's what matters. */
8045 if (at->dw_attr == DW_AT_producer)
8046 return;
8048 switch (AT_class (at))
8050 case dw_val_class_const:
8051 CHECKSUM (at->dw_attr_val.v.val_int);
8052 break;
8053 case dw_val_class_unsigned_const:
8054 CHECKSUM (at->dw_attr_val.v.val_unsigned);
8055 break;
8056 case dw_val_class_const_double:
8057 CHECKSUM (at->dw_attr_val.v.val_double);
8058 break;
8059 case dw_val_class_vec:
8060 CHECKSUM (at->dw_attr_val.v.val_vec);
8061 break;
8062 case dw_val_class_flag:
8063 CHECKSUM (at->dw_attr_val.v.val_flag);
8064 break;
8065 case dw_val_class_str:
8066 CHECKSUM_STRING (AT_string (at));
8067 break;
8069 case dw_val_class_addr:
8070 r = AT_addr (at);
8071 gcc_assert (GET_CODE (r) == SYMBOL_REF);
8072 CHECKSUM_STRING (XSTR (r, 0));
8073 break;
8075 case dw_val_class_offset:
8076 CHECKSUM (at->dw_attr_val.v.val_offset);
8077 break;
8079 case dw_val_class_loc:
8080 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8081 loc_checksum (loc, ctx);
8082 break;
8084 case dw_val_class_die_ref:
8085 die_checksum (AT_ref (at), ctx, mark);
8086 break;
8088 case dw_val_class_fde_ref:
8089 case dw_val_class_lbl_id:
8090 case dw_val_class_lineptr:
8091 case dw_val_class_macptr:
8092 break;
8094 case dw_val_class_file:
8095 CHECKSUM_STRING (AT_file (at)->filename);
8096 break;
8098 case dw_val_class_data8:
8099 CHECKSUM (at->dw_attr_val.v.val_data8);
8100 break;
8102 default:
8103 break;
8107 /* Calculate the checksum of a DIE. */
8109 static void
8110 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8112 dw_die_ref c;
8113 dw_attr_ref a;
8114 unsigned ix;
8116 /* To avoid infinite recursion. */
8117 if (die->die_mark)
8119 CHECKSUM (die->die_mark);
8120 return;
8122 die->die_mark = ++(*mark);
8124 CHECKSUM (die->die_tag);
8126 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8127 attr_checksum (a, ctx, mark);
8129 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8132 #undef CHECKSUM
8133 #undef CHECKSUM_STRING
8135 /* For DWARF-4 types, include the trailing NULL when checksumming strings. */
8136 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8137 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8138 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8139 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8140 #define CHECKSUM_ATTR(FOO) \
8141 if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8143 /* Calculate the checksum of a number in signed LEB128 format. */
8145 static void
8146 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8148 unsigned char byte;
8149 bool more;
8151 while (1)
8153 byte = (value & 0x7f);
8154 value >>= 7;
8155 more = !((value == 0 && (byte & 0x40) == 0)
8156 || (value == -1 && (byte & 0x40) != 0));
8157 if (more)
8158 byte |= 0x80;
8159 CHECKSUM (byte);
8160 if (!more)
8161 break;
8165 /* Calculate the checksum of a number in unsigned LEB128 format. */
8167 static void
8168 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8170 while (1)
8172 unsigned char byte = (value & 0x7f);
8173 value >>= 7;
8174 if (value != 0)
8175 /* More bytes to follow. */
8176 byte |= 0x80;
8177 CHECKSUM (byte);
8178 if (value == 0)
8179 break;
8183 /* Checksum the context of the DIE. This adds the names of any
8184 surrounding namespaces or structures to the checksum. */
8186 static void
8187 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8189 const char *name;
8190 dw_die_ref spec;
8191 int tag = die->die_tag;
8193 if (tag != DW_TAG_namespace
8194 && tag != DW_TAG_structure_type
8195 && tag != DW_TAG_class_type)
8196 return;
8198 name = get_AT_string (die, DW_AT_name);
8200 spec = get_AT_ref (die, DW_AT_specification);
8201 if (spec != NULL)
8202 die = spec;
8204 if (die->die_parent != NULL)
8205 checksum_die_context (die->die_parent, ctx);
8207 CHECKSUM_ULEB128 ('C');
8208 CHECKSUM_ULEB128 (tag);
8209 if (name != NULL)
8210 CHECKSUM_STRING (name);
8213 /* Calculate the checksum of a location expression. */
8215 static inline void
8216 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8218 /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8219 were emitted as a DW_FORM_sdata instead of a location expression. */
8220 if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8222 CHECKSUM_ULEB128 (DW_FORM_sdata);
8223 CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8224 return;
8227 /* Otherwise, just checksum the raw location expression. */
8228 while (loc != NULL)
8230 CHECKSUM_ULEB128 (loc->dw_loc_opc);
8231 CHECKSUM (loc->dw_loc_oprnd1);
8232 CHECKSUM (loc->dw_loc_oprnd2);
8233 loc = loc->dw_loc_next;
8237 /* Calculate the checksum of an attribute. */
8239 static void
8240 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8241 struct md5_ctx *ctx, int *mark)
8243 dw_loc_descr_ref loc;
8244 rtx r;
8246 if (AT_class (at) == dw_val_class_die_ref)
8248 dw_die_ref target_die = AT_ref (at);
8250 /* For pointer and reference types, we checksum only the (qualified)
8251 name of the target type (if there is a name). For friend entries,
8252 we checksum only the (qualified) name of the target type or function.
8253 This allows the checksum to remain the same whether the target type
8254 is complete or not. */
8255 if ((at->dw_attr == DW_AT_type
8256 && (tag == DW_TAG_pointer_type
8257 || tag == DW_TAG_reference_type
8258 || tag == DW_TAG_ptr_to_member_type))
8259 || (at->dw_attr == DW_AT_friend
8260 && tag == DW_TAG_friend))
8262 dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8264 if (name_attr != NULL)
8266 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8268 if (decl == NULL)
8269 decl = target_die;
8270 CHECKSUM_ULEB128 ('N');
8271 CHECKSUM_ULEB128 (at->dw_attr);
8272 if (decl->die_parent != NULL)
8273 checksum_die_context (decl->die_parent, ctx);
8274 CHECKSUM_ULEB128 ('E');
8275 CHECKSUM_STRING (AT_string (name_attr));
8276 return;
8280 /* For all other references to another DIE, we check to see if the
8281 target DIE has already been visited. If it has, we emit a
8282 backward reference; if not, we descend recursively. */
8283 if (target_die->die_mark > 0)
8285 CHECKSUM_ULEB128 ('R');
8286 CHECKSUM_ULEB128 (at->dw_attr);
8287 CHECKSUM_ULEB128 (target_die->die_mark);
8289 else
8291 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8293 if (decl == NULL)
8294 decl = target_die;
8295 target_die->die_mark = ++(*mark);
8296 CHECKSUM_ULEB128 ('T');
8297 CHECKSUM_ULEB128 (at->dw_attr);
8298 if (decl->die_parent != NULL)
8299 checksum_die_context (decl->die_parent, ctx);
8300 die_checksum_ordered (target_die, ctx, mark);
8302 return;
8305 CHECKSUM_ULEB128 ('A');
8306 CHECKSUM_ULEB128 (at->dw_attr);
8308 switch (AT_class (at))
8310 case dw_val_class_const:
8311 CHECKSUM_ULEB128 (DW_FORM_sdata);
8312 CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8313 break;
8315 case dw_val_class_unsigned_const:
8316 CHECKSUM_ULEB128 (DW_FORM_sdata);
8317 CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8318 break;
8320 case dw_val_class_const_double:
8321 CHECKSUM_ULEB128 (DW_FORM_block);
8322 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8323 CHECKSUM (at->dw_attr_val.v.val_double);
8324 break;
8326 case dw_val_class_vec:
8327 CHECKSUM_ULEB128 (DW_FORM_block);
8328 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8329 CHECKSUM (at->dw_attr_val.v.val_vec);
8330 break;
8332 case dw_val_class_flag:
8333 CHECKSUM_ULEB128 (DW_FORM_flag);
8334 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8335 break;
8337 case dw_val_class_str:
8338 CHECKSUM_ULEB128 (DW_FORM_string);
8339 CHECKSUM_STRING (AT_string (at));
8340 break;
8342 case dw_val_class_addr:
8343 r = AT_addr (at);
8344 gcc_assert (GET_CODE (r) == SYMBOL_REF);
8345 CHECKSUM_ULEB128 (DW_FORM_string);
8346 CHECKSUM_STRING (XSTR (r, 0));
8347 break;
8349 case dw_val_class_offset:
8350 CHECKSUM_ULEB128 (DW_FORM_sdata);
8351 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8352 break;
8354 case dw_val_class_loc:
8355 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8356 loc_checksum_ordered (loc, ctx);
8357 break;
8359 case dw_val_class_fde_ref:
8360 case dw_val_class_lbl_id:
8361 case dw_val_class_lineptr:
8362 case dw_val_class_macptr:
8363 break;
8365 case dw_val_class_file:
8366 CHECKSUM_ULEB128 (DW_FORM_string);
8367 CHECKSUM_STRING (AT_file (at)->filename);
8368 break;
8370 case dw_val_class_data8:
8371 CHECKSUM (at->dw_attr_val.v.val_data8);
8372 break;
8374 default:
8375 break;
8379 struct checksum_attributes
8381 dw_attr_ref at_name;
8382 dw_attr_ref at_type;
8383 dw_attr_ref at_friend;
8384 dw_attr_ref at_accessibility;
8385 dw_attr_ref at_address_class;
8386 dw_attr_ref at_allocated;
8387 dw_attr_ref at_artificial;
8388 dw_attr_ref at_associated;
8389 dw_attr_ref at_binary_scale;
8390 dw_attr_ref at_bit_offset;
8391 dw_attr_ref at_bit_size;
8392 dw_attr_ref at_bit_stride;
8393 dw_attr_ref at_byte_size;
8394 dw_attr_ref at_byte_stride;
8395 dw_attr_ref at_const_value;
8396 dw_attr_ref at_containing_type;
8397 dw_attr_ref at_count;
8398 dw_attr_ref at_data_location;
8399 dw_attr_ref at_data_member_location;
8400 dw_attr_ref at_decimal_scale;
8401 dw_attr_ref at_decimal_sign;
8402 dw_attr_ref at_default_value;
8403 dw_attr_ref at_digit_count;
8404 dw_attr_ref at_discr;
8405 dw_attr_ref at_discr_list;
8406 dw_attr_ref at_discr_value;
8407 dw_attr_ref at_encoding;
8408 dw_attr_ref at_endianity;
8409 dw_attr_ref at_explicit;
8410 dw_attr_ref at_is_optional;
8411 dw_attr_ref at_location;
8412 dw_attr_ref at_lower_bound;
8413 dw_attr_ref at_mutable;
8414 dw_attr_ref at_ordering;
8415 dw_attr_ref at_picture_string;
8416 dw_attr_ref at_prototyped;
8417 dw_attr_ref at_small;
8418 dw_attr_ref at_segment;
8419 dw_attr_ref at_string_length;
8420 dw_attr_ref at_threads_scaled;
8421 dw_attr_ref at_upper_bound;
8422 dw_attr_ref at_use_location;
8423 dw_attr_ref at_use_UTF8;
8424 dw_attr_ref at_variable_parameter;
8425 dw_attr_ref at_virtuality;
8426 dw_attr_ref at_visibility;
8427 dw_attr_ref at_vtable_elem_location;
8430 /* Collect the attributes that we will want to use for the checksum. */
8432 static void
8433 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8435 dw_attr_ref a;
8436 unsigned ix;
8438 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8440 switch (a->dw_attr)
8442 case DW_AT_name:
8443 attrs->at_name = a;
8444 break;
8445 case DW_AT_type:
8446 attrs->at_type = a;
8447 break;
8448 case DW_AT_friend:
8449 attrs->at_friend = a;
8450 break;
8451 case DW_AT_accessibility:
8452 attrs->at_accessibility = a;
8453 break;
8454 case DW_AT_address_class:
8455 attrs->at_address_class = a;
8456 break;
8457 case DW_AT_allocated:
8458 attrs->at_allocated = a;
8459 break;
8460 case DW_AT_artificial:
8461 attrs->at_artificial = a;
8462 break;
8463 case DW_AT_associated:
8464 attrs->at_associated = a;
8465 break;
8466 case DW_AT_binary_scale:
8467 attrs->at_binary_scale = a;
8468 break;
8469 case DW_AT_bit_offset:
8470 attrs->at_bit_offset = a;
8471 break;
8472 case DW_AT_bit_size:
8473 attrs->at_bit_size = a;
8474 break;
8475 case DW_AT_bit_stride:
8476 attrs->at_bit_stride = a;
8477 break;
8478 case DW_AT_byte_size:
8479 attrs->at_byte_size = a;
8480 break;
8481 case DW_AT_byte_stride:
8482 attrs->at_byte_stride = a;
8483 break;
8484 case DW_AT_const_value:
8485 attrs->at_const_value = a;
8486 break;
8487 case DW_AT_containing_type:
8488 attrs->at_containing_type = a;
8489 break;
8490 case DW_AT_count:
8491 attrs->at_count = a;
8492 break;
8493 case DW_AT_data_location:
8494 attrs->at_data_location = a;
8495 break;
8496 case DW_AT_data_member_location:
8497 attrs->at_data_member_location = a;
8498 break;
8499 case DW_AT_decimal_scale:
8500 attrs->at_decimal_scale = a;
8501 break;
8502 case DW_AT_decimal_sign:
8503 attrs->at_decimal_sign = a;
8504 break;
8505 case DW_AT_default_value:
8506 attrs->at_default_value = a;
8507 break;
8508 case DW_AT_digit_count:
8509 attrs->at_digit_count = a;
8510 break;
8511 case DW_AT_discr:
8512 attrs->at_discr = a;
8513 break;
8514 case DW_AT_discr_list:
8515 attrs->at_discr_list = a;
8516 break;
8517 case DW_AT_discr_value:
8518 attrs->at_discr_value = a;
8519 break;
8520 case DW_AT_encoding:
8521 attrs->at_encoding = a;
8522 break;
8523 case DW_AT_endianity:
8524 attrs->at_endianity = a;
8525 break;
8526 case DW_AT_explicit:
8527 attrs->at_explicit = a;
8528 break;
8529 case DW_AT_is_optional:
8530 attrs->at_is_optional = a;
8531 break;
8532 case DW_AT_location:
8533 attrs->at_location = a;
8534 break;
8535 case DW_AT_lower_bound:
8536 attrs->at_lower_bound = a;
8537 break;
8538 case DW_AT_mutable:
8539 attrs->at_mutable = a;
8540 break;
8541 case DW_AT_ordering:
8542 attrs->at_ordering = a;
8543 break;
8544 case DW_AT_picture_string:
8545 attrs->at_picture_string = a;
8546 break;
8547 case DW_AT_prototyped:
8548 attrs->at_prototyped = a;
8549 break;
8550 case DW_AT_small:
8551 attrs->at_small = a;
8552 break;
8553 case DW_AT_segment:
8554 attrs->at_segment = a;
8555 break;
8556 case DW_AT_string_length:
8557 attrs->at_string_length = a;
8558 break;
8559 case DW_AT_threads_scaled:
8560 attrs->at_threads_scaled = a;
8561 break;
8562 case DW_AT_upper_bound:
8563 attrs->at_upper_bound = a;
8564 break;
8565 case DW_AT_use_location:
8566 attrs->at_use_location = a;
8567 break;
8568 case DW_AT_use_UTF8:
8569 attrs->at_use_UTF8 = a;
8570 break;
8571 case DW_AT_variable_parameter:
8572 attrs->at_variable_parameter = a;
8573 break;
8574 case DW_AT_virtuality:
8575 attrs->at_virtuality = a;
8576 break;
8577 case DW_AT_visibility:
8578 attrs->at_visibility = a;
8579 break;
8580 case DW_AT_vtable_elem_location:
8581 attrs->at_vtable_elem_location = a;
8582 break;
8583 default:
8584 break;
8589 /* Calculate the checksum of a DIE, using an ordered subset of attributes. */
8591 static void
8592 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8594 dw_die_ref c;
8595 dw_die_ref decl;
8596 struct checksum_attributes attrs;
8598 CHECKSUM_ULEB128 ('D');
8599 CHECKSUM_ULEB128 (die->die_tag);
8601 memset (&attrs, 0, sizeof (attrs));
8603 decl = get_AT_ref (die, DW_AT_specification);
8604 if (decl != NULL)
8605 collect_checksum_attributes (&attrs, decl);
8606 collect_checksum_attributes (&attrs, die);
8608 CHECKSUM_ATTR (attrs.at_name);
8609 CHECKSUM_ATTR (attrs.at_accessibility);
8610 CHECKSUM_ATTR (attrs.at_address_class);
8611 CHECKSUM_ATTR (attrs.at_allocated);
8612 CHECKSUM_ATTR (attrs.at_artificial);
8613 CHECKSUM_ATTR (attrs.at_associated);
8614 CHECKSUM_ATTR (attrs.at_binary_scale);
8615 CHECKSUM_ATTR (attrs.at_bit_offset);
8616 CHECKSUM_ATTR (attrs.at_bit_size);
8617 CHECKSUM_ATTR (attrs.at_bit_stride);
8618 CHECKSUM_ATTR (attrs.at_byte_size);
8619 CHECKSUM_ATTR (attrs.at_byte_stride);
8620 CHECKSUM_ATTR (attrs.at_const_value);
8621 CHECKSUM_ATTR (attrs.at_containing_type);
8622 CHECKSUM_ATTR (attrs.at_count);
8623 CHECKSUM_ATTR (attrs.at_data_location);
8624 CHECKSUM_ATTR (attrs.at_data_member_location);
8625 CHECKSUM_ATTR (attrs.at_decimal_scale);
8626 CHECKSUM_ATTR (attrs.at_decimal_sign);
8627 CHECKSUM_ATTR (attrs.at_default_value);
8628 CHECKSUM_ATTR (attrs.at_digit_count);
8629 CHECKSUM_ATTR (attrs.at_discr);
8630 CHECKSUM_ATTR (attrs.at_discr_list);
8631 CHECKSUM_ATTR (attrs.at_discr_value);
8632 CHECKSUM_ATTR (attrs.at_encoding);
8633 CHECKSUM_ATTR (attrs.at_endianity);
8634 CHECKSUM_ATTR (attrs.at_explicit);
8635 CHECKSUM_ATTR (attrs.at_is_optional);
8636 CHECKSUM_ATTR (attrs.at_location);
8637 CHECKSUM_ATTR (attrs.at_lower_bound);
8638 CHECKSUM_ATTR (attrs.at_mutable);
8639 CHECKSUM_ATTR (attrs.at_ordering);
8640 CHECKSUM_ATTR (attrs.at_picture_string);
8641 CHECKSUM_ATTR (attrs.at_prototyped);
8642 CHECKSUM_ATTR (attrs.at_small);
8643 CHECKSUM_ATTR (attrs.at_segment);
8644 CHECKSUM_ATTR (attrs.at_string_length);
8645 CHECKSUM_ATTR (attrs.at_threads_scaled);
8646 CHECKSUM_ATTR (attrs.at_upper_bound);
8647 CHECKSUM_ATTR (attrs.at_use_location);
8648 CHECKSUM_ATTR (attrs.at_use_UTF8);
8649 CHECKSUM_ATTR (attrs.at_variable_parameter);
8650 CHECKSUM_ATTR (attrs.at_virtuality);
8651 CHECKSUM_ATTR (attrs.at_visibility);
8652 CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8653 CHECKSUM_ATTR (attrs.at_type);
8654 CHECKSUM_ATTR (attrs.at_friend);
8656 /* Checksum the child DIEs, except for nested types and member functions. */
8657 c = die->die_child;
8658 if (c) do {
8659 dw_attr_ref name_attr;
8661 c = c->die_sib;
8662 name_attr = get_AT (c, DW_AT_name);
8663 if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8664 && name_attr != NULL)
8666 CHECKSUM_ULEB128 ('S');
8667 CHECKSUM_ULEB128 (c->die_tag);
8668 CHECKSUM_STRING (AT_string (name_attr));
8670 else
8672 /* Mark this DIE so it gets processed when unmarking. */
8673 if (c->die_mark == 0)
8674 c->die_mark = -1;
8675 die_checksum_ordered (c, ctx, mark);
8677 } while (c != die->die_child);
8679 CHECKSUM_ULEB128 (0);
8682 #undef CHECKSUM
8683 #undef CHECKSUM_STRING
8684 #undef CHECKSUM_ATTR
8685 #undef CHECKSUM_LEB128
8686 #undef CHECKSUM_ULEB128
8688 /* Generate the type signature for DIE. This is computed by generating an
8689 MD5 checksum over the DIE's tag, its relevant attributes, and its
8690 children. Attributes that are references to other DIEs are processed
8691 by recursion, using the MARK field to prevent infinite recursion.
8692 If the DIE is nested inside a namespace or another type, we also
8693 need to include that context in the signature. The lower 64 bits
8694 of the resulting MD5 checksum comprise the signature. */
8696 static void
8697 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8699 int mark;
8700 const char *name;
8701 unsigned char checksum[16];
8702 struct md5_ctx ctx;
8703 dw_die_ref decl;
8705 name = get_AT_string (die, DW_AT_name);
8706 decl = get_AT_ref (die, DW_AT_specification);
8708 /* First, compute a signature for just the type name (and its surrounding
8709 context, if any. This is stored in the type unit DIE for link-time
8710 ODR (one-definition rule) checking. */
8712 if (is_cxx() && name != NULL)
8714 md5_init_ctx (&ctx);
8716 /* Checksum the names of surrounding namespaces and structures. */
8717 if (decl != NULL && decl->die_parent != NULL)
8718 checksum_die_context (decl->die_parent, &ctx);
8720 md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8721 md5_process_bytes (name, strlen (name) + 1, &ctx);
8722 md5_finish_ctx (&ctx, checksum);
8724 add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8727 /* Next, compute the complete type signature. */
8729 md5_init_ctx (&ctx);
8730 mark = 1;
8731 die->die_mark = mark;
8733 /* Checksum the names of surrounding namespaces and structures. */
8734 if (decl != NULL && decl->die_parent != NULL)
8735 checksum_die_context (decl->die_parent, &ctx);
8737 /* Checksum the DIE and its children. */
8738 die_checksum_ordered (die, &ctx, &mark);
8739 unmark_all_dies (die);
8740 md5_finish_ctx (&ctx, checksum);
8742 /* Store the signature in the type node and link the type DIE and the
8743 type node together. */
8744 memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8745 DWARF_TYPE_SIGNATURE_SIZE);
8746 die->die_id.die_type_node = type_node;
8747 type_node->type_die = die;
8749 /* If the DIE is a specification, link its declaration to the type node
8750 as well. */
8751 if (decl != NULL)
8752 decl->die_id.die_type_node = type_node;
8755 /* Do the location expressions look same? */
8756 static inline int
8757 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8759 return loc1->dw_loc_opc == loc2->dw_loc_opc
8760 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8761 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8764 /* Do the values look the same? */
8765 static int
8766 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8768 dw_loc_descr_ref loc1, loc2;
8769 rtx r1, r2;
8771 if (v1->val_class != v2->val_class)
8772 return 0;
8774 switch (v1->val_class)
8776 case dw_val_class_const:
8777 return v1->v.val_int == v2->v.val_int;
8778 case dw_val_class_unsigned_const:
8779 return v1->v.val_unsigned == v2->v.val_unsigned;
8780 case dw_val_class_const_double:
8781 return v1->v.val_double.high == v2->v.val_double.high
8782 && v1->v.val_double.low == v2->v.val_double.low;
8783 case dw_val_class_vec:
8784 if (v1->v.val_vec.length != v2->v.val_vec.length
8785 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8786 return 0;
8787 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8788 v1->v.val_vec.length * v1->v.val_vec.elt_size))
8789 return 0;
8790 return 1;
8791 case dw_val_class_flag:
8792 return v1->v.val_flag == v2->v.val_flag;
8793 case dw_val_class_str:
8794 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8796 case dw_val_class_addr:
8797 r1 = v1->v.val_addr;
8798 r2 = v2->v.val_addr;
8799 if (GET_CODE (r1) != GET_CODE (r2))
8800 return 0;
8801 return !rtx_equal_p (r1, r2);
8803 case dw_val_class_offset:
8804 return v1->v.val_offset == v2->v.val_offset;
8806 case dw_val_class_loc:
8807 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8808 loc1 && loc2;
8809 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8810 if (!same_loc_p (loc1, loc2, mark))
8811 return 0;
8812 return !loc1 && !loc2;
8814 case dw_val_class_die_ref:
8815 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8817 case dw_val_class_fde_ref:
8818 case dw_val_class_lbl_id:
8819 case dw_val_class_lineptr:
8820 case dw_val_class_macptr:
8821 return 1;
8823 case dw_val_class_file:
8824 return v1->v.val_file == v2->v.val_file;
8826 case dw_val_class_data8:
8827 return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8829 default:
8830 return 1;
8834 /* Do the attributes look the same? */
8836 static int
8837 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8839 if (at1->dw_attr != at2->dw_attr)
8840 return 0;
8842 /* We don't care that this was compiled with a different compiler
8843 snapshot; if the output is the same, that's what matters. */
8844 if (at1->dw_attr == DW_AT_producer)
8845 return 1;
8847 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8850 /* Do the dies look the same? */
8852 static int
8853 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8855 dw_die_ref c1, c2;
8856 dw_attr_ref a1;
8857 unsigned ix;
8859 /* To avoid infinite recursion. */
8860 if (die1->die_mark)
8861 return die1->die_mark == die2->die_mark;
8862 die1->die_mark = die2->die_mark = ++(*mark);
8864 if (die1->die_tag != die2->die_tag)
8865 return 0;
8867 if (VEC_length (dw_attr_node, die1->die_attr)
8868 != VEC_length (dw_attr_node, die2->die_attr))
8869 return 0;
8871 for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8872 if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8873 return 0;
8875 c1 = die1->die_child;
8876 c2 = die2->die_child;
8877 if (! c1)
8879 if (c2)
8880 return 0;
8882 else
8883 for (;;)
8885 if (!same_die_p (c1, c2, mark))
8886 return 0;
8887 c1 = c1->die_sib;
8888 c2 = c2->die_sib;
8889 if (c1 == die1->die_child)
8891 if (c2 == die2->die_child)
8892 break;
8893 else
8894 return 0;
8898 return 1;
8901 /* Do the dies look the same? Wrapper around same_die_p. */
8903 static int
8904 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8906 int mark = 0;
8907 int ret = same_die_p (die1, die2, &mark);
8909 unmark_all_dies (die1);
8910 unmark_all_dies (die2);
8912 return ret;
8915 /* The prefix to attach to symbols on DIEs in the current comdat debug
8916 info section. */
8917 static char *comdat_symbol_id;
8919 /* The index of the current symbol within the current comdat CU. */
8920 static unsigned int comdat_symbol_number;
8922 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8923 children, and set comdat_symbol_id accordingly. */
8925 static void
8926 compute_section_prefix (dw_die_ref unit_die)
8928 const char *die_name = get_AT_string (unit_die, DW_AT_name);
8929 const char *base = die_name ? lbasename (die_name) : "anonymous";
8930 char *name = XALLOCAVEC (char, strlen (base) + 64);
8931 char *p;
8932 int i, mark;
8933 unsigned char checksum[16];
8934 struct md5_ctx ctx;
8936 /* Compute the checksum of the DIE, then append part of it as hex digits to
8937 the name filename of the unit. */
8939 md5_init_ctx (&ctx);
8940 mark = 0;
8941 die_checksum (unit_die, &ctx, &mark);
8942 unmark_all_dies (unit_die);
8943 md5_finish_ctx (&ctx, checksum);
8945 sprintf (name, "%s.", base);
8946 clean_symbol_name (name);
8948 p = name + strlen (name);
8949 for (i = 0; i < 4; i++)
8951 sprintf (p, "%.2x", checksum[i]);
8952 p += 2;
8955 comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8956 comdat_symbol_number = 0;
8959 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
8961 static int
8962 is_type_die (dw_die_ref die)
8964 switch (die->die_tag)
8966 case DW_TAG_array_type:
8967 case DW_TAG_class_type:
8968 case DW_TAG_interface_type:
8969 case DW_TAG_enumeration_type:
8970 case DW_TAG_pointer_type:
8971 case DW_TAG_reference_type:
8972 case DW_TAG_string_type:
8973 case DW_TAG_structure_type:
8974 case DW_TAG_subroutine_type:
8975 case DW_TAG_union_type:
8976 case DW_TAG_ptr_to_member_type:
8977 case DW_TAG_set_type:
8978 case DW_TAG_subrange_type:
8979 case DW_TAG_base_type:
8980 case DW_TAG_const_type:
8981 case DW_TAG_file_type:
8982 case DW_TAG_packed_type:
8983 case DW_TAG_volatile_type:
8984 case DW_TAG_typedef:
8985 return 1;
8986 default:
8987 return 0;
8991 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
8992 Basically, we want to choose the bits that are likely to be shared between
8993 compilations (types) and leave out the bits that are specific to individual
8994 compilations (functions). */
8996 static int
8997 is_comdat_die (dw_die_ref c)
8999 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9000 we do for stabs. The advantage is a greater likelihood of sharing between
9001 objects that don't include headers in the same order (and therefore would
9002 put the base types in a different comdat). jason 8/28/00 */
9004 if (c->die_tag == DW_TAG_base_type)
9005 return 0;
9007 if (c->die_tag == DW_TAG_pointer_type
9008 || c->die_tag == DW_TAG_reference_type
9009 || c->die_tag == DW_TAG_const_type
9010 || c->die_tag == DW_TAG_volatile_type)
9012 dw_die_ref t = get_AT_ref (c, DW_AT_type);
9014 return t ? is_comdat_die (t) : 0;
9017 return is_type_die (c);
9020 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9021 compilation unit. */
9023 static int
9024 is_symbol_die (dw_die_ref c)
9026 return (is_type_die (c)
9027 || is_declaration_die (c)
9028 || c->die_tag == DW_TAG_namespace
9029 || c->die_tag == DW_TAG_module);
9032 static char *
9033 gen_internal_sym (const char *prefix)
9035 char buf[256];
9037 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9038 return xstrdup (buf);
9041 /* Assign symbols to all worthy DIEs under DIE. */
9043 static void
9044 assign_symbol_names (dw_die_ref die)
9046 dw_die_ref c;
9048 if (is_symbol_die (die))
9050 if (comdat_symbol_id)
9052 char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9054 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9055 comdat_symbol_id, comdat_symbol_number++);
9056 die->die_id.die_symbol = xstrdup (p);
9058 else
9059 die->die_id.die_symbol = gen_internal_sym ("LDIE");
9062 FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9065 struct cu_hash_table_entry
9067 dw_die_ref cu;
9068 unsigned min_comdat_num, max_comdat_num;
9069 struct cu_hash_table_entry *next;
9072 /* Routines to manipulate hash table of CUs. */
9073 static hashval_t
9074 htab_cu_hash (const void *of)
9076 const struct cu_hash_table_entry *const entry =
9077 (const struct cu_hash_table_entry *) of;
9079 return htab_hash_string (entry->cu->die_id.die_symbol);
9082 static int
9083 htab_cu_eq (const void *of1, const void *of2)
9085 const struct cu_hash_table_entry *const entry1 =
9086 (const struct cu_hash_table_entry *) of1;
9087 const struct die_struct *const entry2 = (const struct die_struct *) of2;
9089 return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9092 static void
9093 htab_cu_del (void *what)
9095 struct cu_hash_table_entry *next,
9096 *entry = (struct cu_hash_table_entry *) what;
9098 while (entry)
9100 next = entry->next;
9101 free (entry);
9102 entry = next;
9106 /* Check whether we have already seen this CU and set up SYM_NUM
9107 accordingly. */
9108 static int
9109 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9111 struct cu_hash_table_entry dummy;
9112 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9114 dummy.max_comdat_num = 0;
9116 slot = (struct cu_hash_table_entry **)
9117 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9118 INSERT);
9119 entry = *slot;
9121 for (; entry; last = entry, entry = entry->next)
9123 if (same_die_p_wrap (cu, entry->cu))
9124 break;
9127 if (entry)
9129 *sym_num = entry->min_comdat_num;
9130 return 1;
9133 entry = XCNEW (struct cu_hash_table_entry);
9134 entry->cu = cu;
9135 entry->min_comdat_num = *sym_num = last->max_comdat_num;
9136 entry->next = *slot;
9137 *slot = entry;
9139 return 0;
9142 /* Record SYM_NUM to record of CU in HTABLE. */
9143 static void
9144 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9146 struct cu_hash_table_entry **slot, *entry;
9148 slot = (struct cu_hash_table_entry **)
9149 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9150 NO_INSERT);
9151 entry = *slot;
9153 entry->max_comdat_num = sym_num;
9156 /* Traverse the DIE (which is always comp_unit_die), and set up
9157 additional compilation units for each of the include files we see
9158 bracketed by BINCL/EINCL. */
9160 static void
9161 break_out_includes (dw_die_ref die)
9163 dw_die_ref c;
9164 dw_die_ref unit = NULL;
9165 limbo_die_node *node, **pnode;
9166 htab_t cu_hash_table;
9168 c = die->die_child;
9169 if (c) do {
9170 dw_die_ref prev = c;
9171 c = c->die_sib;
9172 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9173 || (unit && is_comdat_die (c)))
9175 dw_die_ref next = c->die_sib;
9177 /* This DIE is for a secondary CU; remove it from the main one. */
9178 remove_child_with_prev (c, prev);
9180 if (c->die_tag == DW_TAG_GNU_BINCL)
9181 unit = push_new_compile_unit (unit, c);
9182 else if (c->die_tag == DW_TAG_GNU_EINCL)
9183 unit = pop_compile_unit (unit);
9184 else
9185 add_child_die (unit, c);
9186 c = next;
9187 if (c == die->die_child)
9188 break;
9190 } while (c != die->die_child);
9192 #if 0
9193 /* We can only use this in debugging, since the frontend doesn't check
9194 to make sure that we leave every include file we enter. */
9195 gcc_assert (!unit);
9196 #endif
9198 assign_symbol_names (die);
9199 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9200 for (node = limbo_die_list, pnode = &limbo_die_list;
9201 node;
9202 node = node->next)
9204 int is_dupl;
9206 compute_section_prefix (node->die);
9207 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9208 &comdat_symbol_number);
9209 assign_symbol_names (node->die);
9210 if (is_dupl)
9211 *pnode = node->next;
9212 else
9214 pnode = &node->next;
9215 record_comdat_symbol_number (node->die, cu_hash_table,
9216 comdat_symbol_number);
9219 htab_delete (cu_hash_table);
9222 /* Return non-zero if this DIE is a declaration. */
9224 static int
9225 is_declaration_die (dw_die_ref die)
9227 dw_attr_ref a;
9228 unsigned ix;
9230 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9231 if (a->dw_attr == DW_AT_declaration)
9232 return 1;
9234 return 0;
9237 /* Return non-zero if this is a type DIE that should be moved to a
9238 COMDAT .debug_types section. */
9240 static int
9241 should_move_die_to_comdat (dw_die_ref die)
9243 switch (die->die_tag)
9245 case DW_TAG_class_type:
9246 case DW_TAG_structure_type:
9247 case DW_TAG_enumeration_type:
9248 case DW_TAG_union_type:
9249 /* Don't move declarations or inlined instances. */
9250 if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9251 return 0;
9252 return 1;
9253 case DW_TAG_array_type:
9254 case DW_TAG_interface_type:
9255 case DW_TAG_pointer_type:
9256 case DW_TAG_reference_type:
9257 case DW_TAG_string_type:
9258 case DW_TAG_subroutine_type:
9259 case DW_TAG_ptr_to_member_type:
9260 case DW_TAG_set_type:
9261 case DW_TAG_subrange_type:
9262 case DW_TAG_base_type:
9263 case DW_TAG_const_type:
9264 case DW_TAG_file_type:
9265 case DW_TAG_packed_type:
9266 case DW_TAG_volatile_type:
9267 case DW_TAG_typedef:
9268 default:
9269 return 0;
9273 /* Make a clone of DIE. */
9275 static dw_die_ref
9276 clone_die (dw_die_ref die)
9278 dw_die_ref clone;
9279 dw_attr_ref a;
9280 unsigned ix;
9282 clone = GGC_CNEW (die_node);
9283 clone->die_tag = die->die_tag;
9285 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9286 add_dwarf_attr (clone, a);
9288 return clone;
9291 /* Make a clone of the tree rooted at DIE. */
9293 static dw_die_ref
9294 clone_tree (dw_die_ref die)
9296 dw_die_ref c;
9297 dw_die_ref clone = clone_die (die);
9299 FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9301 return clone;
9304 /* Make a clone of DIE as a declaration. */
9306 static dw_die_ref
9307 clone_as_declaration (dw_die_ref die)
9309 dw_die_ref clone;
9310 dw_die_ref decl;
9311 dw_attr_ref a;
9312 unsigned ix;
9314 /* If the DIE is already a declaration, just clone it. */
9315 if (is_declaration_die (die))
9316 return clone_die (die);
9318 /* If the DIE is a specification, just clone its declaration DIE. */
9319 decl = get_AT_ref (die, DW_AT_specification);
9320 if (decl != NULL)
9321 return clone_die (decl);
9323 clone = GGC_CNEW (die_node);
9324 clone->die_tag = die->die_tag;
9326 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9328 /* We don't want to copy over all attributes.
9329 For example we don't want DW_AT_byte_size because otherwise we will no
9330 longer have a declaration and GDB will treat it as a definition. */
9332 switch (a->dw_attr)
9334 case DW_AT_artificial:
9335 case DW_AT_containing_type:
9336 case DW_AT_external:
9337 case DW_AT_name:
9338 case DW_AT_type:
9339 case DW_AT_virtuality:
9340 case DW_AT_MIPS_linkage_name:
9341 add_dwarf_attr (clone, a);
9342 break;
9343 case DW_AT_byte_size:
9344 default:
9345 break;
9349 if (die->die_id.die_type_node)
9350 add_AT_die_ref (clone, DW_AT_signature, die);
9352 add_AT_flag (clone, DW_AT_declaration, 1);
9353 return clone;
9356 /* Copy the declaration context to the new compile unit DIE. This includes
9357 any surrounding namespace or type declarations. If the DIE has an
9358 AT_specification attribute, it also includes attributes and children
9359 attached to the specification. */
9361 static void
9362 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9364 dw_die_ref decl;
9365 dw_die_ref new_decl;
9367 decl = get_AT_ref (die, DW_AT_specification);
9368 if (decl == NULL)
9369 decl = die;
9370 else
9372 unsigned ix;
9373 dw_die_ref c;
9374 dw_attr_ref a;
9376 /* Copy the type node pointer from the new DIE to the original
9377 declaration DIE so we can forward references later. */
9378 decl->die_id.die_type_node = die->die_id.die_type_node;
9380 remove_AT (die, DW_AT_specification);
9382 for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9384 if (a->dw_attr != DW_AT_name
9385 && a->dw_attr != DW_AT_declaration
9386 && a->dw_attr != DW_AT_external)
9387 add_dwarf_attr (die, a);
9390 FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9393 if (decl->die_parent != NULL
9394 && decl->die_parent->die_tag != DW_TAG_compile_unit
9395 && decl->die_parent->die_tag != DW_TAG_type_unit)
9397 new_decl = copy_ancestor_tree (unit, decl, NULL);
9398 if (new_decl != NULL)
9400 remove_AT (new_decl, DW_AT_signature);
9401 add_AT_specification (die, new_decl);
9406 /* Generate the skeleton ancestor tree for the given NODE, then clone
9407 the DIE and add the clone into the tree. */
9409 static void
9410 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9412 if (node->new_die != NULL)
9413 return;
9415 node->new_die = clone_as_declaration (node->old_die);
9417 if (node->parent != NULL)
9419 generate_skeleton_ancestor_tree (node->parent);
9420 add_child_die (node->parent->new_die, node->new_die);
9424 /* Generate a skeleton tree of DIEs containing any declarations that are
9425 found in the original tree. We traverse the tree looking for declaration
9426 DIEs, and construct the skeleton from the bottom up whenever we find one. */
9428 static void
9429 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9431 skeleton_chain_node node;
9432 dw_die_ref c;
9433 dw_die_ref first;
9434 dw_die_ref prev = NULL;
9435 dw_die_ref next = NULL;
9437 node.parent = parent;
9439 first = c = parent->old_die->die_child;
9440 if (c)
9441 next = c->die_sib;
9442 if (c) do {
9443 if (prev == NULL || prev->die_sib == c)
9444 prev = c;
9445 c = next;
9446 next = (c == first ? NULL : c->die_sib);
9447 node.old_die = c;
9448 node.new_die = NULL;
9449 if (is_declaration_die (c))
9451 /* Clone the existing DIE, move the original to the skeleton
9452 tree (which is in the main CU), and put the clone, with
9453 all the original's children, where the original came from. */
9454 dw_die_ref clone = clone_die (c);
9455 move_all_children (c, clone);
9457 replace_child (c, clone, prev);
9458 generate_skeleton_ancestor_tree (parent);
9459 add_child_die (parent->new_die, c);
9460 node.new_die = c;
9461 c = clone;
9463 generate_skeleton_bottom_up (&node);
9464 } while (next != NULL);
9467 /* Wrapper function for generate_skeleton_bottom_up. */
9469 static dw_die_ref
9470 generate_skeleton (dw_die_ref die)
9472 skeleton_chain_node node;
9474 node.old_die = die;
9475 node.new_die = NULL;
9476 node.parent = NULL;
9478 /* If this type definition is nested inside another type,
9479 always leave at least a declaration in its place. */
9480 if (die->die_parent != NULL && is_type_die (die->die_parent))
9481 node.new_die = clone_as_declaration (die);
9483 generate_skeleton_bottom_up (&node);
9484 return node.new_die;
9487 /* Remove the DIE from its parent, possibly replacing it with a cloned
9488 declaration. The original DIE will be moved to a new compile unit
9489 so that existing references to it follow it to the new location. If
9490 any of the original DIE's descendants is a declaration, we need to
9491 replace the original DIE with a skeleton tree and move the
9492 declarations back into the skeleton tree. */
9494 static dw_die_ref
9495 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9497 dw_die_ref skeleton;
9499 skeleton = generate_skeleton (child);
9500 if (skeleton == NULL)
9501 remove_child_with_prev (child, prev);
9502 else
9504 skeleton->die_id.die_type_node = child->die_id.die_type_node;
9505 replace_child (child, skeleton, prev);
9508 return skeleton;
9511 /* Traverse the DIE and set up additional .debug_types sections for each
9512 type worthy of being placed in a COMDAT section. */
9514 static void
9515 break_out_comdat_types (dw_die_ref die)
9517 dw_die_ref c;
9518 dw_die_ref first;
9519 dw_die_ref prev = NULL;
9520 dw_die_ref next = NULL;
9521 dw_die_ref unit = NULL;
9523 first = c = die->die_child;
9524 if (c)
9525 next = c->die_sib;
9526 if (c) do {
9527 if (prev == NULL || prev->die_sib == c)
9528 prev = c;
9529 c = next;
9530 next = (c == first ? NULL : c->die_sib);
9531 if (should_move_die_to_comdat (c))
9533 dw_die_ref replacement;
9534 comdat_type_node_ref type_node;
9536 /* Create a new type unit DIE as the root for the new tree, and
9537 add it to the list of comdat types. */
9538 unit = new_die (DW_TAG_type_unit, NULL, NULL);
9539 add_AT_unsigned (unit, DW_AT_language,
9540 get_AT_unsigned (comp_unit_die, DW_AT_language));
9541 type_node = GGC_CNEW (comdat_type_node);
9542 type_node->root_die = unit;
9543 type_node->next = comdat_type_list;
9544 comdat_type_list = type_node;
9546 /* Generate the type signature. */
9547 generate_type_signature (c, type_node);
9549 /* Copy the declaration context, attributes, and children of the
9550 declaration into the new compile unit DIE. */
9551 copy_declaration_context (unit, c);
9553 /* Remove this DIE from the main CU. */
9554 replacement = remove_child_or_replace_with_skeleton (c, prev);
9556 /* Break out nested types into their own type units. */
9557 break_out_comdat_types (c);
9559 /* Add the DIE to the new compunit. */
9560 add_child_die (unit, c);
9562 if (replacement != NULL)
9563 c = replacement;
9565 else if (c->die_tag == DW_TAG_namespace
9566 || c->die_tag == DW_TAG_class_type
9567 || c->die_tag == DW_TAG_structure_type
9568 || c->die_tag == DW_TAG_union_type)
9570 /* Look for nested types that can be broken out. */
9571 break_out_comdat_types (c);
9573 } while (next != NULL);
9576 /* Structure to map a DIE in one CU to its copy in a comdat type unit. */
9578 struct decl_table_entry
9580 dw_die_ref orig;
9581 dw_die_ref copy;
9584 /* Routines to manipulate hash table of copied declarations. */
9586 static hashval_t
9587 htab_decl_hash (const void *of)
9589 const struct decl_table_entry *const entry =
9590 (const struct decl_table_entry *) of;
9592 return htab_hash_pointer (entry->orig);
9595 static int
9596 htab_decl_eq (const void *of1, const void *of2)
9598 const struct decl_table_entry *const entry1 =
9599 (const struct decl_table_entry *) of1;
9600 const struct die_struct *const entry2 = (const struct die_struct *) of2;
9602 return entry1->orig == entry2;
9605 static void
9606 htab_decl_del (void *what)
9608 struct decl_table_entry *entry = (struct decl_table_entry *) what;
9610 free (entry);
9613 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9614 or type unit entry, to a new tree. Adds the new tree to UNIT and returns
9615 a pointer to the copy of DIE. If DECL_TABLE is provided, it is used
9616 to check if the ancestor has already been copied into UNIT. */
9618 static dw_die_ref
9619 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9621 dw_die_ref parent = die->die_parent;
9622 dw_die_ref new_parent = unit;
9623 dw_die_ref copy;
9624 void **slot = NULL;
9625 struct decl_table_entry *entry = NULL;
9627 if (decl_table)
9629 /* Check if the entry has already been copied to UNIT. */
9630 slot = htab_find_slot_with_hash (decl_table, die,
9631 htab_hash_pointer (die), INSERT);
9632 if (*slot != HTAB_EMPTY_ENTRY)
9634 entry = (struct decl_table_entry *) *slot;
9635 return entry->copy;
9638 /* Record in DECL_TABLE that DIE has been copied to UNIT. */
9639 entry = XCNEW (struct decl_table_entry);
9640 entry->orig = die;
9641 entry->copy = NULL;
9642 *slot = entry;
9645 if (parent != NULL)
9647 dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9648 if (spec != NULL)
9649 parent = spec;
9650 if (parent->die_tag != DW_TAG_compile_unit
9651 && parent->die_tag != DW_TAG_type_unit)
9652 new_parent = copy_ancestor_tree (unit, parent, decl_table);
9655 copy = clone_as_declaration (die);
9656 add_child_die (new_parent, copy);
9658 if (decl_table != NULL)
9660 /* Make sure the copy is marked as part of the type unit. */
9661 copy->die_mark = 1;
9662 /* Record the pointer to the copy. */
9663 entry->copy = copy;
9666 return copy;
9669 /* Walk the DIE and its children, looking for references to incomplete
9670 or trivial types that are unmarked (i.e., that are not in the current
9671 type_unit). */
9673 static void
9674 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9676 dw_die_ref c;
9677 dw_attr_ref a;
9678 unsigned ix;
9680 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9682 if (AT_class (a) == dw_val_class_die_ref)
9684 dw_die_ref targ = AT_ref (a);
9685 comdat_type_node_ref type_node = targ->die_id.die_type_node;
9686 void **slot;
9687 struct decl_table_entry *entry;
9689 if (targ->die_mark != 0 || type_node != NULL)
9690 continue;
9692 slot = htab_find_slot_with_hash (decl_table, targ,
9693 htab_hash_pointer (targ), INSERT);
9695 if (*slot != HTAB_EMPTY_ENTRY)
9697 /* TARG has already been copied, so we just need to
9698 modify the reference to point to the copy. */
9699 entry = (struct decl_table_entry *) *slot;
9700 a->dw_attr_val.v.val_die_ref.die = entry->copy;
9702 else
9704 dw_die_ref parent = unit;
9705 dw_die_ref copy = clone_tree (targ);
9707 /* Make sure the cloned tree is marked as part of the
9708 type unit. */
9709 mark_dies (copy);
9711 /* Record in DECL_TABLE that TARG has been copied.
9712 Need to do this now, before the recursive call,
9713 because DECL_TABLE may be expanded and SLOT
9714 would no longer be a valid pointer. */
9715 entry = XCNEW (struct decl_table_entry);
9716 entry->orig = targ;
9717 entry->copy = copy;
9718 *slot = entry;
9720 /* If TARG has surrounding context, copy its ancestor tree
9721 into the new type unit. */
9722 if (targ->die_parent != NULL
9723 && targ->die_parent->die_tag != DW_TAG_compile_unit
9724 && targ->die_parent->die_tag != DW_TAG_type_unit)
9725 parent = copy_ancestor_tree (unit, targ->die_parent,
9726 decl_table);
9728 add_child_die (parent, copy);
9729 a->dw_attr_val.v.val_die_ref.die = copy;
9731 /* Make sure the newly-copied DIE is walked. If it was
9732 installed in a previously-added context, it won't
9733 get visited otherwise. */
9734 if (parent != unit)
9735 copy_decls_walk (unit, parent, decl_table);
9740 FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9743 /* Copy declarations for "unworthy" types into the new comdat section.
9744 Incomplete types, modified types, and certain other types aren't broken
9745 out into comdat sections of their own, so they don't have a signature,
9746 and we need to copy the declaration into the same section so that we
9747 don't have an external reference. */
9749 static void
9750 copy_decls_for_unworthy_types (dw_die_ref unit)
9752 htab_t decl_table;
9754 mark_dies (unit);
9755 decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9756 copy_decls_walk (unit, unit, decl_table);
9757 htab_delete (decl_table);
9758 unmark_dies (unit);
9761 /* Traverse the DIE and add a sibling attribute if it may have the
9762 effect of speeding up access to siblings. To save some space,
9763 avoid generating sibling attributes for DIE's without children. */
9765 static void
9766 add_sibling_attributes (dw_die_ref die)
9768 dw_die_ref c;
9770 if (! die->die_child)
9771 return;
9773 if (die->die_parent && die != die->die_parent->die_child)
9774 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9776 FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9779 /* Output all location lists for the DIE and its children. */
9781 static void
9782 output_location_lists (dw_die_ref die)
9784 dw_die_ref c;
9785 dw_attr_ref a;
9786 unsigned ix;
9788 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9789 if (AT_class (a) == dw_val_class_loc_list)
9790 output_loc_list (AT_loc_list (a));
9792 FOR_EACH_CHILD (die, c, output_location_lists (c));
9795 /* The format of each DIE (and its attribute value pairs) is encoded in an
9796 abbreviation table. This routine builds the abbreviation table and assigns
9797 a unique abbreviation id for each abbreviation entry. The children of each
9798 die are visited recursively. */
9800 static void
9801 build_abbrev_table (dw_die_ref die)
9803 unsigned long abbrev_id;
9804 unsigned int n_alloc;
9805 dw_die_ref c;
9806 dw_attr_ref a;
9807 unsigned ix;
9809 /* Scan the DIE references, and mark as external any that refer to
9810 DIEs from other CUs (i.e. those which are not marked). */
9811 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9812 if (AT_class (a) == dw_val_class_die_ref
9813 && AT_ref (a)->die_mark == 0)
9815 gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9816 set_AT_ref_external (a, 1);
9819 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9821 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9822 dw_attr_ref die_a, abbrev_a;
9823 unsigned ix;
9824 bool ok = true;
9826 if (abbrev->die_tag != die->die_tag)
9827 continue;
9828 if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9829 continue;
9831 if (VEC_length (dw_attr_node, abbrev->die_attr)
9832 != VEC_length (dw_attr_node, die->die_attr))
9833 continue;
9835 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9837 abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9838 if ((abbrev_a->dw_attr != die_a->dw_attr)
9839 || (value_format (abbrev_a) != value_format (die_a)))
9841 ok = false;
9842 break;
9845 if (ok)
9846 break;
9849 if (abbrev_id >= abbrev_die_table_in_use)
9851 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9853 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9854 abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9855 n_alloc);
9857 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9858 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9859 abbrev_die_table_allocated = n_alloc;
9862 ++abbrev_die_table_in_use;
9863 abbrev_die_table[abbrev_id] = die;
9866 die->die_abbrev = abbrev_id;
9867 FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9870 /* Return the power-of-two number of bytes necessary to represent VALUE. */
9872 static int
9873 constant_size (unsigned HOST_WIDE_INT value)
9875 int log;
9877 if (value == 0)
9878 log = 0;
9879 else
9880 log = floor_log2 (value);
9882 log = log / 8;
9883 log = 1 << (floor_log2 (log) + 1);
9885 return log;
9888 /* Return the size of a DIE as it is represented in the
9889 .debug_info section. */
9891 static unsigned long
9892 size_of_die (dw_die_ref die)
9894 unsigned long size = 0;
9895 dw_attr_ref a;
9896 unsigned ix;
9898 size += size_of_uleb128 (die->die_abbrev);
9899 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9901 switch (AT_class (a))
9903 case dw_val_class_addr:
9904 size += DWARF2_ADDR_SIZE;
9905 break;
9906 case dw_val_class_offset:
9907 size += DWARF_OFFSET_SIZE;
9908 break;
9909 case dw_val_class_loc:
9911 unsigned long lsize = size_of_locs (AT_loc (a));
9913 /* Block length. */
9914 size += constant_size (lsize);
9915 size += lsize;
9917 break;
9918 case dw_val_class_loc_list:
9919 size += DWARF_OFFSET_SIZE;
9920 break;
9921 case dw_val_class_range_list:
9922 size += DWARF_OFFSET_SIZE;
9923 break;
9924 case dw_val_class_const:
9925 size += size_of_sleb128 (AT_int (a));
9926 break;
9927 case dw_val_class_unsigned_const:
9928 size += constant_size (AT_unsigned (a));
9929 break;
9930 case dw_val_class_const_double:
9931 size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9932 if (HOST_BITS_PER_WIDE_INT >= 64)
9933 size++; /* block */
9934 break;
9935 case dw_val_class_vec:
9936 size += constant_size (a->dw_attr_val.v.val_vec.length
9937 * a->dw_attr_val.v.val_vec.elt_size)
9938 + a->dw_attr_val.v.val_vec.length
9939 * a->dw_attr_val.v.val_vec.elt_size; /* block */
9940 break;
9941 case dw_val_class_flag:
9942 size += 1;
9943 break;
9944 case dw_val_class_die_ref:
9945 if (AT_ref_external (a))
9947 /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9948 we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr
9949 is sized by target address length, whereas in DWARF3
9950 it's always sized as an offset. */
9951 if (dwarf_version >= 4)
9952 size += DWARF_TYPE_SIGNATURE_SIZE;
9953 else if (dwarf_version == 2)
9954 size += DWARF2_ADDR_SIZE;
9955 else
9956 size += DWARF_OFFSET_SIZE;
9958 else
9959 size += DWARF_OFFSET_SIZE;
9960 break;
9961 case dw_val_class_fde_ref:
9962 size += DWARF_OFFSET_SIZE;
9963 break;
9964 case dw_val_class_lbl_id:
9965 size += DWARF2_ADDR_SIZE;
9966 break;
9967 case dw_val_class_lineptr:
9968 case dw_val_class_macptr:
9969 size += DWARF_OFFSET_SIZE;
9970 break;
9971 case dw_val_class_str:
9972 if (AT_string_form (a) == DW_FORM_strp)
9973 size += DWARF_OFFSET_SIZE;
9974 else
9975 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9976 break;
9977 case dw_val_class_file:
9978 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9979 break;
9980 case dw_val_class_data8:
9981 size += 8;
9982 break;
9983 default:
9984 gcc_unreachable ();
9988 return size;
9991 /* Size the debugging information associated with a given DIE. Visits the
9992 DIE's children recursively. Updates the global variable next_die_offset, on
9993 each time through. Uses the current value of next_die_offset to update the
9994 die_offset field in each DIE. */
9996 static void
9997 calc_die_sizes (dw_die_ref die)
9999 dw_die_ref c;
10001 die->die_offset = next_die_offset;
10002 next_die_offset += size_of_die (die);
10004 FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10006 if (die->die_child != NULL)
10007 /* Count the null byte used to terminate sibling lists. */
10008 next_die_offset += 1;
10011 /* Set the marks for a die and its children. We do this so
10012 that we know whether or not a reference needs to use FORM_ref_addr; only
10013 DIEs in the same CU will be marked. We used to clear out the offset
10014 and use that as the flag, but ran into ordering problems. */
10016 static void
10017 mark_dies (dw_die_ref die)
10019 dw_die_ref c;
10021 gcc_assert (!die->die_mark);
10023 die->die_mark = 1;
10024 FOR_EACH_CHILD (die, c, mark_dies (c));
10027 /* Clear the marks for a die and its children. */
10029 static void
10030 unmark_dies (dw_die_ref die)
10032 dw_die_ref c;
10034 if (dwarf_version < 4)
10035 gcc_assert (die->die_mark);
10037 die->die_mark = 0;
10038 FOR_EACH_CHILD (die, c, unmark_dies (c));
10041 /* Clear the marks for a die, its children and referred dies. */
10043 static void
10044 unmark_all_dies (dw_die_ref die)
10046 dw_die_ref c;
10047 dw_attr_ref a;
10048 unsigned ix;
10050 if (!die->die_mark)
10051 return;
10052 die->die_mark = 0;
10054 FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10056 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10057 if (AT_class (a) == dw_val_class_die_ref)
10058 unmark_all_dies (AT_ref (a));
10061 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10062 generated for the compilation unit. */
10064 static unsigned long
10065 size_of_pubnames (VEC (pubname_entry, gc) * names)
10067 unsigned long size;
10068 unsigned i;
10069 pubname_ref p;
10071 size = DWARF_PUBNAMES_HEADER_SIZE;
10072 for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10073 if (names != pubtype_table
10074 || p->die->die_offset != 0
10075 || !flag_eliminate_unused_debug_types)
10076 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10078 size += DWARF_OFFSET_SIZE;
10079 return size;
10082 /* Return the size of the information in the .debug_aranges section. */
10084 static unsigned long
10085 size_of_aranges (void)
10087 unsigned long size;
10089 size = DWARF_ARANGES_HEADER_SIZE;
10091 /* Count the address/length pair for this compilation unit. */
10092 if (text_section_used)
10093 size += 2 * DWARF2_ADDR_SIZE;
10094 if (cold_text_section_used)
10095 size += 2 * DWARF2_ADDR_SIZE;
10096 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10098 /* Count the two zero words used to terminated the address range table. */
10099 size += 2 * DWARF2_ADDR_SIZE;
10100 return size;
10103 /* Select the encoding of an attribute value. */
10105 static enum dwarf_form
10106 value_format (dw_attr_ref a)
10108 switch (a->dw_attr_val.val_class)
10110 case dw_val_class_addr:
10111 /* Only very few attributes allow DW_FORM_addr. */
10112 switch (a->dw_attr)
10114 case DW_AT_low_pc:
10115 case DW_AT_high_pc:
10116 case DW_AT_entry_pc:
10117 case DW_AT_trampoline:
10118 return DW_FORM_addr;
10119 default:
10120 break;
10122 switch (DWARF2_ADDR_SIZE)
10124 case 1:
10125 return DW_FORM_data1;
10126 case 2:
10127 return DW_FORM_data2;
10128 case 4:
10129 return DW_FORM_data4;
10130 case 8:
10131 return DW_FORM_data8;
10132 default:
10133 gcc_unreachable ();
10135 case dw_val_class_range_list:
10136 case dw_val_class_offset:
10137 case dw_val_class_loc_list:
10138 switch (DWARF_OFFSET_SIZE)
10140 case 4:
10141 return DW_FORM_data4;
10142 case 8:
10143 return DW_FORM_data8;
10144 default:
10145 gcc_unreachable ();
10147 case dw_val_class_loc:
10148 switch (constant_size (size_of_locs (AT_loc (a))))
10150 case 1:
10151 return DW_FORM_block1;
10152 case 2:
10153 return DW_FORM_block2;
10154 default:
10155 gcc_unreachable ();
10157 case dw_val_class_const:
10158 return DW_FORM_sdata;
10159 case dw_val_class_unsigned_const:
10160 switch (constant_size (AT_unsigned (a)))
10162 case 1:
10163 return DW_FORM_data1;
10164 case 2:
10165 return DW_FORM_data2;
10166 case 4:
10167 return DW_FORM_data4;
10168 case 8:
10169 return DW_FORM_data8;
10170 default:
10171 gcc_unreachable ();
10173 case dw_val_class_const_double:
10174 switch (HOST_BITS_PER_WIDE_INT)
10176 case 8:
10177 return DW_FORM_data2;
10178 case 16:
10179 return DW_FORM_data4;
10180 case 32:
10181 return DW_FORM_data8;
10182 case 64:
10183 default:
10184 return DW_FORM_block1;
10186 case dw_val_class_vec:
10187 switch (constant_size (a->dw_attr_val.v.val_vec.length
10188 * a->dw_attr_val.v.val_vec.elt_size))
10190 case 1:
10191 return DW_FORM_block1;
10192 case 2:
10193 return DW_FORM_block2;
10194 case 4:
10195 return DW_FORM_block4;
10196 default:
10197 gcc_unreachable ();
10199 case dw_val_class_flag:
10200 return DW_FORM_flag;
10201 case dw_val_class_die_ref:
10202 if (AT_ref_external (a))
10203 return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10204 else
10205 return DW_FORM_ref;
10206 case dw_val_class_fde_ref:
10207 return DW_FORM_data;
10208 case dw_val_class_lbl_id:
10209 return DW_FORM_addr;
10210 case dw_val_class_lineptr:
10211 case dw_val_class_macptr:
10212 return DW_FORM_data;
10213 case dw_val_class_str:
10214 return AT_string_form (a);
10215 case dw_val_class_file:
10216 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10218 case 1:
10219 return DW_FORM_data1;
10220 case 2:
10221 return DW_FORM_data2;
10222 case 4:
10223 return DW_FORM_data4;
10224 default:
10225 gcc_unreachable ();
10228 case dw_val_class_data8:
10229 return DW_FORM_data8;
10231 default:
10232 gcc_unreachable ();
10236 /* Output the encoding of an attribute value. */
10238 static void
10239 output_value_format (dw_attr_ref a)
10241 enum dwarf_form form = value_format (a);
10243 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10246 /* Output the .debug_abbrev section which defines the DIE abbreviation
10247 table. */
10249 static void
10250 output_abbrev_section (void)
10252 unsigned long abbrev_id;
10254 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10256 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10257 unsigned ix;
10258 dw_attr_ref a_attr;
10260 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10261 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10262 dwarf_tag_name (abbrev->die_tag));
10264 if (abbrev->die_child != NULL)
10265 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10266 else
10267 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10269 for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10270 ix++)
10272 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10273 dwarf_attr_name (a_attr->dw_attr));
10274 output_value_format (a_attr);
10277 dw2_asm_output_data (1, 0, NULL);
10278 dw2_asm_output_data (1, 0, NULL);
10281 /* Terminate the table. */
10282 dw2_asm_output_data (1, 0, NULL);
10285 /* Output a symbol we can use to refer to this DIE from another CU. */
10287 static inline void
10288 output_die_symbol (dw_die_ref die)
10290 char *sym = die->die_id.die_symbol;
10292 if (sym == 0)
10293 return;
10295 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10296 /* We make these global, not weak; if the target doesn't support
10297 .linkonce, it doesn't support combining the sections, so debugging
10298 will break. */
10299 targetm.asm_out.globalize_label (asm_out_file, sym);
10301 ASM_OUTPUT_LABEL (asm_out_file, sym);
10304 /* Return a new location list, given the begin and end range, and the
10305 expression. gensym tells us whether to generate a new internal symbol for
10306 this location list node, which is done for the head of the list only. */
10308 static inline dw_loc_list_ref
10309 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10310 const char *section, unsigned int gensym)
10312 dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10314 retlist->begin = begin;
10315 retlist->end = end;
10316 retlist->expr = expr;
10317 retlist->section = section;
10318 if (gensym)
10319 retlist->ll_symbol = gen_internal_sym ("LLST");
10321 return retlist;
10324 /* Add a location description expression to a location list. */
10326 static inline void
10327 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
10328 const char *begin, const char *end,
10329 const char *section)
10331 dw_loc_list_ref *d;
10333 /* Find the end of the chain. */
10334 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
10337 /* Add a new location list node to the list. */
10338 *d = new_loc_list (descr, begin, end, section, 0);
10341 /* Output the location list given to us. */
10343 static void
10344 output_loc_list (dw_loc_list_ref list_head)
10346 dw_loc_list_ref curr = list_head;
10348 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10350 /* Walk the location list, and output each range + expression. */
10351 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10353 unsigned long size;
10354 /* Don't output an entry that starts and ends at the same address. */
10355 if (strcmp (curr->begin, curr->end) == 0)
10356 continue;
10357 if (!have_multiple_function_sections)
10359 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10360 "Location list begin address (%s)",
10361 list_head->ll_symbol);
10362 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10363 "Location list end address (%s)",
10364 list_head->ll_symbol);
10366 else
10368 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10369 "Location list begin address (%s)",
10370 list_head->ll_symbol);
10371 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10372 "Location list end address (%s)",
10373 list_head->ll_symbol);
10375 size = size_of_locs (curr->expr);
10377 /* Output the block length for this list of location operations. */
10378 gcc_assert (size <= 0xffff);
10379 dw2_asm_output_data (2, size, "%s", "Location expression size");
10381 output_loc_sequence (curr->expr);
10384 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10385 "Location list terminator begin (%s)",
10386 list_head->ll_symbol);
10387 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10388 "Location list terminator end (%s)",
10389 list_head->ll_symbol);
10392 /* Output a type signature. */
10394 static inline void
10395 output_signature (const char *sig, const char *name)
10397 int i;
10399 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10400 dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10403 /* Output the DIE and its attributes. Called recursively to generate
10404 the definitions of each child DIE. */
10406 static void
10407 output_die (dw_die_ref die)
10409 dw_attr_ref a;
10410 dw_die_ref c;
10411 unsigned long size;
10412 unsigned ix;
10414 /* If someone in another CU might refer to us, set up a symbol for
10415 them to point to. */
10416 if (dwarf_version < 4 && die->die_id.die_symbol)
10417 output_die_symbol (die);
10419 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
10420 (unsigned long)die->die_offset,
10421 dwarf_tag_name (die->die_tag));
10423 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10425 const char *name = dwarf_attr_name (a->dw_attr);
10427 switch (AT_class (a))
10429 case dw_val_class_addr:
10430 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10431 break;
10433 case dw_val_class_offset:
10434 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10435 "%s", name);
10436 break;
10438 case dw_val_class_range_list:
10440 char *p = strchr (ranges_section_label, '\0');
10442 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10443 a->dw_attr_val.v.val_offset);
10444 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10445 debug_ranges_section, "%s", name);
10446 *p = '\0';
10448 break;
10450 case dw_val_class_loc:
10451 size = size_of_locs (AT_loc (a));
10453 /* Output the block length for this list of location operations. */
10454 dw2_asm_output_data (constant_size (size), size, "%s", name);
10456 output_loc_sequence (AT_loc (a));
10457 break;
10459 case dw_val_class_const:
10460 /* ??? It would be slightly more efficient to use a scheme like is
10461 used for unsigned constants below, but gdb 4.x does not sign
10462 extend. Gdb 5.x does sign extend. */
10463 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10464 break;
10466 case dw_val_class_unsigned_const:
10467 dw2_asm_output_data (constant_size (AT_unsigned (a)),
10468 AT_unsigned (a), "%s", name);
10469 break;
10471 case dw_val_class_const_double:
10473 unsigned HOST_WIDE_INT first, second;
10475 if (HOST_BITS_PER_WIDE_INT >= 64)
10476 dw2_asm_output_data (1,
10477 2 * HOST_BITS_PER_WIDE_INT
10478 / HOST_BITS_PER_CHAR,
10479 NULL);
10481 if (WORDS_BIG_ENDIAN)
10483 first = a->dw_attr_val.v.val_double.high;
10484 second = a->dw_attr_val.v.val_double.low;
10486 else
10488 first = a->dw_attr_val.v.val_double.low;
10489 second = a->dw_attr_val.v.val_double.high;
10492 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10493 first, name);
10494 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10495 second, NULL);
10497 break;
10499 case dw_val_class_vec:
10501 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10502 unsigned int len = a->dw_attr_val.v.val_vec.length;
10503 unsigned int i;
10504 unsigned char *p;
10506 dw2_asm_output_data (constant_size (len * elt_size),
10507 len * elt_size, "%s", name);
10508 if (elt_size > sizeof (HOST_WIDE_INT))
10510 elt_size /= 2;
10511 len *= 2;
10513 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10514 i < len;
10515 i++, p += elt_size)
10516 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10517 "fp or vector constant word %u", i);
10518 break;
10521 case dw_val_class_flag:
10522 dw2_asm_output_data (1, AT_flag (a), "%s", name);
10523 break;
10525 case dw_val_class_loc_list:
10527 char *sym = AT_loc_list (a)->ll_symbol;
10529 gcc_assert (sym);
10530 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10531 "%s", name);
10533 break;
10535 case dw_val_class_die_ref:
10536 if (AT_ref_external (a))
10538 if (dwarf_version >= 4)
10540 comdat_type_node_ref type_node =
10541 AT_ref (a)->die_id.die_type_node;
10543 gcc_assert (type_node);
10544 output_signature (type_node->signature, name);
10546 else
10548 char *sym = AT_ref (a)->die_id.die_symbol;
10549 int size;
10551 gcc_assert (sym);
10552 /* In DWARF2, DW_FORM_ref_addr is sized by target address
10553 length, whereas in DWARF3 it's always sized as an
10554 offset. */
10555 if (dwarf_version == 2)
10556 size = DWARF2_ADDR_SIZE;
10557 else
10558 size = DWARF_OFFSET_SIZE;
10559 dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10560 name);
10563 else
10565 gcc_assert (AT_ref (a)->die_offset);
10566 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10567 "%s", name);
10569 break;
10571 case dw_val_class_fde_ref:
10573 char l1[20];
10575 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10576 a->dw_attr_val.v.val_fde_index * 2);
10577 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10578 "%s", name);
10580 break;
10582 case dw_val_class_lbl_id:
10583 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10584 break;
10586 case dw_val_class_lineptr:
10587 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10588 debug_line_section, "%s", name);
10589 break;
10591 case dw_val_class_macptr:
10592 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10593 debug_macinfo_section, "%s", name);
10594 break;
10596 case dw_val_class_str:
10597 if (AT_string_form (a) == DW_FORM_strp)
10598 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10599 a->dw_attr_val.v.val_str->label,
10600 debug_str_section,
10601 "%s: \"%s\"", name, AT_string (a));
10602 else
10603 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10604 break;
10606 case dw_val_class_file:
10608 int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10610 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10611 a->dw_attr_val.v.val_file->filename);
10612 break;
10615 case dw_val_class_data8:
10617 int i;
10619 for (i = 0; i < 8; i++)
10620 dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10621 i == 0 ? "%s" : NULL, name);
10622 break;
10625 default:
10626 gcc_unreachable ();
10630 FOR_EACH_CHILD (die, c, output_die (c));
10632 /* Add null byte to terminate sibling list. */
10633 if (die->die_child != NULL)
10634 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
10635 (unsigned long) die->die_offset);
10638 /* Output the compilation unit that appears at the beginning of the
10639 .debug_info section, and precedes the DIE descriptions. */
10641 static void
10642 output_compilation_unit_header (void)
10644 int ver = dwarf_version;
10646 /* Don't mark the output as DWARF-4 until we make full use of the
10647 version 4 extensions, and gdb supports them. For now, -gdwarf-4
10648 selects only a few extensions from the DWARF-4 spec. */
10649 if (ver > 3)
10650 ver = 3;
10651 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10652 dw2_asm_output_data (4, 0xffffffff,
10653 "Initial length escape value indicating 64-bit DWARF extension");
10654 dw2_asm_output_data (DWARF_OFFSET_SIZE,
10655 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10656 "Length of Compilation Unit Info");
10657 dw2_asm_output_data (2, ver, "DWARF version number");
10658 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10659 debug_abbrev_section,
10660 "Offset Into Abbrev. Section");
10661 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10664 /* Output the compilation unit DIE and its children. */
10666 static void
10667 output_comp_unit (dw_die_ref die, int output_if_empty)
10669 const char *secname;
10670 char *oldsym, *tmp;
10672 /* Unless we are outputting main CU, we may throw away empty ones. */
10673 if (!output_if_empty && die->die_child == NULL)
10674 return;
10676 /* Even if there are no children of this DIE, we must output the information
10677 about the compilation unit. Otherwise, on an empty translation unit, we
10678 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
10679 will then complain when examining the file. First mark all the DIEs in
10680 this CU so we know which get local refs. */
10681 mark_dies (die);
10683 build_abbrev_table (die);
10685 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
10686 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10687 calc_die_sizes (die);
10689 oldsym = die->die_id.die_symbol;
10690 if (oldsym)
10692 tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10694 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10695 secname = tmp;
10696 die->die_id.die_symbol = NULL;
10697 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10699 else
10700 switch_to_section (debug_info_section);
10702 /* Output debugging information. */
10703 output_compilation_unit_header ();
10704 output_die (die);
10706 /* Leave the marks on the main CU, so we can check them in
10707 output_pubnames. */
10708 if (oldsym)
10710 unmark_dies (die);
10711 die->die_id.die_symbol = oldsym;
10715 /* Output a comdat type unit DIE and its children. */
10717 static void
10718 output_comdat_type_unit (comdat_type_node *node)
10720 const char *secname;
10721 char *tmp;
10722 int i;
10723 #if defined (OBJECT_FORMAT_ELF)
10724 tree comdat_key;
10725 #endif
10727 /* First mark all the DIEs in this CU so we know which get local refs. */
10728 mark_dies (node->root_die);
10730 build_abbrev_table (node->root_die);
10732 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
10733 next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10734 calc_die_sizes (node->root_die);
10736 #if defined (OBJECT_FORMAT_ELF)
10737 secname = ".debug_types";
10738 tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10739 sprintf (tmp, "wt.");
10740 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10741 sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10742 comdat_key = get_identifier (tmp);
10743 targetm.asm_out.named_section (secname,
10744 SECTION_DEBUG | SECTION_LINKONCE,
10745 comdat_key);
10746 #else
10747 tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10748 sprintf (tmp, ".gnu.linkonce.wt.");
10749 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10750 sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10751 secname = tmp;
10752 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10753 #endif
10755 /* Output debugging information. */
10756 output_compilation_unit_header ();
10757 output_signature (node->signature, "Type Signature");
10758 dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10759 "Offset to Type DIE");
10760 output_die (node->root_die);
10762 unmark_dies (node->root_die);
10765 /* Return the DWARF2/3 pubname associated with a decl. */
10767 static const char *
10768 dwarf2_name (tree decl, int scope)
10770 return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10773 /* Add a new entry to .debug_pubnames if appropriate. */
10775 static void
10776 add_pubname_string (const char *str, dw_die_ref die)
10778 pubname_entry e;
10780 e.die = die;
10781 e.name = xstrdup (str);
10782 VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10785 static void
10786 add_pubname (tree decl, dw_die_ref die)
10788 if (TREE_PUBLIC (decl))
10790 const char *name = dwarf2_name (decl, 1);
10791 if (name)
10792 add_pubname_string (name, die);
10796 /* Add a new entry to .debug_pubtypes if appropriate. */
10798 static void
10799 add_pubtype (tree decl, dw_die_ref die)
10801 pubname_entry e;
10803 e.name = NULL;
10804 if ((TREE_PUBLIC (decl)
10805 || die->die_parent == comp_unit_die)
10806 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10808 e.die = die;
10809 if (TYPE_P (decl))
10811 if (TYPE_NAME (decl))
10813 if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10814 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10815 else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10816 && DECL_NAME (TYPE_NAME (decl)))
10817 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10818 else
10819 e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10822 else
10824 e.name = dwarf2_name (decl, 1);
10825 if (e.name)
10826 e.name = xstrdup (e.name);
10829 /* If we don't have a name for the type, there's no point in adding
10830 it to the table. */
10831 if (e.name && e.name[0] != '\0')
10832 VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10836 /* Output the public names table used to speed up access to externally
10837 visible names; or the public types table used to find type definitions. */
10839 static void
10840 output_pubnames (VEC (pubname_entry, gc) * names)
10842 unsigned i;
10843 unsigned long pubnames_length = size_of_pubnames (names);
10844 pubname_ref pub;
10846 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10847 dw2_asm_output_data (4, 0xffffffff,
10848 "Initial length escape value indicating 64-bit DWARF extension");
10849 if (names == pubname_table)
10850 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10851 "Length of Public Names Info");
10852 else
10853 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10854 "Length of Public Type Names Info");
10855 /* Version number for pubnames/pubtypes is still 2, even in DWARF3. */
10856 dw2_asm_output_data (2, 2, "DWARF Version");
10857 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10858 debug_info_section,
10859 "Offset of Compilation Unit Info");
10860 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10861 "Compilation Unit Length");
10863 for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10865 /* We shouldn't see pubnames for DIEs outside of the main CU. */
10866 if (names == pubname_table)
10867 gcc_assert (pub->die->die_mark);
10869 if (names != pubtype_table
10870 || pub->die->die_offset != 0
10871 || !flag_eliminate_unused_debug_types)
10873 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10874 "DIE offset");
10876 dw2_asm_output_nstring (pub->name, -1, "external name");
10880 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10883 /* Add a new entry to .debug_aranges if appropriate. */
10885 static void
10886 add_arange (tree decl, dw_die_ref die)
10888 if (! DECL_SECTION_NAME (decl))
10889 return;
10891 if (arange_table_in_use == arange_table_allocated)
10893 arange_table_allocated += ARANGE_TABLE_INCREMENT;
10894 arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10895 arange_table_allocated);
10896 memset (arange_table + arange_table_in_use, 0,
10897 ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10900 arange_table[arange_table_in_use++] = die;
10903 /* Output the information that goes into the .debug_aranges table.
10904 Namely, define the beginning and ending address range of the
10905 text section generated for this compilation unit. */
10907 static void
10908 output_aranges (void)
10910 unsigned i;
10911 unsigned long aranges_length = size_of_aranges ();
10913 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10914 dw2_asm_output_data (4, 0xffffffff,
10915 "Initial length escape value indicating 64-bit DWARF extension");
10916 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10917 "Length of Address Ranges Info");
10918 /* Version number for aranges is still 2, even in DWARF3. */
10919 dw2_asm_output_data (2, 2, "DWARF Version");
10920 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10921 debug_info_section,
10922 "Offset of Compilation Unit Info");
10923 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10924 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10926 /* We need to align to twice the pointer size here. */
10927 if (DWARF_ARANGES_PAD_SIZE)
10929 /* Pad using a 2 byte words so that padding is correct for any
10930 pointer size. */
10931 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10932 2 * DWARF2_ADDR_SIZE);
10933 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10934 dw2_asm_output_data (2, 0, NULL);
10937 /* It is necessary not to output these entries if the sections were
10938 not used; if the sections were not used, the length will be 0 and
10939 the address may end up as 0 if the section is discarded by ld
10940 --gc-sections, leaving an invalid (0, 0) entry that can be
10941 confused with the terminator. */
10942 if (text_section_used)
10944 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10945 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10946 text_section_label, "Length");
10948 if (cold_text_section_used)
10950 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10951 "Address");
10952 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10953 cold_text_section_label, "Length");
10956 for (i = 0; i < arange_table_in_use; i++)
10958 dw_die_ref die = arange_table[i];
10960 /* We shouldn't see aranges for DIEs outside of the main CU. */
10961 gcc_assert (die->die_mark);
10963 if (die->die_tag == DW_TAG_subprogram)
10965 dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
10966 "Address");
10967 dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
10968 get_AT_low_pc (die), "Length");
10970 else
10972 /* A static variable; extract the symbol from DW_AT_location.
10973 Note that this code isn't currently hit, as we only emit
10974 aranges for functions (jason 9/23/99). */
10975 dw_attr_ref a = get_AT (die, DW_AT_location);
10976 dw_loc_descr_ref loc;
10978 gcc_assert (a && AT_class (a) == dw_val_class_loc);
10980 loc = AT_loc (a);
10981 gcc_assert (loc->dw_loc_opc == DW_OP_addr);
10983 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
10984 loc->dw_loc_oprnd1.v.val_addr, "Address");
10985 dw2_asm_output_data (DWARF2_ADDR_SIZE,
10986 get_AT_unsigned (die, DW_AT_byte_size),
10987 "Length");
10991 /* Output the terminator words. */
10992 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10993 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
10996 /* Add a new entry to .debug_ranges. Return the offset at which it
10997 was placed. */
10999 static unsigned int
11000 add_ranges_num (int num)
11002 unsigned int in_use = ranges_table_in_use;
11004 if (in_use == ranges_table_allocated)
11006 ranges_table_allocated += RANGES_TABLE_INCREMENT;
11007 ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11008 ranges_table_allocated);
11009 memset (ranges_table + ranges_table_in_use, 0,
11010 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11013 ranges_table[in_use].num = num;
11014 ranges_table_in_use = in_use + 1;
11016 return in_use * 2 * DWARF2_ADDR_SIZE;
11019 /* Add a new entry to .debug_ranges corresponding to a block, or a
11020 range terminator if BLOCK is NULL. */
11022 static unsigned int
11023 add_ranges (const_tree block)
11025 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11028 /* Add a new entry to .debug_ranges corresponding to a pair of
11029 labels. */
11031 static unsigned int
11032 add_ranges_by_labels (const char *begin, const char *end)
11034 unsigned int in_use = ranges_by_label_in_use;
11036 if (in_use == ranges_by_label_allocated)
11038 ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11039 ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11040 ranges_by_label,
11041 ranges_by_label_allocated);
11042 memset (ranges_by_label + ranges_by_label_in_use, 0,
11043 RANGES_TABLE_INCREMENT
11044 * sizeof (struct dw_ranges_by_label_struct));
11047 ranges_by_label[in_use].begin = begin;
11048 ranges_by_label[in_use].end = end;
11049 ranges_by_label_in_use = in_use + 1;
11051 return add_ranges_num (-(int)in_use - 1);
11054 static void
11055 output_ranges (void)
11057 unsigned i;
11058 static const char *const start_fmt = "Offset 0x%x";
11059 const char *fmt = start_fmt;
11061 for (i = 0; i < ranges_table_in_use; i++)
11063 int block_num = ranges_table[i].num;
11065 if (block_num > 0)
11067 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11068 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11070 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11071 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11073 /* If all code is in the text section, then the compilation
11074 unit base address defaults to DW_AT_low_pc, which is the
11075 base of the text section. */
11076 if (!have_multiple_function_sections)
11078 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11079 text_section_label,
11080 fmt, i * 2 * DWARF2_ADDR_SIZE);
11081 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11082 text_section_label, NULL);
11085 /* Otherwise, the compilation unit base address is zero,
11086 which allows us to use absolute addresses, and not worry
11087 about whether the target supports cross-section
11088 arithmetic. */
11089 else
11091 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11092 fmt, i * 2 * DWARF2_ADDR_SIZE);
11093 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11096 fmt = NULL;
11099 /* Negative block_num stands for an index into ranges_by_label. */
11100 else if (block_num < 0)
11102 int lab_idx = - block_num - 1;
11104 if (!have_multiple_function_sections)
11106 gcc_unreachable ();
11107 #if 0
11108 /* If we ever use add_ranges_by_labels () for a single
11109 function section, all we have to do is to take out
11110 the #if 0 above. */
11111 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11112 ranges_by_label[lab_idx].begin,
11113 text_section_label,
11114 fmt, i * 2 * DWARF2_ADDR_SIZE);
11115 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11116 ranges_by_label[lab_idx].end,
11117 text_section_label, NULL);
11118 #endif
11120 else
11122 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11123 ranges_by_label[lab_idx].begin,
11124 fmt, i * 2 * DWARF2_ADDR_SIZE);
11125 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11126 ranges_by_label[lab_idx].end,
11127 NULL);
11130 else
11132 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11133 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11134 fmt = start_fmt;
11139 /* Data structure containing information about input files. */
11140 struct file_info
11142 const char *path; /* Complete file name. */
11143 const char *fname; /* File name part. */
11144 int length; /* Length of entire string. */
11145 struct dwarf_file_data * file_idx; /* Index in input file table. */
11146 int dir_idx; /* Index in directory table. */
11149 /* Data structure containing information about directories with source
11150 files. */
11151 struct dir_info
11153 const char *path; /* Path including directory name. */
11154 int length; /* Path length. */
11155 int prefix; /* Index of directory entry which is a prefix. */
11156 int count; /* Number of files in this directory. */
11157 int dir_idx; /* Index of directory used as base. */
11160 /* Callback function for file_info comparison. We sort by looking at
11161 the directories in the path. */
11163 static int
11164 file_info_cmp (const void *p1, const void *p2)
11166 const struct file_info *const s1 = (const struct file_info *) p1;
11167 const struct file_info *const s2 = (const struct file_info *) p2;
11168 const unsigned char *cp1;
11169 const unsigned char *cp2;
11171 /* Take care of file names without directories. We need to make sure that
11172 we return consistent values to qsort since some will get confused if
11173 we return the same value when identical operands are passed in opposite
11174 orders. So if neither has a directory, return 0 and otherwise return
11175 1 or -1 depending on which one has the directory. */
11176 if ((s1->path == s1->fname || s2->path == s2->fname))
11177 return (s2->path == s2->fname) - (s1->path == s1->fname);
11179 cp1 = (const unsigned char *) s1->path;
11180 cp2 = (const unsigned char *) s2->path;
11182 while (1)
11184 ++cp1;
11185 ++cp2;
11186 /* Reached the end of the first path? If so, handle like above. */
11187 if ((cp1 == (const unsigned char *) s1->fname)
11188 || (cp2 == (const unsigned char *) s2->fname))
11189 return ((cp2 == (const unsigned char *) s2->fname)
11190 - (cp1 == (const unsigned char *) s1->fname));
11192 /* Character of current path component the same? */
11193 else if (*cp1 != *cp2)
11194 return *cp1 - *cp2;
11198 struct file_name_acquire_data
11200 struct file_info *files;
11201 int used_files;
11202 int max_files;
11205 /* Traversal function for the hash table. */
11207 static int
11208 file_name_acquire (void ** slot, void *data)
11210 struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11211 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11212 struct file_info *fi;
11213 const char *f;
11215 gcc_assert (fnad->max_files >= d->emitted_number);
11217 if (! d->emitted_number)
11218 return 1;
11220 gcc_assert (fnad->max_files != fnad->used_files);
11222 fi = fnad->files + fnad->used_files++;
11224 /* Skip all leading "./". */
11225 f = d->filename;
11226 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11227 f += 2;
11229 /* Create a new array entry. */
11230 fi->path = f;
11231 fi->length = strlen (f);
11232 fi->file_idx = d;
11234 /* Search for the file name part. */
11235 f = strrchr (f, DIR_SEPARATOR);
11236 #if defined (DIR_SEPARATOR_2)
11238 char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11240 if (g != NULL)
11242 if (f == NULL || f < g)
11243 f = g;
11246 #endif
11248 fi->fname = f == NULL ? fi->path : f + 1;
11249 return 1;
11252 /* Output the directory table and the file name table. We try to minimize
11253 the total amount of memory needed. A heuristic is used to avoid large
11254 slowdowns with many input files. */
11256 static void
11257 output_file_names (void)
11259 struct file_name_acquire_data fnad;
11260 int numfiles;
11261 struct file_info *files;
11262 struct dir_info *dirs;
11263 int *saved;
11264 int *savehere;
11265 int *backmap;
11266 int ndirs;
11267 int idx_offset;
11268 int i;
11270 if (!last_emitted_file)
11272 dw2_asm_output_data (1, 0, "End directory table");
11273 dw2_asm_output_data (1, 0, "End file name table");
11274 return;
11277 numfiles = last_emitted_file->emitted_number;
11279 /* Allocate the various arrays we need. */
11280 files = XALLOCAVEC (struct file_info, numfiles);
11281 dirs = XALLOCAVEC (struct dir_info, numfiles);
11283 fnad.files = files;
11284 fnad.used_files = 0;
11285 fnad.max_files = numfiles;
11286 htab_traverse (file_table, file_name_acquire, &fnad);
11287 gcc_assert (fnad.used_files == fnad.max_files);
11289 qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11291 /* Find all the different directories used. */
11292 dirs[0].path = files[0].path;
11293 dirs[0].length = files[0].fname - files[0].path;
11294 dirs[0].prefix = -1;
11295 dirs[0].count = 1;
11296 dirs[0].dir_idx = 0;
11297 files[0].dir_idx = 0;
11298 ndirs = 1;
11300 for (i = 1; i < numfiles; i++)
11301 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11302 && memcmp (dirs[ndirs - 1].path, files[i].path,
11303 dirs[ndirs - 1].length) == 0)
11305 /* Same directory as last entry. */
11306 files[i].dir_idx = ndirs - 1;
11307 ++dirs[ndirs - 1].count;
11309 else
11311 int j;
11313 /* This is a new directory. */
11314 dirs[ndirs].path = files[i].path;
11315 dirs[ndirs].length = files[i].fname - files[i].path;
11316 dirs[ndirs].count = 1;
11317 dirs[ndirs].dir_idx = ndirs;
11318 files[i].dir_idx = ndirs;
11320 /* Search for a prefix. */
11321 dirs[ndirs].prefix = -1;
11322 for (j = 0; j < ndirs; j++)
11323 if (dirs[j].length < dirs[ndirs].length
11324 && dirs[j].length > 1
11325 && (dirs[ndirs].prefix == -1
11326 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11327 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11328 dirs[ndirs].prefix = j;
11330 ++ndirs;
11333 /* Now to the actual work. We have to find a subset of the directories which
11334 allow expressing the file name using references to the directory table
11335 with the least amount of characters. We do not do an exhaustive search
11336 where we would have to check out every combination of every single
11337 possible prefix. Instead we use a heuristic which provides nearly optimal
11338 results in most cases and never is much off. */
11339 saved = XALLOCAVEC (int, ndirs);
11340 savehere = XALLOCAVEC (int, ndirs);
11342 memset (saved, '\0', ndirs * sizeof (saved[0]));
11343 for (i = 0; i < ndirs; i++)
11345 int j;
11346 int total;
11348 /* We can always save some space for the current directory. But this
11349 does not mean it will be enough to justify adding the directory. */
11350 savehere[i] = dirs[i].length;
11351 total = (savehere[i] - saved[i]) * dirs[i].count;
11353 for (j = i + 1; j < ndirs; j++)
11355 savehere[j] = 0;
11356 if (saved[j] < dirs[i].length)
11358 /* Determine whether the dirs[i] path is a prefix of the
11359 dirs[j] path. */
11360 int k;
11362 k = dirs[j].prefix;
11363 while (k != -1 && k != (int) i)
11364 k = dirs[k].prefix;
11366 if (k == (int) i)
11368 /* Yes it is. We can possibly save some memory by
11369 writing the filenames in dirs[j] relative to
11370 dirs[i]. */
11371 savehere[j] = dirs[i].length;
11372 total += (savehere[j] - saved[j]) * dirs[j].count;
11377 /* Check whether we can save enough to justify adding the dirs[i]
11378 directory. */
11379 if (total > dirs[i].length + 1)
11381 /* It's worthwhile adding. */
11382 for (j = i; j < ndirs; j++)
11383 if (savehere[j] > 0)
11385 /* Remember how much we saved for this directory so far. */
11386 saved[j] = savehere[j];
11388 /* Remember the prefix directory. */
11389 dirs[j].dir_idx = i;
11394 /* Emit the directory name table. */
11395 idx_offset = dirs[0].length > 0 ? 1 : 0;
11396 for (i = 1 - idx_offset; i < ndirs; i++)
11397 dw2_asm_output_nstring (dirs[i].path,
11398 dirs[i].length
11399 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11400 "Directory Entry: 0x%x", i + idx_offset);
11402 dw2_asm_output_data (1, 0, "End directory table");
11404 /* We have to emit them in the order of emitted_number since that's
11405 used in the debug info generation. To do this efficiently we
11406 generate a back-mapping of the indices first. */
11407 backmap = XALLOCAVEC (int, numfiles);
11408 for (i = 0; i < numfiles; i++)
11409 backmap[files[i].file_idx->emitted_number - 1] = i;
11411 /* Now write all the file names. */
11412 for (i = 0; i < numfiles; i++)
11414 int file_idx = backmap[i];
11415 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11417 #ifdef VMS_DEBUGGING_INFO
11418 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11420 /* Setting these fields can lead to debugger miscomparisons,
11421 but VMS Debug requires them to be set correctly. */
11423 int ver;
11424 long long cdt;
11425 long siz;
11426 int maxfilelen = strlen (files[file_idx].path)
11427 + dirs[dir_idx].length
11428 + MAX_VMS_VERSION_LEN + 1;
11429 char *filebuf = XALLOCAVEC (char, maxfilelen);
11431 vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11432 snprintf (filebuf, maxfilelen, "%s;%d",
11433 files[file_idx].path + dirs[dir_idx].length, ver);
11435 dw2_asm_output_nstring
11436 (filebuf, -1, "File Entry: 0x%x", (unsigned) i + 1);
11438 /* Include directory index. */
11439 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11441 /* Modification time. */
11442 dw2_asm_output_data_uleb128
11443 ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11444 ? cdt : 0,
11445 NULL);
11447 /* File length in bytes. */
11448 dw2_asm_output_data_uleb128
11449 ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11450 ? siz : 0,
11451 NULL);
11452 #else
11453 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11454 "File Entry: 0x%x", (unsigned) i + 1);
11456 /* Include directory index. */
11457 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11459 /* Modification time. */
11460 dw2_asm_output_data_uleb128 (0, NULL);
11462 /* File length in bytes. */
11463 dw2_asm_output_data_uleb128 (0, NULL);
11464 #endif
11467 dw2_asm_output_data (1, 0, "End file name table");
11471 /* Output the source line number correspondence information. This
11472 information goes into the .debug_line section. */
11474 static void
11475 output_line_info (void)
11477 char l1[20], l2[20], p1[20], p2[20];
11478 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11479 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11480 unsigned opc;
11481 unsigned n_op_args;
11482 unsigned long lt_index;
11483 unsigned long current_line;
11484 long line_offset;
11485 long line_delta;
11486 unsigned long current_file;
11487 unsigned long function;
11488 int ver = dwarf_version;
11490 /* Don't mark the output as DWARF-4 until we make full use of the
11491 version 4 extensions, and gdb supports them. For now, -gdwarf-4
11492 selects only a few extensions from the DWARF-4 spec. */
11493 if (ver > 3)
11494 ver = 3;
11496 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11497 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11498 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11499 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11501 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11502 dw2_asm_output_data (4, 0xffffffff,
11503 "Initial length escape value indicating 64-bit DWARF extension");
11504 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11505 "Length of Source Line Info");
11506 ASM_OUTPUT_LABEL (asm_out_file, l1);
11508 dw2_asm_output_data (2, ver, "DWARF Version");
11509 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11510 ASM_OUTPUT_LABEL (asm_out_file, p1);
11512 /* Define the architecture-dependent minimum instruction length (in
11513 bytes). In this implementation of DWARF, this field is used for
11514 information purposes only. Since GCC generates assembly language,
11515 we have no a priori knowledge of how many instruction bytes are
11516 generated for each source line, and therefore can use only the
11517 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11518 commands. Accordingly, we fix this as `1', which is "correct
11519 enough" for all architectures, and don't let the target override. */
11520 dw2_asm_output_data (1, 1,
11521 "Minimum Instruction Length");
11523 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11524 "Default is_stmt_start flag");
11525 dw2_asm_output_data (1, DWARF_LINE_BASE,
11526 "Line Base Value (Special Opcodes)");
11527 dw2_asm_output_data (1, DWARF_LINE_RANGE,
11528 "Line Range Value (Special Opcodes)");
11529 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11530 "Special Opcode Base");
11532 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11534 switch (opc)
11536 case DW_LNS_advance_pc:
11537 case DW_LNS_advance_line:
11538 case DW_LNS_set_file:
11539 case DW_LNS_set_column:
11540 case DW_LNS_fixed_advance_pc:
11541 n_op_args = 1;
11542 break;
11543 default:
11544 n_op_args = 0;
11545 break;
11548 dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
11549 opc, n_op_args);
11552 /* Write out the information about the files we use. */
11553 output_file_names ();
11554 ASM_OUTPUT_LABEL (asm_out_file, p2);
11556 /* We used to set the address register to the first location in the text
11557 section here, but that didn't accomplish anything since we already
11558 have a line note for the opening brace of the first function. */
11560 /* Generate the line number to PC correspondence table, encoded as
11561 a series of state machine operations. */
11562 current_file = 1;
11563 current_line = 1;
11565 if (cfun && in_cold_section_p)
11566 strcpy (prev_line_label, crtl->subsections.cold_section_label);
11567 else
11568 strcpy (prev_line_label, text_section_label);
11569 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11571 dw_line_info_ref line_info = &line_info_table[lt_index];
11573 #if 0
11574 /* Disable this optimization for now; GDB wants to see two line notes
11575 at the beginning of a function so it can find the end of the
11576 prologue. */
11578 /* Don't emit anything for redundant notes. Just updating the
11579 address doesn't accomplish anything, because we already assume
11580 that anything after the last address is this line. */
11581 if (line_info->dw_line_num == current_line
11582 && line_info->dw_file_num == current_file)
11583 continue;
11584 #endif
11586 /* Emit debug info for the address of the current line.
11588 Unfortunately, we have little choice here currently, and must always
11589 use the most general form. GCC does not know the address delta
11590 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
11591 attributes which will give an upper bound on the address range. We
11592 could perhaps use length attributes to determine when it is safe to
11593 use DW_LNS_fixed_advance_pc. */
11595 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11596 if (0)
11598 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
11599 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11600 "DW_LNS_fixed_advance_pc");
11601 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11603 else
11605 /* This can handle any delta. This takes
11606 4+DWARF2_ADDR_SIZE bytes. */
11607 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11608 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11609 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11610 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11613 strcpy (prev_line_label, line_label);
11615 /* Emit debug info for the source file of the current line, if
11616 different from the previous line. */
11617 if (line_info->dw_file_num != current_file)
11619 current_file = line_info->dw_file_num;
11620 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11621 dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11624 /* Emit debug info for the current line number, choosing the encoding
11625 that uses the least amount of space. */
11626 if (line_info->dw_line_num != current_line)
11628 line_offset = line_info->dw_line_num - current_line;
11629 line_delta = line_offset - DWARF_LINE_BASE;
11630 current_line = line_info->dw_line_num;
11631 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11632 /* This can handle deltas from -10 to 234, using the current
11633 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
11634 takes 1 byte. */
11635 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11636 "line %lu", current_line);
11637 else
11639 /* This can handle any delta. This takes at least 4 bytes,
11640 depending on the value being encoded. */
11641 dw2_asm_output_data (1, DW_LNS_advance_line,
11642 "advance to line %lu", current_line);
11643 dw2_asm_output_data_sleb128 (line_offset, NULL);
11644 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11647 else
11648 /* We still need to start a new row, so output a copy insn. */
11649 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11652 /* Emit debug info for the address of the end of the function. */
11653 if (0)
11655 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11656 "DW_LNS_fixed_advance_pc");
11657 dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11659 else
11661 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11662 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11663 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11664 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11667 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11668 dw2_asm_output_data_uleb128 (1, NULL);
11669 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11671 function = 0;
11672 current_file = 1;
11673 current_line = 1;
11674 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11676 dw_separate_line_info_ref line_info
11677 = &separate_line_info_table[lt_index];
11679 #if 0
11680 /* Don't emit anything for redundant notes. */
11681 if (line_info->dw_line_num == current_line
11682 && line_info->dw_file_num == current_file
11683 && line_info->function == function)
11684 goto cont;
11685 #endif
11687 /* Emit debug info for the address of the current line. If this is
11688 a new function, or the first line of a function, then we need
11689 to handle it differently. */
11690 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11691 lt_index);
11692 if (function != line_info->function)
11694 function = line_info->function;
11696 /* Set the address register to the first line in the function. */
11697 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11698 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11699 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11700 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11702 else
11704 /* ??? See the DW_LNS_advance_pc comment above. */
11705 if (0)
11707 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11708 "DW_LNS_fixed_advance_pc");
11709 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11711 else
11713 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11714 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11715 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11716 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11720 strcpy (prev_line_label, line_label);
11722 /* Emit debug info for the source file of the current line, if
11723 different from the previous line. */
11724 if (line_info->dw_file_num != current_file)
11726 current_file = line_info->dw_file_num;
11727 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11728 dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11731 /* Emit debug info for the current line number, choosing the encoding
11732 that uses the least amount of space. */
11733 if (line_info->dw_line_num != current_line)
11735 line_offset = line_info->dw_line_num - current_line;
11736 line_delta = line_offset - DWARF_LINE_BASE;
11737 current_line = line_info->dw_line_num;
11738 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11739 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11740 "line %lu", current_line);
11741 else
11743 dw2_asm_output_data (1, DW_LNS_advance_line,
11744 "advance to line %lu", current_line);
11745 dw2_asm_output_data_sleb128 (line_offset, NULL);
11746 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11749 else
11750 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11752 #if 0
11753 cont:
11754 #endif
11756 lt_index++;
11758 /* If we're done with a function, end its sequence. */
11759 if (lt_index == separate_line_info_table_in_use
11760 || separate_line_info_table[lt_index].function != function)
11762 current_file = 1;
11763 current_line = 1;
11765 /* Emit debug info for the address of the end of the function. */
11766 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11767 if (0)
11769 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11770 "DW_LNS_fixed_advance_pc");
11771 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11773 else
11775 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11776 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11777 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11778 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11781 /* Output the marker for the end of this sequence. */
11782 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11783 dw2_asm_output_data_uleb128 (1, NULL);
11784 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11788 /* Output the marker for the end of the line number info. */
11789 ASM_OUTPUT_LABEL (asm_out_file, l2);
11792 /* Return the size of the .debug_dcall table for the compilation unit. */
11794 static unsigned long
11795 size_of_dcall_table (void)
11797 unsigned long size;
11798 unsigned int i;
11799 dcall_entry *p;
11800 tree last_poc_decl = NULL;
11802 /* Header: version + debug info section pointer + pointer size. */
11803 size = 2 + DWARF_OFFSET_SIZE + 1;
11805 /* Each entry: code label + DIE offset. */
11806 for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11808 gcc_assert (p->targ_die != NULL);
11809 /* Insert a "from" entry when the point-of-call DIE offset changes. */
11810 if (p->poc_decl != last_poc_decl)
11812 dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11813 gcc_assert (poc_die);
11814 last_poc_decl = p->poc_decl;
11815 if (poc_die)
11816 size += (DWARF_OFFSET_SIZE
11817 + size_of_uleb128 (poc_die->die_offset));
11819 size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11822 return size;
11825 /* Output the direct call table used to disambiguate PC values when
11826 identical function have been merged. */
11828 static void
11829 output_dcall_table (void)
11831 unsigned i;
11832 unsigned long dcall_length = size_of_dcall_table ();
11833 dcall_entry *p;
11834 char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11835 tree last_poc_decl = NULL;
11837 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11838 dw2_asm_output_data (4, 0xffffffff,
11839 "Initial length escape value indicating 64-bit DWARF extension");
11840 dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11841 "Length of Direct Call Table");
11842 dw2_asm_output_data (2, 4, "Version number");
11843 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11844 debug_info_section,
11845 "Offset of Compilation Unit Info");
11846 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11848 for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11850 /* Insert a "from" entry when the point-of-call DIE offset changes. */
11851 if (p->poc_decl != last_poc_decl)
11853 dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11854 last_poc_decl = p->poc_decl;
11855 if (poc_die)
11857 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11858 dw2_asm_output_data_uleb128 (poc_die->die_offset,
11859 "Caller DIE offset");
11862 ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11863 dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11864 dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11865 "Callee DIE offset");
11869 /* Return the size of the .debug_vcall table for the compilation unit. */
11871 static unsigned long
11872 size_of_vcall_table (void)
11874 unsigned long size;
11875 unsigned int i;
11876 vcall_entry *p;
11878 /* Header: version + pointer size. */
11879 size = 2 + 1;
11881 /* Each entry: code label + vtable slot index. */
11882 for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11883 size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11885 return size;
11888 /* Output the virtual call table used to disambiguate PC values when
11889 identical function have been merged. */
11891 static void
11892 output_vcall_table (void)
11894 unsigned i;
11895 unsigned long vcall_length = size_of_vcall_table ();
11896 vcall_entry *p;
11897 char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11899 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11900 dw2_asm_output_data (4, 0xffffffff,
11901 "Initial length escape value indicating 64-bit DWARF extension");
11902 dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11903 "Length of Virtual Call Table");
11904 dw2_asm_output_data (2, 4, "Version number");
11905 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11907 for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11909 ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11910 dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11911 dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11915 /* Given a pointer to a tree node for some base type, return a pointer to
11916 a DIE that describes the given type.
11918 This routine must only be called for GCC type nodes that correspond to
11919 Dwarf base (fundamental) types. */
11921 static dw_die_ref
11922 base_type_die (tree type)
11924 dw_die_ref base_type_result;
11925 enum dwarf_type encoding;
11927 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11928 return 0;
11930 /* If this is a subtype that should not be emitted as a subrange type,
11931 use the base type. See subrange_type_for_debug_p. */
11932 if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11933 type = TREE_TYPE (type);
11935 switch (TREE_CODE (type))
11937 case INTEGER_TYPE:
11938 if (TYPE_STRING_FLAG (type))
11940 if (TYPE_UNSIGNED (type))
11941 encoding = DW_ATE_unsigned_char;
11942 else
11943 encoding = DW_ATE_signed_char;
11945 else if (TYPE_UNSIGNED (type))
11946 encoding = DW_ATE_unsigned;
11947 else
11948 encoding = DW_ATE_signed;
11949 break;
11951 case REAL_TYPE:
11952 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
11954 if (dwarf_version >= 3 || !dwarf_strict)
11955 encoding = DW_ATE_decimal_float;
11956 else
11957 encoding = DW_ATE_lo_user;
11959 else
11960 encoding = DW_ATE_float;
11961 break;
11963 case FIXED_POINT_TYPE:
11964 if (!(dwarf_version >= 3 || !dwarf_strict))
11965 encoding = DW_ATE_lo_user;
11966 else if (TYPE_UNSIGNED (type))
11967 encoding = DW_ATE_unsigned_fixed;
11968 else
11969 encoding = DW_ATE_signed_fixed;
11970 break;
11972 /* Dwarf2 doesn't know anything about complex ints, so use
11973 a user defined type for it. */
11974 case COMPLEX_TYPE:
11975 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
11976 encoding = DW_ATE_complex_float;
11977 else
11978 encoding = DW_ATE_lo_user;
11979 break;
11981 case BOOLEAN_TYPE:
11982 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
11983 encoding = DW_ATE_boolean;
11984 break;
11986 default:
11987 /* No other TREE_CODEs are Dwarf fundamental types. */
11988 gcc_unreachable ();
11991 base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
11993 /* This probably indicates a bug. */
11994 if (! TYPE_NAME (type))
11995 add_name_attribute (base_type_result, "__unknown__");
11997 add_AT_unsigned (base_type_result, DW_AT_byte_size,
11998 int_size_in_bytes (type));
11999 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12001 return base_type_result;
12004 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12005 given input type is a Dwarf "fundamental" type. Otherwise return null. */
12007 static inline int
12008 is_base_type (tree type)
12010 switch (TREE_CODE (type))
12012 case ERROR_MARK:
12013 case VOID_TYPE:
12014 case INTEGER_TYPE:
12015 case REAL_TYPE:
12016 case FIXED_POINT_TYPE:
12017 case COMPLEX_TYPE:
12018 case BOOLEAN_TYPE:
12019 return 1;
12021 case ARRAY_TYPE:
12022 case RECORD_TYPE:
12023 case UNION_TYPE:
12024 case QUAL_UNION_TYPE:
12025 case ENUMERAL_TYPE:
12026 case FUNCTION_TYPE:
12027 case METHOD_TYPE:
12028 case POINTER_TYPE:
12029 case REFERENCE_TYPE:
12030 case OFFSET_TYPE:
12031 case LANG_TYPE:
12032 case VECTOR_TYPE:
12033 return 0;
12035 default:
12036 gcc_unreachable ();
12039 return 0;
12042 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12043 node, return the size in bits for the type if it is a constant, or else
12044 return the alignment for the type if the type's size is not constant, or
12045 else return BITS_PER_WORD if the type actually turns out to be an
12046 ERROR_MARK node. */
12048 static inline unsigned HOST_WIDE_INT
12049 simple_type_size_in_bits (const_tree type)
12051 if (TREE_CODE (type) == ERROR_MARK)
12052 return BITS_PER_WORD;
12053 else if (TYPE_SIZE (type) == NULL_TREE)
12054 return 0;
12055 else if (host_integerp (TYPE_SIZE (type), 1))
12056 return tree_low_cst (TYPE_SIZE (type), 1);
12057 else
12058 return TYPE_ALIGN (type);
12061 /* Given a pointer to a tree node for a subrange type, return a pointer
12062 to a DIE that describes the given type. */
12064 static dw_die_ref
12065 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12067 dw_die_ref subrange_die;
12068 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12070 if (context_die == NULL)
12071 context_die = comp_unit_die;
12073 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12075 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12077 /* The size of the subrange type and its base type do not match,
12078 so we need to generate a size attribute for the subrange type. */
12079 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12082 if (low)
12083 add_bound_info (subrange_die, DW_AT_lower_bound, low);
12084 if (high)
12085 add_bound_info (subrange_die, DW_AT_upper_bound, high);
12087 return subrange_die;
12090 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12091 entry that chains various modifiers in front of the given type. */
12093 static dw_die_ref
12094 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12095 dw_die_ref context_die)
12097 enum tree_code code = TREE_CODE (type);
12098 dw_die_ref mod_type_die;
12099 dw_die_ref sub_die = NULL;
12100 tree item_type = NULL;
12101 tree qualified_type;
12102 tree name, low, high;
12104 if (code == ERROR_MARK)
12105 return NULL;
12107 /* See if we already have the appropriately qualified variant of
12108 this type. */
12109 qualified_type
12110 = get_qualified_type (type,
12111 ((is_const_type ? TYPE_QUAL_CONST : 0)
12112 | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12114 /* If we do, then we can just use its DIE, if it exists. */
12115 if (qualified_type)
12117 mod_type_die = lookup_type_die (qualified_type);
12118 if (mod_type_die)
12119 return mod_type_die;
12122 name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12124 /* Handle C typedef types. */
12125 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
12127 tree dtype = TREE_TYPE (name);
12129 if (qualified_type == dtype)
12131 /* For a named type, use the typedef. */
12132 gen_type_die (qualified_type, context_die);
12133 return lookup_type_die (qualified_type);
12135 else if (is_const_type < TYPE_READONLY (dtype)
12136 || is_volatile_type < TYPE_VOLATILE (dtype)
12137 || (is_const_type <= TYPE_READONLY (dtype)
12138 && is_volatile_type <= TYPE_VOLATILE (dtype)
12139 && DECL_ORIGINAL_TYPE (name) != type))
12140 /* cv-unqualified version of named type. Just use the unnamed
12141 type to which it refers. */
12142 return modified_type_die (DECL_ORIGINAL_TYPE (name),
12143 is_const_type, is_volatile_type,
12144 context_die);
12145 /* Else cv-qualified version of named type; fall through. */
12148 if (is_const_type)
12150 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12151 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12153 else if (is_volatile_type)
12155 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12156 sub_die = modified_type_die (type, 0, 0, context_die);
12158 else if (code == POINTER_TYPE)
12160 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12161 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12162 simple_type_size_in_bits (type) / BITS_PER_UNIT);
12163 item_type = TREE_TYPE (type);
12164 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12165 add_AT_unsigned (mod_type_die, DW_AT_address_class,
12166 TYPE_ADDR_SPACE (item_type));
12168 else if (code == REFERENCE_TYPE)
12170 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12171 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12172 simple_type_size_in_bits (type) / BITS_PER_UNIT);
12173 item_type = TREE_TYPE (type);
12174 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12175 add_AT_unsigned (mod_type_die, DW_AT_address_class,
12176 TYPE_ADDR_SPACE (item_type));
12178 else if (code == INTEGER_TYPE
12179 && TREE_TYPE (type) != NULL_TREE
12180 && subrange_type_for_debug_p (type, &low, &high))
12182 mod_type_die = subrange_type_die (type, low, high, context_die);
12183 item_type = TREE_TYPE (type);
12185 else if (is_base_type (type))
12186 mod_type_die = base_type_die (type);
12187 else
12189 gen_type_die (type, context_die);
12191 /* We have to get the type_main_variant here (and pass that to the
12192 `lookup_type_die' routine) because the ..._TYPE node we have
12193 might simply be a *copy* of some original type node (where the
12194 copy was created to help us keep track of typedef names) and
12195 that copy might have a different TYPE_UID from the original
12196 ..._TYPE node. */
12197 if (TREE_CODE (type) != VECTOR_TYPE)
12198 return lookup_type_die (type_main_variant (type));
12199 else
12200 /* Vectors have the debugging information in the type,
12201 not the main variant. */
12202 return lookup_type_die (type);
12205 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
12206 don't output a DW_TAG_typedef, since there isn't one in the
12207 user's program; just attach a DW_AT_name to the type.
12208 Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12209 if the base type already has the same name. */
12210 if (name
12211 && ((TREE_CODE (name) != TYPE_DECL
12212 && (qualified_type == TYPE_MAIN_VARIANT (type)
12213 || (!is_const_type && !is_volatile_type)))
12214 || (TREE_CODE (name) == TYPE_DECL
12215 && TREE_TYPE (name) == qualified_type
12216 && DECL_NAME (name))))
12218 if (TREE_CODE (name) == TYPE_DECL)
12219 /* Could just call add_name_and_src_coords_attributes here,
12220 but since this is a builtin type it doesn't have any
12221 useful source coordinates anyway. */
12222 name = DECL_NAME (name);
12223 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12226 if (qualified_type)
12227 equate_type_number_to_die (qualified_type, mod_type_die);
12229 if (item_type)
12230 /* We must do this after the equate_type_number_to_die call, in case
12231 this is a recursive type. This ensures that the modified_type_die
12232 recursion will terminate even if the type is recursive. Recursive
12233 types are possible in Ada. */
12234 sub_die = modified_type_die (item_type,
12235 TYPE_READONLY (item_type),
12236 TYPE_VOLATILE (item_type),
12237 context_die);
12239 if (sub_die != NULL)
12240 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12242 return mod_type_die;
12245 /* Generate DIEs for the generic parameters of T.
12246 T must be either a generic type or a generic function.
12247 See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more. */
12249 static void
12250 gen_generic_params_dies (tree t)
12252 tree parms, args;
12253 int parms_num, i;
12254 dw_die_ref die = NULL;
12256 if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12257 return;
12259 if (TYPE_P (t))
12260 die = lookup_type_die (t);
12261 else if (DECL_P (t))
12262 die = lookup_decl_die (t);
12264 gcc_assert (die);
12266 parms = lang_hooks.get_innermost_generic_parms (t);
12267 if (!parms)
12268 /* T has no generic parameter. It means T is neither a generic type
12269 or function. End of story. */
12270 return;
12272 parms_num = TREE_VEC_LENGTH (parms);
12273 args = lang_hooks.get_innermost_generic_args (t);
12274 for (i = 0; i < parms_num; i++)
12276 tree parm, arg, arg_pack_elems;
12278 parm = TREE_VEC_ELT (parms, i);
12279 arg = TREE_VEC_ELT (args, i);
12280 arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12281 gcc_assert (parm && TREE_VALUE (parm) && arg);
12283 if (parm && TREE_VALUE (parm) && arg)
12285 /* If PARM represents a template parameter pack,
12286 emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12287 by DW_TAG_template_*_parameter DIEs for the argument
12288 pack elements of ARG. Note that ARG would then be
12289 an argument pack. */
12290 if (arg_pack_elems)
12291 template_parameter_pack_die (TREE_VALUE (parm),
12292 arg_pack_elems,
12293 die);
12294 else
12295 generic_parameter_die (TREE_VALUE (parm), arg,
12296 true /* Emit DW_AT_name */, die);
12301 /* Create and return a DIE for PARM which should be
12302 the representation of a generic type parameter.
12303 For instance, in the C++ front end, PARM would be a template parameter.
12304 ARG is the argument to PARM.
12305 EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12306 name of the PARM.
12307 PARENT_DIE is the parent DIE which the new created DIE should be added to,
12308 as a child node. */
12310 static dw_die_ref
12311 generic_parameter_die (tree parm, tree arg,
12312 bool emit_name_p,
12313 dw_die_ref parent_die)
12315 dw_die_ref tmpl_die = NULL;
12316 const char *name = NULL;
12318 if (!parm || !DECL_NAME (parm) || !arg)
12319 return NULL;
12321 /* We support non-type generic parameters and arguments,
12322 type generic parameters and arguments, as well as
12323 generic generic parameters (a.k.a. template template parameters in C++)
12324 and arguments. */
12325 if (TREE_CODE (parm) == PARM_DECL)
12326 /* PARM is a nontype generic parameter */
12327 tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12328 else if (TREE_CODE (parm) == TYPE_DECL)
12329 /* PARM is a type generic parameter. */
12330 tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12331 else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12332 /* PARM is a generic generic parameter.
12333 Its DIE is a GNU extension. It shall have a
12334 DW_AT_name attribute to represent the name of the template template
12335 parameter, and a DW_AT_GNU_template_name attribute to represent the
12336 name of the template template argument. */
12337 tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12338 parent_die, parm);
12339 else
12340 gcc_unreachable ();
12342 if (tmpl_die)
12344 tree tmpl_type;
12346 /* If PARM is a generic parameter pack, it means we are
12347 emitting debug info for a template argument pack element.
12348 In other terms, ARG is a template argument pack element.
12349 In that case, we don't emit any DW_AT_name attribute for
12350 the die. */
12351 if (emit_name_p)
12353 name = IDENTIFIER_POINTER (DECL_NAME (parm));
12354 gcc_assert (name);
12355 add_AT_string (tmpl_die, DW_AT_name, name);
12358 if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12360 /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12361 TMPL_DIE should have a child DW_AT_type attribute that is set
12362 to the type of the argument to PARM, which is ARG.
12363 If PARM is a type generic parameter, TMPL_DIE should have a
12364 child DW_AT_type that is set to ARG. */
12365 tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12366 add_type_attribute (tmpl_die, tmpl_type, 0,
12367 TREE_THIS_VOLATILE (tmpl_type),
12368 parent_die);
12370 else
12372 /* So TMPL_DIE is a DIE representing a
12373 a generic generic template parameter, a.k.a template template
12374 parameter in C++ and arg is a template. */
12376 /* The DW_AT_GNU_template_name attribute of the DIE must be set
12377 to the name of the argument. */
12378 name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12379 if (name)
12380 add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12383 if (TREE_CODE (parm) == PARM_DECL)
12384 /* So PARM is a non-type generic parameter.
12385 DWARF3 5.6.8 says we must set a DW_AT_const_value child
12386 attribute of TMPL_DIE which value represents the value
12387 of ARG.
12388 We must be careful here:
12389 The value of ARG might reference some function decls.
12390 We might currently be emitting debug info for a generic
12391 type and types are emitted before function decls, we don't
12392 know if the function decls referenced by ARG will actually be
12393 emitted after cgraph computations.
12394 So must defer the generation of the DW_AT_const_value to
12395 after cgraph is ready. */
12396 append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12399 return tmpl_die;
12402 /* Generate and return a DW_TAG_GNU_template_parameter_pack DIE representing.
12403 PARM_PACK must be a template parameter pack. The returned DIE
12404 will be child DIE of PARENT_DIE. */
12406 static dw_die_ref
12407 template_parameter_pack_die (tree parm_pack,
12408 tree parm_pack_args,
12409 dw_die_ref parent_die)
12411 dw_die_ref die;
12412 int j;
12414 gcc_assert (parent_die && parm_pack);
12416 die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12417 add_name_and_src_coords_attributes (die, parm_pack);
12418 for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12419 generic_parameter_die (parm_pack,
12420 TREE_VEC_ELT (parm_pack_args, j),
12421 false /* Don't emit DW_AT_name */,
12422 die);
12423 return die;
12426 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12427 an enumerated type. */
12429 static inline int
12430 type_is_enum (const_tree type)
12432 return TREE_CODE (type) == ENUMERAL_TYPE;
12435 /* Return the DBX register number described by a given RTL node. */
12437 static unsigned int
12438 dbx_reg_number (const_rtx rtl)
12440 unsigned regno = REGNO (rtl);
12442 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12444 #ifdef LEAF_REG_REMAP
12445 if (current_function_uses_only_leaf_regs)
12447 int leaf_reg = LEAF_REG_REMAP (regno);
12448 if (leaf_reg != -1)
12449 regno = (unsigned) leaf_reg;
12451 #endif
12453 return DBX_REGISTER_NUMBER (regno);
12456 /* Optionally add a DW_OP_piece term to a location description expression.
12457 DW_OP_piece is only added if the location description expression already
12458 doesn't end with DW_OP_piece. */
12460 static void
12461 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12463 dw_loc_descr_ref loc;
12465 if (*list_head != NULL)
12467 /* Find the end of the chain. */
12468 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12471 if (loc->dw_loc_opc != DW_OP_piece)
12472 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12476 /* Return a location descriptor that designates a machine register or
12477 zero if there is none. */
12479 static dw_loc_descr_ref
12480 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12482 rtx regs;
12484 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12485 return 0;
12487 regs = targetm.dwarf_register_span (rtl);
12489 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12490 return multiple_reg_loc_descriptor (rtl, regs, initialized);
12491 else
12492 return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12495 /* Return a location descriptor that designates a machine register for
12496 a given hard register number. */
12498 static dw_loc_descr_ref
12499 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12501 dw_loc_descr_ref reg_loc_descr;
12503 if (regno <= 31)
12504 reg_loc_descr
12505 = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12506 else
12507 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12509 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12510 add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12512 return reg_loc_descr;
12515 /* Given an RTL of a register, return a location descriptor that
12516 designates a value that spans more than one register. */
12518 static dw_loc_descr_ref
12519 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12520 enum var_init_status initialized)
12522 int nregs, size, i;
12523 unsigned reg;
12524 dw_loc_descr_ref loc_result = NULL;
12526 reg = REGNO (rtl);
12527 #ifdef LEAF_REG_REMAP
12528 if (current_function_uses_only_leaf_regs)
12530 int leaf_reg = LEAF_REG_REMAP (reg);
12531 if (leaf_reg != -1)
12532 reg = (unsigned) leaf_reg;
12534 #endif
12535 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12536 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12538 /* Simple, contiguous registers. */
12539 if (regs == NULL_RTX)
12541 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12543 loc_result = NULL;
12544 while (nregs--)
12546 dw_loc_descr_ref t;
12548 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12549 VAR_INIT_STATUS_INITIALIZED);
12550 add_loc_descr (&loc_result, t);
12551 add_loc_descr_op_piece (&loc_result, size);
12552 ++reg;
12554 return loc_result;
12557 /* Now onto stupid register sets in non contiguous locations. */
12559 gcc_assert (GET_CODE (regs) == PARALLEL);
12561 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12562 loc_result = NULL;
12564 for (i = 0; i < XVECLEN (regs, 0); ++i)
12566 dw_loc_descr_ref t;
12568 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12569 VAR_INIT_STATUS_INITIALIZED);
12570 add_loc_descr (&loc_result, t);
12571 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12572 add_loc_descr_op_piece (&loc_result, size);
12575 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12576 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12577 return loc_result;
12580 #endif /* DWARF2_DEBUGGING_INFO */
12582 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12584 /* Return a location descriptor that designates a constant. */
12586 static dw_loc_descr_ref
12587 int_loc_descriptor (HOST_WIDE_INT i)
12589 enum dwarf_location_atom op;
12591 /* Pick the smallest representation of a constant, rather than just
12592 defaulting to the LEB encoding. */
12593 if (i >= 0)
12595 if (i <= 31)
12596 op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12597 else if (i <= 0xff)
12598 op = DW_OP_const1u;
12599 else if (i <= 0xffff)
12600 op = DW_OP_const2u;
12601 else if (HOST_BITS_PER_WIDE_INT == 32
12602 || i <= 0xffffffff)
12603 op = DW_OP_const4u;
12604 else
12605 op = DW_OP_constu;
12607 else
12609 if (i >= -0x80)
12610 op = DW_OP_const1s;
12611 else if (i >= -0x8000)
12612 op = DW_OP_const2s;
12613 else if (HOST_BITS_PER_WIDE_INT == 32
12614 || i >= -0x80000000)
12615 op = DW_OP_const4s;
12616 else
12617 op = DW_OP_consts;
12620 return new_loc_descr (op, i, 0);
12622 #endif
12624 #ifdef DWARF2_DEBUGGING_INFO
12625 /* Return loc description representing "address" of integer value.
12626 This can appear only as toplevel expression. */
12628 static dw_loc_descr_ref
12629 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12631 int litsize;
12632 dw_loc_descr_ref loc_result = NULL;
12634 if (!(dwarf_version >= 4 || !dwarf_strict))
12635 return NULL;
12637 if (i >= 0)
12639 if (i <= 31)
12640 litsize = 1;
12641 else if (i <= 0xff)
12642 litsize = 2;
12643 else if (i <= 0xffff)
12644 litsize = 3;
12645 else if (HOST_BITS_PER_WIDE_INT == 32
12646 || i <= 0xffffffff)
12647 litsize = 5;
12648 else
12649 litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12651 else
12653 if (i >= -0x80)
12654 litsize = 2;
12655 else if (i >= -0x8000)
12656 litsize = 3;
12657 else if (HOST_BITS_PER_WIDE_INT == 32
12658 || i >= -0x80000000)
12659 litsize = 5;
12660 else
12661 litsize = 1 + size_of_sleb128 (i);
12663 /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12664 is more compact. For DW_OP_stack_value we need:
12665 litsize + 1 (DW_OP_stack_value)
12666 and for DW_OP_implicit_value:
12667 1 (DW_OP_implicit_value) + 1 (length) + size. */
12668 if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12670 loc_result = int_loc_descriptor (i);
12671 add_loc_descr (&loc_result,
12672 new_loc_descr (DW_OP_stack_value, 0, 0));
12673 return loc_result;
12676 loc_result = new_loc_descr (DW_OP_implicit_value,
12677 size, 0);
12678 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12679 loc_result->dw_loc_oprnd2.v.val_int = i;
12680 return loc_result;
12683 /* Return a location descriptor that designates a base+offset location. */
12685 static dw_loc_descr_ref
12686 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12687 enum var_init_status initialized)
12689 unsigned int regno;
12690 dw_loc_descr_ref result;
12691 dw_fde_ref fde = current_fde ();
12693 /* We only use "frame base" when we're sure we're talking about the
12694 post-prologue local stack frame. We do this by *not* running
12695 register elimination until this point, and recognizing the special
12696 argument pointer and soft frame pointer rtx's. */
12697 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12699 rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12701 if (elim != reg)
12703 if (GET_CODE (elim) == PLUS)
12705 offset += INTVAL (XEXP (elim, 1));
12706 elim = XEXP (elim, 0);
12708 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12709 && (elim == hard_frame_pointer_rtx
12710 || elim == stack_pointer_rtx))
12711 || elim == (frame_pointer_needed
12712 ? hard_frame_pointer_rtx
12713 : stack_pointer_rtx));
12715 /* If drap register is used to align stack, use frame
12716 pointer + offset to access stack variables. If stack
12717 is aligned without drap, use stack pointer + offset to
12718 access stack variables. */
12719 if (crtl->stack_realign_tried
12720 && reg == frame_pointer_rtx)
12722 int base_reg
12723 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12724 ? HARD_FRAME_POINTER_REGNUM
12725 : STACK_POINTER_REGNUM);
12726 return new_reg_loc_descr (base_reg, offset);
12729 offset += frame_pointer_fb_offset;
12730 return new_loc_descr (DW_OP_fbreg, offset, 0);
12733 else if (fde
12734 && fde->drap_reg != INVALID_REGNUM
12735 && (fde->drap_reg == REGNO (reg)
12736 || fde->vdrap_reg == REGNO (reg)))
12738 /* Use cfa+offset to represent the location of arguments passed
12739 on stack when drap is used to align stack. */
12740 return new_loc_descr (DW_OP_fbreg, offset, 0);
12743 regno = dbx_reg_number (reg);
12744 if (regno <= 31)
12745 result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12746 offset, 0);
12747 else
12748 result = new_loc_descr (DW_OP_bregx, regno, offset);
12750 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12751 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12753 return result;
12756 /* Return true if this RTL expression describes a base+offset calculation. */
12758 static inline int
12759 is_based_loc (const_rtx rtl)
12761 return (GET_CODE (rtl) == PLUS
12762 && ((REG_P (XEXP (rtl, 0))
12763 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12764 && CONST_INT_P (XEXP (rtl, 1)))));
12767 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12768 failed. */
12770 static dw_loc_descr_ref
12771 tls_mem_loc_descriptor (rtx mem)
12773 tree base;
12774 dw_loc_descr_ref loc_result;
12776 if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12777 return NULL;
12779 base = get_base_address (MEM_EXPR (mem));
12780 if (base == NULL
12781 || TREE_CODE (base) != VAR_DECL
12782 || !DECL_THREAD_LOCAL_P (base))
12783 return NULL;
12785 loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12786 if (loc_result == NULL)
12787 return NULL;
12789 if (INTVAL (MEM_OFFSET (mem)))
12790 loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12792 return loc_result;
12795 /* Output debug info about reason why we failed to expand expression as dwarf
12796 expression. */
12798 static void
12799 expansion_failed (tree expr, rtx rtl, char const *reason)
12801 if (dump_file && (dump_flags & TDF_DETAILS))
12803 fprintf (dump_file, "Failed to expand as dwarf: ");
12804 if (expr)
12805 print_generic_expr (dump_file, expr, dump_flags);
12806 if (rtl)
12808 fprintf (dump_file, "\n");
12809 print_rtl (dump_file, rtl);
12811 fprintf (dump_file, "\nReason: %s\n", reason);
12815 /* Helper function for const_ok_for_output, called either directly
12816 or via for_each_rtx. */
12818 static int
12819 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12821 rtx rtl = *rtlp;
12823 if (GET_CODE (rtl) != SYMBOL_REF)
12824 return 0;
12826 if (CONSTANT_POOL_ADDRESS_P (rtl))
12828 bool marked;
12829 get_pool_constant_mark (rtl, &marked);
12830 /* If all references to this pool constant were optimized away,
12831 it was not output and thus we can't represent it. */
12832 if (!marked)
12834 expansion_failed (NULL_TREE, rtl,
12835 "Constant was removed from constant pool.\n");
12836 return 1;
12840 if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12841 return 1;
12843 /* Avoid references to external symbols in debug info, on several targets
12844 the linker might even refuse to link when linking a shared library,
12845 and in many other cases the relocations for .debug_info/.debug_loc are
12846 dropped, so the address becomes zero anyway. Hidden symbols, guaranteed
12847 to be defined within the same shared library or executable are fine. */
12848 if (SYMBOL_REF_EXTERNAL_P (rtl))
12850 tree decl = SYMBOL_REF_DECL (rtl);
12852 if (decl == NULL || !targetm.binds_local_p (decl))
12854 expansion_failed (NULL_TREE, rtl,
12855 "Symbol not defined in current TU.\n");
12856 return 1;
12860 return 0;
12863 /* Return true if constant RTL can be emitted in DW_OP_addr or
12864 DW_AT_const_value. TLS SYMBOL_REFs, external SYMBOL_REFs or
12865 non-marked constant pool SYMBOL_REFs can't be referenced in it. */
12867 static bool
12868 const_ok_for_output (rtx rtl)
12870 if (GET_CODE (rtl) == SYMBOL_REF)
12871 return const_ok_for_output_1 (&rtl, NULL) == 0;
12873 if (GET_CODE (rtl) == CONST)
12874 return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12876 return true;
12879 /* The following routine converts the RTL for a variable or parameter
12880 (resident in memory) into an equivalent Dwarf representation of a
12881 mechanism for getting the address of that same variable onto the top of a
12882 hypothetical "address evaluation" stack.
12884 When creating memory location descriptors, we are effectively transforming
12885 the RTL for a memory-resident object into its Dwarf postfix expression
12886 equivalent. This routine recursively descends an RTL tree, turning
12887 it into Dwarf postfix code as it goes.
12889 MODE is the mode of the memory reference, needed to handle some
12890 autoincrement addressing modes.
12892 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12893 location list for RTL.
12895 Return 0 if we can't represent the location. */
12897 static dw_loc_descr_ref
12898 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12899 enum var_init_status initialized)
12901 dw_loc_descr_ref mem_loc_result = NULL;
12902 enum dwarf_location_atom op;
12903 dw_loc_descr_ref op0, op1;
12905 /* Note that for a dynamically sized array, the location we will generate a
12906 description of here will be the lowest numbered location which is
12907 actually within the array. That's *not* necessarily the same as the
12908 zeroth element of the array. */
12910 rtl = targetm.delegitimize_address (rtl);
12912 switch (GET_CODE (rtl))
12914 case POST_INC:
12915 case POST_DEC:
12916 case POST_MODIFY:
12917 return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12919 case SUBREG:
12920 /* The case of a subreg may arise when we have a local (register)
12921 variable or a formal (register) parameter which doesn't quite fill
12922 up an entire register. For now, just assume that it is
12923 legitimate to make the Dwarf info refer to the whole register which
12924 contains the given subreg. */
12925 if (!subreg_lowpart_p (rtl))
12926 break;
12927 rtl = SUBREG_REG (rtl);
12928 if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
12929 break;
12930 if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
12931 break;
12932 mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
12933 break;
12935 case REG:
12936 /* Whenever a register number forms a part of the description of the
12937 method for calculating the (dynamic) address of a memory resident
12938 object, DWARF rules require the register number be referred to as
12939 a "base register". This distinction is not based in any way upon
12940 what category of register the hardware believes the given register
12941 belongs to. This is strictly DWARF terminology we're dealing with
12942 here. Note that in cases where the location of a memory-resident
12943 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
12944 OP_CONST (0)) the actual DWARF location descriptor that we generate
12945 may just be OP_BASEREG (basereg). This may look deceptively like
12946 the object in question was allocated to a register (rather than in
12947 memory) so DWARF consumers need to be aware of the subtle
12948 distinction between OP_REG and OP_BASEREG. */
12949 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
12950 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
12951 else if (stack_realign_drap
12952 && crtl->drap_reg
12953 && crtl->args.internal_arg_pointer == rtl
12954 && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
12956 /* If RTL is internal_arg_pointer, which has been optimized
12957 out, use DRAP instead. */
12958 mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
12959 VAR_INIT_STATUS_INITIALIZED);
12961 break;
12963 case SIGN_EXTEND:
12964 case ZERO_EXTEND:
12965 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
12966 VAR_INIT_STATUS_INITIALIZED);
12967 if (op0 == 0)
12968 break;
12969 else
12971 int shift = DWARF2_ADDR_SIZE
12972 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
12973 shift *= BITS_PER_UNIT;
12974 if (GET_CODE (rtl) == SIGN_EXTEND)
12975 op = DW_OP_shra;
12976 else
12977 op = DW_OP_shr;
12978 mem_loc_result = op0;
12979 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12980 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
12981 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
12982 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
12984 break;
12986 case MEM:
12987 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
12988 VAR_INIT_STATUS_INITIALIZED);
12989 if (mem_loc_result == NULL)
12990 mem_loc_result = tls_mem_loc_descriptor (rtl);
12991 if (mem_loc_result != 0)
12992 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
12993 break;
12995 case LO_SUM:
12996 rtl = XEXP (rtl, 1);
12998 /* ... fall through ... */
13000 case LABEL_REF:
13001 /* Some ports can transform a symbol ref into a label ref, because
13002 the symbol ref is too far away and has to be dumped into a constant
13003 pool. */
13004 case CONST:
13005 case SYMBOL_REF:
13006 /* Alternatively, the symbol in the constant pool might be referenced
13007 by a different symbol. */
13008 if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
13010 bool marked;
13011 rtx tmp = get_pool_constant_mark (rtl, &marked);
13013 if (GET_CODE (tmp) == SYMBOL_REF)
13015 rtl = tmp;
13016 if (CONSTANT_POOL_ADDRESS_P (tmp))
13017 get_pool_constant_mark (tmp, &marked);
13018 else
13019 marked = true;
13022 /* If all references to this pool constant were optimized away,
13023 it was not output and thus we can't represent it.
13024 FIXME: might try to use DW_OP_const_value here, though
13025 DW_OP_piece complicates it. */
13026 if (!marked)
13028 expansion_failed (NULL_TREE, rtl,
13029 "Constant was removed from constant pool.\n");
13030 return 0;
13034 if (GET_CODE (rtl) == SYMBOL_REF
13035 && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13037 dw_loc_descr_ref temp;
13039 /* If this is not defined, we have no way to emit the data. */
13040 if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13041 break;
13043 temp = new_loc_descr (DW_OP_addr, 0, 0);
13044 temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13045 temp->dw_loc_oprnd1.v.val_addr = rtl;
13046 temp->dtprel = true;
13048 mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13049 add_loc_descr (&mem_loc_result, temp);
13051 break;
13054 if (!const_ok_for_output (rtl))
13055 break;
13057 symref:
13058 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13059 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13060 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13061 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13062 break;
13064 case CONCAT:
13065 case CONCATN:
13066 case VAR_LOCATION:
13067 expansion_failed (NULL_TREE, rtl,
13068 "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13069 return 0;
13071 case PRE_MODIFY:
13072 /* Extract the PLUS expression nested inside and fall into
13073 PLUS code below. */
13074 rtl = XEXP (rtl, 1);
13075 goto plus;
13077 case PRE_INC:
13078 case PRE_DEC:
13079 /* Turn these into a PLUS expression and fall into the PLUS code
13080 below. */
13081 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13082 GEN_INT (GET_CODE (rtl) == PRE_INC
13083 ? GET_MODE_UNIT_SIZE (mode)
13084 : -GET_MODE_UNIT_SIZE (mode)));
13086 /* ... fall through ... */
13088 case PLUS:
13089 plus:
13090 if (is_based_loc (rtl))
13091 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13092 INTVAL (XEXP (rtl, 1)),
13093 VAR_INIT_STATUS_INITIALIZED);
13094 else
13096 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13097 VAR_INIT_STATUS_INITIALIZED);
13098 if (mem_loc_result == 0)
13099 break;
13101 if (CONST_INT_P (XEXP (rtl, 1)))
13102 loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13103 else
13105 dw_loc_descr_ref mem_loc_result2
13106 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13107 VAR_INIT_STATUS_INITIALIZED);
13108 if (mem_loc_result2 == 0)
13109 break;
13110 add_loc_descr (&mem_loc_result, mem_loc_result2);
13111 add_loc_descr (&mem_loc_result,
13112 new_loc_descr (DW_OP_plus, 0, 0));
13115 break;
13117 /* If a pseudo-reg is optimized away, it is possible for it to
13118 be replaced with a MEM containing a multiply or shift. */
13119 case MINUS:
13120 op = DW_OP_minus;
13121 goto do_binop;
13123 case MULT:
13124 op = DW_OP_mul;
13125 goto do_binop;
13127 case DIV:
13128 op = DW_OP_div;
13129 goto do_binop;
13131 case MOD:
13132 op = DW_OP_mod;
13133 goto do_binop;
13135 case ASHIFT:
13136 op = DW_OP_shl;
13137 goto do_binop;
13139 case ASHIFTRT:
13140 op = DW_OP_shra;
13141 goto do_binop;
13143 case LSHIFTRT:
13144 op = DW_OP_shr;
13145 goto do_binop;
13147 case AND:
13148 op = DW_OP_and;
13149 goto do_binop;
13151 case IOR:
13152 op = DW_OP_or;
13153 goto do_binop;
13155 case XOR:
13156 op = DW_OP_xor;
13157 goto do_binop;
13159 do_binop:
13160 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13161 VAR_INIT_STATUS_INITIALIZED);
13162 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13163 VAR_INIT_STATUS_INITIALIZED);
13165 if (op0 == 0 || op1 == 0)
13166 break;
13168 mem_loc_result = op0;
13169 add_loc_descr (&mem_loc_result, op1);
13170 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13171 break;
13173 case NOT:
13174 op = DW_OP_not;
13175 goto do_unop;
13177 case ABS:
13178 op = DW_OP_abs;
13179 goto do_unop;
13181 case NEG:
13182 op = DW_OP_neg;
13183 goto do_unop;
13185 do_unop:
13186 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13187 VAR_INIT_STATUS_INITIALIZED);
13189 if (op0 == 0)
13190 break;
13192 mem_loc_result = op0;
13193 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13194 break;
13196 case CONST_INT:
13197 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13198 break;
13200 case EQ:
13201 op = DW_OP_eq;
13202 goto do_scompare;
13204 case GE:
13205 op = DW_OP_ge;
13206 goto do_scompare;
13208 case GT:
13209 op = DW_OP_gt;
13210 goto do_scompare;
13212 case LE:
13213 op = DW_OP_le;
13214 goto do_scompare;
13216 case LT:
13217 op = DW_OP_lt;
13218 goto do_scompare;
13220 case NE:
13221 op = DW_OP_ne;
13222 goto do_scompare;
13224 do_scompare:
13225 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13226 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13227 || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13228 break;
13230 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13231 VAR_INIT_STATUS_INITIALIZED);
13232 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13233 VAR_INIT_STATUS_INITIALIZED);
13235 if (op0 == 0 || op1 == 0)
13236 break;
13238 if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13240 int shift = DWARF2_ADDR_SIZE
13241 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13242 shift *= BITS_PER_UNIT;
13243 add_loc_descr (&op0, int_loc_descriptor (shift));
13244 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13245 if (CONST_INT_P (XEXP (rtl, 1)))
13246 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13247 else
13249 add_loc_descr (&op1, int_loc_descriptor (shift));
13250 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13254 do_compare:
13255 mem_loc_result = op0;
13256 add_loc_descr (&mem_loc_result, op1);
13257 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13258 if (STORE_FLAG_VALUE != 1)
13260 add_loc_descr (&mem_loc_result,
13261 int_loc_descriptor (STORE_FLAG_VALUE));
13262 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13264 break;
13266 case GEU:
13267 op = DW_OP_ge;
13268 goto do_ucompare;
13270 case GTU:
13271 op = DW_OP_gt;
13272 goto do_ucompare;
13274 case LEU:
13275 op = DW_OP_le;
13276 goto do_ucompare;
13278 case LTU:
13279 op = DW_OP_lt;
13280 goto do_ucompare;
13282 do_ucompare:
13283 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13284 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13285 || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13286 break;
13288 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13289 VAR_INIT_STATUS_INITIALIZED);
13290 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13291 VAR_INIT_STATUS_INITIALIZED);
13293 if (op0 == 0 || op1 == 0)
13294 break;
13296 if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13298 HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13299 add_loc_descr (&op0, int_loc_descriptor (mask));
13300 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13301 if (CONST_INT_P (XEXP (rtl, 1)))
13302 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13303 else
13305 add_loc_descr (&op1, int_loc_descriptor (mask));
13306 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13309 else
13311 HOST_WIDE_INT bias = 1;
13312 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13313 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13314 if (CONST_INT_P (XEXP (rtl, 1)))
13315 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13316 + INTVAL (XEXP (rtl, 1)));
13317 else
13318 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13320 goto do_compare;
13322 case SMIN:
13323 case SMAX:
13324 case UMIN:
13325 case UMAX:
13326 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13327 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13328 || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13329 break;
13331 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13332 VAR_INIT_STATUS_INITIALIZED);
13333 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13334 VAR_INIT_STATUS_INITIALIZED);
13336 if (op0 == 0 || op1 == 0)
13337 break;
13339 add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13340 add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13341 add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13342 if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13344 if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13346 HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13347 add_loc_descr (&op0, int_loc_descriptor (mask));
13348 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13349 add_loc_descr (&op1, int_loc_descriptor (mask));
13350 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13352 else
13354 HOST_WIDE_INT bias = 1;
13355 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13356 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13357 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13360 else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13362 int shift = DWARF2_ADDR_SIZE
13363 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13364 shift *= BITS_PER_UNIT;
13365 add_loc_descr (&op0, int_loc_descriptor (shift));
13366 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13367 add_loc_descr (&op1, int_loc_descriptor (shift));
13368 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13371 if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13372 op = DW_OP_lt;
13373 else
13374 op = DW_OP_gt;
13375 mem_loc_result = op0;
13376 add_loc_descr (&mem_loc_result, op1);
13377 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13379 dw_loc_descr_ref bra_node, drop_node;
13381 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13382 add_loc_descr (&mem_loc_result, bra_node);
13383 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13384 drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13385 add_loc_descr (&mem_loc_result, drop_node);
13386 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13387 bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13389 break;
13391 case ZERO_EXTRACT:
13392 case SIGN_EXTRACT:
13393 if (CONST_INT_P (XEXP (rtl, 1))
13394 && CONST_INT_P (XEXP (rtl, 2))
13395 && ((unsigned) INTVAL (XEXP (rtl, 1))
13396 + (unsigned) INTVAL (XEXP (rtl, 2))
13397 <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13398 && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13399 && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13401 int shift, size;
13402 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13403 VAR_INIT_STATUS_INITIALIZED);
13404 if (op0 == 0)
13405 break;
13406 if (GET_CODE (rtl) == SIGN_EXTRACT)
13407 op = DW_OP_shra;
13408 else
13409 op = DW_OP_shr;
13410 mem_loc_result = op0;
13411 size = INTVAL (XEXP (rtl, 1));
13412 shift = INTVAL (XEXP (rtl, 2));
13413 if (BITS_BIG_ENDIAN)
13414 shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13415 - shift - size;
13416 if (shift + size != (int) DWARF2_ADDR_SIZE)
13418 add_loc_descr (&mem_loc_result,
13419 int_loc_descriptor (DWARF2_ADDR_SIZE
13420 - shift - size));
13421 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13423 if (size != (int) DWARF2_ADDR_SIZE)
13425 add_loc_descr (&mem_loc_result,
13426 int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13427 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13430 break;
13432 case COMPARE:
13433 case IF_THEN_ELSE:
13434 case ROTATE:
13435 case ROTATERT:
13436 case TRUNCATE:
13437 /* In theory, we could implement the above. */
13438 /* DWARF cannot represent the unsigned compare operations
13439 natively. */
13440 case SS_MULT:
13441 case US_MULT:
13442 case SS_DIV:
13443 case US_DIV:
13444 case UDIV:
13445 case UMOD:
13446 case UNORDERED:
13447 case ORDERED:
13448 case UNEQ:
13449 case UNGE:
13450 case UNGT:
13451 case UNLE:
13452 case UNLT:
13453 case LTGT:
13454 case FLOAT_EXTEND:
13455 case FLOAT_TRUNCATE:
13456 case FLOAT:
13457 case UNSIGNED_FLOAT:
13458 case FIX:
13459 case UNSIGNED_FIX:
13460 case FRACT_CONVERT:
13461 case UNSIGNED_FRACT_CONVERT:
13462 case SAT_FRACT:
13463 case UNSIGNED_SAT_FRACT:
13464 case SQRT:
13465 case BSWAP:
13466 case FFS:
13467 case CLZ:
13468 case CTZ:
13469 case POPCOUNT:
13470 case PARITY:
13471 case ASM_OPERANDS:
13472 case UNSPEC:
13473 case HIGH:
13474 /* If delegitimize_address couldn't do anything with the UNSPEC, we
13475 can't express it in the debug info. This can happen e.g. with some
13476 TLS UNSPECs. */
13477 break;
13479 case CONST_STRING:
13480 resolve_one_addr (&rtl, NULL);
13481 goto symref;
13483 default:
13484 #ifdef ENABLE_CHECKING
13485 print_rtl (stderr, rtl);
13486 gcc_unreachable ();
13487 #else
13488 break;
13489 #endif
13492 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13493 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13495 return mem_loc_result;
13498 /* Return a descriptor that describes the concatenation of two locations.
13499 This is typically a complex variable. */
13501 static dw_loc_descr_ref
13502 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13504 dw_loc_descr_ref cc_loc_result = NULL;
13505 dw_loc_descr_ref x0_ref
13506 = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13507 dw_loc_descr_ref x1_ref
13508 = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13510 if (x0_ref == 0 || x1_ref == 0)
13511 return 0;
13513 cc_loc_result = x0_ref;
13514 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13516 add_loc_descr (&cc_loc_result, x1_ref);
13517 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13519 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13520 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13522 return cc_loc_result;
13525 /* Return a descriptor that describes the concatenation of N
13526 locations. */
13528 static dw_loc_descr_ref
13529 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13531 unsigned int i;
13532 dw_loc_descr_ref cc_loc_result = NULL;
13533 unsigned int n = XVECLEN (concatn, 0);
13535 for (i = 0; i < n; ++i)
13537 dw_loc_descr_ref ref;
13538 rtx x = XVECEXP (concatn, 0, i);
13540 ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13541 if (ref == NULL)
13542 return NULL;
13544 add_loc_descr (&cc_loc_result, ref);
13545 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13548 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13549 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13551 return cc_loc_result;
13554 /* Output a proper Dwarf location descriptor for a variable or parameter
13555 which is either allocated in a register or in a memory location. For a
13556 register, we just generate an OP_REG and the register number. For a
13557 memory location we provide a Dwarf postfix expression describing how to
13558 generate the (dynamic) address of the object onto the address stack.
13560 MODE is mode of the decl if this loc_descriptor is going to be used in
13561 .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13562 allowed, VOIDmode otherwise.
13564 If we don't know how to describe it, return 0. */
13566 static dw_loc_descr_ref
13567 loc_descriptor (rtx rtl, enum machine_mode mode,
13568 enum var_init_status initialized)
13570 dw_loc_descr_ref loc_result = NULL;
13572 switch (GET_CODE (rtl))
13574 case SUBREG:
13575 /* The case of a subreg may arise when we have a local (register)
13576 variable or a formal (register) parameter which doesn't quite fill
13577 up an entire register. For now, just assume that it is
13578 legitimate to make the Dwarf info refer to the whole register which
13579 contains the given subreg. */
13580 loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13581 break;
13583 case REG:
13584 loc_result = reg_loc_descriptor (rtl, initialized);
13585 break;
13587 case SIGN_EXTEND:
13588 case ZERO_EXTEND:
13589 loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13590 break;
13592 case MEM:
13593 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13594 initialized);
13595 if (loc_result == NULL)
13596 loc_result = tls_mem_loc_descriptor (rtl);
13597 break;
13599 case CONCAT:
13600 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13601 initialized);
13602 break;
13604 case CONCATN:
13605 loc_result = concatn_loc_descriptor (rtl, initialized);
13606 break;
13608 case VAR_LOCATION:
13609 /* Single part. */
13610 if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
13612 loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), mode,
13613 initialized);
13614 break;
13617 rtl = XEXP (rtl, 1);
13618 /* FALLTHRU */
13620 case PARALLEL:
13622 rtvec par_elems = XVEC (rtl, 0);
13623 int num_elem = GET_NUM_ELEM (par_elems);
13624 enum machine_mode mode;
13625 int i;
13627 /* Create the first one, so we have something to add to. */
13628 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13629 VOIDmode, initialized);
13630 if (loc_result == NULL)
13631 return NULL;
13632 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13633 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13634 for (i = 1; i < num_elem; i++)
13636 dw_loc_descr_ref temp;
13638 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13639 VOIDmode, initialized);
13640 if (temp == NULL)
13641 return NULL;
13642 add_loc_descr (&loc_result, temp);
13643 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13644 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13647 break;
13649 case CONST_INT:
13650 if (mode != VOIDmode && mode != BLKmode)
13651 loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13652 INTVAL (rtl));
13653 break;
13655 case CONST_DOUBLE:
13656 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13658 /* Note that a CONST_DOUBLE rtx could represent either an integer
13659 or a floating-point constant. A CONST_DOUBLE is used whenever
13660 the constant requires more than one word in order to be
13661 adequately represented. We output CONST_DOUBLEs as blocks. */
13662 if (GET_MODE (rtl) != VOIDmode)
13663 mode = GET_MODE (rtl);
13665 loc_result = new_loc_descr (DW_OP_implicit_value,
13666 GET_MODE_SIZE (mode), 0);
13667 if (SCALAR_FLOAT_MODE_P (mode))
13669 unsigned int length = GET_MODE_SIZE (mode);
13670 unsigned char *array = GGC_NEWVEC (unsigned char, length);
13672 insert_float (rtl, array);
13673 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13674 loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13675 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13676 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13678 else
13680 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13681 loc_result->dw_loc_oprnd2.v.val_double.high
13682 = CONST_DOUBLE_HIGH (rtl);
13683 loc_result->dw_loc_oprnd2.v.val_double.low
13684 = CONST_DOUBLE_LOW (rtl);
13687 break;
13689 case CONST_VECTOR:
13690 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13692 unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13693 unsigned int length = CONST_VECTOR_NUNITS (rtl);
13694 unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13695 unsigned int i;
13696 unsigned char *p;
13698 mode = GET_MODE (rtl);
13699 switch (GET_MODE_CLASS (mode))
13701 case MODE_VECTOR_INT:
13702 for (i = 0, p = array; i < length; i++, p += elt_size)
13704 rtx elt = CONST_VECTOR_ELT (rtl, i);
13705 HOST_WIDE_INT lo, hi;
13707 switch (GET_CODE (elt))
13709 case CONST_INT:
13710 lo = INTVAL (elt);
13711 hi = -(lo < 0);
13712 break;
13714 case CONST_DOUBLE:
13715 lo = CONST_DOUBLE_LOW (elt);
13716 hi = CONST_DOUBLE_HIGH (elt);
13717 break;
13719 default:
13720 gcc_unreachable ();
13723 if (elt_size <= sizeof (HOST_WIDE_INT))
13724 insert_int (lo, elt_size, p);
13725 else
13727 unsigned char *p0 = p;
13728 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13730 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13731 if (WORDS_BIG_ENDIAN)
13733 p0 = p1;
13734 p1 = p;
13736 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13737 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13740 break;
13742 case MODE_VECTOR_FLOAT:
13743 for (i = 0, p = array; i < length; i++, p += elt_size)
13745 rtx elt = CONST_VECTOR_ELT (rtl, i);
13746 insert_float (elt, p);
13748 break;
13750 default:
13751 gcc_unreachable ();
13754 loc_result = new_loc_descr (DW_OP_implicit_value,
13755 length * elt_size, 0);
13756 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13757 loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13758 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13759 loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13761 break;
13763 case CONST:
13764 if (mode == VOIDmode
13765 || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13766 || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13767 || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13769 loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13770 break;
13772 /* FALLTHROUGH */
13773 case SYMBOL_REF:
13774 if (!const_ok_for_output (rtl))
13775 break;
13776 case LABEL_REF:
13777 if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13778 && (dwarf_version >= 4 || !dwarf_strict))
13780 loc_result = new_loc_descr (DW_OP_implicit_value,
13781 DWARF2_ADDR_SIZE, 0);
13782 loc_result->dw_loc_oprnd2.val_class = dw_val_class_addr;
13783 loc_result->dw_loc_oprnd2.v.val_addr = rtl;
13784 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13786 break;
13788 default:
13789 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13790 && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13791 && (dwarf_version >= 4 || !dwarf_strict))
13793 /* Value expression. */
13794 loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13795 if (loc_result)
13796 add_loc_descr (&loc_result,
13797 new_loc_descr (DW_OP_stack_value, 0, 0));
13799 break;
13802 return loc_result;
13805 /* We need to figure out what section we should use as the base for the
13806 address ranges where a given location is valid.
13807 1. If this particular DECL has a section associated with it, use that.
13808 2. If this function has a section associated with it, use that.
13809 3. Otherwise, use the text section.
13810 XXX: If you split a variable across multiple sections, we won't notice. */
13812 static const char *
13813 secname_for_decl (const_tree decl)
13815 const char *secname;
13817 if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13819 tree sectree = DECL_SECTION_NAME (decl);
13820 secname = TREE_STRING_POINTER (sectree);
13822 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13824 tree sectree = DECL_SECTION_NAME (current_function_decl);
13825 secname = TREE_STRING_POINTER (sectree);
13827 else if (cfun && in_cold_section_p)
13828 secname = crtl->subsections.cold_section_label;
13829 else
13830 secname = text_section_label;
13832 return secname;
13835 /* Return true when DECL_BY_REFERENCE is defined and set for DECL. */
13837 static bool
13838 decl_by_reference_p (tree decl)
13840 return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
13841 || TREE_CODE (decl) == VAR_DECL)
13842 && DECL_BY_REFERENCE (decl));
13845 /* Return single element location list containing loc descr REF. */
13847 static dw_loc_list_ref
13848 single_element_loc_list (dw_loc_descr_ref ref)
13850 return new_loc_list (ref, NULL, NULL, NULL, 0);
13853 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
13854 for VARLOC. */
13856 static dw_loc_descr_ref
13857 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
13858 enum var_init_status initialized)
13860 int have_address = 0;
13861 dw_loc_descr_ref descr;
13862 enum machine_mode mode;
13864 if (want_address != 2)
13866 gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
13867 /* Single part. */
13868 if (GET_CODE (XEXP (varloc, 1)) != PARALLEL)
13870 varloc = XEXP (XEXP (varloc, 1), 0);
13871 mode = GET_MODE (varloc);
13872 if (MEM_P (varloc))
13874 varloc = XEXP (varloc, 0);
13875 have_address = 1;
13877 descr = mem_loc_descriptor (varloc, mode, initialized);
13879 else
13880 return 0;
13882 else
13884 descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
13885 have_address = 1;
13888 if (!descr)
13889 return 0;
13891 if (want_address == 2 && !have_address
13892 && (dwarf_version >= 4 || !dwarf_strict))
13894 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
13896 expansion_failed (loc, NULL_RTX,
13897 "DWARF address size mismatch");
13898 return 0;
13900 add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
13901 have_address = 1;
13903 /* Show if we can't fill the request for an address. */
13904 if (want_address && !have_address)
13906 expansion_failed (loc, NULL_RTX,
13907 "Want address and only have value");
13908 return 0;
13911 /* If we've got an address and don't want one, dereference. */
13912 if (!want_address && have_address)
13914 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
13915 enum dwarf_location_atom op;
13917 if (size > DWARF2_ADDR_SIZE || size == -1)
13919 expansion_failed (loc, NULL_RTX,
13920 "DWARF address size mismatch");
13921 return 0;
13923 else if (size == DWARF2_ADDR_SIZE)
13924 op = DW_OP_deref;
13925 else
13926 op = DW_OP_deref_size;
13928 add_loc_descr (&descr, new_loc_descr (op, size, 0));
13931 return descr;
13934 /* Return dwarf representation of location list representing for
13935 LOC_LIST of DECL. WANT_ADDRESS has the same meaning as in
13936 loc_list_from_tree function. */
13938 static dw_loc_list_ref
13939 dw_loc_list (var_loc_list * loc_list, tree decl, int want_address)
13941 const char *endname, *secname;
13942 dw_loc_list_ref list;
13943 rtx varloc;
13944 enum var_init_status initialized;
13945 struct var_loc_node *node;
13946 dw_loc_descr_ref descr;
13947 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13949 /* Now that we know what section we are using for a base,
13950 actually construct the list of locations.
13951 The first location information is what is passed to the
13952 function that creates the location list, and the remaining
13953 locations just get added on to that list.
13954 Note that we only know the start address for a location
13955 (IE location changes), so to build the range, we use
13956 the range [current location start, next location start].
13957 This means we have to special case the last node, and generate
13958 a range of [last location start, end of function label]. */
13960 node = loc_list->first;
13961 secname = secname_for_decl (decl);
13963 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note))
13964 initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
13965 else
13966 initialized = VAR_INIT_STATUS_INITIALIZED;
13967 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
13968 descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13970 if (loc_list && loc_list->first != loc_list->last)
13971 list = new_loc_list (descr, node->label, node->next->label, secname, 1);
13972 else
13973 return single_element_loc_list (descr);
13974 node = node->next;
13976 if (!node)
13977 return NULL;
13979 for (; node->next; node = node->next)
13980 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
13982 /* The variable has a location between NODE->LABEL and
13983 NODE->NEXT->LABEL. */
13984 initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
13985 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
13986 descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
13987 add_loc_descr_to_loc_list (&list, descr,
13988 node->label, node->next->label, secname);
13991 /* If the variable has a location at the last label
13992 it keeps its location until the end of function. */
13993 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
13995 if (!current_function_decl)
13996 endname = text_end_label;
13997 else
13999 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14000 current_function_funcdef_no);
14001 endname = ggc_strdup (label_id);
14004 initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14005 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14006 descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14007 add_loc_descr_to_loc_list (&list, descr, node->label, endname, secname);
14009 return list;
14012 /* Return if the loc_list has only single element and thus can be represented
14013 as location description. */
14015 static bool
14016 single_element_loc_list_p (dw_loc_list_ref list)
14018 return (!list->dw_loc_next && !list->begin && !list->end);
14021 /* To each location in list LIST add loc descr REF. */
14023 static void
14024 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14026 dw_loc_descr_ref copy;
14027 add_loc_descr (&list->expr, ref);
14028 list = list->dw_loc_next;
14029 while (list)
14031 copy = GGC_CNEW (dw_loc_descr_node);
14032 memcpy (copy, ref, sizeof (dw_loc_descr_node));
14033 add_loc_descr (&list->expr, copy);
14034 while (copy->dw_loc_next)
14036 dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14037 memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14038 copy->dw_loc_next = new_copy;
14039 copy = new_copy;
14041 list = list->dw_loc_next;
14045 /* Given two lists RET and LIST
14046 produce location list that is result of adding expression in LIST
14047 to expression in RET on each possition in program.
14048 Might be destructive on both RET and LIST.
14050 TODO: We handle only simple cases of RET or LIST having at most one
14051 element. General case would inolve sorting the lists in program order
14052 and merging them that will need some additional work.
14053 Adding that will improve quality of debug info especially for SRA-ed
14054 structures. */
14056 static void
14057 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14059 if (!list)
14060 return;
14061 if (!*ret)
14063 *ret = list;
14064 return;
14066 if (!list->dw_loc_next)
14068 add_loc_descr_to_each (*ret, list->expr);
14069 return;
14071 if (!(*ret)->dw_loc_next)
14073 add_loc_descr_to_each (list, (*ret)->expr);
14074 *ret = list;
14075 return;
14077 expansion_failed (NULL_TREE, NULL_RTX,
14078 "Don't know how to merge two non-trivial"
14079 " location lists.\n");
14080 *ret = NULL;
14081 return;
14084 /* LOC is constant expression. Try a luck, look it up in constant
14085 pool and return its loc_descr of its address. */
14087 static dw_loc_descr_ref
14088 cst_pool_loc_descr (tree loc)
14090 /* Get an RTL for this, if something has been emitted. */
14091 rtx rtl = lookup_constant_def (loc);
14092 enum machine_mode mode;
14094 if (!rtl || !MEM_P (rtl))
14096 gcc_assert (!rtl);
14097 return 0;
14099 gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14101 /* TODO: We might get more coverage if we was actually delaying expansion
14102 of all expressions till end of compilation when constant pools are fully
14103 populated. */
14104 if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14106 expansion_failed (loc, NULL_RTX,
14107 "CST value in contant pool but not marked.");
14108 return 0;
14110 mode = GET_MODE (rtl);
14111 rtl = XEXP (rtl, 0);
14112 return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14115 /* Return dw_loc_list representing address of addr_expr LOC
14116 by looking for innder INDIRECT_REF expression and turing it
14117 into simple arithmetics. */
14119 static dw_loc_list_ref
14120 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14122 tree obj, offset;
14123 HOST_WIDE_INT bitsize, bitpos, bytepos;
14124 enum machine_mode mode;
14125 int volatilep;
14126 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14127 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14129 obj = get_inner_reference (TREE_OPERAND (loc, 0),
14130 &bitsize, &bitpos, &offset, &mode,
14131 &unsignedp, &volatilep, false);
14132 STRIP_NOPS (obj);
14133 if (bitpos % BITS_PER_UNIT)
14135 expansion_failed (loc, NULL_RTX, "bitfield access");
14136 return 0;
14138 if (!INDIRECT_REF_P (obj))
14140 expansion_failed (obj,
14141 NULL_RTX, "no indirect ref in inner refrence");
14142 return 0;
14144 if (!offset && !bitpos)
14145 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14146 else if (toplev
14147 && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14148 && (dwarf_version >= 4 || !dwarf_strict))
14150 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14151 if (!list_ret)
14152 return 0;
14153 if (offset)
14155 /* Variable offset. */
14156 list_ret1 = loc_list_from_tree (offset, 0);
14157 if (list_ret1 == 0)
14158 return 0;
14159 add_loc_list (&list_ret, list_ret1);
14160 if (!list_ret)
14161 return 0;
14162 add_loc_descr_to_each (list_ret,
14163 new_loc_descr (DW_OP_plus, 0, 0));
14165 bytepos = bitpos / BITS_PER_UNIT;
14166 if (bytepos > 0)
14167 add_loc_descr_to_each (list_ret,
14168 new_loc_descr (DW_OP_plus_uconst,
14169 bytepos, 0));
14170 else if (bytepos < 0)
14171 loc_list_plus_const (list_ret, bytepos);
14172 add_loc_descr_to_each (list_ret,
14173 new_loc_descr (DW_OP_stack_value, 0, 0));
14175 return list_ret;
14179 /* Generate Dwarf location list representing LOC.
14180 If WANT_ADDRESS is false, expression computing LOC will be computed
14181 If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14182 if WANT_ADDRESS is 2, expression computing address useable in location
14183 will be returned (i.e. DW_OP_reg can be used
14184 to refer to register values). */
14186 static dw_loc_list_ref
14187 loc_list_from_tree (tree loc, int want_address)
14189 dw_loc_descr_ref ret = NULL, ret1 = NULL;
14190 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14191 int have_address = 0;
14192 enum dwarf_location_atom op;
14194 /* ??? Most of the time we do not take proper care for sign/zero
14195 extending the values properly. Hopefully this won't be a real
14196 problem... */
14198 switch (TREE_CODE (loc))
14200 case ERROR_MARK:
14201 expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14202 return 0;
14204 case PLACEHOLDER_EXPR:
14205 /* This case involves extracting fields from an object to determine the
14206 position of other fields. We don't try to encode this here. The
14207 only user of this is Ada, which encodes the needed information using
14208 the names of types. */
14209 expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14210 return 0;
14212 case CALL_EXPR:
14213 expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14214 /* There are no opcodes for these operations. */
14215 return 0;
14217 case PREINCREMENT_EXPR:
14218 case PREDECREMENT_EXPR:
14219 case POSTINCREMENT_EXPR:
14220 case POSTDECREMENT_EXPR:
14221 expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14222 /* There are no opcodes for these operations. */
14223 return 0;
14225 case ADDR_EXPR:
14226 /* If we already want an address, see if there is INDIRECT_REF inside
14227 e.g. for &this->field. */
14228 if (want_address)
14230 list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14231 (loc, want_address == 2);
14232 if (list_ret)
14233 have_address = 1;
14234 else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14235 && (ret = cst_pool_loc_descr (loc)))
14236 have_address = 1;
14238 /* Otherwise, process the argument and look for the address. */
14239 if (!list_ret && !ret)
14240 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14241 else
14243 if (want_address)
14244 expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14245 return NULL;
14247 break;
14249 case VAR_DECL:
14250 if (DECL_THREAD_LOCAL_P (loc))
14252 rtx rtl;
14253 enum dwarf_location_atom first_op;
14254 enum dwarf_location_atom second_op;
14255 bool dtprel = false;
14257 if (targetm.have_tls)
14259 /* If this is not defined, we have no way to emit the
14260 data. */
14261 if (!targetm.asm_out.output_dwarf_dtprel)
14262 return 0;
14264 /* The way DW_OP_GNU_push_tls_address is specified, we
14265 can only look up addresses of objects in the current
14266 module. */
14267 if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14268 return 0;
14269 first_op = DW_OP_addr;
14270 dtprel = true;
14271 second_op = DW_OP_GNU_push_tls_address;
14273 else
14275 if (!targetm.emutls.debug_form_tls_address
14276 || !(dwarf_version >= 3 || !dwarf_strict))
14277 return 0;
14278 loc = emutls_decl (loc);
14279 first_op = DW_OP_addr;
14280 second_op = DW_OP_form_tls_address;
14283 rtl = rtl_for_decl_location (loc);
14284 if (rtl == NULL_RTX)
14285 return 0;
14287 if (!MEM_P (rtl))
14288 return 0;
14289 rtl = XEXP (rtl, 0);
14290 if (! CONSTANT_P (rtl))
14291 return 0;
14293 ret = new_loc_descr (first_op, 0, 0);
14294 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14295 ret->dw_loc_oprnd1.v.val_addr = rtl;
14296 ret->dtprel = dtprel;
14298 ret1 = new_loc_descr (second_op, 0, 0);
14299 add_loc_descr (&ret, ret1);
14301 have_address = 1;
14302 break;
14304 /* FALLTHRU */
14306 case PARM_DECL:
14307 if (DECL_HAS_VALUE_EXPR_P (loc))
14308 return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14309 want_address);
14310 /* FALLTHRU */
14312 case RESULT_DECL:
14313 case FUNCTION_DECL:
14315 rtx rtl;
14316 var_loc_list *loc_list = lookup_decl_loc (loc);
14318 if (loc_list && loc_list->first
14319 && (list_ret = dw_loc_list (loc_list, loc, want_address)))
14321 have_address = want_address != 0;
14322 break;
14324 rtl = rtl_for_decl_location (loc);
14325 if (rtl == NULL_RTX)
14327 expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14328 return 0;
14330 else if (CONST_INT_P (rtl))
14332 HOST_WIDE_INT val = INTVAL (rtl);
14333 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14334 val &= GET_MODE_MASK (DECL_MODE (loc));
14335 ret = int_loc_descriptor (val);
14337 else if (GET_CODE (rtl) == CONST_STRING)
14339 expansion_failed (loc, NULL_RTX, "CONST_STRING");
14340 return 0;
14342 else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14344 ret = new_loc_descr (DW_OP_addr, 0, 0);
14345 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14346 ret->dw_loc_oprnd1.v.val_addr = rtl;
14348 else
14350 enum machine_mode mode;
14352 /* Certain constructs can only be represented at top-level. */
14353 if (want_address == 2)
14355 ret = loc_descriptor (rtl, VOIDmode,
14356 VAR_INIT_STATUS_INITIALIZED);
14357 have_address = 1;
14359 else
14361 mode = GET_MODE (rtl);
14362 if (MEM_P (rtl))
14364 rtl = XEXP (rtl, 0);
14365 have_address = 1;
14367 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14369 if (!ret)
14370 expansion_failed (loc, rtl,
14371 "failed to produce loc descriptor for rtl");
14374 break;
14376 case INDIRECT_REF:
14377 case ALIGN_INDIRECT_REF:
14378 case MISALIGNED_INDIRECT_REF:
14379 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14380 have_address = 1;
14381 break;
14383 case COMPOUND_EXPR:
14384 return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14386 CASE_CONVERT:
14387 case VIEW_CONVERT_EXPR:
14388 case SAVE_EXPR:
14389 case MODIFY_EXPR:
14390 return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14392 case COMPONENT_REF:
14393 case BIT_FIELD_REF:
14394 case ARRAY_REF:
14395 case ARRAY_RANGE_REF:
14396 case REALPART_EXPR:
14397 case IMAGPART_EXPR:
14399 tree obj, offset;
14400 HOST_WIDE_INT bitsize, bitpos, bytepos;
14401 enum machine_mode mode;
14402 int volatilep;
14403 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14405 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14406 &unsignedp, &volatilep, false);
14408 gcc_assert (obj != loc);
14410 list_ret = loc_list_from_tree (obj,
14411 want_address == 2
14412 && !bitpos && !offset ? 2 : 1);
14413 /* TODO: We can extract value of the small expression via shifting even
14414 for nonzero bitpos. */
14415 if (list_ret == 0)
14416 return 0;
14417 if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14419 expansion_failed (loc, NULL_RTX,
14420 "bitfield access");
14421 return 0;
14424 if (offset != NULL_TREE)
14426 /* Variable offset. */
14427 list_ret1 = loc_list_from_tree (offset, 0);
14428 if (list_ret1 == 0)
14429 return 0;
14430 add_loc_list (&list_ret, list_ret1);
14431 if (!list_ret)
14432 return 0;
14433 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14436 bytepos = bitpos / BITS_PER_UNIT;
14437 if (bytepos > 0)
14438 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14439 else if (bytepos < 0)
14440 loc_list_plus_const (list_ret, bytepos);
14442 have_address = 1;
14443 break;
14446 case INTEGER_CST:
14447 if ((want_address || !host_integerp (loc, 0))
14448 && (ret = cst_pool_loc_descr (loc)))
14449 have_address = 1;
14450 else if (want_address == 2
14451 && host_integerp (loc, 0)
14452 && (ret = address_of_int_loc_descriptor
14453 (int_size_in_bytes (TREE_TYPE (loc)),
14454 tree_low_cst (loc, 0))))
14455 have_address = 1;
14456 else if (host_integerp (loc, 0))
14457 ret = int_loc_descriptor (tree_low_cst (loc, 0));
14458 else
14460 expansion_failed (loc, NULL_RTX,
14461 "Integer operand is not host integer");
14462 return 0;
14464 break;
14466 case CONSTRUCTOR:
14467 case REAL_CST:
14468 case STRING_CST:
14469 case COMPLEX_CST:
14470 if ((ret = cst_pool_loc_descr (loc)))
14471 have_address = 1;
14472 else
14473 /* We can construct small constants here using int_loc_descriptor. */
14474 expansion_failed (loc, NULL_RTX,
14475 "constructor or constant not in constant pool");
14476 break;
14478 case TRUTH_AND_EXPR:
14479 case TRUTH_ANDIF_EXPR:
14480 case BIT_AND_EXPR:
14481 op = DW_OP_and;
14482 goto do_binop;
14484 case TRUTH_XOR_EXPR:
14485 case BIT_XOR_EXPR:
14486 op = DW_OP_xor;
14487 goto do_binop;
14489 case TRUTH_OR_EXPR:
14490 case TRUTH_ORIF_EXPR:
14491 case BIT_IOR_EXPR:
14492 op = DW_OP_or;
14493 goto do_binop;
14495 case FLOOR_DIV_EXPR:
14496 case CEIL_DIV_EXPR:
14497 case ROUND_DIV_EXPR:
14498 case TRUNC_DIV_EXPR:
14499 op = DW_OP_div;
14500 goto do_binop;
14502 case MINUS_EXPR:
14503 op = DW_OP_minus;
14504 goto do_binop;
14506 case FLOOR_MOD_EXPR:
14507 case CEIL_MOD_EXPR:
14508 case ROUND_MOD_EXPR:
14509 case TRUNC_MOD_EXPR:
14510 op = DW_OP_mod;
14511 goto do_binop;
14513 case MULT_EXPR:
14514 op = DW_OP_mul;
14515 goto do_binop;
14517 case LSHIFT_EXPR:
14518 op = DW_OP_shl;
14519 goto do_binop;
14521 case RSHIFT_EXPR:
14522 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14523 goto do_binop;
14525 case POINTER_PLUS_EXPR:
14526 case PLUS_EXPR:
14527 if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14528 && host_integerp (TREE_OPERAND (loc, 1), 0))
14530 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14531 if (list_ret == 0)
14532 return 0;
14534 loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14535 break;
14538 op = DW_OP_plus;
14539 goto do_binop;
14541 case LE_EXPR:
14542 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14543 return 0;
14545 op = DW_OP_le;
14546 goto do_binop;
14548 case GE_EXPR:
14549 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14550 return 0;
14552 op = DW_OP_ge;
14553 goto do_binop;
14555 case LT_EXPR:
14556 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14557 return 0;
14559 op = DW_OP_lt;
14560 goto do_binop;
14562 case GT_EXPR:
14563 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14564 return 0;
14566 op = DW_OP_gt;
14567 goto do_binop;
14569 case EQ_EXPR:
14570 op = DW_OP_eq;
14571 goto do_binop;
14573 case NE_EXPR:
14574 op = DW_OP_ne;
14575 goto do_binop;
14577 do_binop:
14578 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14579 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14580 if (list_ret == 0 || list_ret1 == 0)
14581 return 0;
14583 add_loc_list (&list_ret, list_ret1);
14584 if (list_ret == 0)
14585 return 0;
14586 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14587 break;
14589 case TRUTH_NOT_EXPR:
14590 case BIT_NOT_EXPR:
14591 op = DW_OP_not;
14592 goto do_unop;
14594 case ABS_EXPR:
14595 op = DW_OP_abs;
14596 goto do_unop;
14598 case NEGATE_EXPR:
14599 op = DW_OP_neg;
14600 goto do_unop;
14602 do_unop:
14603 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14604 if (list_ret == 0)
14605 return 0;
14607 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14608 break;
14610 case MIN_EXPR:
14611 case MAX_EXPR:
14613 const enum tree_code code =
14614 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14616 loc = build3 (COND_EXPR, TREE_TYPE (loc),
14617 build2 (code, integer_type_node,
14618 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14619 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14622 /* ... fall through ... */
14624 case COND_EXPR:
14626 dw_loc_descr_ref lhs
14627 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14628 dw_loc_list_ref rhs
14629 = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14630 dw_loc_descr_ref bra_node, jump_node, tmp;
14632 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14633 if (list_ret == 0 || lhs == 0 || rhs == 0)
14634 return 0;
14636 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14637 add_loc_descr_to_each (list_ret, bra_node);
14639 add_loc_list (&list_ret, rhs);
14640 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14641 add_loc_descr_to_each (list_ret, jump_node);
14643 add_loc_descr_to_each (list_ret, lhs);
14644 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14645 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14647 /* ??? Need a node to point the skip at. Use a nop. */
14648 tmp = new_loc_descr (DW_OP_nop, 0, 0);
14649 add_loc_descr_to_each (list_ret, tmp);
14650 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14651 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14653 break;
14655 case FIX_TRUNC_EXPR:
14656 return 0;
14658 default:
14659 /* Leave front-end specific codes as simply unknown. This comes
14660 up, for instance, with the C STMT_EXPR. */
14661 if ((unsigned int) TREE_CODE (loc)
14662 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14664 expansion_failed (loc, NULL_RTX,
14665 "language specific tree node");
14666 return 0;
14669 #ifdef ENABLE_CHECKING
14670 /* Otherwise this is a generic code; we should just lists all of
14671 these explicitly. We forgot one. */
14672 gcc_unreachable ();
14673 #else
14674 /* In a release build, we want to degrade gracefully: better to
14675 generate incomplete debugging information than to crash. */
14676 return NULL;
14677 #endif
14680 if (!ret && !list_ret)
14681 return 0;
14683 if (want_address == 2 && !have_address
14684 && (dwarf_version >= 4 || !dwarf_strict))
14686 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14688 expansion_failed (loc, NULL_RTX,
14689 "DWARF address size mismatch");
14690 return 0;
14692 if (ret)
14693 add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14694 else
14695 add_loc_descr_to_each (list_ret,
14696 new_loc_descr (DW_OP_stack_value, 0, 0));
14697 have_address = 1;
14699 /* Show if we can't fill the request for an address. */
14700 if (want_address && !have_address)
14702 expansion_failed (loc, NULL_RTX,
14703 "Want address and only have value");
14704 return 0;
14707 gcc_assert (!ret || !list_ret);
14709 /* If we've got an address and don't want one, dereference. */
14710 if (!want_address && have_address)
14712 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14714 if (size > DWARF2_ADDR_SIZE || size == -1)
14716 expansion_failed (loc, NULL_RTX,
14717 "DWARF address size mismatch");
14718 return 0;
14720 else if (size == DWARF2_ADDR_SIZE)
14721 op = DW_OP_deref;
14722 else
14723 op = DW_OP_deref_size;
14725 if (ret)
14726 add_loc_descr (&ret, new_loc_descr (op, size, 0));
14727 else
14728 add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14730 if (ret)
14731 list_ret = single_element_loc_list (ret);
14733 return list_ret;
14736 /* Same as above but return only single location expression. */
14737 static dw_loc_descr_ref
14738 loc_descriptor_from_tree (tree loc, int want_address)
14740 dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14741 if (!ret)
14742 return NULL;
14743 if (ret->dw_loc_next)
14745 expansion_failed (loc, NULL_RTX,
14746 "Location list where only loc descriptor needed");
14747 return NULL;
14749 return ret->expr;
14752 /* Given a value, round it up to the lowest multiple of `boundary'
14753 which is not less than the value itself. */
14755 static inline HOST_WIDE_INT
14756 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14758 return (((value + boundary - 1) / boundary) * boundary);
14761 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14762 pointer to the declared type for the relevant field variable, or return
14763 `integer_type_node' if the given node turns out to be an
14764 ERROR_MARK node. */
14766 static inline tree
14767 field_type (const_tree decl)
14769 tree type;
14771 if (TREE_CODE (decl) == ERROR_MARK)
14772 return integer_type_node;
14774 type = DECL_BIT_FIELD_TYPE (decl);
14775 if (type == NULL_TREE)
14776 type = TREE_TYPE (decl);
14778 return type;
14781 /* Given a pointer to a tree node, return the alignment in bits for
14782 it, or else return BITS_PER_WORD if the node actually turns out to
14783 be an ERROR_MARK node. */
14785 static inline unsigned
14786 simple_type_align_in_bits (const_tree type)
14788 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14791 static inline unsigned
14792 simple_decl_align_in_bits (const_tree decl)
14794 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14797 /* Return the result of rounding T up to ALIGN. */
14799 static inline HOST_WIDE_INT
14800 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
14802 /* We must be careful if T is negative because HOST_WIDE_INT can be
14803 either "above" or "below" unsigned int as per the C promotion
14804 rules, depending on the host, thus making the signedness of the
14805 direct multiplication and division unpredictable. */
14806 unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
14808 u += align - 1;
14809 u /= align;
14810 u *= align;
14812 return (HOST_WIDE_INT) u;
14815 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
14816 lowest addressed byte of the "containing object" for the given FIELD_DECL,
14817 or return 0 if we are unable to determine what that offset is, either
14818 because the argument turns out to be a pointer to an ERROR_MARK node, or
14819 because the offset is actually variable. (We can't handle the latter case
14820 just yet). */
14822 static HOST_WIDE_INT
14823 field_byte_offset (const_tree decl)
14825 HOST_WIDE_INT object_offset_in_bits;
14826 HOST_WIDE_INT bitpos_int;
14828 if (TREE_CODE (decl) == ERROR_MARK)
14829 return 0;
14831 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
14833 /* We cannot yet cope with fields whose positions are variable, so
14834 for now, when we see such things, we simply return 0. Someday, we may
14835 be able to handle such cases, but it will be damn difficult. */
14836 if (! host_integerp (bit_position (decl), 0))
14837 return 0;
14839 bitpos_int = int_bit_position (decl);
14841 #ifdef PCC_BITFIELD_TYPE_MATTERS
14842 if (PCC_BITFIELD_TYPE_MATTERS)
14844 tree type;
14845 tree field_size_tree;
14846 HOST_WIDE_INT deepest_bitpos;
14847 unsigned HOST_WIDE_INT field_size_in_bits;
14848 unsigned int type_align_in_bits;
14849 unsigned int decl_align_in_bits;
14850 unsigned HOST_WIDE_INT type_size_in_bits;
14852 type = field_type (decl);
14853 type_size_in_bits = simple_type_size_in_bits (type);
14854 type_align_in_bits = simple_type_align_in_bits (type);
14856 field_size_tree = DECL_SIZE (decl);
14858 /* The size could be unspecified if there was an error, or for
14859 a flexible array member. */
14860 if (!field_size_tree)
14861 field_size_tree = bitsize_zero_node;
14863 /* If the size of the field is not constant, use the type size. */
14864 if (host_integerp (field_size_tree, 1))
14865 field_size_in_bits = tree_low_cst (field_size_tree, 1);
14866 else
14867 field_size_in_bits = type_size_in_bits;
14869 decl_align_in_bits = simple_decl_align_in_bits (decl);
14871 /* The GCC front-end doesn't make any attempt to keep track of the
14872 starting bit offset (relative to the start of the containing
14873 structure type) of the hypothetical "containing object" for a
14874 bit-field. Thus, when computing the byte offset value for the
14875 start of the "containing object" of a bit-field, we must deduce
14876 this information on our own. This can be rather tricky to do in
14877 some cases. For example, handling the following structure type
14878 definition when compiling for an i386/i486 target (which only
14879 aligns long long's to 32-bit boundaries) can be very tricky:
14881 struct S { int field1; long long field2:31; };
14883 Fortunately, there is a simple rule-of-thumb which can be used
14884 in such cases. When compiling for an i386/i486, GCC will
14885 allocate 8 bytes for the structure shown above. It decides to
14886 do this based upon one simple rule for bit-field allocation.
14887 GCC allocates each "containing object" for each bit-field at
14888 the first (i.e. lowest addressed) legitimate alignment boundary
14889 (based upon the required minimum alignment for the declared
14890 type of the field) which it can possibly use, subject to the
14891 condition that there is still enough available space remaining
14892 in the containing object (when allocated at the selected point)
14893 to fully accommodate all of the bits of the bit-field itself.
14895 This simple rule makes it obvious why GCC allocates 8 bytes for
14896 each object of the structure type shown above. When looking
14897 for a place to allocate the "containing object" for `field2',
14898 the compiler simply tries to allocate a 64-bit "containing
14899 object" at each successive 32-bit boundary (starting at zero)
14900 until it finds a place to allocate that 64- bit field such that
14901 at least 31 contiguous (and previously unallocated) bits remain
14902 within that selected 64 bit field. (As it turns out, for the
14903 example above, the compiler finds it is OK to allocate the
14904 "containing object" 64-bit field at bit-offset zero within the
14905 structure type.)
14907 Here we attempt to work backwards from the limited set of facts
14908 we're given, and we try to deduce from those facts, where GCC
14909 must have believed that the containing object started (within
14910 the structure type). The value we deduce is then used (by the
14911 callers of this routine) to generate DW_AT_location and
14912 DW_AT_bit_offset attributes for fields (both bit-fields and, in
14913 the case of DW_AT_location, regular fields as well). */
14915 /* Figure out the bit-distance from the start of the structure to
14916 the "deepest" bit of the bit-field. */
14917 deepest_bitpos = bitpos_int + field_size_in_bits;
14919 /* This is the tricky part. Use some fancy footwork to deduce
14920 where the lowest addressed bit of the containing object must
14921 be. */
14922 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14924 /* Round up to type_align by default. This works best for
14925 bitfields. */
14926 object_offset_in_bits
14927 = round_up_to_align (object_offset_in_bits, type_align_in_bits);
14929 if (object_offset_in_bits > bitpos_int)
14931 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
14933 /* Round up to decl_align instead. */
14934 object_offset_in_bits
14935 = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
14938 else
14939 #endif
14940 object_offset_in_bits = bitpos_int;
14942 return object_offset_in_bits / BITS_PER_UNIT;
14945 /* The following routines define various Dwarf attributes and any data
14946 associated with them. */
14948 /* Add a location description attribute value to a DIE.
14950 This emits location attributes suitable for whole variables and
14951 whole parameters. Note that the location attributes for struct fields are
14952 generated by the routine `data_member_location_attribute' below. */
14954 static inline void
14955 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
14956 dw_loc_list_ref descr)
14958 if (descr == 0)
14959 return;
14960 if (single_element_loc_list_p (descr))
14961 add_AT_loc (die, attr_kind, descr->expr);
14962 else
14963 add_AT_loc_list (die, attr_kind, descr);
14966 /* Attach the specialized form of location attribute used for data members of
14967 struct and union types. In the special case of a FIELD_DECL node which
14968 represents a bit-field, the "offset" part of this special location
14969 descriptor must indicate the distance in bytes from the lowest-addressed
14970 byte of the containing struct or union type to the lowest-addressed byte of
14971 the "containing object" for the bit-field. (See the `field_byte_offset'
14972 function above).
14974 For any given bit-field, the "containing object" is a hypothetical object
14975 (of some integral or enum type) within which the given bit-field lives. The
14976 type of this hypothetical "containing object" is always the same as the
14977 declared type of the individual bit-field itself (for GCC anyway... the
14978 DWARF spec doesn't actually mandate this). Note that it is the size (in
14979 bytes) of the hypothetical "containing object" which will be given in the
14980 DW_AT_byte_size attribute for this bit-field. (See the
14981 `byte_size_attribute' function below.) It is also used when calculating the
14982 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
14983 function below.) */
14985 static void
14986 add_data_member_location_attribute (dw_die_ref die, tree decl)
14988 HOST_WIDE_INT offset;
14989 dw_loc_descr_ref loc_descr = 0;
14991 if (TREE_CODE (decl) == TREE_BINFO)
14993 /* We're working on the TAG_inheritance for a base class. */
14994 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
14996 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
14997 aren't at a fixed offset from all (sub)objects of the same
14998 type. We need to extract the appropriate offset from our
14999 vtable. The following dwarf expression means
15001 BaseAddr = ObAddr + *((*ObAddr) - Offset)
15003 This is specific to the V3 ABI, of course. */
15005 dw_loc_descr_ref tmp;
15007 /* Make a copy of the object address. */
15008 tmp = new_loc_descr (DW_OP_dup, 0, 0);
15009 add_loc_descr (&loc_descr, tmp);
15011 /* Extract the vtable address. */
15012 tmp = new_loc_descr (DW_OP_deref, 0, 0);
15013 add_loc_descr (&loc_descr, tmp);
15015 /* Calculate the address of the offset. */
15016 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15017 gcc_assert (offset < 0);
15019 tmp = int_loc_descriptor (-offset);
15020 add_loc_descr (&loc_descr, tmp);
15021 tmp = new_loc_descr (DW_OP_minus, 0, 0);
15022 add_loc_descr (&loc_descr, tmp);
15024 /* Extract the offset. */
15025 tmp = new_loc_descr (DW_OP_deref, 0, 0);
15026 add_loc_descr (&loc_descr, tmp);
15028 /* Add it to the object address. */
15029 tmp = new_loc_descr (DW_OP_plus, 0, 0);
15030 add_loc_descr (&loc_descr, tmp);
15032 else
15033 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15035 else
15036 offset = field_byte_offset (decl);
15038 if (! loc_descr)
15040 if (dwarf_version > 2)
15042 /* Don't need to output a location expression, just the constant. */
15043 add_AT_int (die, DW_AT_data_member_location, offset);
15044 return;
15046 else
15048 enum dwarf_location_atom op;
15050 /* The DWARF2 standard says that we should assume that the structure
15051 address is already on the stack, so we can specify a structure
15052 field address by using DW_OP_plus_uconst. */
15054 #ifdef MIPS_DEBUGGING_INFO
15055 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15056 operator correctly. It works only if we leave the offset on the
15057 stack. */
15058 op = DW_OP_constu;
15059 #else
15060 op = DW_OP_plus_uconst;
15061 #endif
15063 loc_descr = new_loc_descr (op, offset, 0);
15067 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15070 /* Writes integer values to dw_vec_const array. */
15072 static void
15073 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15075 while (size != 0)
15077 *dest++ = val & 0xff;
15078 val >>= 8;
15079 --size;
15083 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
15085 static HOST_WIDE_INT
15086 extract_int (const unsigned char *src, unsigned int size)
15088 HOST_WIDE_INT val = 0;
15090 src += size;
15091 while (size != 0)
15093 val <<= 8;
15094 val |= *--src & 0xff;
15095 --size;
15097 return val;
15100 /* Writes floating point values to dw_vec_const array. */
15102 static void
15103 insert_float (const_rtx rtl, unsigned char *array)
15105 REAL_VALUE_TYPE rv;
15106 long val[4];
15107 int i;
15109 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15110 real_to_target (val, &rv, GET_MODE (rtl));
15112 /* real_to_target puts 32-bit pieces in each long. Pack them. */
15113 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15115 insert_int (val[i], 4, array);
15116 array += 4;
15120 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15121 does not have a "location" either in memory or in a register. These
15122 things can arise in GNU C when a constant is passed as an actual parameter
15123 to an inlined function. They can also arise in C++ where declared
15124 constants do not necessarily get memory "homes". */
15126 static bool
15127 add_const_value_attribute (dw_die_ref die, rtx rtl)
15129 switch (GET_CODE (rtl))
15131 case CONST_INT:
15133 HOST_WIDE_INT val = INTVAL (rtl);
15135 if (val < 0)
15136 add_AT_int (die, DW_AT_const_value, val);
15137 else
15138 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15140 return true;
15142 case CONST_DOUBLE:
15143 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15144 floating-point constant. A CONST_DOUBLE is used whenever the
15145 constant requires more than one word in order to be adequately
15146 represented. */
15148 enum machine_mode mode = GET_MODE (rtl);
15150 if (SCALAR_FLOAT_MODE_P (mode))
15152 unsigned int length = GET_MODE_SIZE (mode);
15153 unsigned char *array = GGC_NEWVEC (unsigned char, length);
15155 insert_float (rtl, array);
15156 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15158 else
15159 add_AT_double (die, DW_AT_const_value,
15160 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15162 return true;
15164 case CONST_VECTOR:
15166 enum machine_mode mode = GET_MODE (rtl);
15167 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15168 unsigned int length = CONST_VECTOR_NUNITS (rtl);
15169 unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15170 unsigned int i;
15171 unsigned char *p;
15173 switch (GET_MODE_CLASS (mode))
15175 case MODE_VECTOR_INT:
15176 for (i = 0, p = array; i < length; i++, p += elt_size)
15178 rtx elt = CONST_VECTOR_ELT (rtl, i);
15179 HOST_WIDE_INT lo, hi;
15181 switch (GET_CODE (elt))
15183 case CONST_INT:
15184 lo = INTVAL (elt);
15185 hi = -(lo < 0);
15186 break;
15188 case CONST_DOUBLE:
15189 lo = CONST_DOUBLE_LOW (elt);
15190 hi = CONST_DOUBLE_HIGH (elt);
15191 break;
15193 default:
15194 gcc_unreachable ();
15197 if (elt_size <= sizeof (HOST_WIDE_INT))
15198 insert_int (lo, elt_size, p);
15199 else
15201 unsigned char *p0 = p;
15202 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15204 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15205 if (WORDS_BIG_ENDIAN)
15207 p0 = p1;
15208 p1 = p;
15210 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15211 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15214 break;
15216 case MODE_VECTOR_FLOAT:
15217 for (i = 0, p = array; i < length; i++, p += elt_size)
15219 rtx elt = CONST_VECTOR_ELT (rtl, i);
15220 insert_float (elt, p);
15222 break;
15224 default:
15225 gcc_unreachable ();
15228 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15230 return true;
15232 case CONST_STRING:
15233 resolve_one_addr (&rtl, NULL);
15234 add_AT_addr (die, DW_AT_const_value, rtl);
15235 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15236 return true;
15238 case CONST:
15239 if (CONSTANT_P (XEXP (rtl, 0)))
15240 return add_const_value_attribute (die, XEXP (rtl, 0));
15241 /* FALLTHROUGH */
15242 case SYMBOL_REF:
15243 if (!const_ok_for_output (rtl))
15244 return false;
15245 case LABEL_REF:
15246 add_AT_addr (die, DW_AT_const_value, rtl);
15247 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15248 return true;
15250 case PLUS:
15251 /* In cases where an inlined instance of an inline function is passed
15252 the address of an `auto' variable (which is local to the caller) we
15253 can get a situation where the DECL_RTL of the artificial local
15254 variable (for the inlining) which acts as a stand-in for the
15255 corresponding formal parameter (of the inline function) will look
15256 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
15257 exactly a compile-time constant expression, but it isn't the address
15258 of the (artificial) local variable either. Rather, it represents the
15259 *value* which the artificial local variable always has during its
15260 lifetime. We currently have no way to represent such quasi-constant
15261 values in Dwarf, so for now we just punt and generate nothing. */
15262 return false;
15264 case HIGH:
15265 case CONST_FIXED:
15266 return false;
15268 case MEM:
15269 if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15270 && MEM_READONLY_P (rtl)
15271 && GET_MODE (rtl) == BLKmode)
15273 add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15274 return true;
15276 return false;
15278 default:
15279 /* No other kinds of rtx should be possible here. */
15280 gcc_unreachable ();
15282 return false;
15285 /* Determine whether the evaluation of EXPR references any variables
15286 or functions which aren't otherwise used (and therefore may not be
15287 output). */
15288 static tree
15289 reference_to_unused (tree * tp, int * walk_subtrees,
15290 void * data ATTRIBUTE_UNUSED)
15292 if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15293 *walk_subtrees = 0;
15295 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15296 && ! TREE_ASM_WRITTEN (*tp))
15297 return *tp;
15298 /* ??? The C++ FE emits debug information for using decls, so
15299 putting gcc_unreachable here falls over. See PR31899. For now
15300 be conservative. */
15301 else if (!cgraph_global_info_ready
15302 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15303 return *tp;
15304 else if (TREE_CODE (*tp) == VAR_DECL)
15306 struct varpool_node *node = varpool_node (*tp);
15307 if (!node->needed)
15308 return *tp;
15310 else if (TREE_CODE (*tp) == FUNCTION_DECL
15311 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15313 /* The call graph machinery must have finished analyzing,
15314 optimizing and gimplifying the CU by now.
15315 So if *TP has no call graph node associated
15316 to it, it means *TP will not be emitted. */
15317 if (!cgraph_get_node (*tp))
15318 return *tp;
15320 else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15321 return *tp;
15323 return NULL_TREE;
15326 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15327 for use in a later add_const_value_attribute call. */
15329 static rtx
15330 rtl_for_decl_init (tree init, tree type)
15332 rtx rtl = NULL_RTX;
15334 /* If a variable is initialized with a string constant without embedded
15335 zeros, build CONST_STRING. */
15336 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15338 tree enttype = TREE_TYPE (type);
15339 tree domain = TYPE_DOMAIN (type);
15340 enum machine_mode mode = TYPE_MODE (enttype);
15342 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15343 && domain
15344 && integer_zerop (TYPE_MIN_VALUE (domain))
15345 && compare_tree_int (TYPE_MAX_VALUE (domain),
15346 TREE_STRING_LENGTH (init) - 1) == 0
15347 && ((size_t) TREE_STRING_LENGTH (init)
15348 == strlen (TREE_STRING_POINTER (init)) + 1))
15350 rtl = gen_rtx_CONST_STRING (VOIDmode,
15351 ggc_strdup (TREE_STRING_POINTER (init)));
15352 rtl = gen_rtx_MEM (BLKmode, rtl);
15353 MEM_READONLY_P (rtl) = 1;
15356 /* Other aggregates, and complex values, could be represented using
15357 CONCAT: FIXME! */
15358 else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15360 /* Vectors only work if their mode is supported by the target.
15361 FIXME: generic vectors ought to work too. */
15362 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15364 /* If the initializer is something that we know will expand into an
15365 immediate RTL constant, expand it now. We must be careful not to
15366 reference variables which won't be output. */
15367 else if (initializer_constant_valid_p (init, type)
15368 && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15370 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15371 possible. */
15372 if (TREE_CODE (type) == VECTOR_TYPE)
15373 switch (TREE_CODE (init))
15375 case VECTOR_CST:
15376 break;
15377 case CONSTRUCTOR:
15378 if (TREE_CONSTANT (init))
15380 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15381 bool constant_p = true;
15382 tree value;
15383 unsigned HOST_WIDE_INT ix;
15385 /* Even when ctor is constant, it might contain non-*_CST
15386 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15387 belong into VECTOR_CST nodes. */
15388 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15389 if (!CONSTANT_CLASS_P (value))
15391 constant_p = false;
15392 break;
15395 if (constant_p)
15397 init = build_vector_from_ctor (type, elts);
15398 break;
15401 /* FALLTHRU */
15403 default:
15404 return NULL;
15407 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15409 /* If expand_expr returns a MEM, it wasn't immediate. */
15410 gcc_assert (!rtl || !MEM_P (rtl));
15413 return rtl;
15416 /* Generate RTL for the variable DECL to represent its location. */
15418 static rtx
15419 rtl_for_decl_location (tree decl)
15421 rtx rtl;
15423 /* Here we have to decide where we are going to say the parameter "lives"
15424 (as far as the debugger is concerned). We only have a couple of
15425 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15427 DECL_RTL normally indicates where the parameter lives during most of the
15428 activation of the function. If optimization is enabled however, this
15429 could be either NULL or else a pseudo-reg. Both of those cases indicate
15430 that the parameter doesn't really live anywhere (as far as the code
15431 generation parts of GCC are concerned) during most of the function's
15432 activation. That will happen (for example) if the parameter is never
15433 referenced within the function.
15435 We could just generate a location descriptor here for all non-NULL
15436 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15437 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15438 where DECL_RTL is NULL or is a pseudo-reg.
15440 Note however that we can only get away with using DECL_INCOMING_RTL as
15441 a backup substitute for DECL_RTL in certain limited cases. In cases
15442 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15443 we can be sure that the parameter was passed using the same type as it is
15444 declared to have within the function, and that its DECL_INCOMING_RTL
15445 points us to a place where a value of that type is passed.
15447 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15448 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15449 because in these cases DECL_INCOMING_RTL points us to a value of some
15450 type which is *different* from the type of the parameter itself. Thus,
15451 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15452 such cases, the debugger would end up (for example) trying to fetch a
15453 `float' from a place which actually contains the first part of a
15454 `double'. That would lead to really incorrect and confusing
15455 output at debug-time.
15457 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15458 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
15459 are a couple of exceptions however. On little-endian machines we can
15460 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15461 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15462 an integral type that is smaller than TREE_TYPE (decl). These cases arise
15463 when (on a little-endian machine) a non-prototyped function has a
15464 parameter declared to be of type `short' or `char'. In such cases,
15465 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15466 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15467 passed `int' value. If the debugger then uses that address to fetch
15468 a `short' or a `char' (on a little-endian machine) the result will be
15469 the correct data, so we allow for such exceptional cases below.
15471 Note that our goal here is to describe the place where the given formal
15472 parameter lives during most of the function's activation (i.e. between the
15473 end of the prologue and the start of the epilogue). We'll do that as best
15474 as we can. Note however that if the given formal parameter is modified
15475 sometime during the execution of the function, then a stack backtrace (at
15476 debug-time) will show the function as having been called with the *new*
15477 value rather than the value which was originally passed in. This happens
15478 rarely enough that it is not a major problem, but it *is* a problem, and
15479 I'd like to fix it.
15481 A future version of dwarf2out.c may generate two additional attributes for
15482 any given DW_TAG_formal_parameter DIE which will describe the "passed
15483 type" and the "passed location" for the given formal parameter in addition
15484 to the attributes we now generate to indicate the "declared type" and the
15485 "active location" for each parameter. This additional set of attributes
15486 could be used by debuggers for stack backtraces. Separately, note that
15487 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15488 This happens (for example) for inlined-instances of inline function formal
15489 parameters which are never referenced. This really shouldn't be
15490 happening. All PARM_DECL nodes should get valid non-NULL
15491 DECL_INCOMING_RTL values. FIXME. */
15493 /* Use DECL_RTL as the "location" unless we find something better. */
15494 rtl = DECL_RTL_IF_SET (decl);
15496 /* When generating abstract instances, ignore everything except
15497 constants, symbols living in memory, and symbols living in
15498 fixed registers. */
15499 if (! reload_completed)
15501 if (rtl
15502 && (CONSTANT_P (rtl)
15503 || (MEM_P (rtl)
15504 && CONSTANT_P (XEXP (rtl, 0)))
15505 || (REG_P (rtl)
15506 && TREE_CODE (decl) == VAR_DECL
15507 && TREE_STATIC (decl))))
15509 rtl = targetm.delegitimize_address (rtl);
15510 return rtl;
15512 rtl = NULL_RTX;
15514 else if (TREE_CODE (decl) == PARM_DECL)
15516 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15518 tree declared_type = TREE_TYPE (decl);
15519 tree passed_type = DECL_ARG_TYPE (decl);
15520 enum machine_mode dmode = TYPE_MODE (declared_type);
15521 enum machine_mode pmode = TYPE_MODE (passed_type);
15523 /* This decl represents a formal parameter which was optimized out.
15524 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15525 all cases where (rtl == NULL_RTX) just below. */
15526 if (dmode == pmode)
15527 rtl = DECL_INCOMING_RTL (decl);
15528 else if (SCALAR_INT_MODE_P (dmode)
15529 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15530 && DECL_INCOMING_RTL (decl))
15532 rtx inc = DECL_INCOMING_RTL (decl);
15533 if (REG_P (inc))
15534 rtl = inc;
15535 else if (MEM_P (inc))
15537 if (BYTES_BIG_ENDIAN)
15538 rtl = adjust_address_nv (inc, dmode,
15539 GET_MODE_SIZE (pmode)
15540 - GET_MODE_SIZE (dmode));
15541 else
15542 rtl = inc;
15547 /* If the parm was passed in registers, but lives on the stack, then
15548 make a big endian correction if the mode of the type of the
15549 parameter is not the same as the mode of the rtl. */
15550 /* ??? This is the same series of checks that are made in dbxout.c before
15551 we reach the big endian correction code there. It isn't clear if all
15552 of these checks are necessary here, but keeping them all is the safe
15553 thing to do. */
15554 else if (MEM_P (rtl)
15555 && XEXP (rtl, 0) != const0_rtx
15556 && ! CONSTANT_P (XEXP (rtl, 0))
15557 /* Not passed in memory. */
15558 && !MEM_P (DECL_INCOMING_RTL (decl))
15559 /* Not passed by invisible reference. */
15560 && (!REG_P (XEXP (rtl, 0))
15561 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15562 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15563 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15564 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15565 #endif
15567 /* Big endian correction check. */
15568 && BYTES_BIG_ENDIAN
15569 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15570 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15571 < UNITS_PER_WORD))
15573 int offset = (UNITS_PER_WORD
15574 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15576 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15577 plus_constant (XEXP (rtl, 0), offset));
15580 else if (TREE_CODE (decl) == VAR_DECL
15581 && rtl
15582 && MEM_P (rtl)
15583 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15584 && BYTES_BIG_ENDIAN)
15586 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15587 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15589 /* If a variable is declared "register" yet is smaller than
15590 a register, then if we store the variable to memory, it
15591 looks like we're storing a register-sized value, when in
15592 fact we are not. We need to adjust the offset of the
15593 storage location to reflect the actual value's bytes,
15594 else gdb will not be able to display it. */
15595 if (rsize > dsize)
15596 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15597 plus_constant (XEXP (rtl, 0), rsize-dsize));
15600 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15601 and will have been substituted directly into all expressions that use it.
15602 C does not have such a concept, but C++ and other languages do. */
15603 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15604 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15606 if (rtl)
15607 rtl = targetm.delegitimize_address (rtl);
15609 /* If we don't look past the constant pool, we risk emitting a
15610 reference to a constant pool entry that isn't referenced from
15611 code, and thus is not emitted. */
15612 if (rtl)
15613 rtl = avoid_constant_pool_reference (rtl);
15615 /* Try harder to get a rtl. If this symbol ends up not being emitted
15616 in the current CU, resolve_addr will remove the expression referencing
15617 it. */
15618 if (rtl == NULL_RTX
15619 && TREE_CODE (decl) == VAR_DECL
15620 && !DECL_EXTERNAL (decl)
15621 && TREE_STATIC (decl)
15622 && DECL_NAME (decl)
15623 && !DECL_HARD_REGISTER (decl)
15624 && DECL_MODE (decl) != VOIDmode)
15626 rtl = DECL_RTL (decl);
15627 /* Reset DECL_RTL back, as various parts of the compiler expects
15628 DECL_RTL set meaning it is actually going to be output. */
15629 SET_DECL_RTL (decl, NULL);
15630 if (!MEM_P (rtl)
15631 || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15632 || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15633 rtl = NULL_RTX;
15636 return rtl;
15639 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
15640 returned. If so, the decl for the COMMON block is returned, and the
15641 value is the offset into the common block for the symbol. */
15643 static tree
15644 fortran_common (tree decl, HOST_WIDE_INT *value)
15646 tree val_expr, cvar;
15647 enum machine_mode mode;
15648 HOST_WIDE_INT bitsize, bitpos;
15649 tree offset;
15650 int volatilep = 0, unsignedp = 0;
15652 /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15653 it does not have a value (the offset into the common area), or if it
15654 is thread local (as opposed to global) then it isn't common, and shouldn't
15655 be handled as such. */
15656 if (TREE_CODE (decl) != VAR_DECL
15657 || !TREE_STATIC (decl)
15658 || !DECL_HAS_VALUE_EXPR_P (decl)
15659 || !is_fortran ())
15660 return NULL_TREE;
15662 val_expr = DECL_VALUE_EXPR (decl);
15663 if (TREE_CODE (val_expr) != COMPONENT_REF)
15664 return NULL_TREE;
15666 cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15667 &mode, &unsignedp, &volatilep, true);
15669 if (cvar == NULL_TREE
15670 || TREE_CODE (cvar) != VAR_DECL
15671 || DECL_ARTIFICIAL (cvar)
15672 || !TREE_PUBLIC (cvar))
15673 return NULL_TREE;
15675 *value = 0;
15676 if (offset != NULL)
15678 if (!host_integerp (offset, 0))
15679 return NULL_TREE;
15680 *value = tree_low_cst (offset, 0);
15682 if (bitpos != 0)
15683 *value += bitpos / BITS_PER_UNIT;
15685 return cvar;
15688 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15689 data attribute for a variable or a parameter. We generate the
15690 DW_AT_const_value attribute only in those cases where the given variable
15691 or parameter does not have a true "location" either in memory or in a
15692 register. This can happen (for example) when a constant is passed as an
15693 actual argument in a call to an inline function. (It's possible that
15694 these things can crop up in other ways also.) Note that one type of
15695 constant value which can be passed into an inlined function is a constant
15696 pointer. This can happen for example if an actual argument in an inlined
15697 function call evaluates to a compile-time constant address. */
15699 static bool
15700 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15701 enum dwarf_attribute attr)
15703 rtx rtl;
15704 dw_loc_list_ref list;
15705 var_loc_list *loc_list;
15707 if (TREE_CODE (decl) == ERROR_MARK)
15708 return false;
15710 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15711 || TREE_CODE (decl) == RESULT_DECL);
15713 /* Try to get some constant RTL for this decl, and use that as the value of
15714 the location. */
15716 rtl = rtl_for_decl_location (decl);
15717 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15718 && add_const_value_attribute (die, rtl))
15719 return true;
15721 /* See if we have single element location list that is equivalent to
15722 a constant value. That way we are better to use add_const_value_attribute
15723 rather than expanding constant value equivalent. */
15724 loc_list = lookup_decl_loc (decl);
15725 if (loc_list && loc_list->first && loc_list->first == loc_list->last)
15727 struct var_loc_node *node;
15729 node = loc_list->first;
15730 rtl = NOTE_VAR_LOCATION (node->var_loc_note);
15731 if (GET_CODE (rtl) == VAR_LOCATION
15732 && GET_CODE (XEXP (rtl, 1)) != PARALLEL)
15733 rtl = XEXP (XEXP (rtl, 1), 0);
15734 if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15735 && add_const_value_attribute (die, rtl))
15736 return true;
15738 list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15739 if (list)
15741 add_AT_location_description (die, attr, list);
15742 return true;
15744 /* None of that worked, so it must not really have a location;
15745 try adding a constant value attribute from the DECL_INITIAL. */
15746 return tree_add_const_value_attribute_for_decl (die, decl);
15749 /* Add VARIABLE and DIE into deferred locations list. */
15751 static void
15752 defer_location (tree variable, dw_die_ref die)
15754 deferred_locations entry;
15755 entry.variable = variable;
15756 entry.die = die;
15757 VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15760 /* Helper function for tree_add_const_value_attribute. Natively encode
15761 initializer INIT into an array. Return true if successful. */
15763 static bool
15764 native_encode_initializer (tree init, unsigned char *array, int size)
15766 tree type;
15768 if (init == NULL_TREE)
15769 return false;
15771 STRIP_NOPS (init);
15772 switch (TREE_CODE (init))
15774 case STRING_CST:
15775 type = TREE_TYPE (init);
15776 if (TREE_CODE (type) == ARRAY_TYPE)
15778 tree enttype = TREE_TYPE (type);
15779 enum machine_mode mode = TYPE_MODE (enttype);
15781 if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15782 return false;
15783 if (int_size_in_bytes (type) != size)
15784 return false;
15785 if (size > TREE_STRING_LENGTH (init))
15787 memcpy (array, TREE_STRING_POINTER (init),
15788 TREE_STRING_LENGTH (init));
15789 memset (array + TREE_STRING_LENGTH (init),
15790 '\0', size - TREE_STRING_LENGTH (init));
15792 else
15793 memcpy (array, TREE_STRING_POINTER (init), size);
15794 return true;
15796 return false;
15797 case CONSTRUCTOR:
15798 type = TREE_TYPE (init);
15799 if (int_size_in_bytes (type) != size)
15800 return false;
15801 if (TREE_CODE (type) == ARRAY_TYPE)
15803 HOST_WIDE_INT min_index;
15804 unsigned HOST_WIDE_INT cnt;
15805 int curpos = 0, fieldsize;
15806 constructor_elt *ce;
15808 if (TYPE_DOMAIN (type) == NULL_TREE
15809 || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
15810 return false;
15812 fieldsize = int_size_in_bytes (TREE_TYPE (type));
15813 if (fieldsize <= 0)
15814 return false;
15816 min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
15817 memset (array, '\0', size);
15818 for (cnt = 0;
15819 VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
15820 cnt++)
15822 tree val = ce->value;
15823 tree index = ce->index;
15824 int pos = curpos;
15825 if (index && TREE_CODE (index) == RANGE_EXPR)
15826 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
15827 * fieldsize;
15828 else if (index)
15829 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
15831 if (val)
15833 STRIP_NOPS (val);
15834 if (!native_encode_initializer (val, array + pos, fieldsize))
15835 return false;
15837 curpos = pos + fieldsize;
15838 if (index && TREE_CODE (index) == RANGE_EXPR)
15840 int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
15841 - tree_low_cst (TREE_OPERAND (index, 0), 0);
15842 while (count > 0)
15844 if (val)
15845 memcpy (array + curpos, array + pos, fieldsize);
15846 curpos += fieldsize;
15849 gcc_assert (curpos <= size);
15851 return true;
15853 else if (TREE_CODE (type) == RECORD_TYPE
15854 || TREE_CODE (type) == UNION_TYPE)
15856 tree field = NULL_TREE;
15857 unsigned HOST_WIDE_INT cnt;
15858 constructor_elt *ce;
15860 if (int_size_in_bytes (type) != size)
15861 return false;
15863 if (TREE_CODE (type) == RECORD_TYPE)
15864 field = TYPE_FIELDS (type);
15866 for (cnt = 0;
15867 VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
15868 cnt++, field = field ? TREE_CHAIN (field) : 0)
15870 tree val = ce->value;
15871 int pos, fieldsize;
15873 if (ce->index != 0)
15874 field = ce->index;
15876 if (val)
15877 STRIP_NOPS (val);
15879 if (field == NULL_TREE || DECL_BIT_FIELD (field))
15880 return false;
15882 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
15883 && TYPE_DOMAIN (TREE_TYPE (field))
15884 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
15885 return false;
15886 else if (DECL_SIZE_UNIT (field) == NULL_TREE
15887 || !host_integerp (DECL_SIZE_UNIT (field), 0))
15888 return false;
15889 fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
15890 pos = int_byte_position (field);
15891 gcc_assert (pos + fieldsize <= size);
15892 if (val
15893 && !native_encode_initializer (val, array + pos, fieldsize))
15894 return false;
15896 return true;
15898 return false;
15899 case VIEW_CONVERT_EXPR:
15900 case NON_LVALUE_EXPR:
15901 return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
15902 default:
15903 return native_encode_expr (init, array, size) == size;
15907 /* Attach a DW_AT_const_value attribute to DIE. The value of the
15908 attribute is the const value T. */
15910 static bool
15911 tree_add_const_value_attribute (dw_die_ref die, tree t)
15913 tree init;
15914 tree type = TREE_TYPE (t);
15915 rtx rtl;
15917 if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
15918 return false;
15920 init = t;
15921 gcc_assert (!DECL_P (init));
15923 rtl = rtl_for_decl_init (init, type);
15924 if (rtl)
15925 return add_const_value_attribute (die, rtl);
15926 /* If the host and target are sane, try harder. */
15927 else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
15928 && initializer_constant_valid_p (init, type))
15930 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
15931 if (size > 0 && (int) size == size)
15933 unsigned char *array = GGC_CNEWVEC (unsigned char, size);
15935 if (native_encode_initializer (init, array, size))
15937 add_AT_vec (die, DW_AT_const_value, size, 1, array);
15938 return true;
15942 return false;
15945 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
15946 attribute is the const value of T, where T is an integral constant
15947 variable with static storage duration
15948 (so it can't be a PARM_DECL or a RESULT_DECL). */
15950 static bool
15951 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
15954 if (!decl
15955 || (TREE_CODE (decl) != VAR_DECL
15956 && TREE_CODE (decl) != CONST_DECL))
15957 return false;
15959 if (TREE_READONLY (decl)
15960 && ! TREE_THIS_VOLATILE (decl)
15961 && DECL_INITIAL (decl))
15962 /* OK */;
15963 else
15964 return false;
15966 /* Don't add DW_AT_const_value if abstract origin already has one. */
15967 if (get_AT (var_die, DW_AT_const_value))
15968 return false;
15970 return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
15973 /* Convert the CFI instructions for the current function into a
15974 location list. This is used for DW_AT_frame_base when we targeting
15975 a dwarf2 consumer that does not support the dwarf3
15976 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
15977 expressions. */
15979 static dw_loc_list_ref
15980 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
15982 dw_fde_ref fde;
15983 dw_loc_list_ref list, *list_tail;
15984 dw_cfi_ref cfi;
15985 dw_cfa_location last_cfa, next_cfa;
15986 const char *start_label, *last_label, *section;
15987 dw_cfa_location remember;
15989 fde = current_fde ();
15990 gcc_assert (fde != NULL);
15992 section = secname_for_decl (current_function_decl);
15993 list_tail = &list;
15994 list = NULL;
15996 memset (&next_cfa, 0, sizeof (next_cfa));
15997 next_cfa.reg = INVALID_REGNUM;
15998 remember = next_cfa;
16000 start_label = fde->dw_fde_begin;
16002 /* ??? Bald assumption that the CIE opcode list does not contain
16003 advance opcodes. */
16004 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16005 lookup_cfa_1 (cfi, &next_cfa, &remember);
16007 last_cfa = next_cfa;
16008 last_label = start_label;
16010 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16011 switch (cfi->dw_cfi_opc)
16013 case DW_CFA_set_loc:
16014 case DW_CFA_advance_loc1:
16015 case DW_CFA_advance_loc2:
16016 case DW_CFA_advance_loc4:
16017 if (!cfa_equal_p (&last_cfa, &next_cfa))
16019 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16020 start_label, last_label, section,
16021 list == NULL);
16023 list_tail = &(*list_tail)->dw_loc_next;
16024 last_cfa = next_cfa;
16025 start_label = last_label;
16027 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16028 break;
16030 case DW_CFA_advance_loc:
16031 /* The encoding is complex enough that we should never emit this. */
16032 gcc_unreachable ();
16034 default:
16035 lookup_cfa_1 (cfi, &next_cfa, &remember);
16036 break;
16039 if (!cfa_equal_p (&last_cfa, &next_cfa))
16041 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16042 start_label, last_label, section,
16043 list == NULL);
16044 list_tail = &(*list_tail)->dw_loc_next;
16045 start_label = last_label;
16047 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16048 start_label, fde->dw_fde_end, section,
16049 list == NULL);
16051 return list;
16054 /* Compute a displacement from the "steady-state frame pointer" to the
16055 frame base (often the same as the CFA), and store it in
16056 frame_pointer_fb_offset. OFFSET is added to the displacement
16057 before the latter is negated. */
16059 static void
16060 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16062 rtx reg, elim;
16064 #ifdef FRAME_POINTER_CFA_OFFSET
16065 reg = frame_pointer_rtx;
16066 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16067 #else
16068 reg = arg_pointer_rtx;
16069 offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16070 #endif
16072 elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16073 if (GET_CODE (elim) == PLUS)
16075 offset += INTVAL (XEXP (elim, 1));
16076 elim = XEXP (elim, 0);
16079 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16080 && (elim == hard_frame_pointer_rtx
16081 || elim == stack_pointer_rtx))
16082 || elim == (frame_pointer_needed
16083 ? hard_frame_pointer_rtx
16084 : stack_pointer_rtx));
16086 frame_pointer_fb_offset = -offset;
16089 /* Generate a DW_AT_name attribute given some string value to be included as
16090 the value of the attribute. */
16092 static void
16093 add_name_attribute (dw_die_ref die, const char *name_string)
16095 if (name_string != NULL && *name_string != 0)
16097 if (demangle_name_func)
16098 name_string = (*demangle_name_func) (name_string);
16100 add_AT_string (die, DW_AT_name, name_string);
16104 /* Generate a DW_AT_comp_dir attribute for DIE. */
16106 static void
16107 add_comp_dir_attribute (dw_die_ref die)
16109 const char *wd = get_src_pwd ();
16110 char *wd1;
16112 if (wd == NULL)
16113 return;
16115 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16117 int wdlen;
16119 wdlen = strlen (wd);
16120 wd1 = GGC_NEWVEC (char, wdlen + 2);
16121 strcpy (wd1, wd);
16122 wd1 [wdlen] = DIR_SEPARATOR;
16123 wd1 [wdlen + 1] = 0;
16124 wd = wd1;
16127 add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16130 /* Given a tree node describing an array bound (either lower or upper) output
16131 a representation for that bound. */
16133 static void
16134 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16136 switch (TREE_CODE (bound))
16138 case ERROR_MARK:
16139 return;
16141 /* All fixed-bounds are represented by INTEGER_CST nodes. */
16142 case INTEGER_CST:
16144 unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16146 /* Use the default if possible. */
16147 if (bound_attr == DW_AT_lower_bound
16148 && (((is_c_family () || is_java ()) && integer_zerop (bound))
16149 || (is_fortran () && integer_onep (bound))))
16152 /* Otherwise represent the bound as an unsigned value with the
16153 precision of its type. The precision and signedness of the
16154 type will be necessary to re-interpret it unambiguously. */
16155 else if (prec < HOST_BITS_PER_WIDE_INT)
16157 unsigned HOST_WIDE_INT mask
16158 = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16159 add_AT_unsigned (subrange_die, bound_attr,
16160 TREE_INT_CST_LOW (bound) & mask);
16162 else if (prec == HOST_BITS_PER_WIDE_INT
16163 || TREE_INT_CST_HIGH (bound) == 0)
16164 add_AT_unsigned (subrange_die, bound_attr,
16165 TREE_INT_CST_LOW (bound));
16166 else
16167 add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16168 TREE_INT_CST_LOW (bound));
16170 break;
16172 CASE_CONVERT:
16173 case VIEW_CONVERT_EXPR:
16174 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16175 break;
16177 case SAVE_EXPR:
16178 break;
16180 case VAR_DECL:
16181 case PARM_DECL:
16182 case RESULT_DECL:
16184 dw_die_ref decl_die = lookup_decl_die (bound);
16185 dw_loc_list_ref loc;
16187 /* ??? Can this happen, or should the variable have been bound
16188 first? Probably it can, since I imagine that we try to create
16189 the types of parameters in the order in which they exist in
16190 the list, and won't have created a forward reference to a
16191 later parameter. */
16192 if (decl_die != NULL)
16193 add_AT_die_ref (subrange_die, bound_attr, decl_die);
16194 else
16196 loc = loc_list_from_tree (bound, 0);
16197 add_AT_location_description (subrange_die, bound_attr, loc);
16199 break;
16202 default:
16204 /* Otherwise try to create a stack operation procedure to
16205 evaluate the value of the array bound. */
16207 dw_die_ref ctx, decl_die;
16208 dw_loc_list_ref list;
16210 list = loc_list_from_tree (bound, 2);
16211 if (list == NULL)
16212 break;
16214 if (current_function_decl == 0)
16215 ctx = comp_unit_die;
16216 else
16217 ctx = lookup_decl_die (current_function_decl);
16219 decl_die = new_die (DW_TAG_variable, ctx, bound);
16220 add_AT_flag (decl_die, DW_AT_artificial, 1);
16221 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16222 if (list->dw_loc_next)
16223 add_AT_loc_list (decl_die, DW_AT_location, list);
16224 else
16225 add_AT_loc (decl_die, DW_AT_location, list->expr);
16227 add_AT_die_ref (subrange_die, bound_attr, decl_die);
16228 break;
16233 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16234 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16235 Note that the block of subscript information for an array type also
16236 includes information about the element type of the given array type. */
16238 static void
16239 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16241 unsigned dimension_number;
16242 tree lower, upper;
16243 dw_die_ref subrange_die;
16245 for (dimension_number = 0;
16246 TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16247 type = TREE_TYPE (type), dimension_number++)
16249 tree domain = TYPE_DOMAIN (type);
16251 if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16252 break;
16254 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16255 and (in GNU C only) variable bounds. Handle all three forms
16256 here. */
16257 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16258 if (domain)
16260 /* We have an array type with specified bounds. */
16261 lower = TYPE_MIN_VALUE (domain);
16262 upper = TYPE_MAX_VALUE (domain);
16264 /* Define the index type. */
16265 if (TREE_TYPE (domain))
16267 /* ??? This is probably an Ada unnamed subrange type. Ignore the
16268 TREE_TYPE field. We can't emit debug info for this
16269 because it is an unnamed integral type. */
16270 if (TREE_CODE (domain) == INTEGER_TYPE
16271 && TYPE_NAME (domain) == NULL_TREE
16272 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16273 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16275 else
16276 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16277 type_die);
16280 /* ??? If upper is NULL, the array has unspecified length,
16281 but it does have a lower bound. This happens with Fortran
16282 dimension arr(N:*)
16283 Since the debugger is definitely going to need to know N
16284 to produce useful results, go ahead and output the lower
16285 bound solo, and hope the debugger can cope. */
16287 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16288 if (upper)
16289 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16292 /* Otherwise we have an array type with an unspecified length. The
16293 DWARF-2 spec does not say how to handle this; let's just leave out the
16294 bounds. */
16298 static void
16299 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16301 unsigned size;
16303 switch (TREE_CODE (tree_node))
16305 case ERROR_MARK:
16306 size = 0;
16307 break;
16308 case ENUMERAL_TYPE:
16309 case RECORD_TYPE:
16310 case UNION_TYPE:
16311 case QUAL_UNION_TYPE:
16312 size = int_size_in_bytes (tree_node);
16313 break;
16314 case FIELD_DECL:
16315 /* For a data member of a struct or union, the DW_AT_byte_size is
16316 generally given as the number of bytes normally allocated for an
16317 object of the *declared* type of the member itself. This is true
16318 even for bit-fields. */
16319 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16320 break;
16321 default:
16322 gcc_unreachable ();
16325 /* Note that `size' might be -1 when we get to this point. If it is, that
16326 indicates that the byte size of the entity in question is variable. We
16327 have no good way of expressing this fact in Dwarf at the present time,
16328 so just let the -1 pass on through. */
16329 add_AT_unsigned (die, DW_AT_byte_size, size);
16332 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16333 which specifies the distance in bits from the highest order bit of the
16334 "containing object" for the bit-field to the highest order bit of the
16335 bit-field itself.
16337 For any given bit-field, the "containing object" is a hypothetical object
16338 (of some integral or enum type) within which the given bit-field lives. The
16339 type of this hypothetical "containing object" is always the same as the
16340 declared type of the individual bit-field itself. The determination of the
16341 exact location of the "containing object" for a bit-field is rather
16342 complicated. It's handled by the `field_byte_offset' function (above).
16344 Note that it is the size (in bytes) of the hypothetical "containing object"
16345 which will be given in the DW_AT_byte_size attribute for this bit-field.
16346 (See `byte_size_attribute' above). */
16348 static inline void
16349 add_bit_offset_attribute (dw_die_ref die, tree decl)
16351 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16352 tree type = DECL_BIT_FIELD_TYPE (decl);
16353 HOST_WIDE_INT bitpos_int;
16354 HOST_WIDE_INT highest_order_object_bit_offset;
16355 HOST_WIDE_INT highest_order_field_bit_offset;
16356 HOST_WIDE_INT unsigned bit_offset;
16358 /* Must be a field and a bit field. */
16359 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16361 /* We can't yet handle bit-fields whose offsets are variable, so if we
16362 encounter such things, just return without generating any attribute
16363 whatsoever. Likewise for variable or too large size. */
16364 if (! host_integerp (bit_position (decl), 0)
16365 || ! host_integerp (DECL_SIZE (decl), 1))
16366 return;
16368 bitpos_int = int_bit_position (decl);
16370 /* Note that the bit offset is always the distance (in bits) from the
16371 highest-order bit of the "containing object" to the highest-order bit of
16372 the bit-field itself. Since the "high-order end" of any object or field
16373 is different on big-endian and little-endian machines, the computation
16374 below must take account of these differences. */
16375 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16376 highest_order_field_bit_offset = bitpos_int;
16378 if (! BYTES_BIG_ENDIAN)
16380 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16381 highest_order_object_bit_offset += simple_type_size_in_bits (type);
16384 bit_offset
16385 = (! BYTES_BIG_ENDIAN
16386 ? highest_order_object_bit_offset - highest_order_field_bit_offset
16387 : highest_order_field_bit_offset - highest_order_object_bit_offset);
16389 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16392 /* For a FIELD_DECL node which represents a bit field, output an attribute
16393 which specifies the length in bits of the given field. */
16395 static inline void
16396 add_bit_size_attribute (dw_die_ref die, tree decl)
16398 /* Must be a field and a bit field. */
16399 gcc_assert (TREE_CODE (decl) == FIELD_DECL
16400 && DECL_BIT_FIELD_TYPE (decl));
16402 if (host_integerp (DECL_SIZE (decl), 1))
16403 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16406 /* If the compiled language is ANSI C, then add a 'prototyped'
16407 attribute, if arg types are given for the parameters of a function. */
16409 static inline void
16410 add_prototyped_attribute (dw_die_ref die, tree func_type)
16412 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16413 && TYPE_ARG_TYPES (func_type) != NULL)
16414 add_AT_flag (die, DW_AT_prototyped, 1);
16417 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
16418 by looking in either the type declaration or object declaration
16419 equate table. */
16421 static inline dw_die_ref
16422 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16424 dw_die_ref origin_die = NULL;
16426 if (TREE_CODE (origin) != FUNCTION_DECL)
16428 /* We may have gotten separated from the block for the inlined
16429 function, if we're in an exception handler or some such; make
16430 sure that the abstract function has been written out.
16432 Doing this for nested functions is wrong, however; functions are
16433 distinct units, and our context might not even be inline. */
16434 tree fn = origin;
16436 if (TYPE_P (fn))
16437 fn = TYPE_STUB_DECL (fn);
16439 fn = decl_function_context (fn);
16440 if (fn)
16441 dwarf2out_abstract_function (fn);
16444 if (DECL_P (origin))
16445 origin_die = lookup_decl_die (origin);
16446 else if (TYPE_P (origin))
16447 origin_die = lookup_type_die (origin);
16449 /* XXX: Functions that are never lowered don't always have correct block
16450 trees (in the case of java, they simply have no block tree, in some other
16451 languages). For these functions, there is nothing we can really do to
16452 output correct debug info for inlined functions in all cases. Rather
16453 than die, we'll just produce deficient debug info now, in that we will
16454 have variables without a proper abstract origin. In the future, when all
16455 functions are lowered, we should re-add a gcc_assert (origin_die)
16456 here. */
16458 if (origin_die)
16459 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16460 return origin_die;
16463 /* We do not currently support the pure_virtual attribute. */
16465 static inline void
16466 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16468 if (DECL_VINDEX (func_decl))
16470 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16472 if (host_integerp (DECL_VINDEX (func_decl), 0))
16473 add_AT_loc (die, DW_AT_vtable_elem_location,
16474 new_loc_descr (DW_OP_constu,
16475 tree_low_cst (DECL_VINDEX (func_decl), 0),
16476 0));
16478 /* GNU extension: Record what type this method came from originally. */
16479 if (debug_info_level > DINFO_LEVEL_TERSE)
16480 add_AT_die_ref (die, DW_AT_containing_type,
16481 lookup_type_die (DECL_CONTEXT (func_decl)));
16485 /* Add source coordinate attributes for the given decl. */
16487 static void
16488 add_src_coords_attributes (dw_die_ref die, tree decl)
16490 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16492 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16493 add_AT_unsigned (die, DW_AT_decl_line, s.line);
16496 /* Add a DW_AT_name attribute and source coordinate attribute for the
16497 given decl, but only if it actually has a name. */
16499 static void
16500 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16502 tree decl_name;
16504 decl_name = DECL_NAME (decl);
16505 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16507 const char *name = dwarf2_name (decl, 0);
16508 if (name)
16509 add_name_attribute (die, name);
16510 if (! DECL_ARTIFICIAL (decl))
16511 add_src_coords_attributes (die, decl);
16513 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16514 && TREE_PUBLIC (decl)
16515 && !DECL_ABSTRACT (decl)
16516 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16517 && !is_fortran ())
16519 /* Defer until we have an assembler name set. */
16520 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16522 limbo_die_node *asm_name;
16524 asm_name = GGC_CNEW (limbo_die_node);
16525 asm_name->die = die;
16526 asm_name->created_for = decl;
16527 asm_name->next = deferred_asm_name;
16528 deferred_asm_name = asm_name;
16530 else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16531 add_AT_string (die, DW_AT_MIPS_linkage_name,
16532 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16536 #ifdef VMS_DEBUGGING_INFO
16537 /* Get the function's name, as described by its RTL. This may be different
16538 from the DECL_NAME name used in the source file. */
16539 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16541 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16542 XEXP (DECL_RTL (decl), 0));
16543 VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16545 #endif
16548 /* Push a new declaration scope. */
16550 static void
16551 push_decl_scope (tree scope)
16553 VEC_safe_push (tree, gc, decl_scope_table, scope);
16556 /* Pop a declaration scope. */
16558 static inline void
16559 pop_decl_scope (void)
16561 VEC_pop (tree, decl_scope_table);
16564 /* Return the DIE for the scope that immediately contains this type.
16565 Non-named types get global scope. Named types nested in other
16566 types get their containing scope if it's open, or global scope
16567 otherwise. All other types (i.e. function-local named types) get
16568 the current active scope. */
16570 static dw_die_ref
16571 scope_die_for (tree t, dw_die_ref context_die)
16573 dw_die_ref scope_die = NULL;
16574 tree containing_scope;
16575 int i;
16577 /* Non-types always go in the current scope. */
16578 gcc_assert (TYPE_P (t));
16580 containing_scope = TYPE_CONTEXT (t);
16582 /* Use the containing namespace if it was passed in (for a declaration). */
16583 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16585 if (context_die == lookup_decl_die (containing_scope))
16586 /* OK */;
16587 else
16588 containing_scope = NULL_TREE;
16591 /* Ignore function type "scopes" from the C frontend. They mean that
16592 a tagged type is local to a parmlist of a function declarator, but
16593 that isn't useful to DWARF. */
16594 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16595 containing_scope = NULL_TREE;
16597 if (containing_scope == NULL_TREE)
16598 scope_die = comp_unit_die;
16599 else if (TYPE_P (containing_scope))
16601 /* For types, we can just look up the appropriate DIE. But
16602 first we check to see if we're in the middle of emitting it
16603 so we know where the new DIE should go. */
16604 for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16605 if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16606 break;
16608 if (i < 0)
16610 gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16611 || TREE_ASM_WRITTEN (containing_scope));
16613 /* If none of the current dies are suitable, we get file scope. */
16614 scope_die = comp_unit_die;
16616 else
16617 scope_die = lookup_type_die (containing_scope);
16619 else
16620 scope_die = context_die;
16622 return scope_die;
16625 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
16627 static inline int
16628 local_scope_p (dw_die_ref context_die)
16630 for (; context_die; context_die = context_die->die_parent)
16631 if (context_die->die_tag == DW_TAG_inlined_subroutine
16632 || context_die->die_tag == DW_TAG_subprogram)
16633 return 1;
16635 return 0;
16638 /* Returns nonzero if CONTEXT_DIE is a class. */
16640 static inline int
16641 class_scope_p (dw_die_ref context_die)
16643 return (context_die
16644 && (context_die->die_tag == DW_TAG_structure_type
16645 || context_die->die_tag == DW_TAG_class_type
16646 || context_die->die_tag == DW_TAG_interface_type
16647 || context_die->die_tag == DW_TAG_union_type));
16650 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16651 whether or not to treat a DIE in this context as a declaration. */
16653 static inline int
16654 class_or_namespace_scope_p (dw_die_ref context_die)
16656 return (class_scope_p (context_die)
16657 || (context_die && context_die->die_tag == DW_TAG_namespace));
16660 /* Many forms of DIEs require a "type description" attribute. This
16661 routine locates the proper "type descriptor" die for the type given
16662 by 'type', and adds a DW_AT_type attribute below the given die. */
16664 static void
16665 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16666 int decl_volatile, dw_die_ref context_die)
16668 enum tree_code code = TREE_CODE (type);
16669 dw_die_ref type_die = NULL;
16671 /* ??? If this type is an unnamed subrange type of an integral, floating-point
16672 or fixed-point type, use the inner type. This is because we have no
16673 support for unnamed types in base_type_die. This can happen if this is
16674 an Ada subrange type. Correct solution is emit a subrange type die. */
16675 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16676 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16677 type = TREE_TYPE (type), code = TREE_CODE (type);
16679 if (code == ERROR_MARK
16680 /* Handle a special case. For functions whose return type is void, we
16681 generate *no* type attribute. (Note that no object may have type
16682 `void', so this only applies to function return types). */
16683 || code == VOID_TYPE)
16684 return;
16686 type_die = modified_type_die (type,
16687 decl_const || TYPE_READONLY (type),
16688 decl_volatile || TYPE_VOLATILE (type),
16689 context_die);
16691 if (type_die != NULL)
16692 add_AT_die_ref (object_die, DW_AT_type, type_die);
16695 /* Given an object die, add the calling convention attribute for the
16696 function call type. */
16697 static void
16698 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16700 enum dwarf_calling_convention value = DW_CC_normal;
16702 value = ((enum dwarf_calling_convention)
16703 targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16705 /* DWARF doesn't provide a way to identify a program's source-level
16706 entry point. DW_AT_calling_convention attributes are only meant
16707 to describe functions' calling conventions. However, lacking a
16708 better way to signal the Fortran main program, we use this for the
16709 time being, following existing custom. */
16710 if (is_fortran ()
16711 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16712 value = DW_CC_program;
16714 /* Only add the attribute if the backend requests it, and
16715 is not DW_CC_normal. */
16716 if (value && (value != DW_CC_normal))
16717 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16720 /* Given a tree pointer to a struct, class, union, or enum type node, return
16721 a pointer to the (string) tag name for the given type, or zero if the type
16722 was declared without a tag. */
16724 static const char *
16725 type_tag (const_tree type)
16727 const char *name = 0;
16729 if (TYPE_NAME (type) != 0)
16731 tree t = 0;
16733 /* Find the IDENTIFIER_NODE for the type name. */
16734 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16735 t = TYPE_NAME (type);
16737 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16738 a TYPE_DECL node, regardless of whether or not a `typedef' was
16739 involved. */
16740 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16741 && ! DECL_IGNORED_P (TYPE_NAME (type)))
16743 /* We want to be extra verbose. Don't call dwarf_name if
16744 DECL_NAME isn't set. The default hook for decl_printable_name
16745 doesn't like that, and in this context it's correct to return
16746 0, instead of "<anonymous>" or the like. */
16747 if (DECL_NAME (TYPE_NAME (type)))
16748 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16751 /* Now get the name as a string, or invent one. */
16752 if (!name && t != 0)
16753 name = IDENTIFIER_POINTER (t);
16756 return (name == 0 || *name == '\0') ? 0 : name;
16759 /* Return the type associated with a data member, make a special check
16760 for bit field types. */
16762 static inline tree
16763 member_declared_type (const_tree member)
16765 return (DECL_BIT_FIELD_TYPE (member)
16766 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16769 /* Get the decl's label, as described by its RTL. This may be different
16770 from the DECL_NAME name used in the source file. */
16772 #if 0
16773 static const char *
16774 decl_start_label (tree decl)
16776 rtx x;
16777 const char *fnname;
16779 x = DECL_RTL (decl);
16780 gcc_assert (MEM_P (x));
16782 x = XEXP (x, 0);
16783 gcc_assert (GET_CODE (x) == SYMBOL_REF);
16785 fnname = XSTR (x, 0);
16786 return fnname;
16788 #endif
16790 /* These routines generate the internal representation of the DIE's for
16791 the compilation unit. Debugging information is collected by walking
16792 the declaration trees passed in from dwarf2out_decl(). */
16794 static void
16795 gen_array_type_die (tree type, dw_die_ref context_die)
16797 dw_die_ref scope_die = scope_die_for (type, context_die);
16798 dw_die_ref array_die;
16800 /* GNU compilers represent multidimensional array types as sequences of one
16801 dimensional array types whose element types are themselves array types.
16802 We sometimes squish that down to a single array_type DIE with multiple
16803 subscripts in the Dwarf debugging info. The draft Dwarf specification
16804 say that we are allowed to do this kind of compression in C, because
16805 there is no difference between an array of arrays and a multidimensional
16806 array. We don't do this for Ada to remain as close as possible to the
16807 actual representation, which is especially important against the language
16808 flexibilty wrt arrays of variable size. */
16810 bool collapse_nested_arrays = !is_ada ();
16811 tree element_type;
16813 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
16814 DW_TAG_string_type doesn't have DW_AT_type attribute). */
16815 if (TYPE_STRING_FLAG (type)
16816 && TREE_CODE (type) == ARRAY_TYPE
16817 && is_fortran ()
16818 && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
16820 HOST_WIDE_INT size;
16822 array_die = new_die (DW_TAG_string_type, scope_die, type);
16823 add_name_attribute (array_die, type_tag (type));
16824 equate_type_number_to_die (type, array_die);
16825 size = int_size_in_bytes (type);
16826 if (size >= 0)
16827 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16828 else if (TYPE_DOMAIN (type) != NULL_TREE
16829 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
16830 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
16832 tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
16833 dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
16835 size = int_size_in_bytes (TREE_TYPE (szdecl));
16836 if (loc && size > 0)
16838 add_AT_location_description (array_die, DW_AT_string_length, loc);
16839 if (size != DWARF2_ADDR_SIZE)
16840 add_AT_unsigned (array_die, DW_AT_byte_size, size);
16843 return;
16846 /* ??? The SGI dwarf reader fails for array of array of enum types
16847 (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
16848 array type comes before the outer array type. We thus call gen_type_die
16849 before we new_die and must prevent nested array types collapsing for this
16850 target. */
16852 #ifdef MIPS_DEBUGGING_INFO
16853 gen_type_die (TREE_TYPE (type), context_die);
16854 collapse_nested_arrays = false;
16855 #endif
16857 array_die = new_die (DW_TAG_array_type, scope_die, type);
16858 add_name_attribute (array_die, type_tag (type));
16859 equate_type_number_to_die (type, array_die);
16861 if (TREE_CODE (type) == VECTOR_TYPE)
16863 /* The frontend feeds us a representation for the vector as a struct
16864 containing an array. Pull out the array type. */
16865 type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
16866 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
16869 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
16870 if (is_fortran ()
16871 && TREE_CODE (type) == ARRAY_TYPE
16872 && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
16873 && !TYPE_STRING_FLAG (TREE_TYPE (type)))
16874 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
16876 #if 0
16877 /* We default the array ordering. SDB will probably do
16878 the right things even if DW_AT_ordering is not present. It's not even
16879 an issue until we start to get into multidimensional arrays anyway. If
16880 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
16881 then we'll have to put the DW_AT_ordering attribute back in. (But if
16882 and when we find out that we need to put these in, we will only do so
16883 for multidimensional arrays. */
16884 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
16885 #endif
16887 #ifdef MIPS_DEBUGGING_INFO
16888 /* The SGI compilers handle arrays of unknown bound by setting
16889 AT_declaration and not emitting any subrange DIEs. */
16890 if (! TYPE_DOMAIN (type))
16891 add_AT_flag (array_die, DW_AT_declaration, 1);
16892 else
16893 #endif
16894 add_subscript_info (array_die, type, collapse_nested_arrays);
16896 /* Add representation of the type of the elements of this array type and
16897 emit the corresponding DIE if we haven't done it already. */
16898 element_type = TREE_TYPE (type);
16899 if (collapse_nested_arrays)
16900 while (TREE_CODE (element_type) == ARRAY_TYPE)
16902 if (TYPE_STRING_FLAG (element_type) && is_fortran ())
16903 break;
16904 element_type = TREE_TYPE (element_type);
16907 #ifndef MIPS_DEBUGGING_INFO
16908 gen_type_die (element_type, context_die);
16909 #endif
16911 add_type_attribute (array_die, element_type, 0, 0, context_die);
16913 if (get_AT (array_die, DW_AT_name))
16914 add_pubtype (type, array_die);
16917 static dw_loc_descr_ref
16918 descr_info_loc (tree val, tree base_decl)
16920 HOST_WIDE_INT size;
16921 dw_loc_descr_ref loc, loc2;
16922 enum dwarf_location_atom op;
16924 if (val == base_decl)
16925 return new_loc_descr (DW_OP_push_object_address, 0, 0);
16927 switch (TREE_CODE (val))
16929 CASE_CONVERT:
16930 return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16931 case VAR_DECL:
16932 return loc_descriptor_from_tree (val, 0);
16933 case INTEGER_CST:
16934 if (host_integerp (val, 0))
16935 return int_loc_descriptor (tree_low_cst (val, 0));
16936 break;
16937 case INDIRECT_REF:
16938 size = int_size_in_bytes (TREE_TYPE (val));
16939 if (size < 0)
16940 break;
16941 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16942 if (!loc)
16943 break;
16944 if (size == DWARF2_ADDR_SIZE)
16945 add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
16946 else
16947 add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
16948 return loc;
16949 case POINTER_PLUS_EXPR:
16950 case PLUS_EXPR:
16951 if (host_integerp (TREE_OPERAND (val, 1), 1)
16952 && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
16953 < 16384)
16955 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16956 if (!loc)
16957 break;
16958 loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
16960 else
16962 op = DW_OP_plus;
16963 do_binop:
16964 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
16965 if (!loc)
16966 break;
16967 loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
16968 if (!loc2)
16969 break;
16970 add_loc_descr (&loc, loc2);
16971 add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
16973 return loc;
16974 case MINUS_EXPR:
16975 op = DW_OP_minus;
16976 goto do_binop;
16977 case MULT_EXPR:
16978 op = DW_OP_mul;
16979 goto do_binop;
16980 case EQ_EXPR:
16981 op = DW_OP_eq;
16982 goto do_binop;
16983 case NE_EXPR:
16984 op = DW_OP_ne;
16985 goto do_binop;
16986 default:
16987 break;
16989 return NULL;
16992 static void
16993 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
16994 tree val, tree base_decl)
16996 dw_loc_descr_ref loc;
16998 if (host_integerp (val, 0))
17000 add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17001 return;
17004 loc = descr_info_loc (val, base_decl);
17005 if (!loc)
17006 return;
17008 add_AT_loc (die, attr, loc);
17011 /* This routine generates DIE for array with hidden descriptor, details
17012 are filled into *info by a langhook. */
17014 static void
17015 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17016 dw_die_ref context_die)
17018 dw_die_ref scope_die = scope_die_for (type, context_die);
17019 dw_die_ref array_die;
17020 int dim;
17022 array_die = new_die (DW_TAG_array_type, scope_die, type);
17023 add_name_attribute (array_die, type_tag (type));
17024 equate_type_number_to_die (type, array_die);
17026 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
17027 if (is_fortran ()
17028 && info->ndimensions >= 2)
17029 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17031 if (info->data_location)
17032 add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17033 info->base_decl);
17034 if (info->associated)
17035 add_descr_info_field (array_die, DW_AT_associated, info->associated,
17036 info->base_decl);
17037 if (info->allocated)
17038 add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17039 info->base_decl);
17041 for (dim = 0; dim < info->ndimensions; dim++)
17043 dw_die_ref subrange_die
17044 = new_die (DW_TAG_subrange_type, array_die, NULL);
17046 if (info->dimen[dim].lower_bound)
17048 /* If it is the default value, omit it. */
17049 if ((is_c_family () || is_java ())
17050 && integer_zerop (info->dimen[dim].lower_bound))
17052 else if (is_fortran ()
17053 && integer_onep (info->dimen[dim].lower_bound))
17055 else
17056 add_descr_info_field (subrange_die, DW_AT_lower_bound,
17057 info->dimen[dim].lower_bound,
17058 info->base_decl);
17060 if (info->dimen[dim].upper_bound)
17061 add_descr_info_field (subrange_die, DW_AT_upper_bound,
17062 info->dimen[dim].upper_bound,
17063 info->base_decl);
17064 if (info->dimen[dim].stride)
17065 add_descr_info_field (subrange_die, DW_AT_byte_stride,
17066 info->dimen[dim].stride,
17067 info->base_decl);
17070 gen_type_die (info->element_type, context_die);
17071 add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17073 if (get_AT (array_die, DW_AT_name))
17074 add_pubtype (type, array_die);
17077 #if 0
17078 static void
17079 gen_entry_point_die (tree decl, dw_die_ref context_die)
17081 tree origin = decl_ultimate_origin (decl);
17082 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17084 if (origin != NULL)
17085 add_abstract_origin_attribute (decl_die, origin);
17086 else
17088 add_name_and_src_coords_attributes (decl_die, decl);
17089 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17090 0, 0, context_die);
17093 if (DECL_ABSTRACT (decl))
17094 equate_decl_number_to_die (decl, decl_die);
17095 else
17096 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17098 #endif
17100 /* Walk through the list of incomplete types again, trying once more to
17101 emit full debugging info for them. */
17103 static void
17104 retry_incomplete_types (void)
17106 int i;
17108 for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17109 gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17112 /* Determine what tag to use for a record type. */
17114 static enum dwarf_tag
17115 record_type_tag (tree type)
17117 if (! lang_hooks.types.classify_record)
17118 return DW_TAG_structure_type;
17120 switch (lang_hooks.types.classify_record (type))
17122 case RECORD_IS_STRUCT:
17123 return DW_TAG_structure_type;
17125 case RECORD_IS_CLASS:
17126 return DW_TAG_class_type;
17128 case RECORD_IS_INTERFACE:
17129 if (dwarf_version >= 3 || !dwarf_strict)
17130 return DW_TAG_interface_type;
17131 return DW_TAG_structure_type;
17133 default:
17134 gcc_unreachable ();
17138 /* Generate a DIE to represent an enumeration type. Note that these DIEs
17139 include all of the information about the enumeration values also. Each
17140 enumerated type name/value is listed as a child of the enumerated type
17141 DIE. */
17143 static dw_die_ref
17144 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17146 dw_die_ref type_die = lookup_type_die (type);
17148 if (type_die == NULL)
17150 type_die = new_die (DW_TAG_enumeration_type,
17151 scope_die_for (type, context_die), type);
17152 equate_type_number_to_die (type, type_die);
17153 add_name_attribute (type_die, type_tag (type));
17155 else if (! TYPE_SIZE (type))
17156 return type_die;
17157 else
17158 remove_AT (type_die, DW_AT_declaration);
17160 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
17161 given enum type is incomplete, do not generate the DW_AT_byte_size
17162 attribute or the DW_AT_element_list attribute. */
17163 if (TYPE_SIZE (type))
17165 tree link;
17167 TREE_ASM_WRITTEN (type) = 1;
17168 add_byte_size_attribute (type_die, type);
17169 if (TYPE_STUB_DECL (type) != NULL_TREE)
17170 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17172 /* If the first reference to this type was as the return type of an
17173 inline function, then it may not have a parent. Fix this now. */
17174 if (type_die->die_parent == NULL)
17175 add_child_die (scope_die_for (type, context_die), type_die);
17177 for (link = TYPE_VALUES (type);
17178 link != NULL; link = TREE_CHAIN (link))
17180 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17181 tree value = TREE_VALUE (link);
17183 add_name_attribute (enum_die,
17184 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17186 if (TREE_CODE (value) == CONST_DECL)
17187 value = DECL_INITIAL (value);
17189 if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17190 /* DWARF2 does not provide a way of indicating whether or
17191 not enumeration constants are signed or unsigned. GDB
17192 always assumes the values are signed, so we output all
17193 values as if they were signed. That means that
17194 enumeration constants with very large unsigned values
17195 will appear to have negative values in the debugger. */
17196 add_AT_int (enum_die, DW_AT_const_value,
17197 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17200 else
17201 add_AT_flag (type_die, DW_AT_declaration, 1);
17203 if (get_AT (type_die, DW_AT_name))
17204 add_pubtype (type, type_die);
17206 return type_die;
17209 /* Generate a DIE to represent either a real live formal parameter decl or to
17210 represent just the type of some formal parameter position in some function
17211 type.
17213 Note that this routine is a bit unusual because its argument may be a
17214 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17215 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17216 node. If it's the former then this function is being called to output a
17217 DIE to represent a formal parameter object (or some inlining thereof). If
17218 it's the latter, then this function is only being called to output a
17219 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17220 argument type of some subprogram type.
17221 If EMIT_NAME_P is true, name and source coordinate attributes
17222 are emitted. */
17224 static dw_die_ref
17225 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17226 dw_die_ref context_die)
17228 tree node_or_origin = node ? node : origin;
17229 dw_die_ref parm_die
17230 = new_die (DW_TAG_formal_parameter, context_die, node);
17232 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17234 case tcc_declaration:
17235 if (!origin)
17236 origin = decl_ultimate_origin (node);
17237 if (origin != NULL)
17238 add_abstract_origin_attribute (parm_die, origin);
17239 else
17241 tree type = TREE_TYPE (node);
17242 if (emit_name_p)
17243 add_name_and_src_coords_attributes (parm_die, node);
17244 if (decl_by_reference_p (node))
17245 add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17246 context_die);
17247 else
17248 add_type_attribute (parm_die, type,
17249 TREE_READONLY (node),
17250 TREE_THIS_VOLATILE (node),
17251 context_die);
17252 if (DECL_ARTIFICIAL (node))
17253 add_AT_flag (parm_die, DW_AT_artificial, 1);
17256 if (node && node != origin)
17257 equate_decl_number_to_die (node, parm_die);
17258 if (! DECL_ABSTRACT (node_or_origin))
17259 add_location_or_const_value_attribute (parm_die, node_or_origin,
17260 DW_AT_location);
17262 break;
17264 case tcc_type:
17265 /* We were called with some kind of a ..._TYPE node. */
17266 add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17267 break;
17269 default:
17270 gcc_unreachable ();
17273 return parm_die;
17276 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17277 children DW_TAG_formal_parameter DIEs representing the arguments of the
17278 parameter pack.
17280 PARM_PACK must be a function parameter pack.
17281 PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17282 must point to the subsequent arguments of the function PACK_ARG belongs to.
17283 SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17284 If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17285 following the last one for which a DIE was generated. */
17287 static dw_die_ref
17288 gen_formal_parameter_pack_die (tree parm_pack,
17289 tree pack_arg,
17290 dw_die_ref subr_die,
17291 tree *next_arg)
17293 tree arg;
17294 dw_die_ref parm_pack_die;
17296 gcc_assert (parm_pack
17297 && lang_hooks.function_parameter_pack_p (parm_pack)
17298 && subr_die);
17300 parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17301 add_src_coords_attributes (parm_pack_die, parm_pack);
17303 for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17305 if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17306 parm_pack))
17307 break;
17308 gen_formal_parameter_die (arg, NULL,
17309 false /* Don't emit name attribute. */,
17310 parm_pack_die);
17312 if (next_arg)
17313 *next_arg = arg;
17314 return parm_pack_die;
17317 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17318 at the end of an (ANSI prototyped) formal parameters list. */
17320 static void
17321 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17323 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17326 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17327 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17328 parameters as specified in some function type specification (except for
17329 those which appear as part of a function *definition*). */
17331 static void
17332 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17334 tree link;
17335 tree formal_type = NULL;
17336 tree first_parm_type;
17337 tree arg;
17339 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17341 arg = DECL_ARGUMENTS (function_or_method_type);
17342 function_or_method_type = TREE_TYPE (function_or_method_type);
17344 else
17345 arg = NULL_TREE;
17347 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17349 /* Make our first pass over the list of formal parameter types and output a
17350 DW_TAG_formal_parameter DIE for each one. */
17351 for (link = first_parm_type; link; )
17353 dw_die_ref parm_die;
17355 formal_type = TREE_VALUE (link);
17356 if (formal_type == void_type_node)
17357 break;
17359 /* Output a (nameless) DIE to represent the formal parameter itself. */
17360 parm_die = gen_formal_parameter_die (formal_type, NULL,
17361 true /* Emit name attribute. */,
17362 context_die);
17363 if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17364 && link == first_parm_type)
17365 || (arg && DECL_ARTIFICIAL (arg)))
17366 add_AT_flag (parm_die, DW_AT_artificial, 1);
17368 link = TREE_CHAIN (link);
17369 if (arg)
17370 arg = TREE_CHAIN (arg);
17373 /* If this function type has an ellipsis, add a
17374 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
17375 if (formal_type != void_type_node)
17376 gen_unspecified_parameters_die (function_or_method_type, context_die);
17378 /* Make our second (and final) pass over the list of formal parameter types
17379 and output DIEs to represent those types (as necessary). */
17380 for (link = TYPE_ARG_TYPES (function_or_method_type);
17381 link && TREE_VALUE (link);
17382 link = TREE_CHAIN (link))
17383 gen_type_die (TREE_VALUE (link), context_die);
17386 /* We want to generate the DIE for TYPE so that we can generate the
17387 die for MEMBER, which has been defined; we will need to refer back
17388 to the member declaration nested within TYPE. If we're trying to
17389 generate minimal debug info for TYPE, processing TYPE won't do the
17390 trick; we need to attach the member declaration by hand. */
17392 static void
17393 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17395 gen_type_die (type, context_die);
17397 /* If we're trying to avoid duplicate debug info, we may not have
17398 emitted the member decl for this function. Emit it now. */
17399 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17400 && ! lookup_decl_die (member))
17402 dw_die_ref type_die;
17403 gcc_assert (!decl_ultimate_origin (member));
17405 push_decl_scope (type);
17406 type_die = lookup_type_die (type);
17407 if (TREE_CODE (member) == FUNCTION_DECL)
17408 gen_subprogram_die (member, type_die);
17409 else if (TREE_CODE (member) == FIELD_DECL)
17411 /* Ignore the nameless fields that are used to skip bits but handle
17412 C++ anonymous unions and structs. */
17413 if (DECL_NAME (member) != NULL_TREE
17414 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17415 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17417 gen_type_die (member_declared_type (member), type_die);
17418 gen_field_die (member, type_die);
17421 else
17422 gen_variable_die (member, NULL_TREE, type_die);
17424 pop_decl_scope ();
17428 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17429 may later generate inlined and/or out-of-line instances of. */
17431 static void
17432 dwarf2out_abstract_function (tree decl)
17434 dw_die_ref old_die;
17435 tree save_fn;
17436 tree context;
17437 int was_abstract = DECL_ABSTRACT (decl);
17438 htab_t old_decl_loc_table;
17440 /* Make sure we have the actual abstract inline, not a clone. */
17441 decl = DECL_ORIGIN (decl);
17443 old_die = lookup_decl_die (decl);
17444 if (old_die && get_AT (old_die, DW_AT_inline))
17445 /* We've already generated the abstract instance. */
17446 return;
17448 /* We can be called while recursively when seeing block defining inlined subroutine
17449 DIE. Be sure to not clobber the outer location table nor use it or we would
17450 get locations in abstract instantces. */
17451 old_decl_loc_table = decl_loc_table;
17452 decl_loc_table = NULL;
17454 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17455 we don't get confused by DECL_ABSTRACT. */
17456 if (debug_info_level > DINFO_LEVEL_TERSE)
17458 context = decl_class_context (decl);
17459 if (context)
17460 gen_type_die_for_member
17461 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17464 /* Pretend we've just finished compiling this function. */
17465 save_fn = current_function_decl;
17466 current_function_decl = decl;
17467 push_cfun (DECL_STRUCT_FUNCTION (decl));
17469 set_decl_abstract_flags (decl, 1);
17470 dwarf2out_decl (decl);
17471 if (! was_abstract)
17472 set_decl_abstract_flags (decl, 0);
17474 current_function_decl = save_fn;
17475 decl_loc_table = old_decl_loc_table;
17476 pop_cfun ();
17479 /* Helper function of premark_used_types() which gets called through
17480 htab_traverse.
17482 Marks the DIE of a given type in *SLOT as perennial, so it never gets
17483 marked as unused by prune_unused_types. */
17485 static int
17486 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17488 tree type;
17489 dw_die_ref die;
17491 type = (tree) *slot;
17492 die = lookup_type_die (type);
17493 if (die != NULL)
17494 die->die_perennial_p = 1;
17495 return 1;
17498 /* Helper function of premark_types_used_by_global_vars which gets called
17499 through htab_traverse.
17501 Marks the DIE of a given type in *SLOT as perennial, so it never gets
17502 marked as unused by prune_unused_types. The DIE of the type is marked
17503 only if the global variable using the type will actually be emitted. */
17505 static int
17506 premark_types_used_by_global_vars_helper (void **slot,
17507 void *data ATTRIBUTE_UNUSED)
17509 struct types_used_by_vars_entry *entry;
17510 dw_die_ref die;
17512 entry = (struct types_used_by_vars_entry *) *slot;
17513 gcc_assert (entry->type != NULL
17514 && entry->var_decl != NULL);
17515 die = lookup_type_die (entry->type);
17516 if (die)
17518 /* Ask cgraph if the global variable really is to be emitted.
17519 If yes, then we'll keep the DIE of ENTRY->TYPE. */
17520 struct varpool_node *node = varpool_node (entry->var_decl);
17521 if (node->needed)
17523 die->die_perennial_p = 1;
17524 /* Keep the parent DIEs as well. */
17525 while ((die = die->die_parent) && die->die_perennial_p == 0)
17526 die->die_perennial_p = 1;
17529 return 1;
17532 /* Mark all members of used_types_hash as perennial. */
17534 static void
17535 premark_used_types (void)
17537 if (cfun && cfun->used_types_hash)
17538 htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17541 /* Mark all members of types_used_by_vars_entry as perennial. */
17543 static void
17544 premark_types_used_by_global_vars (void)
17546 if (types_used_by_vars_hash)
17547 htab_traverse (types_used_by_vars_hash,
17548 premark_types_used_by_global_vars_helper, NULL);
17551 /* Generate a DIE to represent a declared function (either file-scope or
17552 block-local). */
17554 static void
17555 gen_subprogram_die (tree decl, dw_die_ref context_die)
17557 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17558 tree origin = decl_ultimate_origin (decl);
17559 dw_die_ref subr_die;
17560 tree fn_arg_types;
17561 tree outer_scope;
17562 dw_die_ref old_die = lookup_decl_die (decl);
17563 int declaration = (current_function_decl != decl
17564 || class_or_namespace_scope_p (context_die));
17566 premark_used_types ();
17568 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17569 started to generate the abstract instance of an inline, decided to output
17570 its containing class, and proceeded to emit the declaration of the inline
17571 from the member list for the class. If so, DECLARATION takes priority;
17572 we'll get back to the abstract instance when done with the class. */
17574 /* The class-scope declaration DIE must be the primary DIE. */
17575 if (origin && declaration && class_or_namespace_scope_p (context_die))
17577 origin = NULL;
17578 gcc_assert (!old_die);
17581 /* Now that the C++ front end lazily declares artificial member fns, we
17582 might need to retrofit the declaration into its class. */
17583 if (!declaration && !origin && !old_die
17584 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17585 && !class_or_namespace_scope_p (context_die)
17586 && debug_info_level > DINFO_LEVEL_TERSE)
17587 old_die = force_decl_die (decl);
17589 if (origin != NULL)
17591 gcc_assert (!declaration || local_scope_p (context_die));
17593 /* Fixup die_parent for the abstract instance of a nested
17594 inline function. */
17595 if (old_die && old_die->die_parent == NULL)
17596 add_child_die (context_die, old_die);
17598 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17599 add_abstract_origin_attribute (subr_die, origin);
17601 else if (old_die)
17603 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17604 struct dwarf_file_data * file_index = lookup_filename (s.file);
17606 if (!get_AT_flag (old_die, DW_AT_declaration)
17607 /* We can have a normal definition following an inline one in the
17608 case of redefinition of GNU C extern inlines.
17609 It seems reasonable to use AT_specification in this case. */
17610 && !get_AT (old_die, DW_AT_inline))
17612 /* Detect and ignore this case, where we are trying to output
17613 something we have already output. */
17614 return;
17617 /* If the definition comes from the same place as the declaration,
17618 maybe use the old DIE. We always want the DIE for this function
17619 that has the *_pc attributes to be under comp_unit_die so the
17620 debugger can find it. We also need to do this for abstract
17621 instances of inlines, since the spec requires the out-of-line copy
17622 to have the same parent. For local class methods, this doesn't
17623 apply; we just use the old DIE. */
17624 if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17625 && (DECL_ARTIFICIAL (decl)
17626 || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17627 && (get_AT_unsigned (old_die, DW_AT_decl_line)
17628 == (unsigned) s.line))))
17630 subr_die = old_die;
17632 /* Clear out the declaration attribute and the formal parameters.
17633 Do not remove all children, because it is possible that this
17634 declaration die was forced using force_decl_die(). In such
17635 cases die that forced declaration die (e.g. TAG_imported_module)
17636 is one of the children that we do not want to remove. */
17637 remove_AT (subr_die, DW_AT_declaration);
17638 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17640 else
17642 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17643 add_AT_specification (subr_die, old_die);
17644 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17645 add_AT_file (subr_die, DW_AT_decl_file, file_index);
17646 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17647 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17650 else
17652 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17654 if (TREE_PUBLIC (decl))
17655 add_AT_flag (subr_die, DW_AT_external, 1);
17657 add_name_and_src_coords_attributes (subr_die, decl);
17658 if (debug_info_level > DINFO_LEVEL_TERSE)
17660 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17661 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17662 0, 0, context_die);
17665 add_pure_or_virtual_attribute (subr_die, decl);
17666 if (DECL_ARTIFICIAL (decl))
17667 add_AT_flag (subr_die, DW_AT_artificial, 1);
17669 if (TREE_PROTECTED (decl))
17670 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17671 else if (TREE_PRIVATE (decl))
17672 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17675 if (declaration)
17677 if (!old_die || !get_AT (old_die, DW_AT_inline))
17679 add_AT_flag (subr_die, DW_AT_declaration, 1);
17681 /* If this is an explicit function declaration then generate
17682 a DW_AT_explicit attribute. */
17683 if (lang_hooks.decls.function_decl_explicit_p (decl)
17684 && (dwarf_version >= 3 || !dwarf_strict))
17685 add_AT_flag (subr_die, DW_AT_explicit, 1);
17687 /* The first time we see a member function, it is in the context of
17688 the class to which it belongs. We make sure of this by emitting
17689 the class first. The next time is the definition, which is
17690 handled above. The two may come from the same source text.
17692 Note that force_decl_die() forces function declaration die. It is
17693 later reused to represent definition. */
17694 equate_decl_number_to_die (decl, subr_die);
17697 else if (DECL_ABSTRACT (decl))
17699 if (DECL_DECLARED_INLINE_P (decl))
17701 if (cgraph_function_possibly_inlined_p (decl))
17702 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17703 else
17704 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17706 else
17708 if (cgraph_function_possibly_inlined_p (decl))
17709 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17710 else
17711 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17714 if (DECL_DECLARED_INLINE_P (decl)
17715 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17716 add_AT_flag (subr_die, DW_AT_artificial, 1);
17718 equate_decl_number_to_die (decl, subr_die);
17720 else if (!DECL_EXTERNAL (decl))
17722 HOST_WIDE_INT cfa_fb_offset;
17724 if (!old_die || !get_AT (old_die, DW_AT_inline))
17725 equate_decl_number_to_die (decl, subr_die);
17727 if (!flag_reorder_blocks_and_partition)
17729 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17730 current_function_funcdef_no);
17731 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17732 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17733 current_function_funcdef_no);
17734 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17736 add_pubname (decl, subr_die);
17737 add_arange (decl, subr_die);
17739 else
17740 { /* Do nothing for now; maybe need to duplicate die, one for
17741 hot section and one for cold section, then use the hot/cold
17742 section begin/end labels to generate the aranges... */
17744 add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
17745 add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
17746 add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
17747 add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
17749 add_pubname (decl, subr_die);
17750 add_arange (decl, subr_die);
17751 add_arange (decl, subr_die);
17755 #ifdef MIPS_DEBUGGING_INFO
17756 /* Add a reference to the FDE for this routine. */
17757 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
17758 #endif
17760 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17762 /* We define the "frame base" as the function's CFA. This is more
17763 convenient for several reasons: (1) It's stable across the prologue
17764 and epilogue, which makes it better than just a frame pointer,
17765 (2) With dwarf3, there exists a one-byte encoding that allows us
17766 to reference the .debug_frame data by proxy, but failing that,
17767 (3) We can at least reuse the code inspection and interpretation
17768 code that determines the CFA position at various points in the
17769 function. */
17770 if (dwarf_version >= 3)
17772 dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17773 add_AT_loc (subr_die, DW_AT_frame_base, op);
17775 else
17777 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17778 if (list->dw_loc_next)
17779 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
17780 else
17781 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
17784 /* Compute a displacement from the "steady-state frame pointer" to
17785 the CFA. The former is what all stack slots and argument slots
17786 will reference in the rtl; the later is what we've told the
17787 debugger about. We'll need to adjust all frame_base references
17788 by this displacement. */
17789 compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
17791 if (cfun->static_chain_decl)
17792 add_AT_location_description (subr_die, DW_AT_static_link,
17793 loc_list_from_tree (cfun->static_chain_decl, 2));
17796 /* Generate child dies for template paramaters. */
17797 if (debug_info_level > DINFO_LEVEL_TERSE)
17798 gen_generic_params_dies (decl);
17800 /* Now output descriptions of the arguments for this function. This gets
17801 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
17802 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
17803 `...' at the end of the formal parameter list. In order to find out if
17804 there was a trailing ellipsis or not, we must instead look at the type
17805 associated with the FUNCTION_DECL. This will be a node of type
17806 FUNCTION_TYPE. If the chain of type nodes hanging off of this
17807 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
17808 an ellipsis at the end. */
17810 /* In the case where we are describing a mere function declaration, all we
17811 need to do here (and all we *can* do here) is to describe the *types* of
17812 its formal parameters. */
17813 if (debug_info_level <= DINFO_LEVEL_TERSE)
17815 else if (declaration)
17816 gen_formal_types_die (decl, subr_die);
17817 else
17819 /* Generate DIEs to represent all known formal parameters. */
17820 tree parm = DECL_ARGUMENTS (decl);
17821 tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
17822 tree generic_decl_parm = generic_decl
17823 ? DECL_ARGUMENTS (generic_decl)
17824 : NULL;
17826 /* Now we want to walk the list of parameters of the function and
17827 emit their relevant DIEs.
17829 We consider the case of DECL being an instance of a generic function
17830 as well as it being a normal function.
17832 If DECL is an instance of a generic function we walk the
17833 parameters of the generic function declaration _and_ the parameters of
17834 DECL itself. This is useful because we want to emit specific DIEs for
17835 function parameter packs and those are declared as part of the
17836 generic function declaration. In that particular case,
17837 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
17838 That DIE has children DIEs representing the set of arguments
17839 of the pack. Note that the set of pack arguments can be empty.
17840 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
17841 children DIE.
17843 Otherwise, we just consider the parameters of DECL. */
17844 while (generic_decl_parm || parm)
17846 if (generic_decl_parm
17847 && lang_hooks.function_parameter_pack_p (generic_decl_parm))
17848 gen_formal_parameter_pack_die (generic_decl_parm,
17849 parm, subr_die,
17850 &parm);
17851 else if (parm)
17853 gen_decl_die (parm, NULL, subr_die);
17854 parm = TREE_CHAIN (parm);
17857 if (generic_decl_parm)
17858 generic_decl_parm = TREE_CHAIN (generic_decl_parm);
17861 /* Decide whether we need an unspecified_parameters DIE at the end.
17862 There are 2 more cases to do this for: 1) the ansi ... declaration -
17863 this is detectable when the end of the arg list is not a
17864 void_type_node 2) an unprototyped function declaration (not a
17865 definition). This just means that we have no info about the
17866 parameters at all. */
17867 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
17868 if (fn_arg_types != NULL)
17870 /* This is the prototyped case, check for.... */
17871 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
17872 gen_unspecified_parameters_die (decl, subr_die);
17874 else if (DECL_INITIAL (decl) == NULL_TREE)
17875 gen_unspecified_parameters_die (decl, subr_die);
17878 /* Output Dwarf info for all of the stuff within the body of the function
17879 (if it has one - it may be just a declaration). */
17880 outer_scope = DECL_INITIAL (decl);
17882 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
17883 a function. This BLOCK actually represents the outermost binding contour
17884 for the function, i.e. the contour in which the function's formal
17885 parameters and labels get declared. Curiously, it appears that the front
17886 end doesn't actually put the PARM_DECL nodes for the current function onto
17887 the BLOCK_VARS list for this outer scope, but are strung off of the
17888 DECL_ARGUMENTS list for the function instead.
17890 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
17891 the LABEL_DECL nodes for the function however, and we output DWARF info
17892 for those in decls_for_scope. Just within the `outer_scope' there will be
17893 a BLOCK node representing the function's outermost pair of curly braces,
17894 and any blocks used for the base and member initializers of a C++
17895 constructor function. */
17896 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
17898 /* Emit a DW_TAG_variable DIE for a named return value. */
17899 if (DECL_NAME (DECL_RESULT (decl)))
17900 gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
17902 current_function_has_inlines = 0;
17903 decls_for_scope (outer_scope, subr_die, 0);
17905 #if 0 && defined (MIPS_DEBUGGING_INFO)
17906 if (current_function_has_inlines)
17908 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
17909 if (! comp_unit_has_inlines)
17911 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
17912 comp_unit_has_inlines = 1;
17915 #endif
17917 /* Add the calling convention attribute if requested. */
17918 add_calling_convention_attribute (subr_die, decl);
17922 /* Returns a hash value for X (which really is a die_struct). */
17924 static hashval_t
17925 common_block_die_table_hash (const void *x)
17927 const_dw_die_ref d = (const_dw_die_ref) x;
17928 return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
17931 /* Return nonzero if decl_id and die_parent of die_struct X is the same
17932 as decl_id and die_parent of die_struct Y. */
17934 static int
17935 common_block_die_table_eq (const void *x, const void *y)
17937 const_dw_die_ref d = (const_dw_die_ref) x;
17938 const_dw_die_ref e = (const_dw_die_ref) y;
17939 return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
17942 /* Generate a DIE to represent a declared data object.
17943 Either DECL or ORIGIN must be non-null. */
17945 static void
17946 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
17948 HOST_WIDE_INT off;
17949 tree com_decl;
17950 tree decl_or_origin = decl ? decl : origin;
17951 dw_die_ref var_die;
17952 dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
17953 dw_die_ref origin_die;
17954 int declaration = (DECL_EXTERNAL (decl_or_origin)
17955 || class_or_namespace_scope_p (context_die));
17957 if (!origin)
17958 origin = decl_ultimate_origin (decl);
17960 com_decl = fortran_common (decl_or_origin, &off);
17962 /* Symbol in common gets emitted as a child of the common block, in the form
17963 of a data member. */
17964 if (com_decl)
17966 dw_die_ref com_die;
17967 dw_loc_list_ref loc;
17968 die_node com_die_arg;
17970 var_die = lookup_decl_die (decl_or_origin);
17971 if (var_die)
17973 if (get_AT (var_die, DW_AT_location) == NULL)
17975 loc = loc_list_from_tree (com_decl, off ? 1 : 2);
17976 if (loc)
17978 if (off)
17980 /* Optimize the common case. */
17981 if (single_element_loc_list_p (loc)
17982 && loc->expr->dw_loc_opc == DW_OP_addr
17983 && loc->expr->dw_loc_next == NULL
17984 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
17985 == SYMBOL_REF)
17986 loc->expr->dw_loc_oprnd1.v.val_addr
17987 = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
17988 else
17989 loc_list_plus_const (loc, off);
17991 add_AT_location_description (var_die, DW_AT_location, loc);
17992 remove_AT (var_die, DW_AT_declaration);
17995 return;
17998 if (common_block_die_table == NULL)
17999 common_block_die_table
18000 = htab_create_ggc (10, common_block_die_table_hash,
18001 common_block_die_table_eq, NULL);
18003 com_die_arg.decl_id = DECL_UID (com_decl);
18004 com_die_arg.die_parent = context_die;
18005 com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18006 loc = loc_list_from_tree (com_decl, 2);
18007 if (com_die == NULL)
18009 const char *cnam
18010 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18011 void **slot;
18013 com_die = new_die (DW_TAG_common_block, context_die, decl);
18014 add_name_and_src_coords_attributes (com_die, com_decl);
18015 if (loc)
18017 add_AT_location_description (com_die, DW_AT_location, loc);
18018 /* Avoid sharing the same loc descriptor between
18019 DW_TAG_common_block and DW_TAG_variable. */
18020 loc = loc_list_from_tree (com_decl, 2);
18022 else if (DECL_EXTERNAL (decl))
18023 add_AT_flag (com_die, DW_AT_declaration, 1);
18024 add_pubname_string (cnam, com_die); /* ??? needed? */
18025 com_die->decl_id = DECL_UID (com_decl);
18026 slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18027 *slot = (void *) com_die;
18029 else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18031 add_AT_location_description (com_die, DW_AT_location, loc);
18032 loc = loc_list_from_tree (com_decl, 2);
18033 remove_AT (com_die, DW_AT_declaration);
18035 var_die = new_die (DW_TAG_variable, com_die, decl);
18036 add_name_and_src_coords_attributes (var_die, decl);
18037 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18038 TREE_THIS_VOLATILE (decl), context_die);
18039 add_AT_flag (var_die, DW_AT_external, 1);
18040 if (loc)
18042 if (off)
18044 /* Optimize the common case. */
18045 if (single_element_loc_list_p (loc)
18046 && loc->expr->dw_loc_opc == DW_OP_addr
18047 && loc->expr->dw_loc_next == NULL
18048 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18049 loc->expr->dw_loc_oprnd1.v.val_addr
18050 = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18051 else
18052 loc_list_plus_const (loc, off);
18054 add_AT_location_description (var_die, DW_AT_location, loc);
18056 else if (DECL_EXTERNAL (decl))
18057 add_AT_flag (var_die, DW_AT_declaration, 1);
18058 equate_decl_number_to_die (decl, var_die);
18059 return;
18062 /* If the compiler emitted a definition for the DECL declaration
18063 and if we already emitted a DIE for it, don't emit a second
18064 DIE for it again. */
18065 if (old_die
18066 && declaration)
18067 return;
18069 /* For static data members, the declaration in the class is supposed
18070 to have DW_TAG_member tag; the specification should still be
18071 DW_TAG_variable referencing the DW_TAG_member DIE. */
18072 if (declaration && class_scope_p (context_die))
18073 var_die = new_die (DW_TAG_member, context_die, decl);
18074 else
18075 var_die = new_die (DW_TAG_variable, context_die, decl);
18077 origin_die = NULL;
18078 if (origin != NULL)
18079 origin_die = add_abstract_origin_attribute (var_die, origin);
18081 /* Loop unrolling can create multiple blocks that refer to the same
18082 static variable, so we must test for the DW_AT_declaration flag.
18084 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18085 copy decls and set the DECL_ABSTRACT flag on them instead of
18086 sharing them.
18088 ??? Duplicated blocks have been rewritten to use .debug_ranges.
18090 ??? The declare_in_namespace support causes us to get two DIEs for one
18091 variable, both of which are declarations. We want to avoid considering
18092 one to be a specification, so we must test that this DIE is not a
18093 declaration. */
18094 else if (old_die && TREE_STATIC (decl) && ! declaration
18095 && get_AT_flag (old_die, DW_AT_declaration) == 1)
18097 /* This is a definition of a C++ class level static. */
18098 add_AT_specification (var_die, old_die);
18099 if (DECL_NAME (decl))
18101 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18102 struct dwarf_file_data * file_index = lookup_filename (s.file);
18104 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18105 add_AT_file (var_die, DW_AT_decl_file, file_index);
18107 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18108 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18111 else
18113 tree type = TREE_TYPE (decl);
18115 add_name_and_src_coords_attributes (var_die, decl);
18116 if (decl_by_reference_p (decl))
18117 add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18118 else
18119 add_type_attribute (var_die, type, TREE_READONLY (decl),
18120 TREE_THIS_VOLATILE (decl), context_die);
18122 if (TREE_PUBLIC (decl))
18123 add_AT_flag (var_die, DW_AT_external, 1);
18125 if (DECL_ARTIFICIAL (decl))
18126 add_AT_flag (var_die, DW_AT_artificial, 1);
18128 if (TREE_PROTECTED (decl))
18129 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18130 else if (TREE_PRIVATE (decl))
18131 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18134 if (declaration)
18135 add_AT_flag (var_die, DW_AT_declaration, 1);
18137 if (decl && (DECL_ABSTRACT (decl) || declaration))
18138 equate_decl_number_to_die (decl, var_die);
18140 if (! declaration
18141 && (! DECL_ABSTRACT (decl_or_origin)
18142 /* Local static vars are shared between all clones/inlines,
18143 so emit DW_AT_location on the abstract DIE if DECL_RTL is
18144 already set. */
18145 || (TREE_CODE (decl_or_origin) == VAR_DECL
18146 && TREE_STATIC (decl_or_origin)
18147 && DECL_RTL_SET_P (decl_or_origin)))
18148 /* When abstract origin already has DW_AT_location attribute, no need
18149 to add it again. */
18150 && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18152 if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18153 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18154 defer_location (decl_or_origin, var_die);
18155 else
18156 add_location_or_const_value_attribute (var_die,
18157 decl_or_origin,
18158 DW_AT_location);
18159 add_pubname (decl_or_origin, var_die);
18161 else
18162 tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18165 /* Generate a DIE to represent a named constant. */
18167 static void
18168 gen_const_die (tree decl, dw_die_ref context_die)
18170 dw_die_ref const_die;
18171 tree type = TREE_TYPE (decl);
18173 const_die = new_die (DW_TAG_constant, context_die, decl);
18174 add_name_and_src_coords_attributes (const_die, decl);
18175 add_type_attribute (const_die, type, 1, 0, context_die);
18176 if (TREE_PUBLIC (decl))
18177 add_AT_flag (const_die, DW_AT_external, 1);
18178 if (DECL_ARTIFICIAL (decl))
18179 add_AT_flag (const_die, DW_AT_artificial, 1);
18180 tree_add_const_value_attribute_for_decl (const_die, decl);
18183 /* Generate a DIE to represent a label identifier. */
18185 static void
18186 gen_label_die (tree decl, dw_die_ref context_die)
18188 tree origin = decl_ultimate_origin (decl);
18189 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18190 rtx insn;
18191 char label[MAX_ARTIFICIAL_LABEL_BYTES];
18193 if (origin != NULL)
18194 add_abstract_origin_attribute (lbl_die, origin);
18195 else
18196 add_name_and_src_coords_attributes (lbl_die, decl);
18198 if (DECL_ABSTRACT (decl))
18199 equate_decl_number_to_die (decl, lbl_die);
18200 else
18202 insn = DECL_RTL_IF_SET (decl);
18204 /* Deleted labels are programmer specified labels which have been
18205 eliminated because of various optimizations. We still emit them
18206 here so that it is possible to put breakpoints on them. */
18207 if (insn
18208 && (LABEL_P (insn)
18209 || ((NOTE_P (insn)
18210 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18212 /* When optimization is enabled (via -O) some parts of the compiler
18213 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18214 represent source-level labels which were explicitly declared by
18215 the user. This really shouldn't be happening though, so catch
18216 it if it ever does happen. */
18217 gcc_assert (!INSN_DELETED_P (insn));
18219 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18220 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18225 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
18226 attributes to the DIE for a block STMT, to describe where the inlined
18227 function was called from. This is similar to add_src_coords_attributes. */
18229 static inline void
18230 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18232 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18234 if (dwarf_version >= 3 || !dwarf_strict)
18236 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18237 add_AT_unsigned (die, DW_AT_call_line, s.line);
18242 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18243 Add low_pc and high_pc attributes to the DIE for a block STMT. */
18245 static inline void
18246 add_high_low_attributes (tree stmt, dw_die_ref die)
18248 char label[MAX_ARTIFICIAL_LABEL_BYTES];
18250 if (BLOCK_FRAGMENT_CHAIN (stmt)
18251 && (dwarf_version >= 3 || !dwarf_strict))
18253 tree chain;
18255 if (inlined_function_outer_scope_p (stmt))
18257 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18258 BLOCK_NUMBER (stmt));
18259 add_AT_lbl_id (die, DW_AT_entry_pc, label);
18262 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18264 chain = BLOCK_FRAGMENT_CHAIN (stmt);
18267 add_ranges (chain);
18268 chain = BLOCK_FRAGMENT_CHAIN (chain);
18270 while (chain);
18271 add_ranges (NULL);
18273 else
18275 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18276 BLOCK_NUMBER (stmt));
18277 add_AT_lbl_id (die, DW_AT_low_pc, label);
18278 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18279 BLOCK_NUMBER (stmt));
18280 add_AT_lbl_id (die, DW_AT_high_pc, label);
18284 /* Generate a DIE for a lexical block. */
18286 static void
18287 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18289 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18291 if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18292 add_high_low_attributes (stmt, stmt_die);
18294 decls_for_scope (stmt, stmt_die, depth);
18297 /* Generate a DIE for an inlined subprogram. */
18299 static void
18300 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18302 tree decl;
18304 /* The instance of function that is effectively being inlined shall not
18305 be abstract. */
18306 gcc_assert (! BLOCK_ABSTRACT (stmt));
18308 decl = block_ultimate_origin (stmt);
18310 /* Emit info for the abstract instance first, if we haven't yet. We
18311 must emit this even if the block is abstract, otherwise when we
18312 emit the block below (or elsewhere), we may end up trying to emit
18313 a die whose origin die hasn't been emitted, and crashing. */
18314 dwarf2out_abstract_function (decl);
18316 if (! BLOCK_ABSTRACT (stmt))
18318 dw_die_ref subr_die
18319 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18321 add_abstract_origin_attribute (subr_die, decl);
18322 if (TREE_ASM_WRITTEN (stmt))
18323 add_high_low_attributes (stmt, subr_die);
18324 add_call_src_coords_attributes (stmt, subr_die);
18326 decls_for_scope (stmt, subr_die, depth);
18327 current_function_has_inlines = 1;
18331 /* Generate a DIE for a field in a record, or structure. */
18333 static void
18334 gen_field_die (tree decl, dw_die_ref context_die)
18336 dw_die_ref decl_die;
18338 if (TREE_TYPE (decl) == error_mark_node)
18339 return;
18341 decl_die = new_die (DW_TAG_member, context_die, decl);
18342 add_name_and_src_coords_attributes (decl_die, decl);
18343 add_type_attribute (decl_die, member_declared_type (decl),
18344 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18345 context_die);
18347 if (DECL_BIT_FIELD_TYPE (decl))
18349 add_byte_size_attribute (decl_die, decl);
18350 add_bit_size_attribute (decl_die, decl);
18351 add_bit_offset_attribute (decl_die, decl);
18354 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18355 add_data_member_location_attribute (decl_die, decl);
18357 if (DECL_ARTIFICIAL (decl))
18358 add_AT_flag (decl_die, DW_AT_artificial, 1);
18360 if (TREE_PROTECTED (decl))
18361 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18362 else if (TREE_PRIVATE (decl))
18363 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18365 /* Equate decl number to die, so that we can look up this decl later on. */
18366 equate_decl_number_to_die (decl, decl_die);
18369 #if 0
18370 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18371 Use modified_type_die instead.
18372 We keep this code here just in case these types of DIEs may be needed to
18373 represent certain things in other languages (e.g. Pascal) someday. */
18375 static void
18376 gen_pointer_type_die (tree type, dw_die_ref context_die)
18378 dw_die_ref ptr_die
18379 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18381 equate_type_number_to_die (type, ptr_die);
18382 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18383 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18386 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18387 Use modified_type_die instead.
18388 We keep this code here just in case these types of DIEs may be needed to
18389 represent certain things in other languages (e.g. Pascal) someday. */
18391 static void
18392 gen_reference_type_die (tree type, dw_die_ref context_die)
18394 dw_die_ref ref_die
18395 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
18397 equate_type_number_to_die (type, ref_die);
18398 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18399 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18401 #endif
18403 /* Generate a DIE for a pointer to a member type. */
18405 static void
18406 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18408 dw_die_ref ptr_die
18409 = new_die (DW_TAG_ptr_to_member_type,
18410 scope_die_for (type, context_die), type);
18412 equate_type_number_to_die (type, ptr_die);
18413 add_AT_die_ref (ptr_die, DW_AT_containing_type,
18414 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18415 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18418 /* Generate the DIE for the compilation unit. */
18420 static dw_die_ref
18421 gen_compile_unit_die (const char *filename)
18423 dw_die_ref die;
18424 char producer[250];
18425 const char *language_string = lang_hooks.name;
18426 int language;
18428 die = new_die (DW_TAG_compile_unit, NULL, NULL);
18430 if (filename)
18432 add_name_attribute (die, filename);
18433 /* Don't add cwd for <built-in>. */
18434 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18435 add_comp_dir_attribute (die);
18438 sprintf (producer, "%s %s", language_string, version_string);
18440 #ifdef MIPS_DEBUGGING_INFO
18441 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18442 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18443 not appear in the producer string, the debugger reaches the conclusion
18444 that the object file is stripped and has no debugging information.
18445 To get the MIPS/SGI debugger to believe that there is debugging
18446 information in the object file, we add a -g to the producer string. */
18447 if (debug_info_level > DINFO_LEVEL_TERSE)
18448 strcat (producer, " -g");
18449 #endif
18451 add_AT_string (die, DW_AT_producer, producer);
18453 language = DW_LANG_C89;
18454 if (strcmp (language_string, "GNU C++") == 0)
18455 language = DW_LANG_C_plus_plus;
18456 else if (strcmp (language_string, "GNU F77") == 0)
18457 language = DW_LANG_Fortran77;
18458 else if (strcmp (language_string, "GNU Pascal") == 0)
18459 language = DW_LANG_Pascal83;
18460 else if (dwarf_version >= 3 || !dwarf_strict)
18462 if (strcmp (language_string, "GNU Ada") == 0)
18463 language = DW_LANG_Ada95;
18464 else if (strcmp (language_string, "GNU Fortran") == 0)
18465 language = DW_LANG_Fortran95;
18466 else if (strcmp (language_string, "GNU Java") == 0)
18467 language = DW_LANG_Java;
18468 else if (strcmp (language_string, "GNU Objective-C") == 0)
18469 language = DW_LANG_ObjC;
18470 else if (strcmp (language_string, "GNU Objective-C++") == 0)
18471 language = DW_LANG_ObjC_plus_plus;
18474 add_AT_unsigned (die, DW_AT_language, language);
18475 return die;
18478 /* Generate the DIE for a base class. */
18480 static void
18481 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18483 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18485 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18486 add_data_member_location_attribute (die, binfo);
18488 if (BINFO_VIRTUAL_P (binfo))
18489 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18491 if (access == access_public_node)
18492 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18493 else if (access == access_protected_node)
18494 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18497 /* Generate a DIE for a class member. */
18499 static void
18500 gen_member_die (tree type, dw_die_ref context_die)
18502 tree member;
18503 tree binfo = TYPE_BINFO (type);
18504 dw_die_ref child;
18506 /* If this is not an incomplete type, output descriptions of each of its
18507 members. Note that as we output the DIEs necessary to represent the
18508 members of this record or union type, we will also be trying to output
18509 DIEs to represent the *types* of those members. However the `type'
18510 function (above) will specifically avoid generating type DIEs for member
18511 types *within* the list of member DIEs for this (containing) type except
18512 for those types (of members) which are explicitly marked as also being
18513 members of this (containing) type themselves. The g++ front- end can
18514 force any given type to be treated as a member of some other (containing)
18515 type by setting the TYPE_CONTEXT of the given (member) type to point to
18516 the TREE node representing the appropriate (containing) type. */
18518 /* First output info about the base classes. */
18519 if (binfo)
18521 VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18522 int i;
18523 tree base;
18525 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18526 gen_inheritance_die (base,
18527 (accesses ? VEC_index (tree, accesses, i)
18528 : access_public_node), context_die);
18531 /* Now output info about the data members and type members. */
18532 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18534 /* If we thought we were generating minimal debug info for TYPE
18535 and then changed our minds, some of the member declarations
18536 may have already been defined. Don't define them again, but
18537 do put them in the right order. */
18539 child = lookup_decl_die (member);
18540 if (child)
18541 splice_child_die (context_die, child);
18542 else
18543 gen_decl_die (member, NULL, context_die);
18546 /* Now output info about the function members (if any). */
18547 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18549 /* Don't include clones in the member list. */
18550 if (DECL_ABSTRACT_ORIGIN (member))
18551 continue;
18553 child = lookup_decl_die (member);
18554 if (child)
18555 splice_child_die (context_die, child);
18556 else
18557 gen_decl_die (member, NULL, context_die);
18561 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
18562 is set, we pretend that the type was never defined, so we only get the
18563 member DIEs needed by later specification DIEs. */
18565 static void
18566 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18567 enum debug_info_usage usage)
18569 dw_die_ref type_die = lookup_type_die (type);
18570 dw_die_ref scope_die = 0;
18571 int nested = 0;
18572 int complete = (TYPE_SIZE (type)
18573 && (! TYPE_STUB_DECL (type)
18574 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18575 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18576 complete = complete && should_emit_struct_debug (type, usage);
18578 if (type_die && ! complete)
18579 return;
18581 if (TYPE_CONTEXT (type) != NULL_TREE
18582 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18583 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18584 nested = 1;
18586 scope_die = scope_die_for (type, context_die);
18588 if (! type_die || (nested && scope_die == comp_unit_die))
18589 /* First occurrence of type or toplevel definition of nested class. */
18591 dw_die_ref old_die = type_die;
18593 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18594 ? record_type_tag (type) : DW_TAG_union_type,
18595 scope_die, type);
18596 equate_type_number_to_die (type, type_die);
18597 if (old_die)
18598 add_AT_specification (type_die, old_die);
18599 else
18600 add_name_attribute (type_die, type_tag (type));
18602 else
18603 remove_AT (type_die, DW_AT_declaration);
18605 /* Generate child dies for template paramaters. */
18606 if (debug_info_level > DINFO_LEVEL_TERSE
18607 && COMPLETE_TYPE_P (type))
18608 gen_generic_params_dies (type);
18610 /* If this type has been completed, then give it a byte_size attribute and
18611 then give a list of members. */
18612 if (complete && !ns_decl)
18614 /* Prevent infinite recursion in cases where the type of some member of
18615 this type is expressed in terms of this type itself. */
18616 TREE_ASM_WRITTEN (type) = 1;
18617 add_byte_size_attribute (type_die, type);
18618 if (TYPE_STUB_DECL (type) != NULL_TREE)
18619 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18621 /* If the first reference to this type was as the return type of an
18622 inline function, then it may not have a parent. Fix this now. */
18623 if (type_die->die_parent == NULL)
18624 add_child_die (scope_die, type_die);
18626 push_decl_scope (type);
18627 gen_member_die (type, type_die);
18628 pop_decl_scope ();
18630 /* GNU extension: Record what type our vtable lives in. */
18631 if (TYPE_VFIELD (type))
18633 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18635 gen_type_die (vtype, context_die);
18636 add_AT_die_ref (type_die, DW_AT_containing_type,
18637 lookup_type_die (vtype));
18640 else
18642 add_AT_flag (type_die, DW_AT_declaration, 1);
18644 /* We don't need to do this for function-local types. */
18645 if (TYPE_STUB_DECL (type)
18646 && ! decl_function_context (TYPE_STUB_DECL (type)))
18647 VEC_safe_push (tree, gc, incomplete_types, type);
18650 if (get_AT (type_die, DW_AT_name))
18651 add_pubtype (type, type_die);
18654 /* Generate a DIE for a subroutine _type_. */
18656 static void
18657 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18659 tree return_type = TREE_TYPE (type);
18660 dw_die_ref subr_die
18661 = new_die (DW_TAG_subroutine_type,
18662 scope_die_for (type, context_die), type);
18664 equate_type_number_to_die (type, subr_die);
18665 add_prototyped_attribute (subr_die, type);
18666 add_type_attribute (subr_die, return_type, 0, 0, context_die);
18667 gen_formal_types_die (type, subr_die);
18669 if (get_AT (subr_die, DW_AT_name))
18670 add_pubtype (type, subr_die);
18673 /* Generate a DIE for a type definition. */
18675 static void
18676 gen_typedef_die (tree decl, dw_die_ref context_die)
18678 dw_die_ref type_die;
18679 tree origin;
18681 if (TREE_ASM_WRITTEN (decl))
18682 return;
18684 TREE_ASM_WRITTEN (decl) = 1;
18685 type_die = new_die (DW_TAG_typedef, context_die, decl);
18686 origin = decl_ultimate_origin (decl);
18687 if (origin != NULL)
18688 add_abstract_origin_attribute (type_die, origin);
18689 else
18691 tree type;
18693 add_name_and_src_coords_attributes (type_die, decl);
18694 if (DECL_ORIGINAL_TYPE (decl))
18696 type = DECL_ORIGINAL_TYPE (decl);
18698 gcc_assert (type != TREE_TYPE (decl));
18699 equate_type_number_to_die (TREE_TYPE (decl), type_die);
18701 else
18702 type = TREE_TYPE (decl);
18704 add_type_attribute (type_die, type, TREE_READONLY (decl),
18705 TREE_THIS_VOLATILE (decl), context_die);
18708 if (DECL_ABSTRACT (decl))
18709 equate_decl_number_to_die (decl, type_die);
18711 if (get_AT (type_die, DW_AT_name))
18712 add_pubtype (decl, type_die);
18715 /* Generate a type description DIE. */
18717 static void
18718 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18719 enum debug_info_usage usage)
18721 int need_pop;
18722 struct array_descr_info info;
18724 if (type == NULL_TREE || type == error_mark_node)
18725 return;
18727 /* If TYPE is a typedef type variant, let's generate debug info
18728 for the parent typedef which TYPE is a type of. */
18729 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18730 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18732 if (TREE_ASM_WRITTEN (type))
18733 return;
18735 /* Prevent broken recursion; we can't hand off to the same type. */
18736 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18738 /* Use the DIE of the containing namespace as the parent DIE of
18739 the type description DIE we want to generate. */
18740 if (DECL_CONTEXT (TYPE_NAME (type))
18741 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18742 context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18744 TREE_ASM_WRITTEN (type) = 1;
18745 gen_decl_die (TYPE_NAME (type), NULL, context_die);
18746 return;
18749 /* If this is an array type with hidden descriptor, handle it first. */
18750 if (!TREE_ASM_WRITTEN (type)
18751 && lang_hooks.types.get_array_descr_info
18752 && lang_hooks.types.get_array_descr_info (type, &info)
18753 && (dwarf_version >= 3 || !dwarf_strict))
18755 gen_descr_array_type_die (type, &info, context_die);
18756 TREE_ASM_WRITTEN (type) = 1;
18757 return;
18760 /* We are going to output a DIE to represent the unqualified version
18761 of this type (i.e. without any const or volatile qualifiers) so
18762 get the main variant (i.e. the unqualified version) of this type
18763 now. (Vectors are special because the debugging info is in the
18764 cloned type itself). */
18765 if (TREE_CODE (type) != VECTOR_TYPE)
18766 type = type_main_variant (type);
18768 if (TREE_ASM_WRITTEN (type))
18769 return;
18771 switch (TREE_CODE (type))
18773 case ERROR_MARK:
18774 break;
18776 case POINTER_TYPE:
18777 case REFERENCE_TYPE:
18778 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
18779 ensures that the gen_type_die recursion will terminate even if the
18780 type is recursive. Recursive types are possible in Ada. */
18781 /* ??? We could perhaps do this for all types before the switch
18782 statement. */
18783 TREE_ASM_WRITTEN (type) = 1;
18785 /* For these types, all that is required is that we output a DIE (or a
18786 set of DIEs) to represent the "basis" type. */
18787 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18788 DINFO_USAGE_IND_USE);
18789 break;
18791 case OFFSET_TYPE:
18792 /* This code is used for C++ pointer-to-data-member types.
18793 Output a description of the relevant class type. */
18794 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
18795 DINFO_USAGE_IND_USE);
18797 /* Output a description of the type of the object pointed to. */
18798 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18799 DINFO_USAGE_IND_USE);
18801 /* Now output a DIE to represent this pointer-to-data-member type
18802 itself. */
18803 gen_ptr_to_mbr_type_die (type, context_die);
18804 break;
18806 case FUNCTION_TYPE:
18807 /* Force out return type (in case it wasn't forced out already). */
18808 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18809 DINFO_USAGE_DIR_USE);
18810 gen_subroutine_type_die (type, context_die);
18811 break;
18813 case METHOD_TYPE:
18814 /* Force out return type (in case it wasn't forced out already). */
18815 gen_type_die_with_usage (TREE_TYPE (type), context_die,
18816 DINFO_USAGE_DIR_USE);
18817 gen_subroutine_type_die (type, context_die);
18818 break;
18820 case ARRAY_TYPE:
18821 gen_array_type_die (type, context_die);
18822 break;
18824 case VECTOR_TYPE:
18825 gen_array_type_die (type, context_die);
18826 break;
18828 case ENUMERAL_TYPE:
18829 case RECORD_TYPE:
18830 case UNION_TYPE:
18831 case QUAL_UNION_TYPE:
18832 /* If this is a nested type whose containing class hasn't been written
18833 out yet, writing it out will cover this one, too. This does not apply
18834 to instantiations of member class templates; they need to be added to
18835 the containing class as they are generated. FIXME: This hurts the
18836 idea of combining type decls from multiple TUs, since we can't predict
18837 what set of template instantiations we'll get. */
18838 if (TYPE_CONTEXT (type)
18839 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18840 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
18842 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
18844 if (TREE_ASM_WRITTEN (type))
18845 return;
18847 /* If that failed, attach ourselves to the stub. */
18848 push_decl_scope (TYPE_CONTEXT (type));
18849 context_die = lookup_type_die (TYPE_CONTEXT (type));
18850 need_pop = 1;
18852 else if (TYPE_CONTEXT (type) != NULL_TREE
18853 && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
18855 /* If this type is local to a function that hasn't been written
18856 out yet, use a NULL context for now; it will be fixed up in
18857 decls_for_scope. */
18858 context_die = lookup_decl_die (TYPE_CONTEXT (type));
18859 need_pop = 0;
18861 else
18863 context_die = declare_in_namespace (type, context_die);
18864 need_pop = 0;
18867 if (TREE_CODE (type) == ENUMERAL_TYPE)
18869 /* This might have been written out by the call to
18870 declare_in_namespace. */
18871 if (!TREE_ASM_WRITTEN (type))
18872 gen_enumeration_type_die (type, context_die);
18874 else
18875 gen_struct_or_union_type_die (type, context_die, usage);
18877 if (need_pop)
18878 pop_decl_scope ();
18880 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
18881 it up if it is ever completed. gen_*_type_die will set it for us
18882 when appropriate. */
18883 return;
18885 case VOID_TYPE:
18886 case INTEGER_TYPE:
18887 case REAL_TYPE:
18888 case FIXED_POINT_TYPE:
18889 case COMPLEX_TYPE:
18890 case BOOLEAN_TYPE:
18891 /* No DIEs needed for fundamental types. */
18892 break;
18894 case LANG_TYPE:
18895 /* No Dwarf representation currently defined. */
18896 break;
18898 default:
18899 gcc_unreachable ();
18902 TREE_ASM_WRITTEN (type) = 1;
18905 static void
18906 gen_type_die (tree type, dw_die_ref context_die)
18908 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
18911 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
18912 things which are local to the given block. */
18914 static void
18915 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
18917 int must_output_die = 0;
18918 bool inlined_func;
18920 /* Ignore blocks that are NULL. */
18921 if (stmt == NULL_TREE)
18922 return;
18924 inlined_func = inlined_function_outer_scope_p (stmt);
18926 /* If the block is one fragment of a non-contiguous block, do not
18927 process the variables, since they will have been done by the
18928 origin block. Do process subblocks. */
18929 if (BLOCK_FRAGMENT_ORIGIN (stmt))
18931 tree sub;
18933 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
18934 gen_block_die (sub, context_die, depth + 1);
18936 return;
18939 /* Determine if we need to output any Dwarf DIEs at all to represent this
18940 block. */
18941 if (inlined_func)
18942 /* The outer scopes for inlinings *must* always be represented. We
18943 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
18944 must_output_die = 1;
18945 else
18947 /* Determine if this block directly contains any "significant"
18948 local declarations which we will need to output DIEs for. */
18949 if (debug_info_level > DINFO_LEVEL_TERSE)
18950 /* We are not in terse mode so *any* local declaration counts
18951 as being a "significant" one. */
18952 must_output_die = ((BLOCK_VARS (stmt) != NULL
18953 || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
18954 && (TREE_USED (stmt)
18955 || TREE_ASM_WRITTEN (stmt)
18956 || BLOCK_ABSTRACT (stmt)));
18957 else if ((TREE_USED (stmt)
18958 || TREE_ASM_WRITTEN (stmt)
18959 || BLOCK_ABSTRACT (stmt))
18960 && !dwarf2out_ignore_block (stmt))
18961 must_output_die = 1;
18964 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
18965 DIE for any block which contains no significant local declarations at
18966 all. Rather, in such cases we just call `decls_for_scope' so that any
18967 needed Dwarf info for any sub-blocks will get properly generated. Note
18968 that in terse mode, our definition of what constitutes a "significant"
18969 local declaration gets restricted to include only inlined function
18970 instances and local (nested) function definitions. */
18971 if (must_output_die)
18973 if (inlined_func)
18975 /* If STMT block is abstract, that means we have been called
18976 indirectly from dwarf2out_abstract_function.
18977 That function rightfully marks the descendent blocks (of
18978 the abstract function it is dealing with) as being abstract,
18979 precisely to prevent us from emitting any
18980 DW_TAG_inlined_subroutine DIE as a descendent
18981 of an abstract function instance. So in that case, we should
18982 not call gen_inlined_subroutine_die.
18984 Later though, when cgraph asks dwarf2out to emit info
18985 for the concrete instance of the function decl into which
18986 the concrete instance of STMT got inlined, the later will lead
18987 to the generation of a DW_TAG_inlined_subroutine DIE. */
18988 if (! BLOCK_ABSTRACT (stmt))
18989 gen_inlined_subroutine_die (stmt, context_die, depth);
18991 else
18992 gen_lexical_block_die (stmt, context_die, depth);
18994 else
18995 decls_for_scope (stmt, context_die, depth);
18998 /* Process variable DECL (or variable with origin ORIGIN) within
18999 block STMT and add it to CONTEXT_DIE. */
19000 static void
19001 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19003 dw_die_ref die;
19004 tree decl_or_origin = decl ? decl : origin;
19005 tree ultimate_origin = origin ? decl_ultimate_origin (origin) : NULL;
19007 if (ultimate_origin)
19008 origin = ultimate_origin;
19010 if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19011 die = lookup_decl_die (decl_or_origin);
19012 else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19013 && TYPE_DECL_IS_STUB (decl_or_origin))
19014 die = lookup_type_die (TREE_TYPE (decl_or_origin));
19015 else
19016 die = NULL;
19018 if (die != NULL && die->die_parent == NULL)
19019 add_child_die (context_die, die);
19020 else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19021 dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19022 stmt, context_die);
19023 else
19024 gen_decl_die (decl, origin, context_die);
19027 /* Generate all of the decls declared within a given scope and (recursively)
19028 all of its sub-blocks. */
19030 static void
19031 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19033 tree decl;
19034 unsigned int i;
19035 tree subblocks;
19037 /* Ignore NULL blocks. */
19038 if (stmt == NULL_TREE)
19039 return;
19041 /* Output the DIEs to represent all of the data objects and typedefs
19042 declared directly within this block but not within any nested
19043 sub-blocks. Also, nested function and tag DIEs have been
19044 generated with a parent of NULL; fix that up now. */
19045 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19046 process_scope_var (stmt, decl, NULL_TREE, context_die);
19047 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19048 process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19049 context_die);
19051 /* If we're at -g1, we're not interested in subblocks. */
19052 if (debug_info_level <= DINFO_LEVEL_TERSE)
19053 return;
19055 /* Output the DIEs to represent all sub-blocks (and the items declared
19056 therein) of this block. */
19057 for (subblocks = BLOCK_SUBBLOCKS (stmt);
19058 subblocks != NULL;
19059 subblocks = BLOCK_CHAIN (subblocks))
19060 gen_block_die (subblocks, context_die, depth + 1);
19063 /* Is this a typedef we can avoid emitting? */
19065 static inline int
19066 is_redundant_typedef (const_tree decl)
19068 if (TYPE_DECL_IS_STUB (decl))
19069 return 1;
19071 if (DECL_ARTIFICIAL (decl)
19072 && DECL_CONTEXT (decl)
19073 && is_tagged_type (DECL_CONTEXT (decl))
19074 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19075 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19076 /* Also ignore the artificial member typedef for the class name. */
19077 return 1;
19079 return 0;
19082 /* Returns the DIE for a context. */
19084 static inline dw_die_ref
19085 get_context_die (tree context)
19087 if (context)
19089 /* Find die that represents this context. */
19090 if (TYPE_P (context))
19091 return force_type_die (TYPE_MAIN_VARIANT (context));
19092 else
19093 return force_decl_die (context);
19095 return comp_unit_die;
19098 /* Returns the DIE for decl. A DIE will always be returned. */
19100 static dw_die_ref
19101 force_decl_die (tree decl)
19103 dw_die_ref decl_die;
19104 unsigned saved_external_flag;
19105 tree save_fn = NULL_TREE;
19106 decl_die = lookup_decl_die (decl);
19107 if (!decl_die)
19109 dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19111 decl_die = lookup_decl_die (decl);
19112 if (decl_die)
19113 return decl_die;
19115 switch (TREE_CODE (decl))
19117 case FUNCTION_DECL:
19118 /* Clear current_function_decl, so that gen_subprogram_die thinks
19119 that this is a declaration. At this point, we just want to force
19120 declaration die. */
19121 save_fn = current_function_decl;
19122 current_function_decl = NULL_TREE;
19123 gen_subprogram_die (decl, context_die);
19124 current_function_decl = save_fn;
19125 break;
19127 case VAR_DECL:
19128 /* Set external flag to force declaration die. Restore it after
19129 gen_decl_die() call. */
19130 saved_external_flag = DECL_EXTERNAL (decl);
19131 DECL_EXTERNAL (decl) = 1;
19132 gen_decl_die (decl, NULL, context_die);
19133 DECL_EXTERNAL (decl) = saved_external_flag;
19134 break;
19136 case NAMESPACE_DECL:
19137 if (dwarf_version >= 3 || !dwarf_strict)
19138 dwarf2out_decl (decl);
19139 else
19140 /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */
19141 decl_die = comp_unit_die;
19142 break;
19144 default:
19145 gcc_unreachable ();
19148 /* We should be able to find the DIE now. */
19149 if (!decl_die)
19150 decl_die = lookup_decl_die (decl);
19151 gcc_assert (decl_die);
19154 return decl_die;
19157 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
19158 always returned. */
19160 static dw_die_ref
19161 force_type_die (tree type)
19163 dw_die_ref type_die;
19165 type_die = lookup_type_die (type);
19166 if (!type_die)
19168 dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19170 type_die = modified_type_die (type, TYPE_READONLY (type),
19171 TYPE_VOLATILE (type), context_die);
19172 gcc_assert (type_die);
19174 return type_die;
19177 /* Force out any required namespaces to be able to output DECL,
19178 and return the new context_die for it, if it's changed. */
19180 static dw_die_ref
19181 setup_namespace_context (tree thing, dw_die_ref context_die)
19183 tree context = (DECL_P (thing)
19184 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19185 if (context && TREE_CODE (context) == NAMESPACE_DECL)
19186 /* Force out the namespace. */
19187 context_die = force_decl_die (context);
19189 return context_die;
19192 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19193 type) within its namespace, if appropriate.
19195 For compatibility with older debuggers, namespace DIEs only contain
19196 declarations; all definitions are emitted at CU scope. */
19198 static dw_die_ref
19199 declare_in_namespace (tree thing, dw_die_ref context_die)
19201 dw_die_ref ns_context;
19203 if (debug_info_level <= DINFO_LEVEL_TERSE)
19204 return context_die;
19206 /* If this decl is from an inlined function, then don't try to emit it in its
19207 namespace, as we will get confused. It would have already been emitted
19208 when the abstract instance of the inline function was emitted anyways. */
19209 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19210 return context_die;
19212 ns_context = setup_namespace_context (thing, context_die);
19214 if (ns_context != context_die)
19216 if (is_fortran ())
19217 return ns_context;
19218 if (DECL_P (thing))
19219 gen_decl_die (thing, NULL, ns_context);
19220 else
19221 gen_type_die (thing, ns_context);
19223 return context_die;
19226 /* Generate a DIE for a namespace or namespace alias. */
19228 static void
19229 gen_namespace_die (tree decl, dw_die_ref context_die)
19231 dw_die_ref namespace_die;
19233 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19234 they are an alias of. */
19235 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19237 /* Output a real namespace or module. */
19238 context_die = setup_namespace_context (decl, comp_unit_die);
19239 namespace_die = new_die (is_fortran ()
19240 ? DW_TAG_module : DW_TAG_namespace,
19241 context_die, decl);
19242 /* For Fortran modules defined in different CU don't add src coords. */
19243 if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19245 const char *name = dwarf2_name (decl, 0);
19246 if (name)
19247 add_name_attribute (namespace_die, name);
19249 else
19250 add_name_and_src_coords_attributes (namespace_die, decl);
19251 if (DECL_EXTERNAL (decl))
19252 add_AT_flag (namespace_die, DW_AT_declaration, 1);
19253 equate_decl_number_to_die (decl, namespace_die);
19255 else
19257 /* Output a namespace alias. */
19259 /* Force out the namespace we are an alias of, if necessary. */
19260 dw_die_ref origin_die
19261 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19263 if (DECL_CONTEXT (decl) == NULL_TREE
19264 || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19265 context_die = setup_namespace_context (decl, comp_unit_die);
19266 /* Now create the namespace alias DIE. */
19267 namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19268 add_name_and_src_coords_attributes (namespace_die, decl);
19269 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19270 equate_decl_number_to_die (decl, namespace_die);
19274 /* Generate Dwarf debug information for a decl described by DECL. */
19276 static void
19277 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19279 tree decl_or_origin = decl ? decl : origin;
19280 tree class_origin = NULL;
19282 if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19283 return;
19285 switch (TREE_CODE (decl_or_origin))
19287 case ERROR_MARK:
19288 break;
19290 case CONST_DECL:
19291 if (!is_fortran ())
19293 /* The individual enumerators of an enum type get output when we output
19294 the Dwarf representation of the relevant enum type itself. */
19295 break;
19298 /* Emit its type. */
19299 gen_type_die (TREE_TYPE (decl), context_die);
19301 /* And its containing namespace. */
19302 context_die = declare_in_namespace (decl, context_die);
19304 gen_const_die (decl, context_die);
19305 break;
19307 case FUNCTION_DECL:
19308 /* Don't output any DIEs to represent mere function declarations,
19309 unless they are class members or explicit block externs. */
19310 if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19311 && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19312 && (current_function_decl == NULL_TREE
19313 || DECL_ARTIFICIAL (decl_or_origin)))
19314 break;
19316 #if 0
19317 /* FIXME */
19318 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19319 on local redeclarations of global functions. That seems broken. */
19320 if (current_function_decl != decl)
19321 /* This is only a declaration. */;
19322 #endif
19324 /* If we're emitting a clone, emit info for the abstract instance. */
19325 if (origin || DECL_ORIGIN (decl) != decl)
19326 dwarf2out_abstract_function (origin ? origin : DECL_ABSTRACT_ORIGIN (decl));
19328 /* If we're emitting an out-of-line copy of an inline function,
19329 emit info for the abstract instance and set up to refer to it. */
19330 else if (cgraph_function_possibly_inlined_p (decl)
19331 && ! DECL_ABSTRACT (decl)
19332 && ! class_or_namespace_scope_p (context_die)
19333 /* dwarf2out_abstract_function won't emit a die if this is just
19334 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
19335 that case, because that works only if we have a die. */
19336 && DECL_INITIAL (decl) != NULL_TREE)
19338 dwarf2out_abstract_function (decl);
19339 set_decl_origin_self (decl);
19342 /* Otherwise we're emitting the primary DIE for this decl. */
19343 else if (debug_info_level > DINFO_LEVEL_TERSE)
19345 /* Before we describe the FUNCTION_DECL itself, make sure that we
19346 have described its return type. */
19347 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19349 /* And its virtual context. */
19350 if (DECL_VINDEX (decl) != NULL_TREE)
19351 gen_type_die (DECL_CONTEXT (decl), context_die);
19353 /* And its containing type. */
19354 if (!origin)
19355 origin = decl_class_context (decl);
19356 if (origin != NULL_TREE)
19357 gen_type_die_for_member (origin, decl, context_die);
19359 /* And its containing namespace. */
19360 context_die = declare_in_namespace (decl, context_die);
19363 /* Now output a DIE to represent the function itself. */
19364 if (decl)
19365 gen_subprogram_die (decl, context_die);
19366 break;
19368 case TYPE_DECL:
19369 /* If we are in terse mode, don't generate any DIEs to represent any
19370 actual typedefs. */
19371 if (debug_info_level <= DINFO_LEVEL_TERSE)
19372 break;
19374 /* In the special case of a TYPE_DECL node representing the declaration
19375 of some type tag, if the given TYPE_DECL is marked as having been
19376 instantiated from some other (original) TYPE_DECL node (e.g. one which
19377 was generated within the original definition of an inline function) we
19378 used to generate a special (abbreviated) DW_TAG_structure_type,
19379 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
19380 should be actually referencing those DIEs, as variable DIEs with that
19381 type would be emitted already in the abstract origin, so it was always
19382 removed during unused type prunning. Don't add anything in this
19383 case. */
19384 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19385 break;
19387 if (is_redundant_typedef (decl))
19388 gen_type_die (TREE_TYPE (decl), context_die);
19389 else
19390 /* Output a DIE to represent the typedef itself. */
19391 gen_typedef_die (decl, context_die);
19392 break;
19394 case LABEL_DECL:
19395 if (debug_info_level >= DINFO_LEVEL_NORMAL)
19396 gen_label_die (decl, context_die);
19397 break;
19399 case VAR_DECL:
19400 case RESULT_DECL:
19401 /* If we are in terse mode, don't generate any DIEs to represent any
19402 variable declarations or definitions. */
19403 if (debug_info_level <= DINFO_LEVEL_TERSE)
19404 break;
19406 /* Output any DIEs that are needed to specify the type of this data
19407 object. */
19408 if (decl_by_reference_p (decl_or_origin))
19409 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19410 else
19411 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19413 /* And its containing type. */
19414 class_origin = decl_class_context (decl_or_origin);
19415 if (class_origin != NULL_TREE)
19416 gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19418 /* And its containing namespace. */
19419 context_die = declare_in_namespace (decl_or_origin, context_die);
19421 /* Now output the DIE to represent the data object itself. This gets
19422 complicated because of the possibility that the VAR_DECL really
19423 represents an inlined instance of a formal parameter for an inline
19424 function. */
19425 if (!origin)
19426 origin = decl_ultimate_origin (decl);
19427 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
19428 gen_formal_parameter_die (decl, origin,
19429 true /* Emit name attribute. */,
19430 context_die);
19431 else
19432 gen_variable_die (decl, origin, context_die);
19433 break;
19435 case FIELD_DECL:
19436 /* Ignore the nameless fields that are used to skip bits but handle C++
19437 anonymous unions and structs. */
19438 if (DECL_NAME (decl) != NULL_TREE
19439 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19440 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19442 gen_type_die (member_declared_type (decl), context_die);
19443 gen_field_die (decl, context_die);
19445 break;
19447 case PARM_DECL:
19448 if (DECL_BY_REFERENCE (decl_or_origin))
19449 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19450 else
19451 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19452 gen_formal_parameter_die (decl, origin,
19453 true /* Emit name attribute. */,
19454 context_die);
19455 break;
19457 case NAMESPACE_DECL:
19458 case IMPORTED_DECL:
19459 if (dwarf_version >= 3 || !dwarf_strict)
19460 gen_namespace_die (decl, context_die);
19461 break;
19463 default:
19464 /* Probably some frontend-internal decl. Assume we don't care. */
19465 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19466 break;
19470 /* Output debug information for global decl DECL. Called from toplev.c after
19471 compilation proper has finished. */
19473 static void
19474 dwarf2out_global_decl (tree decl)
19476 /* Output DWARF2 information for file-scope tentative data object
19477 declarations, file-scope (extern) function declarations (which
19478 had no corresponding body) and file-scope tagged type declarations
19479 and definitions which have not yet been forced out. */
19480 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19481 dwarf2out_decl (decl);
19484 /* Output debug information for type decl DECL. Called from toplev.c
19485 and from language front ends (to record built-in types). */
19486 static void
19487 dwarf2out_type_decl (tree decl, int local)
19489 if (!local)
19490 dwarf2out_decl (decl);
19493 /* Output debug information for imported module or decl DECL.
19494 NAME is non-NULL name in the lexical block if the decl has been renamed.
19495 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19496 that DECL belongs to.
19497 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
19498 static void
19499 dwarf2out_imported_module_or_decl_1 (tree decl,
19500 tree name,
19501 tree lexical_block,
19502 dw_die_ref lexical_block_die)
19504 expanded_location xloc;
19505 dw_die_ref imported_die = NULL;
19506 dw_die_ref at_import_die;
19508 if (TREE_CODE (decl) == IMPORTED_DECL)
19510 xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19511 decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19512 gcc_assert (decl);
19514 else
19515 xloc = expand_location (input_location);
19517 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19519 if (is_base_type (TREE_TYPE (decl)))
19520 at_import_die = base_type_die (TREE_TYPE (decl));
19521 else
19522 at_import_die = force_type_die (TREE_TYPE (decl));
19523 /* For namespace N { typedef void T; } using N::T; base_type_die
19524 returns NULL, but DW_TAG_imported_declaration requires
19525 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
19526 if (!at_import_die)
19528 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19529 gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19530 at_import_die = lookup_type_die (TREE_TYPE (decl));
19531 gcc_assert (at_import_die);
19534 else
19536 at_import_die = lookup_decl_die (decl);
19537 if (!at_import_die)
19539 /* If we're trying to avoid duplicate debug info, we may not have
19540 emitted the member decl for this field. Emit it now. */
19541 if (TREE_CODE (decl) == FIELD_DECL)
19543 tree type = DECL_CONTEXT (decl);
19545 if (TYPE_CONTEXT (type)
19546 && TYPE_P (TYPE_CONTEXT (type))
19547 && !should_emit_struct_debug (TYPE_CONTEXT (type),
19548 DINFO_USAGE_DIR_USE))
19549 return;
19550 gen_type_die_for_member (type, decl,
19551 get_context_die (TYPE_CONTEXT (type)));
19553 at_import_die = force_decl_die (decl);
19557 if (TREE_CODE (decl) == NAMESPACE_DECL)
19559 if (dwarf_version >= 3 || !dwarf_strict)
19560 imported_die = new_die (DW_TAG_imported_module,
19561 lexical_block_die,
19562 lexical_block);
19563 else
19564 return;
19566 else
19567 imported_die = new_die (DW_TAG_imported_declaration,
19568 lexical_block_die,
19569 lexical_block);
19571 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19572 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19573 if (name)
19574 add_AT_string (imported_die, DW_AT_name,
19575 IDENTIFIER_POINTER (name));
19576 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19579 /* Output debug information for imported module or decl DECL.
19580 NAME is non-NULL name in context if the decl has been renamed.
19581 CHILD is true if decl is one of the renamed decls as part of
19582 importing whole module. */
19584 static void
19585 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19586 bool child)
19588 /* dw_die_ref at_import_die; */
19589 dw_die_ref scope_die;
19591 if (debug_info_level <= DINFO_LEVEL_TERSE)
19592 return;
19594 gcc_assert (decl);
19596 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19597 We need decl DIE for reference and scope die. First, get DIE for the decl
19598 itself. */
19600 /* Get the scope die for decl context. Use comp_unit_die for global module
19601 or decl. If die is not found for non globals, force new die. */
19602 if (context
19603 && TYPE_P (context)
19604 && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19605 return;
19607 if (!(dwarf_version >= 3 || !dwarf_strict))
19608 return;
19610 scope_die = get_context_die (context);
19612 if (child)
19614 gcc_assert (scope_die->die_child);
19615 gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19616 gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19617 scope_die = scope_die->die_child;
19620 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
19621 dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19625 /* Write the debugging output for DECL. */
19627 void
19628 dwarf2out_decl (tree decl)
19630 dw_die_ref context_die = comp_unit_die;
19632 switch (TREE_CODE (decl))
19634 case ERROR_MARK:
19635 return;
19637 case FUNCTION_DECL:
19638 /* What we would really like to do here is to filter out all mere
19639 file-scope declarations of file-scope functions which are never
19640 referenced later within this translation unit (and keep all of ones
19641 that *are* referenced later on) but we aren't clairvoyant, so we have
19642 no idea which functions will be referenced in the future (i.e. later
19643 on within the current translation unit). So here we just ignore all
19644 file-scope function declarations which are not also definitions. If
19645 and when the debugger needs to know something about these functions,
19646 it will have to hunt around and find the DWARF information associated
19647 with the definition of the function.
19649 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19650 nodes represent definitions and which ones represent mere
19651 declarations. We have to check DECL_INITIAL instead. That's because
19652 the C front-end supports some weird semantics for "extern inline"
19653 function definitions. These can get inlined within the current
19654 translation unit (and thus, we need to generate Dwarf info for their
19655 abstract instances so that the Dwarf info for the concrete inlined
19656 instances can have something to refer to) but the compiler never
19657 generates any out-of-lines instances of such things (despite the fact
19658 that they *are* definitions).
19660 The important point is that the C front-end marks these "extern
19661 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19662 them anyway. Note that the C++ front-end also plays some similar games
19663 for inline function definitions appearing within include files which
19664 also contain `#pragma interface' pragmas. */
19665 if (DECL_INITIAL (decl) == NULL_TREE)
19666 return;
19668 /* If we're a nested function, initially use a parent of NULL; if we're
19669 a plain function, this will be fixed up in decls_for_scope. If
19670 we're a method, it will be ignored, since we already have a DIE. */
19671 if (decl_function_context (decl)
19672 /* But if we're in terse mode, we don't care about scope. */
19673 && debug_info_level > DINFO_LEVEL_TERSE)
19674 context_die = NULL;
19675 break;
19677 case VAR_DECL:
19678 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19679 declaration and if the declaration was never even referenced from
19680 within this entire compilation unit. We suppress these DIEs in
19681 order to save space in the .debug section (by eliminating entries
19682 which are probably useless). Note that we must not suppress
19683 block-local extern declarations (whether used or not) because that
19684 would screw-up the debugger's name lookup mechanism and cause it to
19685 miss things which really ought to be in scope at a given point. */
19686 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19687 return;
19689 /* For local statics lookup proper context die. */
19690 if (TREE_STATIC (decl) && decl_function_context (decl))
19691 context_die = lookup_decl_die (DECL_CONTEXT (decl));
19693 /* If we are in terse mode, don't generate any DIEs to represent any
19694 variable declarations or definitions. */
19695 if (debug_info_level <= DINFO_LEVEL_TERSE)
19696 return;
19697 break;
19699 case CONST_DECL:
19700 if (debug_info_level <= DINFO_LEVEL_TERSE)
19701 return;
19702 if (!is_fortran ())
19703 return;
19704 if (TREE_STATIC (decl) && decl_function_context (decl))
19705 context_die = lookup_decl_die (DECL_CONTEXT (decl));
19706 break;
19708 case NAMESPACE_DECL:
19709 case IMPORTED_DECL:
19710 if (debug_info_level <= DINFO_LEVEL_TERSE)
19711 return;
19712 if (lookup_decl_die (decl) != NULL)
19713 return;
19714 break;
19716 case TYPE_DECL:
19717 /* Don't emit stubs for types unless they are needed by other DIEs. */
19718 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19719 return;
19721 /* Don't bother trying to generate any DIEs to represent any of the
19722 normal built-in types for the language we are compiling. */
19723 if (DECL_IS_BUILTIN (decl))
19725 /* OK, we need to generate one for `bool' so GDB knows what type
19726 comparisons have. */
19727 if (is_cxx ()
19728 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19729 && ! DECL_IGNORED_P (decl))
19730 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19732 return;
19735 /* If we are in terse mode, don't generate any DIEs for types. */
19736 if (debug_info_level <= DINFO_LEVEL_TERSE)
19737 return;
19739 /* If we're a function-scope tag, initially use a parent of NULL;
19740 this will be fixed up in decls_for_scope. */
19741 if (decl_function_context (decl))
19742 context_die = NULL;
19744 break;
19746 default:
19747 return;
19750 gen_decl_die (decl, NULL, context_die);
19753 /* Output a marker (i.e. a label) for the beginning of the generated code for
19754 a lexical block. */
19756 static void
19757 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19758 unsigned int blocknum)
19760 switch_to_section (current_function_section ());
19761 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19764 /* Output a marker (i.e. a label) for the end of the generated code for a
19765 lexical block. */
19767 static void
19768 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19770 switch_to_section (current_function_section ());
19771 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
19774 /* Returns nonzero if it is appropriate not to emit any debugging
19775 information for BLOCK, because it doesn't contain any instructions.
19777 Don't allow this for blocks with nested functions or local classes
19778 as we would end up with orphans, and in the presence of scheduling
19779 we may end up calling them anyway. */
19781 static bool
19782 dwarf2out_ignore_block (const_tree block)
19784 tree decl;
19785 unsigned int i;
19787 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
19788 if (TREE_CODE (decl) == FUNCTION_DECL
19789 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19790 return 0;
19791 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
19793 decl = BLOCK_NONLOCALIZED_VAR (block, i);
19794 if (TREE_CODE (decl) == FUNCTION_DECL
19795 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
19796 return 0;
19799 return 1;
19802 /* Hash table routines for file_hash. */
19804 static int
19805 file_table_eq (const void *p1_p, const void *p2_p)
19807 const struct dwarf_file_data *const p1 =
19808 (const struct dwarf_file_data *) p1_p;
19809 const char *const p2 = (const char *) p2_p;
19810 return strcmp (p1->filename, p2) == 0;
19813 static hashval_t
19814 file_table_hash (const void *p_p)
19816 const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
19817 return htab_hash_string (p->filename);
19820 /* Lookup FILE_NAME (in the list of filenames that we know about here in
19821 dwarf2out.c) and return its "index". The index of each (known) filename is
19822 just a unique number which is associated with only that one filename. We
19823 need such numbers for the sake of generating labels (in the .debug_sfnames
19824 section) and references to those files numbers (in the .debug_srcinfo
19825 and.debug_macinfo sections). If the filename given as an argument is not
19826 found in our current list, add it to the list and assign it the next
19827 available unique index number. In order to speed up searches, we remember
19828 the index of the filename was looked up last. This handles the majority of
19829 all searches. */
19831 static struct dwarf_file_data *
19832 lookup_filename (const char *file_name)
19834 void ** slot;
19835 struct dwarf_file_data * created;
19837 /* Check to see if the file name that was searched on the previous
19838 call matches this file name. If so, return the index. */
19839 if (file_table_last_lookup
19840 && (file_name == file_table_last_lookup->filename
19841 || strcmp (file_table_last_lookup->filename, file_name) == 0))
19842 return file_table_last_lookup;
19844 /* Didn't match the previous lookup, search the table. */
19845 slot = htab_find_slot_with_hash (file_table, file_name,
19846 htab_hash_string (file_name), INSERT);
19847 if (*slot)
19848 return (struct dwarf_file_data *) *slot;
19850 created = GGC_NEW (struct dwarf_file_data);
19851 created->filename = file_name;
19852 created->emitted_number = 0;
19853 *slot = created;
19854 return created;
19857 /* If the assembler will construct the file table, then translate the compiler
19858 internal file table number into the assembler file table number, and emit
19859 a .file directive if we haven't already emitted one yet. The file table
19860 numbers are different because we prune debug info for unused variables and
19861 types, which may include filenames. */
19863 static int
19864 maybe_emit_file (struct dwarf_file_data * fd)
19866 if (! fd->emitted_number)
19868 if (last_emitted_file)
19869 fd->emitted_number = last_emitted_file->emitted_number + 1;
19870 else
19871 fd->emitted_number = 1;
19872 last_emitted_file = fd;
19874 if (DWARF2_ASM_LINE_DEBUG_INFO)
19876 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
19877 output_quoted_string (asm_out_file,
19878 remap_debug_filename (fd->filename));
19879 fputc ('\n', asm_out_file);
19883 return fd->emitted_number;
19886 /* Schedule generation of a DW_AT_const_value attribute to DIE.
19887 That generation should happen after function debug info has been
19888 generated. The value of the attribute is the constant value of ARG. */
19890 static void
19891 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
19893 die_arg_entry entry;
19895 if (!die || !arg)
19896 return;
19898 if (!tmpl_value_parm_die_table)
19899 tmpl_value_parm_die_table
19900 = VEC_alloc (die_arg_entry, gc, 32);
19902 entry.die = die;
19903 entry.arg = arg;
19904 VEC_safe_push (die_arg_entry, gc,
19905 tmpl_value_parm_die_table,
19906 &entry);
19909 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
19910 by append_entry_to_tmpl_value_parm_die_table. This function must
19911 be called after function DIEs have been generated. */
19913 static void
19914 gen_remaining_tmpl_value_param_die_attribute (void)
19916 if (tmpl_value_parm_die_table)
19918 unsigned i;
19919 die_arg_entry *e;
19921 for (i = 0;
19922 VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
19923 i++)
19924 tree_add_const_value_attribute (e->die, e->arg);
19929 /* Replace DW_AT_name for the decl with name. */
19931 static void
19932 dwarf2out_set_name (tree decl, tree name)
19934 dw_die_ref die;
19935 dw_attr_ref attr;
19936 const char *dname;
19938 die = TYPE_SYMTAB_DIE (decl);
19939 if (!die)
19940 return;
19942 dname = dwarf2_name (name, 0);
19943 if (!dname)
19944 return;
19946 attr = get_AT (die, DW_AT_name);
19947 if (attr)
19949 struct indirect_string_node *node;
19951 node = find_AT_string (dname);
19952 /* replace the string. */
19953 attr->dw_attr_val.v.val_str = node;
19956 else
19957 add_name_attribute (die, dname);
19960 /* Called by the final INSN scan whenever we see a direct function call.
19961 Make an entry into the direct call table, recording the point of call
19962 and a reference to the target function's debug entry. */
19964 static void
19965 dwarf2out_direct_call (tree targ)
19967 dcall_entry e;
19968 tree origin = decl_ultimate_origin (targ);
19970 /* If this is a clone, use the abstract origin as the target. */
19971 if (origin)
19972 targ = origin;
19974 e.poc_label_num = poc_label_num++;
19975 e.poc_decl = current_function_decl;
19976 e.targ_die = force_decl_die (targ);
19977 VEC_safe_push (dcall_entry, gc, dcall_table, &e);
19979 /* Drop a label at the return point to mark the point of call. */
19980 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
19983 /* Returns a hash value for X (which really is a struct vcall_insn). */
19985 static hashval_t
19986 vcall_insn_table_hash (const void *x)
19988 return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
19991 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
19992 insnd_uid of *Y. */
19994 static int
19995 vcall_insn_table_eq (const void *x, const void *y)
19997 return (((const struct vcall_insn *) x)->insn_uid
19998 == ((const struct vcall_insn *) y)->insn_uid);
20001 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE. */
20003 static void
20004 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20006 struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20007 struct vcall_insn **slot;
20009 gcc_assert (item);
20010 item->insn_uid = insn_uid;
20011 item->vtable_slot = vtable_slot;
20012 slot = (struct vcall_insn **)
20013 htab_find_slot_with_hash (vcall_insn_table, &item,
20014 (hashval_t) insn_uid, INSERT);
20015 *slot = item;
20018 /* Return the VTABLE_SLOT associated with INSN_UID. */
20020 static unsigned int
20021 lookup_vcall_insn (unsigned int insn_uid)
20023 struct vcall_insn item;
20024 struct vcall_insn *p;
20026 item.insn_uid = insn_uid;
20027 item.vtable_slot = 0;
20028 p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20029 (void *) &item,
20030 (hashval_t) insn_uid);
20031 if (p == NULL)
20032 return (unsigned int) -1;
20033 return p->vtable_slot;
20037 /* Called when lowering indirect calls to RTL. We make a note of INSN_UID
20038 and the OBJ_TYPE_REF_TOKEN from ADDR. For C++ virtual calls, the token
20039 is the vtable slot index that we will need to put in the virtual call
20040 table later. */
20042 static void
20043 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20045 if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20047 tree token = OBJ_TYPE_REF_TOKEN (addr);
20048 if (TREE_CODE (token) == INTEGER_CST)
20049 store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20053 /* Called when scheduling RTL, when a CALL_INSN is split. Copies the
20054 OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20055 with NEW_INSN. */
20057 static void
20058 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20060 unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20062 if (vtable_slot != (unsigned int) -1)
20063 store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20066 /* Called by the final INSN scan whenever we see a virtual function call.
20067 Make an entry into the virtual call table, recording the point of call
20068 and the slot index of the vtable entry used to call the virtual member
20069 function. The slot index was associated with the INSN_UID during the
20070 lowering to RTL. */
20072 static void
20073 dwarf2out_virtual_call (int insn_uid)
20075 unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20076 vcall_entry e;
20078 if (vtable_slot == (unsigned int) -1)
20079 return;
20081 e.poc_label_num = poc_label_num++;
20082 e.vtable_slot = vtable_slot;
20083 VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20085 /* Drop a label at the return point to mark the point of call. */
20086 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20089 /* Called by the final INSN scan whenever we see a var location. We
20090 use it to drop labels in the right places, and throw the location in
20091 our lookup table. */
20093 static void
20094 dwarf2out_var_location (rtx loc_note)
20096 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20097 struct var_loc_node *newloc;
20098 rtx next_real;
20099 static const char *last_label;
20100 static const char *last_postcall_label;
20101 static bool last_in_cold_section_p;
20102 tree decl;
20104 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20105 return;
20107 next_real = next_real_insn (loc_note);
20108 /* If there are no instructions which would be affected by this note,
20109 don't do anything. */
20110 if (next_real == NULL_RTX)
20111 return;
20113 newloc = GGC_CNEW (struct var_loc_node);
20114 /* If there were no real insns between note we processed last time
20115 and this note, use the label we emitted last time. */
20116 if (last_var_location_insn == NULL_RTX
20117 || last_var_location_insn != next_real
20118 || last_in_cold_section_p != in_cold_section_p)
20120 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20121 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20122 loclabel_num++;
20123 last_label = ggc_strdup (loclabel);
20124 last_postcall_label = NULL;
20126 newloc->var_loc_note = loc_note;
20127 newloc->next = NULL;
20129 if (!NOTE_DURING_CALL_P (loc_note))
20130 newloc->label = last_label;
20131 else
20133 if (!last_postcall_label)
20135 sprintf (loclabel, "%s-1", last_label);
20136 last_postcall_label = ggc_strdup (loclabel);
20138 newloc->label = last_postcall_label;
20141 if (cfun && in_cold_section_p)
20142 newloc->section_label = crtl->subsections.cold_section_label;
20143 else
20144 newloc->section_label = text_section_label;
20146 last_var_location_insn = next_real;
20147 last_in_cold_section_p = in_cold_section_p;
20148 decl = NOTE_VAR_LOCATION_DECL (loc_note);
20149 add_var_loc_to_decl (decl, newloc);
20152 /* We need to reset the locations at the beginning of each
20153 function. We can't do this in the end_function hook, because the
20154 declarations that use the locations won't have been output when
20155 that hook is called. Also compute have_multiple_function_sections here. */
20157 static void
20158 dwarf2out_begin_function (tree fun)
20160 htab_empty (decl_loc_table);
20162 if (function_section (fun) != text_section)
20163 have_multiple_function_sections = true;
20165 dwarf2out_note_section_used ();
20168 /* Output a label to mark the beginning of a source code line entry
20169 and record information relating to this source line, in
20170 'line_info_table' for later output of the .debug_line section. */
20172 static void
20173 dwarf2out_source_line (unsigned int line, const char *filename,
20174 int discriminator, bool is_stmt)
20176 static bool last_is_stmt = true;
20178 if (debug_info_level >= DINFO_LEVEL_NORMAL
20179 && line != 0)
20181 int file_num = maybe_emit_file (lookup_filename (filename));
20183 switch_to_section (current_function_section ());
20185 /* If requested, emit something human-readable. */
20186 if (flag_debug_asm)
20187 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20188 filename, line);
20190 if (DWARF2_ASM_LINE_DEBUG_INFO)
20192 /* Emit the .loc directive understood by GNU as. */
20193 fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20194 if (is_stmt != last_is_stmt)
20196 fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20197 last_is_stmt = is_stmt;
20199 if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20200 fprintf (asm_out_file, " discriminator %d", discriminator);
20201 fputc ('\n', asm_out_file);
20203 /* Indicate that line number info exists. */
20204 line_info_table_in_use++;
20206 else if (function_section (current_function_decl) != text_section)
20208 dw_separate_line_info_ref line_info;
20209 targetm.asm_out.internal_label (asm_out_file,
20210 SEPARATE_LINE_CODE_LABEL,
20211 separate_line_info_table_in_use);
20213 /* Expand the line info table if necessary. */
20214 if (separate_line_info_table_in_use
20215 == separate_line_info_table_allocated)
20217 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20218 separate_line_info_table
20219 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20220 separate_line_info_table,
20221 separate_line_info_table_allocated);
20222 memset (separate_line_info_table
20223 + separate_line_info_table_in_use,
20225 (LINE_INFO_TABLE_INCREMENT
20226 * sizeof (dw_separate_line_info_entry)));
20229 /* Add the new entry at the end of the line_info_table. */
20230 line_info
20231 = &separate_line_info_table[separate_line_info_table_in_use++];
20232 line_info->dw_file_num = file_num;
20233 line_info->dw_line_num = line;
20234 line_info->function = current_function_funcdef_no;
20236 else
20238 dw_line_info_ref line_info;
20240 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20241 line_info_table_in_use);
20243 /* Expand the line info table if necessary. */
20244 if (line_info_table_in_use == line_info_table_allocated)
20246 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20247 line_info_table
20248 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20249 line_info_table_allocated);
20250 memset (line_info_table + line_info_table_in_use, 0,
20251 LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20254 /* Add the new entry at the end of the line_info_table. */
20255 line_info = &line_info_table[line_info_table_in_use++];
20256 line_info->dw_file_num = file_num;
20257 line_info->dw_line_num = line;
20262 /* Record the beginning of a new source file. */
20264 static void
20265 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20267 if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20269 /* Record the beginning of the file for break_out_includes. */
20270 dw_die_ref bincl_die;
20272 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20273 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20276 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20278 int file_num = maybe_emit_file (lookup_filename (filename));
20280 switch_to_section (debug_macinfo_section);
20281 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20282 dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20283 lineno);
20285 dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20289 /* Record the end of a source file. */
20291 static void
20292 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20294 if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20295 /* Record the end of the file for break_out_includes. */
20296 new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20298 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20300 switch_to_section (debug_macinfo_section);
20301 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20305 /* Called from debug_define in toplev.c. The `buffer' parameter contains
20306 the tail part of the directive line, i.e. the part which is past the
20307 initial whitespace, #, whitespace, directive-name, whitespace part. */
20309 static void
20310 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20311 const char *buffer ATTRIBUTE_UNUSED)
20313 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20315 switch_to_section (debug_macinfo_section);
20316 dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20317 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20318 dw2_asm_output_nstring (buffer, -1, "The macro");
20322 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
20323 the tail part of the directive line, i.e. the part which is past the
20324 initial whitespace, #, whitespace, directive-name, whitespace part. */
20326 static void
20327 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20328 const char *buffer ATTRIBUTE_UNUSED)
20330 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20332 switch_to_section (debug_macinfo_section);
20333 dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20334 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20335 dw2_asm_output_nstring (buffer, -1, "The macro");
20339 /* Set up for Dwarf output at the start of compilation. */
20341 static void
20342 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20344 /* Allocate the file_table. */
20345 file_table = htab_create_ggc (50, file_table_hash,
20346 file_table_eq, NULL);
20348 /* Allocate the decl_die_table. */
20349 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20350 decl_die_table_eq, NULL);
20352 /* Allocate the decl_loc_table. */
20353 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20354 decl_loc_table_eq, NULL);
20356 /* Allocate the initial hunk of the decl_scope_table. */
20357 decl_scope_table = VEC_alloc (tree, gc, 256);
20359 /* Allocate the initial hunk of the abbrev_die_table. */
20360 abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20361 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20362 /* Zero-th entry is allocated, but unused. */
20363 abbrev_die_table_in_use = 1;
20365 /* Allocate the initial hunk of the line_info_table. */
20366 line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20367 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20369 /* Zero-th entry is allocated, but unused. */
20370 line_info_table_in_use = 1;
20372 /* Allocate the pubtypes and pubnames vectors. */
20373 pubname_table = VEC_alloc (pubname_entry, gc, 32);
20374 pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20376 /* Allocate the table that maps insn UIDs to vtable slot indexes. */
20377 vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20378 vcall_insn_table_eq, NULL);
20380 /* Generate the initial DIE for the .debug section. Note that the (string)
20381 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20382 will (typically) be a relative pathname and that this pathname should be
20383 taken as being relative to the directory from which the compiler was
20384 invoked when the given (base) source file was compiled. We will fill
20385 in this value in dwarf2out_finish. */
20386 comp_unit_die = gen_compile_unit_die (NULL);
20388 incomplete_types = VEC_alloc (tree, gc, 64);
20390 used_rtx_array = VEC_alloc (rtx, gc, 32);
20392 debug_info_section = get_section (DEBUG_INFO_SECTION,
20393 SECTION_DEBUG, NULL);
20394 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20395 SECTION_DEBUG, NULL);
20396 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20397 SECTION_DEBUG, NULL);
20398 debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20399 SECTION_DEBUG, NULL);
20400 debug_line_section = get_section (DEBUG_LINE_SECTION,
20401 SECTION_DEBUG, NULL);
20402 debug_loc_section = get_section (DEBUG_LOC_SECTION,
20403 SECTION_DEBUG, NULL);
20404 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20405 SECTION_DEBUG, NULL);
20406 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20407 SECTION_DEBUG, NULL);
20408 debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20409 SECTION_DEBUG, NULL);
20410 debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20411 SECTION_DEBUG, NULL);
20412 debug_str_section = get_section (DEBUG_STR_SECTION,
20413 DEBUG_STR_SECTION_FLAGS, NULL);
20414 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20415 SECTION_DEBUG, NULL);
20416 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20417 SECTION_DEBUG, NULL);
20419 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20420 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20421 DEBUG_ABBREV_SECTION_LABEL, 0);
20422 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20423 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20424 COLD_TEXT_SECTION_LABEL, 0);
20425 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20427 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20428 DEBUG_INFO_SECTION_LABEL, 0);
20429 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20430 DEBUG_LINE_SECTION_LABEL, 0);
20431 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20432 DEBUG_RANGES_SECTION_LABEL, 0);
20433 switch_to_section (debug_abbrev_section);
20434 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20435 switch_to_section (debug_info_section);
20436 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20437 switch_to_section (debug_line_section);
20438 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20440 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20442 switch_to_section (debug_macinfo_section);
20443 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20444 DEBUG_MACINFO_SECTION_LABEL, 0);
20445 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20448 switch_to_section (text_section);
20449 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20450 if (flag_reorder_blocks_and_partition)
20452 cold_text_section = unlikely_text_section ();
20453 switch_to_section (cold_text_section);
20454 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20459 /* Called before cgraph_optimize starts outputtting functions, variables
20460 and toplevel asms into assembly. */
20462 static void
20463 dwarf2out_assembly_start (void)
20465 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20467 #ifndef TARGET_UNWIND_INFO
20468 if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20469 #endif
20470 fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20474 /* A helper function for dwarf2out_finish called through
20475 htab_traverse. Emit one queued .debug_str string. */
20477 static int
20478 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20480 struct indirect_string_node *node = (struct indirect_string_node *) *h;
20482 if (node->label && node->refcount)
20484 switch_to_section (debug_str_section);
20485 ASM_OUTPUT_LABEL (asm_out_file, node->label);
20486 assemble_string (node->str, strlen (node->str) + 1);
20489 return 1;
20492 #if ENABLE_ASSERT_CHECKING
20493 /* Verify that all marks are clear. */
20495 static void
20496 verify_marks_clear (dw_die_ref die)
20498 dw_die_ref c;
20500 gcc_assert (! die->die_mark);
20501 FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20503 #endif /* ENABLE_ASSERT_CHECKING */
20505 /* Clear the marks for a die and its children.
20506 Be cool if the mark isn't set. */
20508 static void
20509 prune_unmark_dies (dw_die_ref die)
20511 dw_die_ref c;
20513 if (die->die_mark)
20514 die->die_mark = 0;
20515 FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20518 /* Given DIE that we're marking as used, find any other dies
20519 it references as attributes and mark them as used. */
20521 static void
20522 prune_unused_types_walk_attribs (dw_die_ref die)
20524 dw_attr_ref a;
20525 unsigned ix;
20527 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20529 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20531 /* A reference to another DIE.
20532 Make sure that it will get emitted.
20533 If it was broken out into a comdat group, don't follow it. */
20534 if (dwarf_version < 4
20535 || a->dw_attr == DW_AT_specification
20536 || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20537 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20539 /* Set the string's refcount to 0 so that prune_unused_types_mark
20540 accounts properly for it. */
20541 if (AT_class (a) == dw_val_class_str)
20542 a->dw_attr_val.v.val_str->refcount = 0;
20547 /* Mark DIE as being used. If DOKIDS is true, then walk down
20548 to DIE's children. */
20550 static void
20551 prune_unused_types_mark (dw_die_ref die, int dokids)
20553 dw_die_ref c;
20555 if (die->die_mark == 0)
20557 /* We haven't done this node yet. Mark it as used. */
20558 die->die_mark = 1;
20560 /* We also have to mark its parents as used.
20561 (But we don't want to mark our parents' kids due to this.) */
20562 if (die->die_parent)
20563 prune_unused_types_mark (die->die_parent, 0);
20565 /* Mark any referenced nodes. */
20566 prune_unused_types_walk_attribs (die);
20568 /* If this node is a specification,
20569 also mark the definition, if it exists. */
20570 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20571 prune_unused_types_mark (die->die_definition, 1);
20574 if (dokids && die->die_mark != 2)
20576 /* We need to walk the children, but haven't done so yet.
20577 Remember that we've walked the kids. */
20578 die->die_mark = 2;
20580 /* If this is an array type, we need to make sure our
20581 kids get marked, even if they're types. If we're
20582 breaking out types into comdat sections, do this
20583 for all type definitions. */
20584 if (die->die_tag == DW_TAG_array_type
20585 || (dwarf_version >= 4
20586 && is_type_die (die) && ! is_declaration_die (die)))
20587 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20588 else
20589 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20593 /* For local classes, look if any static member functions were emitted
20594 and if so, mark them. */
20596 static void
20597 prune_unused_types_walk_local_classes (dw_die_ref die)
20599 dw_die_ref c;
20601 if (die->die_mark == 2)
20602 return;
20604 switch (die->die_tag)
20606 case DW_TAG_structure_type:
20607 case DW_TAG_union_type:
20608 case DW_TAG_class_type:
20609 break;
20611 case DW_TAG_subprogram:
20612 if (!get_AT_flag (die, DW_AT_declaration)
20613 || die->die_definition != NULL)
20614 prune_unused_types_mark (die, 1);
20615 return;
20617 default:
20618 return;
20621 /* Mark children. */
20622 FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20625 /* Walk the tree DIE and mark types that we actually use. */
20627 static void
20628 prune_unused_types_walk (dw_die_ref die)
20630 dw_die_ref c;
20632 /* Don't do anything if this node is already marked and
20633 children have been marked as well. */
20634 if (die->die_mark == 2)
20635 return;
20637 switch (die->die_tag)
20639 case DW_TAG_structure_type:
20640 case DW_TAG_union_type:
20641 case DW_TAG_class_type:
20642 if (die->die_perennial_p)
20643 break;
20645 for (c = die->die_parent; c; c = c->die_parent)
20646 if (c->die_tag == DW_TAG_subprogram)
20647 break;
20649 /* Finding used static member functions inside of classes
20650 is needed just for local classes, because for other classes
20651 static member function DIEs with DW_AT_specification
20652 are emitted outside of the DW_TAG_*_type. If we ever change
20653 it, we'd need to call this even for non-local classes. */
20654 if (c)
20655 prune_unused_types_walk_local_classes (die);
20657 /* It's a type node --- don't mark it. */
20658 return;
20660 case DW_TAG_const_type:
20661 case DW_TAG_packed_type:
20662 case DW_TAG_pointer_type:
20663 case DW_TAG_reference_type:
20664 case DW_TAG_volatile_type:
20665 case DW_TAG_typedef:
20666 case DW_TAG_array_type:
20667 case DW_TAG_interface_type:
20668 case DW_TAG_friend:
20669 case DW_TAG_variant_part:
20670 case DW_TAG_enumeration_type:
20671 case DW_TAG_subroutine_type:
20672 case DW_TAG_string_type:
20673 case DW_TAG_set_type:
20674 case DW_TAG_subrange_type:
20675 case DW_TAG_ptr_to_member_type:
20676 case DW_TAG_file_type:
20677 if (die->die_perennial_p)
20678 break;
20680 /* It's a type node --- don't mark it. */
20681 return;
20683 default:
20684 /* Mark everything else. */
20685 break;
20688 if (die->die_mark == 0)
20690 die->die_mark = 1;
20692 /* Now, mark any dies referenced from here. */
20693 prune_unused_types_walk_attribs (die);
20696 die->die_mark = 2;
20698 /* Mark children. */
20699 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20702 /* Increment the string counts on strings referred to from DIE's
20703 attributes. */
20705 static void
20706 prune_unused_types_update_strings (dw_die_ref die)
20708 dw_attr_ref a;
20709 unsigned ix;
20711 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20712 if (AT_class (a) == dw_val_class_str)
20714 struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20715 s->refcount++;
20716 /* Avoid unnecessarily putting strings that are used less than
20717 twice in the hash table. */
20718 if (s->refcount
20719 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20721 void ** slot;
20722 slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20723 htab_hash_string (s->str),
20724 INSERT);
20725 gcc_assert (*slot == NULL);
20726 *slot = s;
20731 /* Remove from the tree DIE any dies that aren't marked. */
20733 static void
20734 prune_unused_types_prune (dw_die_ref die)
20736 dw_die_ref c;
20738 gcc_assert (die->die_mark);
20739 prune_unused_types_update_strings (die);
20741 if (! die->die_child)
20742 return;
20744 c = die->die_child;
20745 do {
20746 dw_die_ref prev = c;
20747 for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
20748 if (c == die->die_child)
20750 /* No marked children between 'prev' and the end of the list. */
20751 if (prev == c)
20752 /* No marked children at all. */
20753 die->die_child = NULL;
20754 else
20756 prev->die_sib = c->die_sib;
20757 die->die_child = prev;
20759 return;
20762 if (c != prev->die_sib)
20763 prev->die_sib = c;
20764 prune_unused_types_prune (c);
20765 } while (c != die->die_child);
20768 /* A helper function for dwarf2out_finish called through
20769 htab_traverse. Clear .debug_str strings that we haven't already
20770 decided to emit. */
20772 static int
20773 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20775 struct indirect_string_node *node = (struct indirect_string_node *) *h;
20777 if (!node->label || !node->refcount)
20778 htab_clear_slot (debug_str_hash, h);
20780 return 1;
20783 /* Remove dies representing declarations that we never use. */
20785 static void
20786 prune_unused_types (void)
20788 unsigned int i;
20789 limbo_die_node *node;
20790 comdat_type_node *ctnode;
20791 pubname_ref pub;
20792 dcall_entry *dcall;
20794 #if ENABLE_ASSERT_CHECKING
20795 /* All the marks should already be clear. */
20796 verify_marks_clear (comp_unit_die);
20797 for (node = limbo_die_list; node; node = node->next)
20798 verify_marks_clear (node->die);
20799 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20800 verify_marks_clear (ctnode->root_die);
20801 #endif /* ENABLE_ASSERT_CHECKING */
20803 /* Mark types that are used in global variables. */
20804 premark_types_used_by_global_vars ();
20806 /* Set the mark on nodes that are actually used. */
20807 prune_unused_types_walk (comp_unit_die);
20808 for (node = limbo_die_list; node; node = node->next)
20809 prune_unused_types_walk (node->die);
20810 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20812 prune_unused_types_walk (ctnode->root_die);
20813 prune_unused_types_mark (ctnode->type_die, 1);
20816 /* Also set the mark on nodes referenced from the
20817 pubname_table or arange_table. */
20818 for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
20819 prune_unused_types_mark (pub->die, 1);
20820 for (i = 0; i < arange_table_in_use; i++)
20821 prune_unused_types_mark (arange_table[i], 1);
20823 /* Mark nodes referenced from the direct call table. */
20824 for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
20825 prune_unused_types_mark (dcall->targ_die, 1);
20827 /* Get rid of nodes that aren't marked; and update the string counts. */
20828 if (debug_str_hash && debug_str_hash_forced)
20829 htab_traverse (debug_str_hash, prune_indirect_string, NULL);
20830 else if (debug_str_hash)
20831 htab_empty (debug_str_hash);
20832 prune_unused_types_prune (comp_unit_die);
20833 for (node = limbo_die_list; node; node = node->next)
20834 prune_unused_types_prune (node->die);
20835 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20836 prune_unused_types_prune (ctnode->root_die);
20838 /* Leave the marks clear. */
20839 prune_unmark_dies (comp_unit_die);
20840 for (node = limbo_die_list; node; node = node->next)
20841 prune_unmark_dies (node->die);
20842 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
20843 prune_unmark_dies (ctnode->root_die);
20846 /* Set the parameter to true if there are any relative pathnames in
20847 the file table. */
20848 static int
20849 file_table_relative_p (void ** slot, void *param)
20851 bool *p = (bool *) param;
20852 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
20853 if (!IS_ABSOLUTE_PATH (d->filename))
20855 *p = true;
20856 return 0;
20858 return 1;
20861 /* Routines to manipulate hash table of comdat type units. */
20863 static hashval_t
20864 htab_ct_hash (const void *of)
20866 hashval_t h;
20867 const comdat_type_node *const type_node = (const comdat_type_node *) of;
20869 memcpy (&h, type_node->signature, sizeof (h));
20870 return h;
20873 static int
20874 htab_ct_eq (const void *of1, const void *of2)
20876 const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
20877 const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
20879 return (! memcmp (type_node_1->signature, type_node_2->signature,
20880 DWARF_TYPE_SIGNATURE_SIZE));
20883 /* Move a DW_AT_MIPS_linkage_name attribute just added to dw_die_ref
20884 to the location it would have been added, should we know its
20885 DECL_ASSEMBLER_NAME when we added other attributes. This will
20886 probably improve compactness of debug info, removing equivalent
20887 abbrevs, and hide any differences caused by deferring the
20888 computation of the assembler name, triggered by e.g. PCH. */
20890 static inline void
20891 move_linkage_attr (dw_die_ref die)
20893 unsigned ix = VEC_length (dw_attr_node, die->die_attr);
20894 dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
20896 gcc_assert (linkage.dw_attr == DW_AT_MIPS_linkage_name);
20898 while (--ix > 0)
20900 dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
20902 if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
20903 break;
20906 if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
20908 VEC_pop (dw_attr_node, die->die_attr);
20909 VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
20913 /* Helper function for resolve_addr, attempt to resolve
20914 one CONST_STRING, return non-zero if not successful. Similarly verify that
20915 SYMBOL_REFs refer to variables emitted in the current CU. */
20917 static int
20918 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
20920 rtx rtl = *addr;
20922 if (GET_CODE (rtl) == CONST_STRING)
20924 size_t len = strlen (XSTR (rtl, 0)) + 1;
20925 tree t = build_string (len, XSTR (rtl, 0));
20926 tree tlen = build_int_cst (NULL_TREE, len - 1);
20927 TREE_TYPE (t)
20928 = build_array_type (char_type_node, build_index_type (tlen));
20929 rtl = lookup_constant_def (t);
20930 if (!rtl || !MEM_P (rtl))
20931 return 1;
20932 rtl = XEXP (rtl, 0);
20933 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
20934 *addr = rtl;
20935 return 0;
20938 if (GET_CODE (rtl) == SYMBOL_REF
20939 && SYMBOL_REF_DECL (rtl)
20940 && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
20941 && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
20942 return 1;
20944 if (GET_CODE (rtl) == CONST
20945 && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
20946 return 1;
20948 return 0;
20951 /* Helper function for resolve_addr, handle one location
20952 expression, return false if at least one CONST_STRING or SYMBOL_REF in
20953 the location list couldn't be resolved. */
20955 static bool
20956 resolve_addr_in_expr (dw_loc_descr_ref loc)
20958 for (; loc; loc = loc->dw_loc_next)
20959 if ((loc->dw_loc_opc == DW_OP_addr
20960 && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
20961 || (loc->dw_loc_opc == DW_OP_implicit_value
20962 && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
20963 && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
20964 return false;
20965 return true;
20968 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
20969 an address in .rodata section if the string literal is emitted there,
20970 or remove the containing location list or replace DW_AT_const_value
20971 with DW_AT_location and empty location expression, if it isn't found
20972 in .rodata. Similarly for SYMBOL_REFs, keep only those that refer
20973 to something that has been emitted in the current CU. */
20975 static void
20976 resolve_addr (dw_die_ref die)
20978 dw_die_ref c;
20979 dw_attr_ref a;
20980 dw_loc_list_ref curr;
20981 unsigned ix;
20983 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20984 switch (AT_class (a))
20986 case dw_val_class_loc_list:
20987 for (curr = AT_loc_list (a); curr != NULL; curr = curr->dw_loc_next)
20988 if (!resolve_addr_in_expr (curr->expr))
20989 curr->expr = NULL;
20990 break;
20991 case dw_val_class_loc:
20992 if (!resolve_addr_in_expr (AT_loc (a)))
20993 a->dw_attr_val.v.val_loc = NULL;
20994 break;
20995 case dw_val_class_addr:
20996 if (a->dw_attr == DW_AT_const_value
20997 && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
20999 a->dw_attr = DW_AT_location;
21000 a->dw_attr_val.val_class = dw_val_class_loc;
21001 a->dw_attr_val.v.val_loc = NULL;
21003 break;
21004 default:
21005 break;
21008 FOR_EACH_CHILD (die, c, resolve_addr (c));
21011 /* Output stuff that dwarf requires at the end of every file,
21012 and generate the DWARF-2 debugging info. */
21014 static void
21015 dwarf2out_finish (const char *filename)
21017 limbo_die_node *node, *next_node;
21018 comdat_type_node *ctnode;
21019 htab_t comdat_type_table;
21020 dw_die_ref die = 0;
21021 unsigned int i;
21023 gen_remaining_tmpl_value_param_die_attribute ();
21025 /* Add the name for the main input file now. We delayed this from
21026 dwarf2out_init to avoid complications with PCH. */
21027 add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21028 if (!IS_ABSOLUTE_PATH (filename))
21029 add_comp_dir_attribute (comp_unit_die);
21030 else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21032 bool p = false;
21033 htab_traverse (file_table, file_table_relative_p, &p);
21034 if (p)
21035 add_comp_dir_attribute (comp_unit_die);
21038 for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21040 add_location_or_const_value_attribute (
21041 VEC_index (deferred_locations, deferred_locations_list, i)->die,
21042 VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21043 DW_AT_location);
21046 /* Traverse the limbo die list, and add parent/child links. The only
21047 dies without parents that should be here are concrete instances of
21048 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
21049 For concrete instances, we can get the parent die from the abstract
21050 instance. */
21051 for (node = limbo_die_list; node; node = next_node)
21053 next_node = node->next;
21054 die = node->die;
21056 if (die->die_parent == NULL)
21058 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21060 if (origin)
21061 add_child_die (origin->die_parent, die);
21062 else if (die == comp_unit_die)
21064 else if (errorcount > 0 || sorrycount > 0)
21065 /* It's OK to be confused by errors in the input. */
21066 add_child_die (comp_unit_die, die);
21067 else
21069 /* In certain situations, the lexical block containing a
21070 nested function can be optimized away, which results
21071 in the nested function die being orphaned. Likewise
21072 with the return type of that nested function. Force
21073 this to be a child of the containing function.
21075 It may happen that even the containing function got fully
21076 inlined and optimized out. In that case we are lost and
21077 assign the empty child. This should not be big issue as
21078 the function is likely unreachable too. */
21079 tree context = NULL_TREE;
21081 gcc_assert (node->created_for);
21083 if (DECL_P (node->created_for))
21084 context = DECL_CONTEXT (node->created_for);
21085 else if (TYPE_P (node->created_for))
21086 context = TYPE_CONTEXT (node->created_for);
21088 gcc_assert (context
21089 && (TREE_CODE (context) == FUNCTION_DECL
21090 || TREE_CODE (context) == NAMESPACE_DECL));
21092 origin = lookup_decl_die (context);
21093 if (origin)
21094 add_child_die (origin, die);
21095 else
21096 add_child_die (comp_unit_die, die);
21101 limbo_die_list = NULL;
21103 resolve_addr (comp_unit_die);
21105 for (node = deferred_asm_name; node; node = node->next)
21107 tree decl = node->created_for;
21108 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21110 add_AT_string (node->die, DW_AT_MIPS_linkage_name,
21111 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21112 move_linkage_attr (node->die);
21116 deferred_asm_name = NULL;
21118 /* Walk through the list of incomplete types again, trying once more to
21119 emit full debugging info for them. */
21120 retry_incomplete_types ();
21122 if (flag_eliminate_unused_debug_types)
21123 prune_unused_types ();
21125 /* Generate separate CUs for each of the include files we've seen.
21126 They will go into limbo_die_list. */
21127 if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21128 break_out_includes (comp_unit_die);
21130 /* Generate separate COMDAT sections for type DIEs. */
21131 if (dwarf_version >= 4)
21133 break_out_comdat_types (comp_unit_die);
21135 /* Each new type_unit DIE was added to the limbo die list when created.
21136 Since these have all been added to comdat_type_list, clear the
21137 limbo die list. */
21138 limbo_die_list = NULL;
21140 /* For each new comdat type unit, copy declarations for incomplete
21141 types to make the new unit self-contained (i.e., no direct
21142 references to the main compile unit). */
21143 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21144 copy_decls_for_unworthy_types (ctnode->root_die);
21145 copy_decls_for_unworthy_types (comp_unit_die);
21147 /* In the process of copying declarations from one unit to another,
21148 we may have left some declarations behind that are no longer
21149 referenced. Prune them. */
21150 prune_unused_types ();
21153 /* Traverse the DIE's and add add sibling attributes to those DIE's
21154 that have children. */
21155 add_sibling_attributes (comp_unit_die);
21156 for (node = limbo_die_list; node; node = node->next)
21157 add_sibling_attributes (node->die);
21158 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21159 add_sibling_attributes (ctnode->root_die);
21161 /* Output a terminator label for the .text section. */
21162 switch_to_section (text_section);
21163 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21164 if (flag_reorder_blocks_and_partition)
21166 switch_to_section (unlikely_text_section ());
21167 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21170 /* We can only use the low/high_pc attributes if all of the code was
21171 in .text. */
21172 if (!have_multiple_function_sections
21173 || !(dwarf_version >= 3 || !dwarf_strict))
21175 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21176 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21179 else
21181 unsigned fde_idx = 0;
21183 /* We need to give .debug_loc and .debug_ranges an appropriate
21184 "base address". Use zero so that these addresses become
21185 absolute. Historically, we've emitted the unexpected
21186 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21187 Emit both to give time for other tools to adapt. */
21188 add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21189 add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21191 add_AT_range_list (comp_unit_die, DW_AT_ranges,
21192 add_ranges_by_labels (text_section_label,
21193 text_end_label));
21194 if (flag_reorder_blocks_and_partition)
21195 add_ranges_by_labels (cold_text_section_label,
21196 cold_end_label);
21198 for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21200 dw_fde_ref fde = &fde_table[fde_idx];
21202 if (fde->dw_fde_switched_sections)
21204 if (!fde->in_std_section)
21205 add_ranges_by_labels (fde->dw_fde_hot_section_label,
21206 fde->dw_fde_hot_section_end_label);
21207 if (!fde->cold_in_std_section)
21208 add_ranges_by_labels (fde->dw_fde_unlikely_section_label,
21209 fde->dw_fde_unlikely_section_end_label);
21211 else if (!fde->in_std_section)
21212 add_ranges_by_labels (fde->dw_fde_begin,
21213 fde->dw_fde_end);
21216 add_ranges (NULL);
21219 /* Output location list section if necessary. */
21220 if (have_location_lists)
21222 /* Output the location lists info. */
21223 switch_to_section (debug_loc_section);
21224 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21225 DEBUG_LOC_SECTION_LABEL, 0);
21226 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21227 output_location_lists (die);
21230 if (debug_info_level >= DINFO_LEVEL_NORMAL)
21231 add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21232 debug_line_section_label);
21234 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21235 add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21237 /* Output all of the compilation units. We put the main one last so that
21238 the offsets are available to output_pubnames. */
21239 for (node = limbo_die_list; node; node = node->next)
21240 output_comp_unit (node->die, 0);
21242 comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21243 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21245 void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21247 /* Don't output duplicate types. */
21248 if (*slot != HTAB_EMPTY_ENTRY)
21249 continue;
21251 /* Add a pointer to the line table for the main compilation unit
21252 so that the debugger can make sense of DW_AT_decl_file
21253 attributes. */
21254 if (debug_info_level >= DINFO_LEVEL_NORMAL)
21255 add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21256 debug_line_section_label);
21258 output_comdat_type_unit (ctnode);
21259 *slot = ctnode;
21261 htab_delete (comdat_type_table);
21263 /* Output the main compilation unit if non-empty or if .debug_macinfo
21264 has been emitted. */
21265 output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21267 /* Output the abbreviation table. */
21268 switch_to_section (debug_abbrev_section);
21269 output_abbrev_section ();
21271 /* Output public names table if necessary. */
21272 if (!VEC_empty (pubname_entry, pubname_table))
21274 switch_to_section (debug_pubnames_section);
21275 output_pubnames (pubname_table);
21278 /* Output public types table if necessary. */
21279 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21280 It shouldn't hurt to emit it always, since pure DWARF2 consumers
21281 simply won't look for the section. */
21282 if (!VEC_empty (pubname_entry, pubtype_table))
21284 switch_to_section (debug_pubtypes_section);
21285 output_pubnames (pubtype_table);
21288 /* Output direct and virtual call tables if necessary. */
21289 if (!VEC_empty (dcall_entry, dcall_table))
21291 switch_to_section (debug_dcall_section);
21292 output_dcall_table ();
21294 if (!VEC_empty (vcall_entry, vcall_table))
21296 switch_to_section (debug_vcall_section);
21297 output_vcall_table ();
21300 /* Output the address range information. We only put functions in the arange
21301 table, so don't write it out if we don't have any. */
21302 if (fde_table_in_use)
21304 switch_to_section (debug_aranges_section);
21305 output_aranges ();
21308 /* Output ranges section if necessary. */
21309 if (ranges_table_in_use)
21311 switch_to_section (debug_ranges_section);
21312 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21313 output_ranges ();
21316 /* Output the source line correspondence table. We must do this
21317 even if there is no line information. Otherwise, on an empty
21318 translation unit, we will generate a present, but empty,
21319 .debug_info section. IRIX 6.5 `nm' will then complain when
21320 examining the file. This is done late so that any filenames
21321 used by the debug_info section are marked as 'used'. */
21322 if (! DWARF2_ASM_LINE_DEBUG_INFO)
21324 switch_to_section (debug_line_section);
21325 output_line_info ();
21328 /* Have to end the macro section. */
21329 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21331 switch_to_section (debug_macinfo_section);
21332 dw2_asm_output_data (1, 0, "End compilation unit");
21335 /* If we emitted any DW_FORM_strp form attribute, output the string
21336 table too. */
21337 if (debug_str_hash)
21338 htab_traverse (debug_str_hash, output_indirect_string, NULL);
21340 #else
21342 /* This should never be used, but its address is needed for comparisons. */
21343 const struct gcc_debug_hooks dwarf2_debug_hooks =
21345 0, /* init */
21346 0, /* finish */
21347 0, /* assembly_start */
21348 0, /* define */
21349 0, /* undef */
21350 0, /* start_source_file */
21351 0, /* end_source_file */
21352 0, /* begin_block */
21353 0, /* end_block */
21354 0, /* ignore_block */
21355 0, /* source_line */
21356 0, /* begin_prologue */
21357 0, /* end_prologue */
21358 0, /* end_epilogue */
21359 0, /* begin_function */
21360 0, /* end_function */
21361 0, /* function_decl */
21362 0, /* global_decl */
21363 0, /* type_decl */
21364 0, /* imported_module_or_decl */
21365 0, /* deferred_inline_function */
21366 0, /* outlining_inline_function */
21367 0, /* label */
21368 0, /* handle_pch */
21369 0, /* var_location */
21370 0, /* switch_text_section */
21371 0, /* direct_call */
21372 0, /* virtual_call_token */
21373 0, /* copy_call_info */
21374 0, /* virtual_call */
21375 0, /* set_name */
21376 0 /* start_end_main_source_file */
21379 #endif /* DWARF2_DEBUGGING_INFO */
21381 #include "gt-dwarf2out.h"