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: