diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1997-08-02 13:22:01 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1997-08-02 13:22:01 -0400 |
commit | 5b838011fe8f31b03f2194d2d93cd1f8ea7300e1 (patch) | |
tree | 2910b4babab06ef8ba96370223f69ab61e47eef5 /gcc | |
parent | 7c6d41201350820950728973099f783e1976b444 (diff) | |
download | gcc-5b838011fe8f31b03f2194d2d93cd1f8ea7300e1.zip gcc-5b838011fe8f31b03f2194d2d93cd1f8ea7300e1.tar.gz gcc-5b838011fe8f31b03f2194d2d93cd1f8ea7300e1.tar.bz2 |
(alpha_builtin_saveregs): If -fcheck-memory-usage, set rights of saved
registers.
From-SVN: r14620
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/alpha/alpha.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index c918b5b..de66e1d 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1536,7 +1536,7 @@ struct rtx_def * alpha_builtin_saveregs (arglist) tree arglist; { - rtx block, addr, argsize; + rtx block, addr, dest, argsize; tree fntype = TREE_TYPE (current_function_decl); int stdarg = (TYPE_ARG_TYPES (fntype) != 0 && (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype))) @@ -1591,14 +1591,28 @@ alpha_builtin_saveregs (arglist) /* Store the address of the first integer register in the __base member. */ - emit_move_insn (change_address (block, ptr_mode, XEXP (block, 0)), addr); + dest = change_address (block, ptr_mode, XEXP (block, 0)); + emit_move_insn (dest, addr); + if (flag_check_memory_usage) + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, dest, + ptr_mode, GEN_INT (GET_MODE_SIZE (ptr_mode)), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), QImode); + /* Store the argsize as the __va_offset member. */ - emit_move_insn - (change_address (block, TYPE_MODE (integer_type_node), - plus_constant (XEXP (block, 0), - POINTER_SIZE/BITS_PER_UNIT)), - argsize); + dest = change_address (block, TYPE_MODE (integer_type_node), + plus_constant (XEXP (block, 0), + POINTER_SIZE/BITS_PER_UNIT)); + emit_move_insn (dest, argsize); + + if (flag_check_memory_usage) + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, dest, + ptr_mode, + GEN_INT (GET_MODE_SIZE + (TYPE_MODE (integer_type_node))), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), QImode); /* Return the address of the va_list constructor, but don't put it in a register. Doing so would fail when not optimizing and produce worse |