On Wed, Dec 04, 2013 at 09:36:12PM -0200, Marcelo Cerri wrote:
> On Wed, Dec 04, 2013 at 09:52:19PM +0100, Andy Polyakov wrote:
> > >A new Linux ABI, called ELFv2, was created for the little-endian PPC64
> > >platform. It includes several changes to the current ABI and affects
> > >mainly how functions are called between modules/objects. Functions
> > >descriptors are not used in the new ABI and this patch updates how the
> > >directives .globl and .size generates code to LE.
> > >
> > >Further information can be found at
> > >http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01141.html
> > 
> > It suggests that there ought to be .abiversion 2 and .localentry.
> 
> You are right. It seems the GNU linker is not enforcing that. But it 
> should use .abiversion 2

oops. I meant to say GNU assembler.

> 
> > 
> > >---
> > > crypto/perlasm/ppc-xlate.pl | 7 ++++---
> > > 1 file changed, 4 insertions(+), 3 deletions(-)
> > >
> > >diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl
> > >index 118da16..7a3f858 100755
> > >--- a/crypto/perlasm/ppc-xlate.pl
> > >+++ b/crypto/perlasm/ppc-xlate.pl
> > >@@ -27,7 +27,8 @@ my $globl = sub {
> > >   /osx/           && do { $name = "_$name";
> > >                           last;
> > >                         };
> > >-  /linux.*32/     && do { $ret .= ".globl $name\n";
> > >+  /linux.*32/     ||
> > >+  /linux.*64le/   && do { $ret .= ".globl $name\n";
> > 
> > This doesn't look right from operator associativity viewpoint...
> 
> Yes, it should affect 32-bit. I checked the generated assembly code for
> linux-ppc, linux-ppc64 and linu-ppc64le before submitting. But I was
> unlucky and linux-ppc ended up being handled by the if (!$ret)
> statement.
> 
> > 
> > http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=f586d97191ad9821faea026df68aceaba45d1800
> > 
> 
> No need for .localentry here. It is necessary when local and global
> entry points don't coincide. That usually happens when the function, or
> any other function that might be called by it, needs to access data via 
> TOC and then r2 needs to be set properly.
> 
> That is an example of the intended usage (based on FUNC_START macro):
> 
> .type some_function,@function
> .globl some_function
> some_function:
> 0:  addis 2,12,(.TOC.-0b)@ha
>     aaddi 2,2,(.TOC.-0b)@l
>     .localentry some_function,.-some_function
>     # function code goes here
>     blr
> 
> In that case, .localentry will include in ELF the offset (2) between
> both entry points.
> 
> Regards,
> Marcelo
> 
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> Development Mailing List                       [email protected]
> Automated List Manager                           [email protected]
> 

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [email protected]

Reply via email to