diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2000-12-15 09:09:41 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2000-12-15 09:09:41 +0000 |
commit | b33493e3f3257f9b77409659a585bcf86484d123 (patch) | |
tree | ac2831caf34906c434220747ac02464ced602994 /gcc | |
parent | 1e0cdc10363525fb7688ab6fc8654a5c15248795 (diff) | |
download | gcc-b33493e3f3257f9b77409659a585bcf86484d123.zip gcc-b33493e3f3257f9b77409659a585bcf86484d123.tar.gz gcc-b33493e3f3257f9b77409659a585bcf86484d123.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/function.c | 22 | ||||
-rw-r--r-- | gcc/tm.texi | 10 |
3 files changed, 35 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a52343a..76e45c6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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> * cppfiles.c (hack_vms_include_specification): Delete function diff --git a/gcc/function.c b/gcc/function.c index 0799216..d2ce5b5 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -279,6 +279,7 @@ static void pad_below PARAMS ((struct args_size *, enum machine_mode, tree)); #endif 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 void reorder_blocks_1 PARAMS ((rtx, tree, varray_type *)); static tree blocks_nreverse PARAMS ((tree)); @@ -5553,7 +5554,7 @@ trampoline_address (function) for (link = trampoline_list; link; link = TREE_CHAIN (link)) if (TREE_PURPOSE (link) == function) 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 (link = fp->x_trampoline_list; link; link = TREE_CHAIN (link)) @@ -5561,7 +5562,7 @@ trampoline_address (function) { tramp = fix_lexical_addr (XEXP (RTL_EXPR_RTL (TREE_VALUE (link)), 0), function); - return round_trampoline_addr (tramp); + return adjust_trampoline_addr (tramp); } /* None exists; we must make one. */ @@ -5612,7 +5613,7 @@ trampoline_address (function) } tramp = fix_lexical_addr (XEXP (tramp, 0), function); - return round_trampoline_addr (tramp); + return adjust_trampoline_addr (tramp); } /* Given a trampoline address, @@ -5634,6 +5635,21 @@ round_trampoline_addr (tramp) #endif 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 onto the first block into a vector, and return it. diff --git a/gcc/tm.texi b/gcc/tm.texi index 0324988..e60330dd 100644 --- a/gcc/tm.texi +++ b/gcc/tm.texi @@ -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 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 @item ALLOCATE_TRAMPOLINE (@var{fp}) A C expression to allocate run-time space for a trampoline. The |