----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....

Reply via email to