Re: double argument casting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> we modified the function *TARGET_PROMOTE_PROTOTYPES
> *(http://goo.gl/2pQQ) and set it to the default value which is FALSE.
>
> static bool
> sparc_promote_prototypes (const_tree fntype ATTRIBUTE_UNUSED)
> {
>   return TARGET_ARCH32 ? true : false;
> }
>
> was replaced by
>
> static bool
> sparc_promote_prototypes (const_tree fntype ATTRIBUTE_UNUSED)
> {
>   return false;
> }

As mentioned in the PR, this will result in ABI violations.  But, in fact, 
this is already visible in the modified assembly code:

> 000102b4 <main>:
>    102b4:    9d e3 bf 98     save  %sp, -104, %sp
>    102b8:    82 10 20 01     mov  1, %g1
>    102bc:    c2 37 bf fc     sth  %g1, [ %fp + -4 ]
>    102c0:    c2 2f bf ff     stb  %g1, [ %fp + -1 ]
>    102c4:    c2 2f bf fe     stb  %g1, [ %fp + -2 ]
>    102c8:    d0 0f bf ff     ldub  [ %fp + -1 ], %o0
>    102cc:    d2 17 bf fc     lduh  [ %fp + -4 ], %o1
>    102d0:    7f ff ff df     call  1024c <somme>
>    102d4:    01 00 00 00     nop

The ABI says that %o1 should be sign-extended since it's for a 'short'.  It is 
now zero-extended, so this isn't conforming.

-- 
Eric Botcazou


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux