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. */
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;
55 dw_cfi_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)")))
61 dw_cfi_oprnd1;
62 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
63 dw_cfi_oprnd2;
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;
80 const char *dw_fde_current_label;
81 const char *dw_fde_end;
82 const char *dw_fde_vms_end_prologue;
83 const char *dw_fde_vms_begin_epilogue;
84 const char *dw_fde_second_begin;
85 const char *dw_fde_second_end;
86 cfi_vec dw_fde_cfi;
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 {
161 poly_int64 base_offset;
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 {
243 dw_loc_list_ref dw_loc_next;
244 const char *begin; /* Label and addr_entry for start of range */
245 addr_table_entry *begin_entry;
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 */
253 var_loc_view vbegin, vend;
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. */
259 bool replaced;
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. */
277struct GTY(()) dw_val_node {
278 enum dw_val_class val_class;
279 struct addr_table_entry * GTY(()) val_entry;
282 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
283 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
284 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
285 dw_die_ref GTY ((tag ("dw_val_class_view_list"))) val_view_list;
287 HOST_WIDE_INT GTY ((default)) val_int;
288 unsigned HOST_WIDE_INT
289 GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
296 int external;
297 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
298 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
299 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
300 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
301 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
302 struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
304 GTY ((tag ("dw_val_class_file_implicit"))) val_file_implicit;
305 unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
306 tree GTY ((tag ("dw_val_class_decl_ref"))) val_decl_ref;
309 char * lbl1;
310 char * lbl2;
311 } GTY ((tag ("dw_val_class_vms_delta"))) val_vms_delta;
312 dw_discr_value GTY ((tag ("dw_val_class_discr_value"))) val_discr_value;
314 char * GTY ((tag ("dw_val_class_symview"))) val_symbolic_view;
315 }
316 GTY ((desc ("%1.val_class"))) v;
317};
318
319/* Locations in memory are described using a sequence of stack machine
320 operations. */
322struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node {
323 dw_loc_descr_ref dw_loc_next;
324 ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
325 /* Used to distinguish DW_OP_addr with a direct symbol relocation
326 from DW_OP_addr with a dtp-relative symbol relocation. */
327 unsigned int dtprel : 1;
328 /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff.
329 it targets a DWARF prodecure argument. In this case, it needs to be
330 relocated according to the current frame offset. */
331 unsigned int frame_offset_rel : 1;
332 int dw_loc_addr;
333 dw_val_node dw_loc_oprnd1;
334 dw_val_node dw_loc_oprnd2;
335};
336
337/* A variant (inside a record variant part) is selected when the corresponding
338 discriminant matches its set of values (see the comment for dw_discr_value).
339 The following datastructure holds such matching information. */
340
342 dw_discr_list_ref dw_discr_next;
343
344 dw_discr_value dw_discr_lower_bound;
345 dw_discr_value dw_discr_upper_bound;
346 /* This node represents only the value in dw_discr_lower_bound when it's
347 zero. It represents the range between the two fields (bounds included)
348 otherwise. */
349 int dw_discr_range;
353 unsigned int precision;
354 unsigned int len;
355 HOST_WIDE_INT val[1];
357 unsigned int get_precision () const { return precision; }
358 unsigned int get_len () const { return len; }
359 const HOST_WIDE_INT *get_val () const { return val; }
360 inline HOST_WIDE_INT elt (unsigned int) const;
361 inline bool operator == (const dw_wide_int &) const;
363
364inline HOST_WIDE_INT
365dw_wide_int::elt (unsigned int i) const
366{
367 if (i < len)
368 return val[i];
369 wide_int_ref ref = wi::storage_ref (val, len, precision);
370 return wi::sign_mask (ref);
372
373inline bool
375{
376 wide_int_ref ref1 = wi::storage_ref (val, len, precision);
378 return ref1 == ref2;
379}
380
381/* Interface from dwarf2out.cc to dwarf2cfi.cc. */
382extern struct dw_loc_descr_node *build_cfa_loc
385 (dw_cfa_location *, poly_int64, HOST_WIDE_INT);
386extern struct dw_loc_descr_node *build_span_loc (struct cfa_reg);
388 (rtx, machine_mode mode, machine_mode mem_mode,
389 enum var_init_status);
392
393extern unsigned long size_of_locs (dw_loc_descr_ref);
394extern void output_loc_sequence (dw_loc_descr_ref, int);
396
397/* Interface from dwarf2cfi.cc to dwarf2out.cc. */
398extern void lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc,
399 dw_cfa_location *remember);
400extern bool cfa_equal_p (const dw_cfa_location *, const dw_cfa_location *);
401
402extern void output_cfi (dw_cfi_ref, dw_fde_ref, int);
403
404extern GTY(()) cfi_vec cie_cfi_vec;
405
406/* Interface from dwarf2*.c to the rest of the compiler. */
407extern enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc (dwarf_call_frame_info cfi);
408extern enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc (dwarf_call_frame_info cfi);
409
410extern void output_cfi_directive (FILE *f, dw_cfi_ref cfi);
411
412extern void dwarf2out_emit_cfi (dw_cfi_ref cfi);
414extern void debug_dwarf (void);
415struct die_struct;
416extern void debug_dwarf_die (struct die_struct *);
418extern void debug (die_struct &ref);
419extern void debug (die_struct *ptr);
420extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *));
421#ifdef VMS_DEBUGGING_INFO
422extern void dwarf2out_vms_debug_main_pointer (void);
423#endif
426{
430};
432#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN 16
436 int ndimensions;
437 enum array_descr_ordering ordering;
438 tree element_type;
439 tree base_decl;
440 tree data_location;
441 tree allocated;
442 tree associated;
443 tree stride;
444 tree rank;
445 bool stride_in_bits;
446 struct array_descr_dimen
447 {
448 /* GCC uses sizetype for array indices, so lower_bound and upper_bound
449 will likely be "sizetype" values. However, bounds may have another
450 type in the original source code. */
451 tree bounds_type;
452 tree lower_bound;
453 tree upper_bound;
455 /* Only Fortran uses more than one dimension for array types. For other
456 languages, the stride can be rather specified for the whole array. */
457 tree stride;
466};
467
470 /* The scale factor is the value one has to multiply the actual data with
471 to get the fixed point value. We support three ways to encode it. */
472 enum fixed_point_scale_factor scale_factor_kind;
473 union
474 {
475 /* For a binary scale factor, the scale factor is 2 ** binary. */
476 int binary;
477 /* For a decimal scale factor, the scale factor is 10 ** decimal. */
478 int decimal;
479 /* For an arbitrary scale factor, the scale factor is the ratio
480 numerator / denominator. */
481 struct { tree numerator; tree denominator; } arbitrary;
482 } scale_factor;
483};
484
485void dwarf2cfi_cc_finalize (void);
486void dwarf2out_cc_finalize (void);
487
488/* Some DWARF internals are exposed for the needs of DWARF-based debug
489 formats. */
490
491/* Each DIE attribute has a field specifying the attribute kind,
492 a link to the next attribute in the chain, and an attribute value.
493 Attributes are typically linked below the DIE they modify. */
495typedef struct GTY(()) dw_attr_struct {
496 enum dwarf_attribute dw_attr;
497 dw_val_node dw_attr_val;
498}
500
501extern dw_attr_node *get_AT (dw_die_ref, enum dwarf_attribute);
502extern HOST_WIDE_INT AT_int (dw_attr_node *);
503extern unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *a);
505extern dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
506extern const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
507extern enum dw_val_class AT_class (dw_attr_node *);
508extern unsigned HOST_WIDE_INT AT_unsigned (dw_attr_node *);
509extern unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
510extern int get_AT_flag (dw_die_ref, enum dwarf_attribute);
511
512extern void add_name_attribute (dw_die_ref, const char *);
513
514extern dw_die_ref new_die_raw (enum dwarf_tag);
515extern dw_die_ref base_type_die (tree, bool);
516
519
523extern enum dwarf_tag dw_get_die_tag (dw_die_ref);
525/* Data about a single source file. */
526struct GTY((for_user)) dwarf_file_data {
527 const char * key;
528 const char * filename;
529 int emitted_number;
530};
531
533 enum dwarf_attribute);
534
535#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:313
union section section
Definition coretypes.h:159
#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:33381
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:13217
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:21310
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:15998
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:15998
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:33381
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
struct dw_cfi_node * dw_cfi_ref
Definition dwarf2out.h:29
array_descr_ordering
Definition dwarf2out.h:423
@ array_descr_ordering_column_major
Definition dwarf2out.h:426
@ array_descr_ordering_row_major
Definition dwarf2out.h:425
@ array_descr_ordering_default
Definition dwarf2out.h:424
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:459
@ fixed_point_scale_factor_decimal
Definition dwarf2out.h:461
@ fixed_point_scale_factor_binary
Definition dwarf2out.h:460
@ fixed_point_scale_factor_arbitrary
Definition dwarf2out.h:462
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:13217
#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN
Definition dwarf2out.h:429
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
cfi_vec cie_cfi_vec
Definition dwarf2cfi.cc:200
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:21310
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< N, C > r
Definition poly-int.h:774
i
Definition poly-int.h:776
Ca & a
Definition poly-int.h:770
rtx offset
Definition postreload.cc:691
rtx expr
Definition postreload.cc:697
tree variable_size(tree size)
Definition stor-layout.cc:67
Definition dwarf2out.cc:1358
Definition dwarf2out.h:444
tree bounds_type
Definition dwarf2out.h:448
tree lower_bound
Definition dwarf2out.h:449
tree stride
Definition dwarf2out.h:454
tree upper_bound
Definition dwarf2out.h:450
Definition dwarf2out.h:432
enum array_descr_ordering ordering
Definition dwarf2out.h:434
int ndimensions
Definition dwarf2out.h:433
tree rank
Definition dwarf2out.h:441
tree element_type
Definition dwarf2out.h:435
bool stride_in_bits
Definition dwarf2out.h:442
tree stride
Definition dwarf2out.h:440
struct array_descr_info::array_descr_dimen dimen[DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN]
tree associated
Definition dwarf2out.h:439
tree base_decl
Definition dwarf2out.h:436
tree data_location
Definition dwarf2out.h:437
tree allocated
Definition dwarf2out.h:438
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 genautomata.cc:499
Definition dwarf2out.cc:3146
Definition double-int.h:50
Definition dwarf2out.h:492
enum dwarf_attribute dw_attr
Definition dwarf2out.h:493
dw_val_node dw_attr_val
Definition dwarf2out.h:494
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:338
dw_discr_list_ref dw_discr_next
Definition dwarf2out.h:339
int dw_discr_range
Definition dwarf2out.h:346
dw_discr_value dw_discr_lower_bound
Definition dwarf2out.h:341
dw_discr_value dw_discr_upper_bound
Definition dwarf2out.h:342
Definition dwarf2out.h:222
HOST_WIDE_INT sval
Definition dwarf2out.h:226
union dw_discr_value::@21 v
int pos
Definition dwarf2out.h:223
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:319
enum dwarf_location_atom dw_loc_opc
Definition dwarf2out.h:321
unsigned int frame_offset_rel
Definition dwarf2out.h:328
unsigned int dtprel
Definition dwarf2out.h:324
dw_loc_descr_ref dw_loc_next
Definition dwarf2out.h:320
dw_val_node dw_loc_oprnd1
Definition dwarf2out.h:330
int dw_loc_addr
Definition dwarf2out.h:329
dw_val_node dw_loc_oprnd2
Definition dwarf2out.h:331
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
dw_die_ref die
Definition dwarf2out.h:292
Definition dwarf2out.h:274
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:276
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:349
const HOST_WIDE_INT * get_val() const
Definition dwarf2out.h:356
unsigned int get_precision() const
Definition dwarf2out.h:354
HOST_WIDE_INT val[1]
Definition dwarf2out.h:352
bool operator==(const dw_wide_int &) const
Definition dwarf2out.h:371
HOST_WIDE_INT elt(unsigned int) const
Definition dwarf2out.h:362
unsigned int precision
Definition dwarf2out.h:350
unsigned int len
Definition dwarf2out.h:351
unsigned int get_len() const
Definition dwarf2out.h:355
Definition dwarf2out.h:523
const char * filename
Definition dwarf2out.h:525
const char * key
Definition dwarf2out.h:524
int emitted_number
Definition dwarf2out.h:526
Definition dwarf2out.h:466
union fixed_point_type_info::@22 scale_factor
int binary
Definition dwarf2out.h:473
enum fixed_point_scale_factor scale_factor_kind
Definition dwarf2out.h:469
int decimal
Definition dwarf2out.h:475
tree numerator
Definition dwarf2out.h:478
struct fixed_point_type_info::@22::@23 arbitrary
tree denominator
Definition dwarf2out.h:478
Definition dwarf2out.cc:218
Definition rtl.h:312
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:278
tree val_decl_ref
Definition dwarf2out.h:303
char * val_lbl_id
Definition dwarf2out.h:297
dw_loc_descr_ref val_loc
Definition dwarf2out.h:283
dw_vec_const val_vec
Definition dwarf2out.h:289
dw_wide_int_ptr val_wide
Definition dwarf2out.h:288
HOST_WIDE_INT val_int
Definition dwarf2out.h:284
dw_loc_list_ref val_loc_list
Definition dwarf2out.h:281
struct dwarf_file_data * val_file_implicit
Definition dwarf2out.h:300
unsigned val_fde_index
Definition dwarf2out.h:295
struct indirect_string_node * val_str
Definition dwarf2out.h:296
dw_discr_value val_discr_value
Definition dwarf2out.h:309
dw_discr_list_ref val_discr_list
Definition dwarf2out.h:310
unsigned char val_data8[8]
Definition dwarf2out.h:302
double_int val_double
Definition dwarf2out.h:287
struct dw_val_node::dw_val_struct_union::dw_val_die_union val_die_ref
rtx val_addr
Definition dwarf2out.h:279
unsigned HOST_WIDE_INT val_unsigned
Definition dwarf2out.h:286
struct dwarf_file_data * val_file
Definition dwarf2out.h:299
unsigned char val_flag
Definition dwarf2out.h:298
unsigned HOST_WIDE_INT val_offset
Definition dwarf2out.h:280
struct dw_val_node::dw_val_struct_union::dw_val_vms_delta_union val_vms_delta
char * val_symbolic_view
Definition dwarf2out.h:311
dw_die_ref val_view_list
Definition dwarf2out.h:282
T * end(vec< T, A, L > *v)
Definition vec.h:457
T * begin(vec< T, A, L > *v)
Definition vec.h:455