[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Here is the basic stack layout.
STACK_GROWS_DOWNWARD
When we say, "define this macro if ...," it means that the
compiler checks this macro only with #ifdef
so the precise
definition used does not matter.
FRAME_GROWS_DOWNWARD
ARGS_GROW_DOWNWARD
STARTING_FRAME_OFFSET
If FRAME_GROWS_DOWNWARD
, find the next slot's offset by
subtracting the first slot's length from STARTING_FRAME_OFFSET
.
Otherwise, it is found by adding the length of the first slot to the
value STARTING_FRAME_OFFSET
.
STACK_POINTER_OFFSET
If ARGS_GROW_DOWNWARD
, this is the offset to the location above
the first location at which outgoing arguments are placed.
FIRST_PARM_OFFSET (fundecl)
If ARGS_GROW_DOWNWARD
, this is the offset to the location above
the first argument's address.
STACK_DYNAMIC_OFFSET (fundecl)
alloca
.
The default value for this macro is STACK_POINTER_OFFSET
plus the
length of the outgoing arguments. The default is correct for most
machines. See `function.c' for details.
DYNAMIC_CHAIN_ADDRESS (frameaddr)
If you don't define this macro, the default is to return the value of frameaddr---that is, the stack frame address is also the address of the stack word that points to the previous frame.
SETUP_FRAME_ADDRESSES
BUILTIN_SETJMP_FRAME_VALUE
setjmp
buffer.
The default value, virtual_stack_vars_rtx
, is correct for most
machines. One reason you may need to define this macro is if
hard_frame_pointer_rtx
is the appropriate value on your machine.
RETURN_ADDR_RTX (count, frameaddr)
RETURN_ADDR_IN_PREVIOUS_FRAME
is defined.
The value of the expression must always be the correct address when
count is zero, but may be NULL_RTX
if there is not way to
determine the return address of other frames.
RETURN_ADDR_IN_PREVIOUS_FRAME
INCOMING_RETURN_ADDR_RTX
REG
, indicating that the return
value is saved in `REG', or a MEM
representing a location in
the stack.
You only need to define this macro if you want to support call frame debugging information like that provided by DWARF 2.
If this RTL is a REG
, you should also define
DWARF_FRAME_RETURN_COLUMN to DWARF_FRAME_REGNUM (REGNO)
.
INCOMING_FRAME_SP_OFFSET
You only need to define this macro if you want to support call frame debugging information like that provided by DWARF 2.
ARG_POINTER_CFA_OFFSET (fundecl)
INCOMING_FRAME_SP_OFFSET
. Which is unfortunately not usable
during virtual register instantiation.
The default value for this macro is FIRST_PARM_OFFSET (fundecl)
,
which is correct for most machines; in general, the arguments are found
immediately before the stack frame. Note that this is not the case on
some targets that save registers into the caller's frame, such as SPARC
and rs6000, and so such targets need to define this macro.
You only need to define this macro if the default is incorrect, and you want to support call frame debugging information like that provided by DWARF 2.
EH_RETURN_DATA_REGNO (N)
INVALID_REGNUM
if fewer than
N registers are usable.
The exception handling library routines communicate with the exception handlers via a set of agreed upon registers. Ideally these registers should be call-clobbered; it is possible to use call-saved registers, but may negatively impact code size. The target must support at least 2 data registers, but should define 4 if there are enough free registers.
You must define this macro if you want to support call frame exception handling like that provided by DWARF 2.
EH_RETURN_STACKADJ_RTX
Typically this is a call-clobbered hard register that is otherwise untouched by the epilogue, but could also be a stack slot.
You must define this macro if you want to support call frame exception handling like that provided by DWARF 2.
EH_RETURN_HANDLER_RTX
Typically this is the location in the call frame at which the normal
return address is stored. For targets that return by popping an
address off the stack, this might be a memory address just below
the target call frame rather than inside the current call
frame. EH_RETURN_STACKADJ_RTX
will have already been assigned,
so it may be used to calculate the location of the target call frame.
Some targets have more complex requirements than storing to an
address calculable during initial code generation. In that case
the eh_return
instruction pattern should be used instead.
If you want to support call frame exception handling, you must
define either this macro or the eh_return
instruction pattern.
ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL)
CODE is 0 for data, 1 for code labels, 2 for function pointers.
GLOBAL is true if the symbol may be affected by dynamic relocations.
The macro should return a combination of the DW_EH_PE_*
defines
as found in `dwarf2.h'.
If this macro is not defined, pointers will not be encoded but represented directly.
ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE)
ASM_PREFERRED_EH_DATA_FORMAT
.
Generic code takes care of pc-relative and indirect encodings; this must
be defined if the target uses text-relative or data-relative encodings.
This is a C statement that branches to DONE if the format was
handled. ENCODING is the format chosen, SIZE is the number
of bytes that the format occupies, ADDR is the SYMBOL_REF
to be emitted.
SMALL_STACK
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |