GCC Middle and Back End API Reference
dw_trace_info Struct Reference
Collaboration diagram for dw_trace_info:

Data Fields

rtx head
dw_cfi_rowbeg_row
dw_cfi_rowend_row
HOST_WIDE_INT beg_true_args_size
HOST_WIDE_INT end_true_args_size
HOST_WIDE_INT beg_delay_args_size
HOST_WIDE_INT end_delay_args_size
rtx eh_head
dw_cfa_location cfa_store
dw_cfa_location cfa_temp
vec< reg_saved_in_dataregs_saved_in_regs
unsigned id
bool switch_sections
bool args_size_undefined

Detailed Description

Since we no longer have a proper CFG, we're going to create a facsimile of one on the fly while processing the frame-related insns.

We create dw_trace_info structures for each extended basic block beginning and ending at a "save point". Save points are labels, barriers, certain notes, and of course the beginning and end of the function.

As we encounter control transfer insns, we propagate the "current" row state across the edges to the starts of traces. When checking is enabled, we validate that we propagate the same data from all sources.

All traces are members of the TRACE_INFO array, in the order in which they appear in the instruction stream.

All save points are present in the TRACE_INDEX hash, mapping the insn starting a trace to the dw_trace_info describing the trace.


Field Documentation

bool dw_trace_info::args_size_undefined

True if we've seen different values incoming to beg_true_args_size.

Referenced by change_cfi_row().

HOST_WIDE_INT dw_trace_info::beg_delay_args_size
dw_cfi_row* dw_trace_info::beg_row

The row state at the beginning and end of the trace.

Referenced by change_cfi_row().

HOST_WIDE_INT dw_trace_info::beg_true_args_size

Tracking for DW_CFA_GNU_args_size. The "true" sizes are those we find while scanning insns. However, the args_size value is irrelevant at any point except can_throw_internal_p insns. Therefore the "delay" sizes the values that must actually be emitted for this trace.

Referenced by change_cfi_row().

dw_cfa_location dw_trace_info::cfa_store

The following variables contain data used in interpreting frame related expressions. These are not part of the "real" row state as defined by Dwarf, but it seems like they need to be propagated into a trace in case frame related expressions have been sunk. ??? This seems fragile. These variables are fragments of a larger expression. If we do not keep the entire expression together, we risk not being able to put it together properly. Consider forcing targets to generate self-contained expressions and dropping all of the magic interpretation code in this file. Or at least refusing to shrink wrap any frame related insn that doesn't contain a complete expression. The register used for saving registers to the stack, and its offset from the CFA.

Referenced by change_cfi_row().

dw_cfa_location dw_trace_info::cfa_temp

A temporary register holding an integral value used in adjusting SP or setting up the store_reg. The "offset" field holds the integer value, not an offset.

Referenced by change_cfi_row(), and dwarf2out_frame_debug_cfa_window_save().

rtx dw_trace_info::eh_head

The first EH insn in the trace, where beg_delay_args_size must be set.

HOST_WIDE_INT dw_trace_info::end_delay_args_size
dw_cfi_row * dw_trace_info::end_row
HOST_WIDE_INT dw_trace_info::end_true_args_size
rtx dw_trace_info::head

The insn that begins the trace.

Referenced by before_next_cfi_note(), and connect_traces().

unsigned dw_trace_info::id

An identifier for this trace. Used only for debugging dumps.

Referenced by before_next_cfi_note(), and change_cfi_row().

vec<reg_saved_in_data> dw_trace_info::regs_saved_in_regs

A set of registers saved in other registers. This is the inverse of the row->reg_save info, if the entry is a DW_CFA_register. This is implemented as a flat array because it normally contains zero or 1 entry, depending on the target. IA-64 is the big spender here, using a maximum of 5 entries.

Referenced by change_cfi_row(), queue_reg_save(), and record_reg_saved_in_reg().

bool dw_trace_info::switch_sections

True if this trace immediately follows NOTE_INSN_SWITCH_TEXT_SECTIONS.

Referenced by before_next_cfi_note(), and connect_traces().


The documentation for this struct was generated from the following file: