This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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: gcc-4.9.2: Assembly for i386 Target


@Stefan: Thanks a lot for replying. These are the excerpts from
http://www.uclibc.org/docs/psABI-i386.pdf (Section 2.2.2. Page 10):
"The end of the input argument area shall be aligned on a 16 (32, if
__m256 is passed on stack) byte boundary. In other words, the value
(%esp + 4) is always a multiple of 16 (32)when control is transferred
to the function entry point."
This means that even i386 ABI mandates 16-byte (or 32-byte) alignment
of stack. Hence, these 3 assembly instructions should have been
generated for x86_64 architecture as well.


@Jonathan: The reason I started this discussion is due to my suspicion
of a potential bug in gcc-4.9.2. However, I may be wrong. Here is the
explanation:

As per the discussion in this thread, it is clear that both i386 ABI
and AMD64 ABI (http://www.x86-64.org/documentation/abi.pdf, Section
3.3.2) mandates 16 (or 32) byte stack alignment once the control
reaches at function entry point.

1. If these 3 assembly instructions are being generated to fulfill the
stack alignment condition for 'main' function, then it leads me to
believe 2 things:
      a) These 3 assembly instructions should have been generated for
x86_64 architecture as well. But they are not.
      b) If we focus on one of the statements I wrote above "In other
words, the value (%esp + 4) is always a multiple of 16 (32) when
control is transferred to the
          function entry point", the alignment should not have
happened inside main function rather before the control transfers to
main function. Hence, these 3 assembly
          instructions should have never been a part of the 'main'
function but the function calling 'main'.

2. If these 3 assembly instructions are not generated to fulfill stack
alignment condition for 'main' function but for some function called
from inside main ( 'printf' in this case), then it should have been
done for x86_64 case also.

Please mention if I am missing anything here.

Thanks

On Mon, Oct 12, 2015 at 1:05 PM, Abhishek Aggarwal
<abhiinnitald@gmail.com> wrote:
>
> @Stefan: Thanks a lot for replying. These are the excerpts from
> http://www.uclibc.org/docs/psABI-i386.pdf (Section 2.2.2. Page 10):
> "The end of the input argument area shall be aligned on a 16 (32, if __m256
> is passed on stack) byte boundary. In other words, the value (%esp + 4) is
> always a multiple of 16 (32) when control is transferred to the function
> entry point."
> This means that even i386 ABI mandates 16-byte (or 32-byte) alignment of
> stack. Hence, these 3 assembly instructions should have been generated for
> x86_64 architecture as well.
>
>
> @Jonathan: The reason I started this discussion is due to my suspicion of a
> potential bug in gcc-4.9.2. However, I may be wrong. Here is the
> explanation:
>
> As per the discussion in this thread, it is clear that both i386 ABI and
> AMD64 ABI (http://www.x86-64.org/documentation/abi.pdf, Section 3.3.2)
> mandates 16 (or 32) byte stack alignment once the control reaches at
> function entry point.
>
> 1. If these 3 assembly instructions are being generated to fulfill the stack
> alignment condition for 'main' function, then it leads me to believe 2
> things:
>       a) These 3 assembly instructions should have been generated for x86_64
> architecture as well. But they are not.
>       b) If we focus on one of the statements I wrote above "In other words,
> the value (%esp + 4) is always a multiple of 16 (32) when control is
> transferred to the
>           function entry point", the alignment should not have happened
> inside main function rather before the control transfers to main function.
> Hence, these 3 assembly
>           instructions should have never been a part of the 'main' function
> but the function calling 'main'.
>
> 2. If these 3 assembly instructions are not generated to fulfill stack
> alignment condition for 'main' function but for some function called from
> inside main ( 'printf' in this case), then it should have been done for
> x86_64 case also.
>
> Please mention if I am missing anything here.
>
> Thanks
>


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