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