This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Bug in x86-64 psABI or in gcc?
On Wed, Dec 9, 2009 at 7:51 AM, Andrew Haley <aph@redhat.com> wrote:
> H.J. Lu wrote:
>> On Wed, Dec 9, 2009 at 7:10 AM, Andrew Haley <aph@redhat.com> wrote:
>>> H. Peter Anvin wrote:
>>>> On 12/09/2009 06:56 AM, Michael Matz wrote:
>>>>>> Aren't bits in the _Bool byte of"bar" specified by the psABI
>>>>> Right now they are specified in the psABI, you suggested to remove that
>>>>> specification.
>>>>>
>>>> The intent of H.J.'s proposal is to require bits <7:1> == 0 in all cases
>>>> (and higher bits as don't cares, the same way a char is passed), as
>>>> opposed to the current text which requires <63:1> == 0 when passed as
>>>> registers or on the stack (and <7:1> == 0 when stored in a memory
>>>> object.) ?Furthermore, the current psABI text is inconsistent for
>>>> arguments are return values; this is a bug in the wordsmithing of the
>>>> text rather than intentional, if I remember the original discussions
>>>> correctly.
>>> Surely Postel's Law applies:
>>>
>>> ?Be conservative in what you do; be liberal in what you accept from others.
>>>
>>> So, return values should be zero-extended to the full word, but we shouldn't
>>> assume that parameters will be.
>>
>> I guess you missed the discussion around July 2007:
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42324#c5
>
> No, I didn't miss it. ?We have had discussions about this before.
> I still think Postel's Law applies, particularly as we have an
> explicit guarantee in the psABI that
>
> ---
> When a value of type _Bool is passed in a register or on the stack,
> the upper 63 bits of the eightbyte shall be zero.
> ---
Please read it again. It is only for parameter passing, not for
function return. Since gcc 4.3, we return _Bool in %AL.
--
H.J.