GCC Middle and Back End API Reference
dwarf2out.h
Go to the documentation of this file.
1/* dwarf2out.h - Various declarations for functions found in dwarf2out.cc
2 Copyright (C) 1998-2025 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3. If not see
18<http://www.gnu.org/licenses/>. */
19
20#ifndef GCC_DWARF2OUT_H
21#define GCC_DWARF2OUT_H 1
22
23#include "dwarf2.h" /* ??? Remove this once only used by dwarf2foo.c. */
24
25typedef struct die_struct *dw_die_ref;
26typedef const struct die_struct *const_dw_die_ref;
27
28typedef struct dw_val_node *dw_val_ref;
29typedef struct dw_cfi_node *dw_cfi_ref;
34
35
36/* Call frames are described using a sequence of Call Frame
37 Information instructions. The register number, offset
38 and address fields are provided as possible operands;
39 their use is selected by the opcode field. */
48
49typedef union GTY(()) {
50 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
51 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
52 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
53 struct dw_loc_descr_node * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
54 struct dw_cfa_location * GTY ((tag ("dw_cfi_oprnd_cfa_loc")))
58struct GTY(()) dw_cfi_node {
59 enum dwarf_call_frame_info dw_cfi_opc;
60 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
62 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
64};
65
67typedef vec<dw_cfi_ref, va_gc> *cfi_vec;
68
69typedef struct dw_fde_node *dw_fde_ref;
70
71/* All call frame descriptions (FDE's) in the GCC generated DWARF
72 refer to a single Common Information Entry (CIE), defined at
73 the beginning of the .debug_frame section. This use of a single
74 CIE obviates the need to keep track of multiple CIE's
75 in the DWARF generation routines below. */
77struct GTY(()) dw_fde_node {
79 const char *dw_fde_begin;
81 const char *dw_fde_end;
85 const char *dw_fde_second_end;
87 int dw_fde_switch_cfi_index; /* Last CFI before switching sections. */
88 HOST_WIDE_INT stack_realignment;
89
90 unsigned funcdef_number;
91 unsigned fde_index;
92
93 /* Dynamic realign argument pointer register. */
94 unsigned int drap_reg;
95 /* Virtual dynamic realign argument pointer register. */
96 unsigned int vdrap_reg;
97 /* These 3 flags are copied from rtl_data in function.h. */
98 unsigned all_throwers_are_sibcalls : 1;
99 unsigned uses_eh_lsda : 1;
100 unsigned nothrow : 1;
101 /* Whether we did stack realign in this call frame. */
102 unsigned stack_realign : 1;
103 /* Whether dynamic realign argument pointer register has been saved. */
104 unsigned drap_reg_saved: 1;
105 /* True iff dw_fde_begin label is in text_section or cold_text_section. */
106 unsigned in_std_section : 1;
107 /* True iff dw_fde_second_begin label is in text_section or
108 cold_text_section. */
109 unsigned second_in_std_section : 1;
110 /* True if Rule 18 described in dwarf2cfi.cc is in action, i.e. for dynamic
111 stack realignment in between pushing of hard frame pointer to stack
112 and setting hard frame pointer to stack pointer. The register save for
113 hard frame pointer register should be emitted only on the latter
114 instruction. */
115 unsigned rule18 : 1;
116 /* True if this function is to be ignored by debugger. */
117 unsigned ignored_debug : 1;
118};
119
120
121/* This represents a register, in DWARF_FRAME_REGNUM space, for use in CFA
122 definitions and expressions.
123 Most architectures only need a single register number, but some (amdgcn)
124 have pointers that span multiple registers. DWARF permits arbitrary
125 register sets but existing use-cases only require contiguous register
126 sets, as represented here. */
127struct GTY(()) cfa_reg {
128 unsigned int reg;
129 unsigned short span;
130 unsigned short span_width; /* A.K.A. register mode size. */
131
132 cfa_reg& set_by_dwreg (unsigned int r)
133 {
134 reg = r;
135 span = 1;
136 span_width = 0; /* Unknown size (permitted when span == 1). */
137 return *this;
138 }
139
140 bool operator== (const cfa_reg &other) const
141 {
142 return (reg == other.reg && span == other.span
143 && (span_width == other.span_width
144 || (span == 1
145 && (span_width == 0 || other.span_width == 0))));
146 }
147
148 bool operator!= (const cfa_reg &other) const
149 {
150 return !(*this == other);
151 }
152};
153
154/* This is how we define the location of the CFA. We use to handle it
155 as REG + OFFSET all the time, but now it can be more complex.
156 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
157 Instead of passing around REG and OFFSET, we pass a copy
158 of this structure. */
159struct GTY(()) dw_cfa_location {
162 /* REG is in DWARF_FRAME_REGNUM space, *not* normal REGNO space. */
163 struct cfa_reg reg;
164 BOOL_BITFIELD indirect : 1; /* 1 if CFA is accessed via a dereference. */
165 BOOL_BITFIELD in_use : 1; /* 1 if a saved cfa is stored here. */
166};
167
168
169/* Each DIE may have a series of attribute/value pairs. Values
206};
208/* Describe a floating point constant value, or a vector constant value. */
210struct GTY(()) dw_vec_const {
211 void * GTY((atomic)) array;
212 unsigned length;
213 unsigned elt_size;
214};
215
216/* Describe a single value that a discriminant can match.
217
218 Discriminants (in the "record variant part" meaning) are scalars.
219 dw_discr_list_ref and dw_discr_value are a mean to describe a set of
220 discriminant values that are matched by a particular variant.
221
222 Discriminants can be signed or unsigned scalars, and can be discriminants
223 values. Both have to be consistent, though. */
224
225struct GTY(()) dw_discr_value {
226 int pos; /* Whether the discriminant value is positive (unsigned). */
227 union
228 {
229 HOST_WIDE_INT GTY ((tag ("0"))) sval;
230 unsigned HOST_WIDE_INT GTY ((tag ("1"))) uval;
231 }
232 GTY ((desc ("%1.pos"))) v;
233};
235struct addr_table_entry;
236
237typedef unsigned int var_loc_view;
238
239/* Location lists are ranges + location descriptions for that range,
240 so you can track variables that are in different places over
241 their entire life. */
242typedef struct GTY(()) dw_loc_list_struct {
244 const char *begin; /* Label and addr_entry for start of range */
246 const char *end; /* Label for end of range */
248 char *ll_symbol; /* Label for beginning of location list.
249 Only on head of list. */
250 char *vl_symbol; /* Label for beginning of view list. Ditto. */
251 const char *section; /* Section this loclist is relative to */
254 hashval_t hash;
255 /* True if all addresses in this and subsequent lists are known to be
256 resolved. */
257 bool resolved_addr;
258 /* True if this list has been replaced by dw_loc_next. */
260 /* True if it has been emitted into .debug_loc* / .debug_loclists*
261 section. */
262 unsigned char emitted : 1;
263 /* True if hash field is index rather than hash value. */
264 unsigned char num_assigned : 1;
265 /* True if .debug_loclists.dwo offset has been emitted for it already. */
266 unsigned char offset_emitted : 1;
267 /* True if note_variable_value_in_expr has been called on it. */
268 unsigned char noted_variable_value : 1;
269 /* True if the range should be emitted even if begin and end
270 are the same. */
271 bool force;
273
274/* The dw_val_node describes an attribute's value, as it is
275 represented internally. */
276
277struct GTY(()) dw_val_node {
279 /* On 64-bit host, there are 4 bytes of padding between val_class
280 and val_entry. Reuse the padding for other content of
281 dw_loc_descr_node and dw_attr_struct. */
285 {
286 ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc_v : 8;
287 /* Used to distinguish DW_OP_addr with a direct symbol relocation
288 from DW_OP_addr with a dtp-relative symbol relocation. */
289 unsigned int dw_loc_dtprel_v : 1;
290 /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff.
291 it targets a DWARF prodecure argument. In this case, it needs to be
292 relocated according to the current frame offset. */
293 unsigned int dw_loc_frame_offset_rel_v : 1;
294 } u1;
295 int u2;
296 enum dwarf_attribute u3;
297 } GTY((skip)) u;
301 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
302 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
303 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
304 dw_die_ref GTY ((tag ("dw_val_class_view_list"))) val_view_list;
305 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
306 HOST_WIDE_INT GTY ((default)) val_int;
307 unsigned HOST_WIDE_INT
308 GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
309 double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
310 dw_wide_int_ptr GTY ((tag ("dw_val_class_wide_int"))) val_wide;
311 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
315 int external;
316 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
317 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
318 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
319 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
320 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
321 struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
323 GTY ((tag ("dw_val_class_file_implicit"))) val_file_implicit;
324 unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
325 tree GTY ((tag ("dw_val_class_decl_ref"))) val_decl_ref;
328 char * lbl1;
329 char * lbl2;
330 } GTY ((tag ("dw_val_class_vms_delta"))) val_vms_delta;
331 dw_discr_value GTY ((tag ("dw_val_class_discr_value"))) val_discr_value;
332 dw_discr_list_ref GTY ((tag ("dw_val_class_discr_list"))) val_discr_list;
333 char * GTY ((tag ("dw_val_class_symview"))) val_symbolic_view;
334 }
335 GTY ((desc ("%1.val_class"))) v;
336};
337
338/* Locations in memory are described using a sequence of stack machine
339 operations. */
341struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node {
342 dw_loc_descr_ref dw_loc_next;
343#define dw_loc_opc dw_loc_oprnd1.u.u1.dw_loc_opc_v
344 /* Used to distinguish DW_OP_addr with a direct symbol relocation
345 from DW_OP_addr with a dtp-relative symbol relocation. */
346#define dw_loc_dtprel dw_loc_oprnd1.u.u1.dw_loc_dtprel_v
347 /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff.
348 it targets a DWARF prodecure argument. In this case, it needs to be
349 relocated according to the current frame offset. */
350#define dw_loc_frame_offset_rel dw_loc_oprnd1.u.u1.dw_loc_frame_offset_rel_v
351#define dw_loc_addr dw_loc_oprnd2.u.u2
354};
355
356/* A variant (inside a record variant part) is selected when the corresponding
357 discriminant matches its set of values (see the comment for dw_discr_value).
358 The following datastructure holds such matching information. */
359
362
365 /* This node represents only the value in dw_discr_lower_bound when it's
366 zero. It represents the range between the two fields (bounds included)
367 otherwise. */
368 int dw_discr_range;
372 unsigned int precision;
373 unsigned int len;
374 HOST_WIDE_INT val[1];
376 unsigned int get_precision () const { return precision; }
377 unsigned int get_len () const { return len; }
378 const HOST_WIDE_INT *get_val () const { return val; }
379 inline HOST_WIDE_INT elt (unsigned int) const;
380 inline bool operator == (const dw_wide_int &) const;
382
383inline HOST_WIDE_INT
384dw_wide_int::elt (unsigned int i) const
385{
386 if (i < len)
387 return val[i];
388 wide_int_ref ref = wi::storage_ref (val, len, precision);
389 return wi::sign_mask (ref);
391
392inline bool
394{
395 wide_int_ref ref1 = wi::storage_ref (val, len, precision);
397 return ref1 == ref2;
398}
399
400/* Interface from dwarf2out.cc to dwarf2cfi.cc. */
401extern struct dw_loc_descr_node *build_cfa_loc
402 (dw_cfa_location *, poly_int64);
403extern struct dw_loc_descr_node *build_cfa_aligned_loc
404 (dw_cfa_location *, poly_int64, HOST_WIDE_INT);
405extern struct dw_loc_descr_node *build_span_loc (struct cfa_reg);
406extern struct dw_loc_descr_node *mem_loc_descriptor
407 (rtx, machine_mode mode, machine_mode mem_mode,
408 enum var_init_status);
411
412extern unsigned long size_of_locs (dw_loc_descr_ref);
413extern void output_loc_sequence (dw_loc_descr_ref, int);
415
416/* Interface from dwarf2cfi.cc to dwarf2out.cc. */
417extern void lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc,
418 dw_cfa_location *remember);
419extern bool cfa_equal_p (const dw_cfa_location *, const dw_cfa_location *);
420
421extern void output_cfi (dw_cfi_ref, dw_fde_ref, int);
422
423extern GTY(()) cfi_vec cie_cfi_vec;
424
425/* Interface from dwarf2*.c to the rest of the compiler. */
426extern enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc (dwarf_call_frame_info cfi);
427extern enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc (dwarf_call_frame_info cfi);
428
429extern void output_cfi_directive (FILE *f, dw_cfi_ref cfi);
430
431extern void dwarf2out_emit_cfi (dw_cfi_ref cfi);
433extern void debug_dwarf (void);
434struct die_struct;
435extern void debug_dwarf_die (struct die_struct *);
437extern void debug (die_struct &ref);
438extern void debug (die_struct *ptr);
439extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *));
440#ifdef VMS_DEBUGGING_INFO
441extern void dwarf2out_vms_debug_main_pointer (void);
442#endif
449};
451#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN 16
463 tree rank;
464 bool stride_in_bits;
465 struct array_descr_dimen
466 {
467 /* GCC uses sizetype for array indices, so lower_bound and upper_bound
468 will likely be "sizetype" values. However, bounds may have another
469 type in the original source code. */
474 /* Only Fortran uses more than one dimension for array types. For other
475 languages, the stride can be rather specified for the whole array. */
476 tree stride;
485};
486
489 /* The scale factor is the value one has to multiply the actual data with
490 to get the fixed point value. We support three ways to encode it. */
492 union
493 {
494 /* For a binary scale factor, the scale factor is 2 ** binary. */
495 int binary;
496 /* For a decimal scale factor, the scale factor is 10 ** decimal. */
498 /* For an arbitrary scale factor, the scale factor is the ratio
499 numerator / denominator. */
500 struct { tree numerator; tree denominator; } arbitrary;
501 } scale_factor;
502};
503
504void dwarf2cfi_cc_finalize (void);
505void dwarf2out_cc_finalize (void);
506
507/* Some DWARF internals are exposed for the needs of DWARF-based debug
508 formats. */
509
510/* Each DIE attribute has a field specifying the attribute kind,
511 a link to the next attribute in the chain, and an attribute value.
512 Attributes are typically linked below the DIE they modify. */
514typedef struct GTY(()) dw_attr_struct {
515#define dw_attr dw_attr_val.u.u3
516 dw_val_node dw_attr_val;
517}
519
520extern dw_attr_node *get_AT (dw_die_ref, enum dwarf_attribute);
521extern HOST_WIDE_INT AT_int (dw_attr_node *);
522extern unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *a);
524extern dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
525extern const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
526extern enum dw_val_class AT_class (dw_attr_node *);
527extern unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *);
528extern unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
529extern int get_AT_flag (dw_die_ref, enum dwarf_attribute);
530
531extern void add_name_attribute (dw_die_ref, const char *);
532
533extern dw_die_ref new_die_raw (enum dwarf_tag);
534extern dw_die_ref base_type_die (tree, bool);
535
538
542extern enum dwarf_tag dw_get_die_tag (dw_die_ref);
544/* Data about a single source file. */
545struct GTY((for_user)) dwarf_file_data {
546 const char * key;
547 const char * filename;
548 int emitted_number;
549};
550
552 enum dwarf_attribute);
553
554#endif /* GCC_DWARF2OUT_H */
Definition wide-int.h:707
bool debug
Definition collect-utils.cc:34
struct rtx_def * rtx
Definition coretypes.h:57
struct dw_cfi_node * dw_cfi_ref
Definition coretypes.h:146
var_init_status
Definition coretypes.h:313
#define GTY(x)
Definition coretypes.h:41
union tree_node * tree
Definition coretypes.h:97
bool operator==(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:131
bool operator!=(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:139
void dwarf2cfi_cc_finalize()
Definition dwarf2cfi.cc:3826
void output_cfi_directive(FILE *f, dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3545
void dwarf2out_emit_cfi(dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3660
void lookup_cfa_1(dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
Definition dwarf2cfi.cc:732
bool cfa_equal_p(const dw_cfa_location *loc1, const dw_cfa_location *loc2)
Definition dwarf2cfi.cc:774
cfi_vec cie_cfi_vec
Definition dwarf2cfi.cc:200
void output_cfi(dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
Definition dwarf2cfi.cc:3406
struct dwarf_file_data * get_AT_file(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5526
dw_die_ref dw_get_die_parent(dw_die_ref die)
Definition dwarf2out.cc:5458
dw_attr_node * get_AT(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5433
DEBUG_FUNCTION void debug_dwarf_die(dw_die_ref die)
Definition dwarf2out.cc:6892
const char * get_AT_string(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5488
void dwarf2out_cc_finalize(void)
Definition dwarf2out.cc:33483
dw_fde_ref dwarf2out_alloc_current_fde(void)
Definition dwarf2out.cc:1046
void output_loc_sequence(dw_loc_descr_ref loc, int for_eh_or_skip)
Definition dwarf2out.cc:2538
struct dw_loc_descr_node * build_cfa_loc(dw_cfa_location *cfa, poly_int64 offset)
Definition dwarf2out.cc:2802
dw_die_ref dw_get_die_child(dw_die_ref die)
Definition dwarf2out.cc:5219
dw_die_ref get_AT_ref(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5518
void output_loc_sequence_raw(dw_loc_descr_ref loc)
Definition dwarf2out.cc:2728
dw_loc_descr_ref AT_loc(dw_attr_node *a)
Definition dwarf2out.cc:4968
DEBUG_FUNCTION void debug_dwarf(void)
Definition dwarf2out.cc:6917
dw_die_ref lookup_decl_die(tree decl)
Definition dwarf2out.cc:5968
DEBUG_FUNCTION void debug_dwarf_loc_descr(dw_loc_descr_ref loc)
Definition dwarf2out.cc:6884
void dwarf2out_set_demangle_name_func(const char *(*func)(const char *))
Definition dwarf2out.cc:4283
int get_AT_flag(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5499
struct dw_loc_descr_node * build_span_loc(struct cfa_reg reg)
Definition dwarf2out.cc:2774
struct dw_loc_descr_node * build_cfa_aligned_loc(dw_cfa_location *cfa, poly_int64 offset, HOST_WIDE_INT alignment)
Definition dwarf2out.cc:2835
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc(dwarf_call_frame_info cfi)
Definition dwarf2out.cc:572
enum dwarf_tag dw_get_die_tag(dw_die_ref die)
Definition dwarf2out.cc:5211
HOST_WIDE_INT AT_int(dw_attr_node *a)
Definition dwarf2out.cc:4546
dw_die_ref lookup_type_die(tree type)
Definition dwarf2out.cc:5888
unsigned HOST_WIDE_INT AT_unsigned(dw_attr_node *a)
Definition dwarf2out.cc:4569
dw_die_ref base_type_die(tree type, bool reverse)
Definition dwarf2out.cc:13227
bool loc_descr_equal_p(dw_loc_descr_ref a, dw_loc_descr_ref b)
Definition dwarf2out.cc:1549
void add_name_attribute(dw_die_ref die, const char *name_string)
Definition dwarf2out.cc:21360
dw_die_ref new_die_raw(enum dwarf_tag tag_value)
Definition dwarf2out.cc:5822
unsigned long size_of_locs(dw_loc_descr_ref loc)
Definition dwarf2out.cc:2035
unsigned get_AT_unsigned(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5510
dw_loc_descr_ref mem_loc_descriptor(rtx rtl, machine_mode mode, machine_mode mem_mode, enum var_init_status initialized)
Definition dwarf2out.cc:16007
enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc(dwarf_call_frame_info cfi)
Definition dwarf2out.cc:519
enum dw_val_class AT_class(dw_attr_node *a)
Definition dwarf2out.cc:4490
dw_die_ref dw_get_die_sib(dw_die_ref die)
Definition dwarf2out.cc:5227
unsigned get_AT_unsigned(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5510
struct die_struct * dw_die_ref
Definition dwarf2out.h:25
struct dw_loc_descr_node * mem_loc_descriptor(rtx, machine_mode mode, machine_mode mem_mode, enum var_init_status)
Definition dwarf2out.cc:16007
void output_cfi_directive(FILE *f, dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3545
void dwarf2out_emit_cfi(dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3660
vec< dw_cfi_ref, va_gc > * cfi_vec
Definition dwarf2out.h:64
dw_die_ref dw_get_die_parent(dw_die_ref)
Definition dwarf2out.cc:5458
unsigned int var_loc_view
Definition dwarf2out.h:234
struct dw_loc_descr_node * build_span_loc(struct cfa_reg)
Definition dwarf2out.cc:2774
void dwarf2out_set_demangle_name_func(const char *(*)(const char *))
dw_die_ref lookup_type_die(tree)
Definition dwarf2out.cc:5888
struct dw_discr_list_node * dw_discr_list_ref
Definition dwarf2out.h:32
struct dw_wide_int * dw_wide_int_ptr
Definition dwarf2out.h:33
void dwarf2out_cc_finalize(void)
Definition dwarf2out.cc:33483
HOST_WIDE_INT AT_int(dw_attr_node *)
Definition dwarf2out.cc:4546
struct dw_loc_descr_node * build_cfa_aligned_loc(dw_cfa_location *, poly_int64, HOST_WIDE_INT)
Definition dwarf2out.cc:2835
array_descr_ordering
Definition dwarf2out.h:442
@ array_descr_ordering_column_major
Definition dwarf2out.h:445
@ array_descr_ordering_row_major
Definition dwarf2out.h:444
@ array_descr_ordering_default
Definition dwarf2out.h:443
dw_die_ref new_die_raw(enum dwarf_tag)
Definition dwarf2out.cc:5822
struct dw_val_node * dw_val_ref
Definition dwarf2out.h:28
struct dw_loc_list_struct dw_loc_list_node
dw_die_ref get_AT_ref(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5518
void dwarf2cfi_cc_finalize(void)
Definition dwarf2cfi.cc:3826
dw_fde_ref dwarf2out_alloc_current_fde(void)
Definition dwarf2out.cc:1046
const char * get_AT_string(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5488
enum dw_val_class AT_class(dw_attr_node *)
Definition dwarf2out.cc:4490
void output_loc_sequence(dw_loc_descr_ref, int)
Definition dwarf2out.cc:2538
void lookup_cfa_1(dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
Definition dwarf2cfi.cc:732
void debug_dwarf_die(struct die_struct *)
fixed_point_scale_factor
Definition dwarf2out.h:478
@ fixed_point_scale_factor_decimal
Definition dwarf2out.h:480
@ fixed_point_scale_factor_binary
Definition dwarf2out.h:479
@ fixed_point_scale_factor_arbitrary
Definition dwarf2out.h:481
void debug_dwarf(void)
Definition dwarf2out.cc:6917
dw_val_class
Definition dwarf2out.h:171
@ dw_val_class_symview
Definition dwarf2out.h:202
@ dw_val_class_decl_ref
Definition dwarf2out.h:193
@ dw_val_class_str
Definition dwarf2out.h:188
@ dw_val_class_fde_ref
Definition dwarf2out.h:185
@ dw_val_class_vms_delta
Definition dwarf2out.h:194
@ dw_val_class_vec
Definition dwarf2out.h:182
@ dw_val_class_loc_list
Definition dwarf2out.h:176
@ dw_val_class_const_double
Definition dwarf2out.h:180
@ dw_val_class_lbl_id
Definition dwarf2out.h:186
@ dw_val_class_view_list
Definition dwarf2out.h:201
@ dw_val_class_offset
Definition dwarf2out.h:174
@ dw_val_class_discr_list
Definition dwarf2out.h:197
@ dw_val_class_loclistsptr
Definition dwarf2out.h:190
@ dw_val_class_wide_int
Definition dwarf2out.h:181
@ dw_val_class_data8
Definition dwarf2out.h:192
@ dw_val_class_lineptr
Definition dwarf2out.h:187
@ dw_val_class_unsigned_const_implicit
Definition dwarf2out.h:199
@ dw_val_class_discr_value
Definition dwarf2out.h:196
@ dw_val_class_high_pc
Definition dwarf2out.h:195
@ dw_val_class_unsigned_const
Definition dwarf2out.h:179
@ dw_val_class_macptr
Definition dwarf2out.h:189
@ dw_val_class_die_ref
Definition dwarf2out.h:184
@ dw_val_class_file_implicit
Definition dwarf2out.h:200
@ dw_val_class_loc
Definition dwarf2out.h:175
@ dw_val_class_range_list
Definition dwarf2out.h:177
@ dw_val_class_flag
Definition dwarf2out.h:183
@ dw_val_class_addr
Definition dwarf2out.h:173
@ dw_val_class_file
Definition dwarf2out.h:191
@ dw_val_class_const
Definition dwarf2out.h:178
@ dw_val_class_const_implicit
Definition dwarf2out.h:198
@ dw_val_class_none
Definition dwarf2out.h:172
dw_die_ref dw_get_die_child(dw_die_ref)
Definition dwarf2out.cc:5219
dw_die_ref base_type_die(tree, bool)
Definition dwarf2out.cc:13227
#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN
Definition dwarf2out.h:448
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc(dwarf_call_frame_info cfi)
Definition dwarf2out.cc:572
enum dwarf_tag dw_get_die_tag(dw_die_ref)
Definition dwarf2out.cc:5211
struct dw_loc_descr_node * dw_loc_descr_ref
Definition dwarf2out.h:30
void output_cfi(dw_cfi_ref, dw_fde_ref, int)
Definition dwarf2cfi.cc:3406
void debug_dwarf_loc_descr(dw_loc_descr_ref)
Definition dwarf2out.cc:6884
bool cfa_equal_p(const dw_cfa_location *, const dw_cfa_location *)
Definition dwarf2cfi.cc:774
dw_die_ref lookup_decl_die(tree)
Definition dwarf2out.cc:5968
dw_loc_descr_ref AT_loc(dw_attr_node *)
Definition dwarf2out.cc:4968
dw_attr_node * get_AT(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5433
struct dw_attr_struct dw_attr_node
bool loc_descr_equal_p(dw_loc_descr_ref, dw_loc_descr_ref)
Definition dwarf2out.cc:1549
const struct die_struct * const_dw_die_ref
Definition dwarf2out.h:26
unsigned HOST_WIDE_INT AT_unsigned(dw_attr_node *a)
Definition dwarf2out.cc:4569
void add_name_attribute(dw_die_ref, const char *)
Definition dwarf2out.cc:21360
struct dwarf_file_data * get_AT_file(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5526
int get_AT_flag(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5499
dw_cfi_oprnd_type
Definition dwarf2out.h:40
@ dw_cfi_oprnd_loc
Definition dwarf2out.h:45
@ dw_cfi_oprnd_addr
Definition dwarf2out.h:44
@ dw_cfi_oprnd_cfa_loc
Definition dwarf2out.h:46
@ dw_cfi_oprnd_reg_num
Definition dwarf2out.h:42
@ dw_cfi_oprnd_offset
Definition dwarf2out.h:43
@ dw_cfi_oprnd_unused
Definition dwarf2out.h:41
dw_die_ref dw_get_die_sib(dw_die_ref)
Definition dwarf2out.cc:5227
struct dw_fde_node * dw_fde_ref
Definition dwarf2out.h:66
void output_loc_sequence_raw(dw_loc_descr_ref)
Definition dwarf2out.cc:2728
unsigned long size_of_locs(dw_loc_descr_ref)
Definition dwarf2out.cc:2035
enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc(dwarf_call_frame_info cfi)
Definition dwarf2out.cc:519
struct dw_loc_descr_node * build_cfa_loc(dw_cfa_location *, poly_int64)
Definition dwarf2out.cc:2802
struct dw_loc_list_struct * dw_loc_list_ref
Definition dwarf2out.h:31
HOST_WIDE_INT sign_mask(const T &)
Definition wide-int.h:2237
poly_int< NUM_POLY_INT_COEFFS, HOST_WIDE_INT > poly_int64
Definition poly-int-types.h:24
poly_int< N, C > r
Definition poly-int.h:774
i
Definition poly-int.h:776
Ca & a
Definition poly-int.h:770
tree variable_size(tree size)
Definition stor-layout.cc:67
Definition dwarf2out.cc:1358
Definition dwarf2out.h:463
tree bounds_type
Definition dwarf2out.h:467
tree lower_bound
Definition dwarf2out.h:468
tree stride
Definition dwarf2out.h:473
tree upper_bound
Definition dwarf2out.h:469
Definition dwarf2out.h:451
enum array_descr_ordering ordering
Definition dwarf2out.h:453
int ndimensions
Definition dwarf2out.h:452
tree rank
Definition dwarf2out.h:460
tree element_type
Definition dwarf2out.h:454
bool stride_in_bits
Definition dwarf2out.h:461
tree stride
Definition dwarf2out.h:459
struct array_descr_info::array_descr_dimen dimen[DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN]
tree associated
Definition dwarf2out.h:458
tree base_decl
Definition dwarf2out.h:455
tree data_location
Definition dwarf2out.h:456
tree allocated
Definition dwarf2out.h:457
Definition dwarf2out.h:124
unsigned int reg
Definition dwarf2out.h:125
unsigned short span_width
Definition dwarf2out.h:127
unsigned short span
Definition dwarf2out.h:126
bool operator!=(const cfa_reg &other) const
Definition dwarf2out.h:145
bool operator==(const cfa_reg &other) const
Definition dwarf2out.h:137
cfa_reg & set_by_dwreg(unsigned int r)
Definition dwarf2out.h:129
Definition dwarf2out.cc:3146
Definition double-int.h:50
Definition dwarf2out.h:511
dw_val_node dw_attr_val
Definition dwarf2out.h:513
Definition dwarf2out.h:156
poly_int64 base_offset
Definition dwarf2out.h:158
BOOL_BITFIELD indirect
Definition dwarf2out.h:161
BOOL_BITFIELD in_use
Definition dwarf2out.h:162
poly_int64 offset
Definition dwarf2out.h:157
struct cfa_reg reg
Definition dwarf2out.h:160
Definition dwarf2out.h:57
enum dwarf_call_frame_info dw_cfi_opc
Definition dwarf2out.h:58
dw_cfi_oprnd dw_cfi_oprnd1
Definition dwarf2out.h:59
dw_cfi_oprnd dw_cfi_oprnd2
Definition dwarf2out.h:60
Definition dwarf2out.h:357
dw_discr_list_ref dw_discr_next
Definition dwarf2out.h:358
int dw_discr_range
Definition dwarf2out.h:365
dw_discr_value dw_discr_lower_bound
Definition dwarf2out.h:360
dw_discr_value dw_discr_upper_bound
Definition dwarf2out.h:361
Definition dwarf2out.h:222
HOST_WIDE_INT sval
Definition dwarf2out.h:226
int pos
Definition dwarf2out.h:223
union dw_discr_value::@042344065371213227244026201000236061315106353062 v
unsigned HOST_WIDE_INT uval
Definition dwarf2out.h:227
Definition dwarf2out.h:74
unsigned int vdrap_reg
Definition dwarf2out.h:93
const char * dw_fde_begin
Definition dwarf2out.h:76
cfi_vec dw_fde_cfi
Definition dwarf2out.h:83
unsigned ignored_debug
Definition dwarf2out.h:114
unsigned fde_index
Definition dwarf2out.h:88
const char * dw_fde_vms_begin_epilogue
Definition dwarf2out.h:80
const char * dw_fde_second_begin
Definition dwarf2out.h:81
const char * dw_fde_vms_end_prologue
Definition dwarf2out.h:79
unsigned nothrow
Definition dwarf2out.h:97
unsigned all_throwers_are_sibcalls
Definition dwarf2out.h:95
const char * dw_fde_end
Definition dwarf2out.h:78
HOST_WIDE_INT stack_realignment
Definition dwarf2out.h:85
unsigned uses_eh_lsda
Definition dwarf2out.h:96
int dw_fde_switch_cfi_index
Definition dwarf2out.h:84
unsigned second_in_std_section
Definition dwarf2out.h:106
unsigned in_std_section
Definition dwarf2out.h:103
unsigned stack_realign
Definition dwarf2out.h:99
const char * dw_fde_second_end
Definition dwarf2out.h:82
unsigned int drap_reg
Definition dwarf2out.h:91
const char * dw_fde_current_label
Definition dwarf2out.h:77
unsigned funcdef_number
Definition dwarf2out.h:87
unsigned rule18
Definition dwarf2out.h:112
unsigned drap_reg_saved
Definition dwarf2out.h:101
tree decl
Definition dwarf2out.h:75
Definition dwarf2out.h:338
dw_loc_descr_ref dw_loc_next
Definition dwarf2out.h:339
dw_val_node dw_loc_oprnd1
Definition dwarf2out.h:349
dw_val_node dw_loc_oprnd2
Definition dwarf2out.h:350
Definition dwarf2out.h:239
unsigned char noted_variable_value
Definition dwarf2out.h:265
bool resolved_addr
Definition dwarf2out.h:254
var_loc_view vbegin
Definition dwarf2out.h:250
addr_table_entry * end_entry
Definition dwarf2out.h:244
char * vl_symbol
Definition dwarf2out.h:247
unsigned char offset_emitted
Definition dwarf2out.h:263
char * ll_symbol
Definition dwarf2out.h:245
bool replaced
Definition dwarf2out.h:256
unsigned char num_assigned
Definition dwarf2out.h:261
hashval_t hash
Definition dwarf2out.h:251
dw_loc_descr_ref expr
Definition dwarf2out.h:249
bool force
Definition dwarf2out.h:268
var_loc_view vend
Definition dwarf2out.h:250
const char * end
Definition dwarf2out.h:243
unsigned char emitted
Definition dwarf2out.h:259
dw_loc_list_ref dw_loc_next
Definition dwarf2out.h:240
const char * begin
Definition dwarf2out.h:241
const char * section
Definition dwarf2out.h:248
addr_table_entry * begin_entry
Definition dwarf2out.h:242
unsigned int dw_loc_frame_offset_rel_v
Definition dwarf2out.h:290
unsigned int dw_loc_dtprel_v
Definition dwarf2out.h:286
enum dwarf_location_atom dw_loc_opc_v
Definition dwarf2out.h:283
dw_die_ref die
Definition dwarf2out.h:311
Definition dwarf2out.h:274
union dw_val_node::dw_val_node_parent u
union dw_val_node::dw_val_struct_union v
enum dw_val_class val_class
Definition dwarf2out.h:275
struct addr_table_entry * val_entry
Definition dwarf2out.h:295
Definition dwarf2out.h:207
unsigned elt_size
Definition dwarf2out.h:210
unsigned length
Definition dwarf2out.h:209
void * array
Definition dwarf2out.h:208
Definition dwarf2out.h:368
const HOST_WIDE_INT * get_val() const
Definition dwarf2out.h:375
unsigned int get_precision() const
Definition dwarf2out.h:373
HOST_WIDE_INT val[1]
Definition dwarf2out.h:371
bool operator==(const dw_wide_int &) const
Definition dwarf2out.h:390
HOST_WIDE_INT elt(unsigned int) const
Definition dwarf2out.h:381
unsigned int precision
Definition dwarf2out.h:369
unsigned int len
Definition dwarf2out.h:370
unsigned int get_len() const
Definition dwarf2out.h:374
Definition dwarf2out.h:542
const char * filename
Definition dwarf2out.h:544
const char * key
Definition dwarf2out.h:543
int emitted_number
Definition dwarf2out.h:545
Definition dwarf2out.h:485
struct fixed_point_type_info::@133245212036044244041073307076200241315051214230::@075241321370117124014225166064340275237023126136 arbitrary
int binary
Definition dwarf2out.h:492
enum fixed_point_scale_factor scale_factor_kind
Definition dwarf2out.h:488
int decimal
Definition dwarf2out.h:494
tree numerator
Definition dwarf2out.h:497
union fixed_point_type_info::@133245212036044244041073307076200241315051214230 scale_factor
tree denominator
Definition dwarf2out.h:497
Definition dwarf2out.cc:218
Definition vec.h:359
Definition vec.h:450
#define BOOL_BITFIELD
Definition system.h:896
Definition dwarf2out.h:49
const char * dw_cfi_addr
Definition dwarf2out.h:52
struct dw_loc_descr_node * dw_cfi_loc
Definition dwarf2out.h:53
HOST_WIDE_INT dw_cfi_offset
Definition dwarf2out.h:51
unsigned int dw_cfi_reg_num
Definition dwarf2out.h:50
struct dw_cfa_location * dw_cfi_cfa_loc
Definition dwarf2out.h:54
Definition dwarf2out.h:280
enum dwarf_attribute u3
Definition dwarf2out.h:293
struct dw_val_node::dw_val_node_parent::dw_val_loc_descr_node u1
int u2
Definition dwarf2out.h:292
Definition dwarf2out.h:297
tree val_decl_ref
Definition dwarf2out.h:322
char * val_lbl_id
Definition dwarf2out.h:316
dw_loc_descr_ref val_loc
Definition dwarf2out.h:302
dw_vec_const val_vec
Definition dwarf2out.h:308
dw_wide_int_ptr val_wide
Definition dwarf2out.h:307
HOST_WIDE_INT val_int
Definition dwarf2out.h:303
dw_loc_list_ref val_loc_list
Definition dwarf2out.h:300
struct dwarf_file_data * val_file_implicit
Definition dwarf2out.h:319
unsigned val_fde_index
Definition dwarf2out.h:314
struct indirect_string_node * val_str
Definition dwarf2out.h:315
dw_discr_value val_discr_value
Definition dwarf2out.h:328
dw_discr_list_ref val_discr_list
Definition dwarf2out.h:329
unsigned char val_data8[8]
Definition dwarf2out.h:321
double_int val_double
Definition dwarf2out.h:306
struct dw_val_node::dw_val_struct_union::dw_val_die_union val_die_ref
rtx val_addr
Definition dwarf2out.h:298
unsigned HOST_WIDE_INT val_unsigned
Definition dwarf2out.h:305
struct dwarf_file_data * val_file
Definition dwarf2out.h:318
unsigned char val_flag
Definition dwarf2out.h:317
unsigned HOST_WIDE_INT val_offset
Definition dwarf2out.h:299
struct dw_val_node::dw_val_struct_union::dw_val_vms_delta_union val_vms_delta
char * val_symbolic_view
Definition dwarf2out.h:330
dw_die_ref val_view_list
Definition dwarf2out.h:301
generic_wide_int< wide_int_ref_storage< false > > wide_int_ref
Definition wide-int.h:353