summaryrefslogtreecommitdiff
path: root/gcc/target.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/target.h')
-rw-r--r--gcc/target.h26
1 files changed, 20 insertions, 6 deletions
diff --git a/gcc/target.h b/gcc/target.h
index eb674c943f1..44e64a9903a 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -120,12 +120,26 @@ struct gcc_target
/* Output a destructor for a symbol with a given priority. */
void (* destructor) PARAMS ((rtx, int));
- /* Output the assembler code for a thunk function. */
- void (* output_mi_thunk) PARAMS ((FILE *, tree, HOST_WIDE_INT, tree));
-
- /* Output the assembler code for a thunk function with a vcall offset. */
- void (* output_mi_vcall_thunk) PARAMS ((FILE *, tree, HOST_WIDE_INT,
- HOST_WIDE_INT, tree));
+ /* Output the assembler code for a thunk function. THUNK_DECL is the
+ declaration for the thunk function itself, FUNCTION is the decl for
+ the target function. DELTA is an immediate constant offset to be
+ added to THIS. If VCALL_OFFSET is non-zero, the word at
+ *(*this + vcall_offset) should be added to THIS. */
+ void (* output_mi_thunk) PARAMS ((FILE *file, tree thunk_decl,
+ HOST_WIDE_INT delta,
+ HOST_WIDE_INT vcall_offset,
+ tree function_decl));
+
+ /* Determine whether output_mi_thunk would succeed. */
+ /* ??? Ideally, this hook would not exist, and success or failure
+ would be returned from output_mi_thunk directly. But there's
+ too much undo-able setup involved in invoking output_mi_thunk.
+ Could be fixed by making output_mi_thunk emit rtl instead of
+ text to the output file. */
+ bool (* can_output_mi_thunk) PARAMS ((tree thunk_decl,
+ HOST_WIDE_INT delta,
+ HOST_WIDE_INT vcall_offset,
+ tree function_decl));
} asm_out;
/* Functions relating to instruction scheduling. */