This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR 14262 breakage on Darwin
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: Ulrich Weigand <weigand at i1 dot informatik dot uni-erlangen dot de>
- Cc: gcc-patches at gcc dot gnu dot org, andreast at gcc dot gnu dot org,wilson at specifixinc dot com
- Date: Fri, 26 Mar 2004 00:48:00 +1030
- Subject: Re: [PATCH] Fix PR 14262 breakage on Darwin
- References: <200403242300.AAA14452@faui1d.informatik.uni-erlangen.de>
On Thu, Mar 25, 2004 at 12:00:32AM +0100, Ulrich Weigand wrote:
> unfortunately my patch to fix PR 14262 broke Darwin, as pointed out
> by Andreas Tobler (in the PR record).
I suspect that libffi for darwin ought to use the stack copy..
> happens on Darwin, where 3-byte structs are supposed to be passed
> left-aligned on the stack *and* left-aligned in a register, and
> the callee reads them left-aligned from the stack.
..because this seems a little weird. I don't think the function call
machinery in gcc is intended to support args passed both in regs and
on the stack, at least not without using PARALLELs to describe the
reg and stack copies separately. See the struct arg_data.pass_on_stack
comment.
> PS: Alan, I'm not sure what to do if BLOCK_REG_PADDING is defined.
> Should this also be applied for arguments passed both in registers
> and on the stack? It doesn't matter for Darwin right now, which
> doesn't currently define BLOCK_REG_PADDING ...
locate.where_pad will be "none" when pass_on_stack is true, so adding
!args[i].pass_on_stack won't do anything.
--
Alan Modra
IBM OzLabs - Linux Technology Centre