This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: analysis #2: alpha bootstrap failure on mainline
- From: Roger Sayle <roger at www dot eyesopen dot com>
- To: Alan Modra <amodra at bigpond dot net dot au>
- Cc: gcc at gcc dot gnu dot org
- Date: Wed, 7 May 2003 08:05:54 -0600 (MDT)
- Subject: Re: analysis #2: alpha bootstrap failure on mainline
On Wed, 7 May 2003, Alan Modra wrote:
> On Wed, May 07, 2003 at 02:04:23PM +0930, Alan Modra wrote:
> > On Tue, May 06, 2003 at 09:51:19PM -0600, Roger Sayle wrote:
> > > Have there been any recent changes to how multiple structures that
> > > aren't a multiple of a word size are passed to functions that return
> > > structures? Does anyone recognize this?
> >
> > I gave the function arg code a poke on 20030502. You might like to
> > try reverting my patch and see if that fixes the testcase.
Hi Alan,
Thanks for the pointer. Yep, that's the cause. Reverting the following
patch allows alphaev67-dec-osf5.1 to complete the three stage bootstrap
of the core compilers.
2003-05-02 Alan Modra <amodra@bigpond.net.au>
* calls.c (struct arg_data): Move offset, slot_offset, size and
alignment_pad to struct locate_and_pad_arg_data. Update all refs.
(initialize_argument_information): Adjust call to locate_and_pad_parm.
Delete alignment_pad var. Don't calculate slot_offset here.
(emit_library_call_value_1): Delete alignment_pad, offset and size
vars. Use struct locate_and_pad_arg_data instead. Adjust refs.
Adjust call to locate_and_pad_parm. Don't tweak arg size for
partial in-regs here. Formatting fixes.
* expr.h (struct locate_and_pad_arg_data): New struct.
(locate_and_pad_parm): Adjust declaration.
* function.c (assign_parms): Localize vars. Use "locate" instead
of other arg location vars. Don't invoke FUNCTION_ARG or
FUNCTION_INCOMING_ARG unless pretend_named is different from
named_arg. Heed MUST_PASS_IN_STACK and set up "partial" before
calling locate_and_pad_parm. Adjust locate_and_pad_parm call.
Use slot_offset for stack home of reg parms. Correct test for
parm passed in memory. Formatting fixes.
(locate_and_pad_parm): Add "partial" to params. Replace offset_ptr
arg_size_ptr and alignment pad with "locate". Set slot_offset here.
Correct initial_offset_ptr handling. Localize vars. Always pad
locate->offset even when in_regs.
Unfortunately, the bootstrap goes on to fail building ./libs/libgcj.la-4.o
with numerous error messages of the form:
.libs/libgcj.la-4.o: branch relocation out-of-range, bad object file
produced, can't branch from 0x3ffbfff8870 to 0xfffffffffffffffc
But that's another investigation.
> Or better, http://gcc.gnu.org/ml/gcc-patches/2003-05/msg00575.html
Excellent. I'll check whether this fixes the regression.
Roger
--