function.c (adjust_trampoline_addr): New function.
authorAlexandre Oliva <aoliva@redhat.com>
Fri, 15 Dec 2000 09:09:41 +0000 (09:09 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Fri, 15 Dec 2000 09:09:41 +0000 (09:09 +0000)
* 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

gcc/ChangeLog
gcc/function.c
gcc/tm.texi

index a52343aaf834bb9d6ccbba9e05279555c8740040..76e45c63c7de57be8629c1cc1a8913959d8aa044 100644 (file)
@@ -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
index 07992162067afb7cb6d47ffab73f5a37f9e93de9..d2ce5b54c4b166a79c71a415b3eb5f6fae6b61bb 100644 (file)
@@ -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;
+}
 \f
 /* Put all this function's BLOCK nodes including those that are chained
    onto the first block into a vector, and return it.
index 03249881daf9dd722211bc5d6e8f14ed62e82865..e60330dd2a299410ceebfd25418151f4f001a022 100644 (file)
@@ -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