This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Pushing Inferior Function Arguments onto Stack on PowerPC64 machines


Thanks for all the feedback. Will try to write up the fix along the lines which Daniel mentioned and post to the list.

Janani

Daniel Jacobowitz <drow@false.org> wrote on 10/04/2006 03:52:21 PM:

On Wed, Oct 04, 2006 at 04:43:04PM -0400, David Edelsohn wrote:
> >>>>> Daniel Jacobowitz writes:
> > >> From reading the PPC64 Platform ABI at
> >> http://www.freestandards.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html
> >> ( see section 3.1.7) it appears that on Big Endian machines,
> >> values are left aligned. But looks like GCC has different rules and right
> >> aligns the values which are put on the
> >> registers. This matches Andrew Cagney comment in the code, that says that
> >> ABI specifies that the values
> >> should be left aligned. But like I said in my earlier note, GCCappears to
> >> want the values to be
> >> right aligned. Would appreciate another set of eyes looking at it as I
> >> don't have too much experience
> >> in this area.
> > The PPC64 Linux ABI changed. AIX always pads upwards. PPC64
> Linux pads aggregates smaller than a doubleword downward.
> > "An aggregate or union smaller than one doubleword in size is padded so
> that it appears in the least significant bits of the doubleword. All
> others are padded, if necessary, at their tail."


Thank you (and thanks to Andreas for answering, too).

In that case, the Linux and AIX configurations ought to be calling
different functions here.  Janani, if you want to try to fix this,
I would recommend:

  - Rename the existing function.  Add an argument to it, is_linux.
  - Create a wrapper function with the old name, in the same file,
    for AIX to use.
  - Create a wrapper function in ppc-linux-tdep.c which calls it with
    is_linux == 1.
  - Call set_gdbarch_push_dummy_call in the PPC64 section of
    ppc_linux_init_abi.

--
Daniel Jacobowitz
CodeSourcery



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]