----Original Message----
>From: Dave Korn
>Sent: 20 July 2005 11:56
Couple of minor corrections:
>
>
HOST_WIDE_INT tsize = cfun->machine->frame.total_size;
>
> if (!flag_inhibit_size_directive)
> {
> /* .frame FRAMEREG, FRAMESIZE, RETREG */
> fprintf (file,
> "\t.frame\t%s," HOST_WIDE_INT_PRINT_DEC ",%s\t\t"
> "# vars= " HOST_WIDE_INT_PRINT_DEC ", regs= %d/%d"
> ", args= " HOST_WIDE_INT_PRINT_DEC
> ", gp= " HOST_WIDE_INT_PRINT_DEC "\n",
> (reg_names[(frame_pointer_needed)
> ? HARD_FRAME_POINTER_REGNUM :
> STACK_POINTER_REGNUM]),
> ((frame_pointer_needed && TARGET_MIPS16)
> ? tsize - cfun->machine->frame.args_size
> : tsize),
> reg_names[GP_REG_FIRST + 31],
> cfun->machine->frame.var_size,
> cfun->machine->frame.num_gp,
> cfun->machine->frame.num_fp,
> cfun->machine->frame.args_size,
> cfun->machine->frame.cprestore_size);
>
> Hmm. Perhaps we have HOST_WIDE_INT problems for mingw host here? If
... either HOST_WIDE_INT or ...
> cfun->machine->frame.var_size was a long long, and HOST_WIDE_INT_PRINT_DEC
> for mingw is just "%d" or "%ld" rather than "%lld", that would push an
> extra NULL word onto the stack that would be taken as the parameter for
> %s because the "%d" wouldn't be advancing the varargs pointer past the
> whole of the second format arg...
Ooops, slight braino there. I meant the second argument involving
cfun->machine->frame.args_size may be pushing reg_names[GP_REG_FIRST + 31]
along. You could verify that was happening by running cc1 under gdb,
setting a breakpoint here, and checking that reg_names[GP_REG_FIRST + 31]
isn't actually NULL. You may also be able to workaround the bug with
-finhibit-size-directive.
cheers,
DaveK
--
Can't think of a witty .sigline today....