Commit 6cb6c3b3 by Michael Meissner

Fix varardic function returning a structure or union.

From-SVN: r2205
parent 372e033b
...@@ -2400,7 +2400,19 @@ init_cumulative_args (cum, fntype, libname) ...@@ -2400,7 +2400,19 @@ init_cumulative_args (cum, fntype, libname)
tree param, next_param; tree param, next_param;
if (TARGET_DEBUG_E_MODE) if (TARGET_DEBUG_E_MODE)
fprintf (stderr, "\ninit_cumulative_args\n"); {
fprintf (stderr, "\ninit_cumulative_args, fntype = 0x%.8lx", (long)fntype);
if (!fntype)
fputc ('\n', stderr);
else
{
tree ret_type = TREE_TYPE (fntype);
fprintf (stderr, ", fntype code = %s, ret code = %s\n",
tree_code_name[ (int)TREE_CODE (fntype) ],
tree_code_name[ (int)TREE_CODE (ret_type) ]);
}
}
cum->gp_reg_found = 0; cum->gp_reg_found = 0;
cum->arg_number = 0; cum->arg_number = 0;
......
...@@ -473,7 +473,7 @@ while (0) ...@@ -473,7 +473,7 @@ while (0)
/* Print subsidiary information on the compiler version in use. */ /* Print subsidiary information on the compiler version in use. */
#define MIPS_VERSION "[AL 1.1, MM 25]" #define MIPS_VERSION "[AL 1.1, MM 26]"
#ifndef MACHINE_TYPE #ifndef MACHINE_TYPE
#define MACHINE_TYPE "BSD Mips" #define MACHINE_TYPE "BSD Mips"
...@@ -1623,16 +1623,19 @@ extern struct mips_frame_info current_frame_info; ...@@ -1623,16 +1623,19 @@ extern struct mips_frame_info current_frame_info;
`ACCUMULATE_OUTGOING_ARGS'. */ `ACCUMULATE_OUTGOING_ARGS'. */
#define ACCUMULATE_OUTGOING_ARGS #define ACCUMULATE_OUTGOING_ARGS
/* Offset of first parameter from the argument pointer register value. */ /* Offset from the argument pointer register to the first argument's
#define FIRST_PARM_OFFSET(FNDECL) 0 address. On some machines it may depend on the data type of the
function.
/* Offset from top-of-stack address to location to store the If `ARGS_GROW_DOWNWARD', this is the offset to the location above
function parameter if it can't go in a register. the first argument's address. */
Addresses for following parameters are computed relative to this one.
It also has the effect of counting register arguments in the total #define FIRST_PARM_OFFSET(FNDECL) \
argument size. */ (FNDECL != 0 \
#define FIRST_PARM_CALLER_OFFSET(FNDECL) 0 && TREE_TYPE (FNDECL) != 0 \
&& TREE_TYPE (TREE_TYPE (FNDECL)) != 0 \
&& (TREE_CODE (TREE_TYPE (TREE_TYPE (FNDECL))) == RECORD_TYPE \
|| TREE_CODE (TREE_TYPE (TREE_TYPE (FNDECL))) == UNION_TYPE) ? 4 : 0)
/* When a parameter is passed in a register, stack space is still /* When a parameter is passed in a register, stack space is still
allocated for it. For the MIPS, stack space must be allocated, cf allocated for it. For the MIPS, stack space must be allocated, cf
......
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