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-2024 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. */
40
49
50typedef union GTY(()) {
51 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
52 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
53 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
54 struct dw_loc_descr_node * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
56 dw_cfi_cfa_loc;
60 enum dwarf_call_frame_info dw_cfi_opc;
61 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
62 dw_cfi_oprnd1;
63 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
64 dw_cfi_oprnd2;
65};
66
69
71
72/* All call frame descriptions (FDE's) in the GCC generated DWARF
73 refer to a single Common Information Entry (CIE), defined at
74 the beginning of the .debug_frame section. This use of a single
75 CIE obviates the need to keep track of multiple CIE's
76 in the DWARF generation routines below. */
80 const char *dw_fde_begin;
81 const char *dw_fde_current_label;
82 const char *dw_fde_end;
83 const char *dw_fde_vms_end_prologue;
84 const char *dw_fde_vms_begin_epilogue;
85 const char *dw_fde_second_begin;
86 const char *dw_fde_second_end;
87 cfi_vec dw_fde_cfi;
88 int dw_fde_switch_cfi_index; /* Last CFI before switching sections. */
89 HOST_WIDE_INT stack_realignment;
90
91 unsigned funcdef_number;
92 unsigned fde_index;
93
94 /* Dynamic realign argument pointer register. */
95 unsigned int drap_reg;
96 /* Virtual dynamic realign argument pointer register. */
97 unsigned int vdrap_reg;
98 /* These 3 flags are copied from rtl_data in function.h. */
99 unsigned all_throwers_are_sibcalls : 1;
100 unsigned uses_eh_lsda : 1;
101 unsigned nothrow : 1;
102 /* Whether we did stack realign in this call frame. */
103 unsigned stack_realign : 1;
104 /* Whether dynamic realign argument pointer register has been saved. */
105 unsigned drap_reg_saved: 1;
106 /* True iff dw_fde_begin label is in text_section or cold_text_section. */
107 unsigned in_std_section : 1;
108 /* True iff dw_fde_second_begin label is in text_section or
109 cold_text_section. */
110 unsigned second_in_std_section : 1;
111 /* True if Rule 18 described in dwarf2cfi.cc is in action, i.e. for dynamic
112 stack realignment in between pushing of hard frame pointer to stack
113 and setting hard frame pointer to stack pointer. The register save for
114 hard frame pointer register should be emitted only on the latter
115 instruction. */
116 unsigned rule18 : 1;
117 /* True if this function is to be ignored by debugger. */
118 unsigned ignored_debug : 1;
119};
120
121
122/* This represents a register, in DWARF_FRAME_REGNUM space, for use in CFA
123 definitions and expressions.
124 Most architectures only need a single register number, but some (amdgcn)
125 have pointers that span multiple registers. DWARF permits arbitrary
126 register sets but existing use-cases only require contiguous register
127 sets, as represented here. */
128struct GTY(()) cfa_reg {
129 unsigned int reg;
130 unsigned short span;
131 unsigned short span_width; /* A.K.A. register mode size. */
132
133 cfa_reg& set_by_dwreg (unsigned int r)
134 {
135 reg = r;
136 span = 1;
137 span_width = 0; /* Unknown size (permitted when span == 1). */
138 return *this;
139 }
140
141 bool operator== (const cfa_reg &other) const
142 {
143 return (reg == other.reg && span == other.span
144 && (span_width == other.span_width
145 || (span == 1
146 && (span_width == 0 || other.span_width == 0))));
147 }
148
149 bool operator!= (const cfa_reg &other) const
150 {
151 return !(*this == other);
152 }
153};
154
155/* This is how we define the location of the CFA. We use to handle it
156 as REG + OFFSET all the time, but now it can be more complex.
157 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
158 Instead of passing around REG and OFFSET, we pass a copy
159 of this structure. */
160struct GTY(()) dw_cfa_location {
162 poly_int64 base_offset;
163 /* REG is in DWARF_FRAME_REGNUM space, *not* normal REGNO space. */
164 struct cfa_reg reg;
165 BOOL_BITFIELD indirect : 1; /* 1 if CFA is accessed via a dereference. */
166 BOOL_BITFIELD in_use : 1; /* 1 if a saved cfa is stored here. */
167};
168
169
170/* Each DIE may have a series of attribute/value pairs. Values
207};
209/* Describe a floating point constant value, or a vector constant value. */
211struct GTY(()) dw_vec_const {
212 void * GTY((atomic)) array;
213 unsigned length;
214 unsigned elt_size;
215};
216
217/* Describe a single value that a discriminant can match.
218
219 Discriminants (in the "record variant part" meaning) are scalars.
220 dw_discr_list_ref and dw_discr_value are a mean to describe a set of
221 discriminant values that are matched by a particular variant.
222
223 Discriminants can be signed or unsigned scalars, and can be discriminants
224 values. Both have to be consistent, though. */
225
226struct GTY(()) dw_discr_value {
227 int pos; /* Whether the discriminant value is positive (unsigned). */
228 union
229 {
230 HOST_WIDE_INT GTY ((tag ("0"))) sval;
231 unsigned HOST_WIDE_INT GTY ((tag ("1"))) uval;
232 }
233 GTY ((desc ("%1.pos"))) v;
234};
235
237
238/* The dw_val_node describes an attribute's value, as it is
239 represented internally. */
242 enum dw_val_class val_class;
243 struct addr_table_entry * GTY(()) val_entry;
246 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
247 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
248 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
249 dw_die_ref GTY ((tag ("dw_val_class_view_list"))) val_view_list;
253 GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
260 int external;
261 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
262 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
264 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
265 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
268 GTY ((tag ("dw_val_class_file_implicit"))) val_file_implicit;
269 unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
270 tree GTY ((tag ("dw_val_class_decl_ref"))) val_decl_ref;
273 char * lbl1;
274 char * lbl2;
275 } GTY ((tag ("dw_val_class_vms_delta"))) val_vms_delta;
276 dw_discr_value GTY ((tag ("dw_val_class_discr_value"))) val_discr_value;
278 char * GTY ((tag ("dw_val_class_symview"))) val_symbolic_view;
279 }
280 GTY ((desc ("%1.val_class"))) v;
281};
282
283/* Locations in memory are described using a sequence of stack machine
284 operations. */
286struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node {
287 dw_loc_descr_ref dw_loc_next;
289 /* Used to distinguish DW_OP_addr with a direct symbol relocation
290 from DW_OP_addr with a dtp-relative symbol relocation. */
291 unsigned int dtprel : 1;
292 /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff.
293 it targets a DWARF prodecure argument. In this case, it needs to be
294 relocated according to the current frame offset. */
295 unsigned int frame_offset_rel : 1;
296 int dw_loc_addr;
297 dw_val_node dw_loc_oprnd1;
298 dw_val_node dw_loc_oprnd2;
299};
300
301/* A variant (inside a record variant part) is selected when the corresponding
302 discriminant matches its set of values (see the comment for dw_discr_value).
303 The following datastructure holds such matching information. */
304
306 dw_discr_list_ref dw_discr_next;
307
308 dw_discr_value dw_discr_lower_bound;
309 dw_discr_value dw_discr_upper_bound;
310 /* This node represents only the value in dw_discr_lower_bound when it's
311 zero. It represents the range between the two fields (bounds included)
312 otherwise. */
313 int dw_discr_range;
317 unsigned int precision;
318 unsigned int len;
321 unsigned int get_precision () const { return precision; }
322 unsigned int get_len () const { return len; }
323 const HOST_WIDE_INT *get_val () const { return val; }
324 inline HOST_WIDE_INT elt (unsigned int) const;
325 inline bool operator == (const dw_wide_int &) const;
327
328inline HOST_WIDE_INT
329dw_wide_int::elt (unsigned int i) const
330{
331 if (i < len)
332 return val[i];
333 wide_int_ref ref = wi::storage_ref (val, len, precision);
334 return wi::sign_mask (ref);
336
337inline bool
339{
340 wide_int_ref ref1 = wi::storage_ref (val, len, precision);
341 wide_int_ref ref2 = wi::storage_ref (o.val, o.len, o.precision);
342 return ref1 == ref2;
343}
344
345/* Interface from dwarf2out.cc to dwarf2cfi.cc. */
346extern struct dw_loc_descr_node *build_cfa_loc
350extern struct dw_loc_descr_node *build_span_loc (struct cfa_reg);
352 (rtx, machine_mode mode, machine_mode mem_mode,
353 enum var_init_status);
356
357extern unsigned long size_of_locs (dw_loc_descr_ref);
358extern void output_loc_sequence (dw_loc_descr_ref, int);
360
361/* Interface from dwarf2cfi.cc to dwarf2out.cc. */
362extern void lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc,
364extern bool cfa_equal_p (const dw_cfa_location *, const dw_cfa_location *);
365
366extern void output_cfi (dw_cfi_ref, dw_fde_ref, int);
367
368extern GTY(()) cfi_vec cie_cfi_vec;
369
370/* Interface from dwarf2*.c to the rest of the compiler. */
375
377
380extern void debug_dwarf (void);
384extern void debug (die_struct &ref);
385extern void debug (die_struct *ptr);
386extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *));
387#ifdef VMS_DEBUGGING_INFO
396};
398#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN 16
402 int ndimensions;
403 enum array_descr_ordering ordering;
404 tree element_type;
405 tree base_decl;
406 tree data_location;
407 tree allocated;
408 tree associated;
409 tree stride;
410 tree rank;
411 bool stride_in_bits;
412 struct array_descr_dimen
413 {
414 /* GCC uses sizetype for array indices, so lower_bound and upper_bound
415 will likely be "sizetype" values. However, bounds may have another
416 type in the original source code. */
417 tree bounds_type;
418 tree lower_bound;
419 tree upper_bound;
421 /* Only Fortran uses more than one dimension for array types. For other
422 languages, the stride can be rather specified for the whole array. */
423 tree stride;
432};
433
436 /* The scale factor is the value one has to multiply the actual data with
437 to get the fixed point value. We support three ways to encode it. */
438 enum fixed_point_scale_factor scale_factor_kind;
439 union
440 {
441 /* For a binary scale factor, the scale factor is 2 ** binary. */
442 int binary;
443 /* For a decimal scale factor, the scale factor is 10 ** decimal. */
444 int decimal;
445 /* For an arbitrary scale factor, the scale factor is the ratio
446 numerator / denominator. */
447 struct { tree numerator; tree denominator; } arbitrary;
448 } scale_factor;
449};
450
451void dwarf2cfi_cc_finalize (void);
452void dwarf2out_cc_finalize (void);
453
454/* Some DWARF internals are exposed for the needs of DWARF-based debug
455 formats. */
456
457/* Each DIE attribute has a field specifying the attribute kind,
458 a link to the next attribute in the chain, and an attribute value.
459 Attributes are typically linked below the DIE they modify. */
461typedef struct GTY(()) dw_attr_struct {
462 enum dwarf_attribute dw_attr;
463 dw_val_node dw_attr_val;
464}
466
469extern unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *a);
472extern const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
473extern enum dw_val_class AT_class (dw_attr_node *);
474extern unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *);
475extern unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
476extern int get_AT_flag (dw_die_ref, enum dwarf_attribute);
477
478extern void add_name_attribute (dw_die_ref, const char *);
479
480extern dw_die_ref new_die_raw (enum dwarf_tag);
481extern dw_die_ref base_type_die (tree, bool);
482
485
490/* Data about a single source file. */
492 const char * key;
493 const char * filename;
494 int emitted_number;
495};
496
498 enum dwarf_attribute);
499
500#endif /* GCC_DWARF2OUT_H */
Definition wide-int.h:776
Definition wide-int.h:707
bool debug
Definition collect-utils.cc:34
var_init_status
Definition coretypes.h:303
#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:124
bool operator!=(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:132
void dwarf2cfi_cc_finalize()
Definition dwarf2cfi.cc:3825
void output_cfi_directive(FILE *f, dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3541
void dwarf2out_emit_cfi(dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3659
void lookup_cfa_1(dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
Definition dwarf2cfi.cc:721
bool cfa_equal_p(const dw_cfa_location *loc1, const dw_cfa_location *loc2)
Definition dwarf2cfi.cc:763
cfi_vec cie_cfi_vec
Definition dwarf2cfi.cc:189
void output_cfi(dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
Definition dwarf2cfi.cc:3399
struct dwarf_file_data * get_AT_file(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5554
dw_attr_node * get_AT(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5461
DEBUG_FUNCTION void debug_dwarf_die(dw_die_ref die)
Definition dwarf2out.cc:6920
const char * get_AT_string(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5516
void dwarf2out_cc_finalize(void)
Definition dwarf2out.cc:33311
dw_fde_ref dwarf2out_alloc_current_fde(void)
Definition dwarf2out.cc:1041
void output_loc_sequence(dw_loc_descr_ref loc, int for_eh_or_skip)
Definition dwarf2out.cc:2570
struct dw_loc_descr_node * build_cfa_loc(dw_cfa_location *cfa, poly_int64 offset)
Definition dwarf2out.cc:2834
dw_die_ref dw_get_die_child(dw_die_ref die)
Definition dwarf2out.cc:5250
dw_die_ref get_AT_ref(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5546
void output_loc_sequence_raw(dw_loc_descr_ref loc)
Definition dwarf2out.cc:2760
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc(enum dwarf_call_frame_info cfi)
Definition dwarf2out.cc:567
dw_loc_descr_ref AT_loc(dw_attr_node *a)
Definition dwarf2out.cc:4999
DEBUG_FUNCTION void debug_dwarf(void)
Definition dwarf2out.cc:6945
dw_die_ref lookup_decl_die(tree decl)
Definition dwarf2out.cc:5996
DEBUG_FUNCTION void debug_dwarf_loc_descr(dw_loc_descr_ref loc)
Definition dwarf2out.cc:6912
void dwarf2out_set_demangle_name_func(const char *(*func)(const char *))
Definition dwarf2out.cc:4314
int get_AT_flag(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5527
struct dw_loc_descr_node * build_span_loc(struct cfa_reg reg)
Definition dwarf2out.cc:2806
struct dw_loc_descr_node * build_cfa_aligned_loc(dw_cfa_location *cfa, poly_int64 offset, HOST_WIDE_INT alignment)
Definition dwarf2out.cc:2867
enum dwarf_tag dw_get_die_tag(dw_die_ref die)
Definition dwarf2out.cc:5242
HOST_WIDE_INT AT_int(dw_attr_node *a)
Definition dwarf2out.cc:4577
dw_die_ref lookup_type_die(tree type)
Definition dwarf2out.cc:5916
unsigned HOST_WIDE_INT AT_unsigned(dw_attr_node *a)
Definition dwarf2out.cc:4600
dw_die_ref base_type_die(tree type, bool reverse)
Definition dwarf2out.cc:13241
bool loc_descr_equal_p(dw_loc_descr_ref a, dw_loc_descr_ref b)
Definition dwarf2out.cc:1581
void add_name_attribute(dw_die_ref die, const char *name_string)
Definition dwarf2out.cc:21275
dw_die_ref new_die_raw(enum dwarf_tag tag_value)
Definition dwarf2out.cc:5850
unsigned long size_of_locs(dw_loc_descr_ref loc)
Definition dwarf2out.cc:2067
unsigned get_AT_unsigned(dw_die_ref die, enum dwarf_attribute attr_kind)
Definition dwarf2out.cc:5538
dw_loc_descr_ref mem_loc_descriptor(rtx rtl, machine_mode mode, machine_mode mem_mode, enum var_init_status initialized)
Definition dwarf2out.cc:16018
enum dw_val_class AT_class(dw_attr_node *a)
Definition dwarf2out.cc:4521
enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc(enum dwarf_call_frame_info cfi)
Definition dwarf2out.cc:519
dw_die_ref dw_get_die_sib(dw_die_ref die)
Definition dwarf2out.cc:5258
unsigned get_AT_unsigned(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5538
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:16018
void dwarf2out_emit_cfi(dw_cfi_ref cfi)
Definition dwarf2cfi.cc:3659
vec< dw_cfi_ref, va_gc > * cfi_vec
Definition dwarf2out.h:65
struct dw_loc_descr_node * build_span_loc(struct cfa_reg)
Definition dwarf2out.cc:2806
void dwarf2out_set_demangle_name_func(const char *(*)(const char *))
dw_die_ref lookup_type_die(tree)
Definition dwarf2out.cc:5916
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:33311
HOST_WIDE_INT AT_int(dw_attr_node *)
Definition dwarf2out.cc:4577
struct dw_loc_descr_node * build_cfa_aligned_loc(dw_cfa_location *, poly_int64, HOST_WIDE_INT)
Definition dwarf2out.cc:2867
struct dw_cfi_node * dw_cfi_ref
Definition dwarf2out.h:29
array_descr_ordering
Definition dwarf2out.h:389
@ array_descr_ordering_column_major
Definition dwarf2out.h:392
@ array_descr_ordering_row_major
Definition dwarf2out.h:391
@ array_descr_ordering_default
Definition dwarf2out.h:390
dw_die_ref new_die_raw(enum dwarf_tag)
Definition dwarf2out.cc:5850
struct dw_val_node * dw_val_ref
Definition dwarf2out.h:28
dw_die_ref get_AT_ref(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5546
void dwarf2cfi_cc_finalize(void)
Definition dwarf2cfi.cc:3825
dw_fde_ref dwarf2out_alloc_current_fde(void)
Definition dwarf2out.cc:1041
const char * get_AT_string(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5516
enum dw_val_class AT_class(dw_attr_node *)
Definition dwarf2out.cc:4521
void output_loc_sequence(dw_loc_descr_ref, int)
Definition dwarf2out.cc:2570
void lookup_cfa_1(dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
Definition dwarf2cfi.cc:721
enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc(enum dwarf_call_frame_info cfi)
Definition dwarf2out.cc:567
void debug_dwarf_die(struct die_struct *)
fixed_point_scale_factor
Definition dwarf2out.h:425
@ fixed_point_scale_factor_decimal
Definition dwarf2out.h:427
@ fixed_point_scale_factor_binary
Definition dwarf2out.h:426
@ fixed_point_scale_factor_arbitrary
Definition dwarf2out.h:428
void debug_dwarf(void)
Definition dwarf2out.cc:6945
dw_val_class
Definition dwarf2out.h:172
@ dw_val_class_symview
Definition dwarf2out.h:203
@ dw_val_class_decl_ref
Definition dwarf2out.h:194
@ dw_val_class_str
Definition dwarf2out.h:189
@ dw_val_class_fde_ref
Definition dwarf2out.h:186
@ dw_val_class_vms_delta
Definition dwarf2out.h:195
@ dw_val_class_vec
Definition dwarf2out.h:183
@ dw_val_class_loc_list
Definition dwarf2out.h:177
@ dw_val_class_const_double
Definition dwarf2out.h:181
@ dw_val_class_lbl_id
Definition dwarf2out.h:187
@ dw_val_class_view_list
Definition dwarf2out.h:202
@ dw_val_class_offset
Definition dwarf2out.h:175
@ dw_val_class_discr_list
Definition dwarf2out.h:198
@ dw_val_class_loclistsptr
Definition dwarf2out.h:191
@ dw_val_class_wide_int
Definition dwarf2out.h:182
@ dw_val_class_data8
Definition dwarf2out.h:193
@ dw_val_class_lineptr
Definition dwarf2out.h:188
@ dw_val_class_unsigned_const_implicit
Definition dwarf2out.h:200
@ dw_val_class_discr_value
Definition dwarf2out.h:197
@ dw_val_class_high_pc
Definition dwarf2out.h:196
@ dw_val_class_unsigned_const
Definition dwarf2out.h:180
@ dw_val_class_macptr
Definition dwarf2out.h:190
@ dw_val_class_die_ref
Definition dwarf2out.h:185
@ dw_val_class_file_implicit
Definition dwarf2out.h:201
@ dw_val_class_loc
Definition dwarf2out.h:176
@ dw_val_class_range_list
Definition dwarf2out.h:178
@ dw_val_class_flag
Definition dwarf2out.h:184
@ dw_val_class_addr
Definition dwarf2out.h:174
@ dw_val_class_file
Definition dwarf2out.h:192
@ dw_val_class_const
Definition dwarf2out.h:179
@ dw_val_class_const_implicit
Definition dwarf2out.h:199
@ dw_val_class_none
Definition dwarf2out.h:173
dw_cfi_oprnd_type
Definition dwarf2out.h:41
@ dw_cfi_oprnd_loc
Definition dwarf2out.h:46
@ dw_cfi_oprnd_addr
Definition dwarf2out.h:45
@ dw_cfi_oprnd_cfa_loc
Definition dwarf2out.h:47
@ dw_cfi_oprnd_reg_num
Definition dwarf2out.h:43
@ dw_cfi_oprnd_offset
Definition dwarf2out.h:44
@ dw_cfi_oprnd_unused
Definition dwarf2out.h:42
dw_die_ref dw_get_die_child(dw_die_ref)
Definition dwarf2out.cc:5250
dw_die_ref base_type_die(tree, bool)
Definition dwarf2out.cc:13241
#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN
Definition dwarf2out.h:395
enum dwarf_tag dw_get_die_tag(dw_die_ref)
Definition dwarf2out.cc:5242
cfi_vec cie_cfi_vec
Definition dwarf2cfi.cc:189
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:3399
void debug_dwarf_loc_descr(dw_loc_descr_ref)
Definition dwarf2out.cc:6912
bool cfa_equal_p(const dw_cfa_location *, const dw_cfa_location *)
Definition dwarf2cfi.cc:763
dw_die_ref lookup_decl_die(tree)
Definition dwarf2out.cc:5996
dw_loc_descr_ref AT_loc(dw_attr_node *)
Definition dwarf2out.cc:4999
dw_attr_node * get_AT(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5461
struct dw_attr_struct dw_attr_node
bool loc_descr_equal_p(dw_loc_descr_ref, dw_loc_descr_ref)
Definition dwarf2out.cc:1581
const struct die_struct * const_dw_die_ref
Definition dwarf2out.h:26
void output_cfi_directive(FILE *f, struct dw_cfi_node *cfi)
unsigned HOST_WIDE_INT AT_unsigned(dw_attr_node *a)
Definition dwarf2out.cc:4600
void add_name_attribute(dw_die_ref, const char *)
Definition dwarf2out.cc:21275
struct dwarf_file_data * get_AT_file(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5554
int get_AT_flag(dw_die_ref, enum dwarf_attribute)
Definition dwarf2out.cc:5527
dw_die_ref dw_get_die_sib(dw_die_ref)
Definition dwarf2out.cc:5258
struct dw_fde_node * dw_fde_ref
Definition dwarf2out.h:67
void output_loc_sequence_raw(dw_loc_descr_ref)
Definition dwarf2out.cc:2760
unsigned long size_of_locs(dw_loc_descr_ref)
Definition dwarf2out.cc:2067
struct dw_loc_descr_node * build_cfa_loc(dw_cfa_location *, poly_int64)
Definition dwarf2out.cc:2834
struct dw_loc_list_struct * dw_loc_list_ref
Definition dwarf2out.h:31
enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc(enum dwarf_call_frame_info cfi)
Definition dwarf2out.cc:519
T * ggc_alloc(ALONE_CXX_MEM_STAT_INFO)
Definition ggc.h:184
HOST_WIDE_INT sign_mask(const T &)
Definition wide-int.h:2237
poly_int< N, C > r
Definition poly-int.h:770
i
Definition poly-int.h:772
Ca & a
Definition poly-int.h:766
rtx offset
Definition postreload.cc:691
tree variable_size(tree size)
Definition stor-layout.cc:67
Definition dwarf2out.cc:1353
Definition dwarf2out.h:410
tree bounds_type
Definition dwarf2out.h:414
tree lower_bound
Definition dwarf2out.h:415
tree stride
Definition dwarf2out.h:420
tree upper_bound
Definition dwarf2out.h:416
Definition dwarf2out.h:398
enum array_descr_ordering ordering
Definition dwarf2out.h:400
int ndimensions
Definition dwarf2out.h:399
tree rank
Definition dwarf2out.h:407
tree element_type
Definition dwarf2out.h:401
bool stride_in_bits
Definition dwarf2out.h:408
tree stride
Definition dwarf2out.h:406
struct array_descr_info::array_descr_dimen dimen[DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN]
tree associated
Definition dwarf2out.h:405
tree base_decl
Definition dwarf2out.h:402
tree data_location
Definition dwarf2out.h:403
tree allocated
Definition dwarf2out.h:404
Definition dwarf2out.h:125
unsigned int reg
Definition dwarf2out.h:126
unsigned short span_width
Definition dwarf2out.h:128
unsigned short span
Definition dwarf2out.h:127
bool operator!=(const cfa_reg &other) const
Definition dwarf2out.h:146
bool operator==(const cfa_reg &other) const
Definition dwarf2out.h:138
cfa_reg & set_by_dwreg(unsigned int r)
Definition dwarf2out.h:130
Definition genautomata.cc:499
Definition dwarf2out.cc:3178
Definition double-int.h:50
Definition dwarf2out.h:458
enum dwarf_attribute dw_attr
Definition dwarf2out.h:459
dw_val_node dw_attr_val
Definition dwarf2out.h:460
Definition dwarf2out.h:157
poly_int64 base_offset
Definition dwarf2out.h:159
BOOL_BITFIELD indirect
Definition dwarf2out.h:162
BOOL_BITFIELD in_use
Definition dwarf2out.h:163
poly_int64 offset
Definition dwarf2out.h:158
struct cfa_reg reg
Definition dwarf2out.h:161
Definition dwarf2out.h:58
enum dwarf_call_frame_info dw_cfi_opc
Definition dwarf2out.h:59
dw_cfi_oprnd dw_cfi_oprnd1
Definition dwarf2out.h:60
dw_cfi_oprnd dw_cfi_oprnd2
Definition dwarf2out.h:61
Definition dwarf2out.h:302
dw_discr_list_ref dw_discr_next
Definition dwarf2out.h:303
int dw_discr_range
Definition dwarf2out.h:310
dw_discr_value dw_discr_lower_bound
Definition dwarf2out.h:305
dw_discr_value dw_discr_upper_bound
Definition dwarf2out.h:306
Definition dwarf2out.h:223
HOST_WIDE_INT sval
Definition dwarf2out.h:227
int pos
Definition dwarf2out.h:224
union dw_discr_value::@20 v
unsigned HOST_WIDE_INT uval
Definition dwarf2out.h:228
Definition dwarf2out.h:75
unsigned int vdrap_reg
Definition dwarf2out.h:94
const char * dw_fde_begin
Definition dwarf2out.h:77
cfi_vec dw_fde_cfi
Definition dwarf2out.h:84
unsigned ignored_debug
Definition dwarf2out.h:115
unsigned fde_index
Definition dwarf2out.h:89
const char * dw_fde_vms_begin_epilogue
Definition dwarf2out.h:81
const char * dw_fde_second_begin
Definition dwarf2out.h:82
const char * dw_fde_vms_end_prologue
Definition dwarf2out.h:80
unsigned nothrow
Definition dwarf2out.h:98
unsigned all_throwers_are_sibcalls
Definition dwarf2out.h:96
const char * dw_fde_end
Definition dwarf2out.h:79
HOST_WIDE_INT stack_realignment
Definition dwarf2out.h:86
unsigned uses_eh_lsda
Definition dwarf2out.h:97
int dw_fde_switch_cfi_index
Definition dwarf2out.h:85
unsigned second_in_std_section
Definition dwarf2out.h:107
unsigned in_std_section
Definition dwarf2out.h:104
unsigned stack_realign
Definition dwarf2out.h:100
const char * dw_fde_second_end
Definition dwarf2out.h:83
unsigned int drap_reg
Definition dwarf2out.h:92
const char * dw_fde_current_label
Definition dwarf2out.h:78
unsigned funcdef_number
Definition dwarf2out.h:88
unsigned rule18
Definition dwarf2out.h:113
unsigned drap_reg_saved
Definition dwarf2out.h:102
tree decl
Definition dwarf2out.h:76
Definition dwarf2out.h:283
enum dwarf_location_atom dw_loc_opc
Definition dwarf2out.h:285
unsigned int frame_offset_rel
Definition dwarf2out.h:292
unsigned int dtprel
Definition dwarf2out.h:288
dw_loc_descr_ref dw_loc_next
Definition dwarf2out.h:284
dw_val_node dw_loc_oprnd1
Definition dwarf2out.h:294
int dw_loc_addr
Definition dwarf2out.h:293
dw_val_node dw_loc_oprnd2
Definition dwarf2out.h:295
Definition dwarf2out.cc:1370
dw_die_ref die
Definition dwarf2out.h:256
Definition dwarf2out.h:238
union dw_val_node::dw_val_struct_union v
enum dw_val_class val_class
Definition dwarf2out.h:239
struct addr_table_entry * val_entry
Definition dwarf2out.h:240
Definition dwarf2out.h:208
unsigned elt_size
Definition dwarf2out.h:211
unsigned length
Definition dwarf2out.h:210
void * array
Definition dwarf2out.h:209
Definition dwarf2out.h:313
const HOST_WIDE_INT * get_val() const
Definition dwarf2out.h:320
unsigned int get_precision() const
Definition dwarf2out.h:318
HOST_WIDE_INT val[1]
Definition dwarf2out.h:316
bool operator==(const dw_wide_int &) const
Definition dwarf2out.h:335
HOST_WIDE_INT elt(unsigned int) const
Definition dwarf2out.h:326
unsigned int precision
Definition dwarf2out.h:314
unsigned int len
Definition dwarf2out.h:315
unsigned int get_len() const
Definition dwarf2out.h:319
Definition dwarf2out.h:488
const char * filename
Definition dwarf2out.h:490
const char * key
Definition dwarf2out.h:489
int emitted_number
Definition dwarf2out.h:491
Definition dwarf2out.h:432
int binary
Definition dwarf2out.h:439
enum fixed_point_scale_factor scale_factor_kind
Definition dwarf2out.h:435
int decimal
Definition dwarf2out.h:441
tree numerator
Definition dwarf2out.h:444
struct fixed_point_type_info::@21::@22 arbitrary
union fixed_point_type_info::@21 scale_factor
tree denominator
Definition dwarf2out.h:444
Definition dwarf2out.cc:218
Definition rtl.h:311
Definition vec.h:359
Definition vec.h:450
#define BOOL_BITFIELD
Definition system.h:903
Definition dwarf2out.h:50
const char * dw_cfi_addr
Definition dwarf2out.h:53
struct dw_loc_descr_node * dw_cfi_loc
Definition dwarf2out.h:54
HOST_WIDE_INT dw_cfi_offset
Definition dwarf2out.h:52
unsigned int dw_cfi_reg_num
Definition dwarf2out.h:51
struct dw_cfa_location * dw_cfi_cfa_loc
Definition dwarf2out.h:55
Definition dwarf2out.h:242
tree val_decl_ref
Definition dwarf2out.h:267
char * val_lbl_id
Definition dwarf2out.h:261
dw_loc_descr_ref val_loc
Definition dwarf2out.h:247
dw_vec_const val_vec
Definition dwarf2out.h:253
dw_wide_int_ptr val_wide
Definition dwarf2out.h:252
HOST_WIDE_INT val_int
Definition dwarf2out.h:248
dw_loc_list_ref val_loc_list
Definition dwarf2out.h:245
struct dwarf_file_data * val_file_implicit
Definition dwarf2out.h:264
unsigned val_fde_index
Definition dwarf2out.h:259
struct indirect_string_node * val_str
Definition dwarf2out.h:260
dw_discr_value val_discr_value
Definition dwarf2out.h:273
dw_discr_list_ref val_discr_list
Definition dwarf2out.h:274
unsigned char val_data8[8]
Definition dwarf2out.h:266
double_int val_double
Definition dwarf2out.h:251
struct dw_val_node::dw_val_struct_union::dw_val_die_union val_die_ref
rtx val_addr
Definition dwarf2out.h:243
unsigned HOST_WIDE_INT val_unsigned
Definition dwarf2out.h:250
struct dwarf_file_data * val_file
Definition dwarf2out.h:263
unsigned char val_flag
Definition dwarf2out.h:262
unsigned HOST_WIDE_INT val_offset
Definition dwarf2out.h:244
struct dw_val_node::dw_val_struct_union::dw_val_vms_delta_union val_vms_delta
char * val_symbolic_view
Definition dwarf2out.h:275
dw_die_ref val_view_list
Definition dwarf2out.h:246