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


Sorry about the email address goofup. Am trying to use a new account so that HTML tags don't get in the way. Have to figure out a way to enable me to receive email at this address. My other external email address is janani@us.ibm.com

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, GCC appears 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.


Daniel Jacobowitz <drow@false.org> wrote on 10/04/2006 02:10:56 PM:

On Wed, Oct 04, 2006 at 03:00:34PM -0400, janani@linux.ibm.com wrote:
> I am new to this, so my interpretation might not be completely > accurate, but the way I read the note below ( a snippet from the GNU > GCC Manual about passing function arguments in registers) is that > since PPC64 is big endian, even though the default is to pad downward > (i.e. right align), if the size if greater than the size of an int, > you need to pad upward (left align).


You're trying to answer the wrong question :-)

It's not "what does GCC do", but "what does the platform ABI say we
should do".  Is GCC conforming to the ABI?  Is the ABI wrong, or out of
date, or was Andrew's reading of it wrong, or...

There could be a real problem here, so it's important that we
understand what is _supposed_ to happen before we make a change.
If GCC is violating the ABI, then either GCC or the ABI may need to be
updated.  If GDB is misinterpreting the ABI, then just GDB needs to be
changed.

--
Daniel Jacobowitz
CodeSourcery

! 		 		       /* WARNING: cagney/2003-09-21: As best I can
! 		 		          tell, the ABI specifies that the value should
! 		 		          be left aligned.  Unfortunately, GCC doesn't
! 		 		          do this - it instead right aligns even sized
! 		 		          values and puts odd sized values on the
! 		 		          stack.  Work around that by putting both a
! 		 		          left and right aligned value into the
! 		 		          register (hopefully no one notices :-^).
! 		 		          Arrrgh!  */
! 		 		       /* Left aligned (8 byte values such as pointers
! 		 		          fill the buffer).  */
! 		 		       memcpy (regval, val + byte, len);
! 		 		       /* Right aligned (but only if even).  */
! 		 		       if (len == 1 || len == 2 || len == 4)
! 		 		 		 memcpy (regval + tdep->wordsize - len,

Janani Janakiraman



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