Commit b33493e3 by Alexandre Oliva Committed by Alexandre Oliva

function.c (adjust_trampoline_addr): New function.

* function.c (adjust_trampoline_addr): New function.
(trampoline_address): Call it instead of round_trampoline_addr().
* tm.texi (TRAMPOLINE_ADJUST_ADDRESS): Document it.

From-SVN: r38279
parent 1e0cdc10
2000-12-15 Alexandre Oliva <aoliva@redhat.com>
* function.c (adjust_trampoline_addr): New function.
(trampoline_address): Call it instead of round_trampoline_addr().
* tm.texi (TRAMPOLINE_ADJUST_ADDRESS): Document it.
2000-12-14 Zack Weinberg <zack@wolery.stanford.edu> 2000-12-14 Zack Weinberg <zack@wolery.stanford.edu>
* cppfiles.c (hack_vms_include_specification): Delete function * cppfiles.c (hack_vms_include_specification): Delete function
......
...@@ -279,6 +279,7 @@ static void pad_below PARAMS ((struct args_size *, enum machine_mode, ...@@ -279,6 +279,7 @@ static void pad_below PARAMS ((struct args_size *, enum machine_mode,
tree)); tree));
#endif #endif
static rtx round_trampoline_addr PARAMS ((rtx)); static rtx round_trampoline_addr PARAMS ((rtx));
static rtx adjust_trampoline_addr PARAMS ((rtx));
static tree *identify_blocks_1 PARAMS ((rtx, tree *, tree *, tree *)); static tree *identify_blocks_1 PARAMS ((rtx, tree *, tree *, tree *));
static void reorder_blocks_1 PARAMS ((rtx, tree, varray_type *)); static void reorder_blocks_1 PARAMS ((rtx, tree, varray_type *));
static tree blocks_nreverse PARAMS ((tree)); static tree blocks_nreverse PARAMS ((tree));
...@@ -5553,7 +5554,7 @@ trampoline_address (function) ...@@ -5553,7 +5554,7 @@ trampoline_address (function)
for (link = trampoline_list; link; link = TREE_CHAIN (link)) for (link = trampoline_list; link; link = TREE_CHAIN (link))
if (TREE_PURPOSE (link) == function) if (TREE_PURPOSE (link) == function)
return return
round_trampoline_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0)); adjust_trampoline_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0));
for (fp = outer_function_chain; fp; fp = fp->next) for (fp = outer_function_chain; fp; fp = fp->next)
for (link = fp->x_trampoline_list; link; link = TREE_CHAIN (link)) for (link = fp->x_trampoline_list; link; link = TREE_CHAIN (link))
...@@ -5561,7 +5562,7 @@ trampoline_address (function) ...@@ -5561,7 +5562,7 @@ trampoline_address (function)
{ {
tramp = fix_lexical_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0), tramp = fix_lexical_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0),
function); function);
return round_trampoline_addr (tramp); return adjust_trampoline_addr (tramp);
} }
/* None exists; we must make one. */ /* None exists; we must make one. */
...@@ -5612,7 +5613,7 @@ trampoline_address (function) ...@@ -5612,7 +5613,7 @@ trampoline_address (function)
} }
tramp = fix_lexical_addr (XEXP (tramp, 0), function); tramp = fix_lexical_addr (XEXP (tramp, 0), function);
return round_trampoline_addr (tramp); return adjust_trampoline_addr (tramp);
} }
/* Given a trampoline address, /* Given a trampoline address,
...@@ -5634,6 +5635,21 @@ round_trampoline_addr (tramp) ...@@ -5634,6 +5635,21 @@ round_trampoline_addr (tramp)
#endif #endif
return tramp; return tramp;
} }
/* Given a trampoline address, round it then apply any
platform-specific adjustments so that the result can be used for a
function call . */
static rtx
adjust_trampoline_addr (tramp)
rtx tramp;
{
tramp = round_trampoline_addr (tramp);
#ifdef TRAMPOLINE_ADJUST_ADDRESS
TRAMPOLINE_ADJUST_ADDRESS (tramp);
#endif
return tramp;
}
/* Put all this function's BLOCK nodes including those that are chained /* Put all this function's BLOCK nodes including those that are chained
onto the first block into a vector, and return it. onto the first block into a vector, and return it.
......
...@@ -4034,6 +4034,16 @@ an RTX for the address of the nested function; @var{static_chain} is an ...@@ -4034,6 +4034,16 @@ an RTX for the address of the nested function; @var{static_chain} is an
RTX for the static chain value that should be passed to the function RTX for the static chain value that should be passed to the function
when it is called. when it is called.
@findex TRAMPOLINE_ADJUST_ADDRESS
@item TRAMPOLINE_ADJUST_ADDRESS (@var{addr})
A C statement that should perform any machine-specific adjustment in
the address of the trampoline. Its argument contains the address that
was passed to @code{INITIALIZE_TRAMPOLINE}. In case the address to be
used for a function call should be different from the address in which
the template was stored, the different address should be assigned to
@var{addr}. If this macro is not defined, @var{addr} will be used for
function calls.
@findex ALLOCATE_TRAMPOLINE @findex ALLOCATE_TRAMPOLINE
@item ALLOCATE_TRAMPOLINE (@var{fp}) @item ALLOCATE_TRAMPOLINE (@var{fp})
A C expression to allocate run-time space for a trampoline. The A C expression to allocate run-time space for a trampoline. The
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment