libtool-patches
[Top][All Lists]
Advanced

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

Re: powerpc*le-linux support


From: Peter Rosin
Subject: Re: powerpc*le-linux support
Date: Thu, 22 Aug 2013 09:59:33 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130620 Thunderbird/17.0.7

Hi!

Ok, Gary pushed something while I wrote this, but I'm sending it
anyway since what he pushed didn't look quite right to me...

On 2013-06-06 07:18, Alan Modra wrote:
> On Thu, Jun 06, 2013 at 11:31:34AM +0930, Alan Modra wrote:
>> This adds support for little-endian powerpc linux, and tidies the
>> existing host match for powerpc.  config.sub won't return ppc*-*linux*
>> so there isn't much point in matching that.
> 
>> -      ppc*-*linux*|powerpc*-*linux*)
>> +      powerpcle*)
>> +        LD="${LD-ld} -m elf64lppc"
>> +        ;;
>> +      powerpc*)
>>          LD="${LD-ld} -m elf64ppc"
>>          ;;
> 
> I didn't get that quite right.  'powerpc*' in the above matches too
> much, for example when your host is powerpc64-linux and target
> powerpc64le-linux you'll get -melf64ppc added to LD.  Since
> powerpc64le-linux-ld wants -melf64lppc (or nothing) that will fail.
> Revised as follows.
> 
>       * m4/libtool.m4 (ld -m flags): Remove non-canonical ppc host match.

The macro/function you are changing is _LT_ENABLE_LOCK, so that should be

        * m4/libtool.m4 (_LT_ENABLE_LOCK): ...

>       Support little-endian powerpc linux host.
> 
> diff --git a/m4/libtool.m4 b/m4/libtool.m4
> index d7013c5..501246d 100644
> --- a/m4/libtool.m4
> +++ b/m4/libtool.m4
> @@ -1307,7 +1307,7 @@ ia64-*-hpux*)
>    rm -rf conftest*
>    ;;
>  
> -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
> +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
>  s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
>    # Find out which ABI we are using.
>    echo 'int i;' > conftest.$ac_ext
> @@ -1328,7 +1328,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
>               ;;
>           esac
>           ;;
> -       ppc64-*linux*|powerpc64-*linux*)
> +       powerpc64le-*)
> +         LD="${LD-ld} -m elf32lppclinux"
> +         ;;
> +       powerpc64-*)
>           LD="${LD-ld} -m elf32ppclinux"
>           ;;
>         s390x-*linux*)

All other inner cases match one of the outer or-ed expressions (i.e.
from the first hunk) quite closely, but the outer match is still
powerpc*-*linux* while the inner match has dropped the trailing
-*linux* part. I would have kept them in sync. This also made me think
about the 32-bit case; is there no le variant for 32-bit powerpc?
Compare with the x86_64 case just above this hunk. To me, it seems as
if -m elf32lppclinux should be added to $LD at least in some case?

When you build 32-bit output and $host is 64-bit, you need to specify
endianess (elf32lppclinux or elf32ppclinux). When you build 64-bit
output and $host is 64-bit, you need to specify endianess (elf64lppc
or elf64ppc). I miss the case when you build 32-bit output and $host
is 32-bit, i.e. something like the below (assuming $host is
powerpcle-* and powerpc-* for 32-bit) at the end of the second hunk:

+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;

If there is no 32-bit le powerpc variant (why wouldn't there be?), then
the subject is somewhat misleading when le is only handled for 64-bit
hosts.

> @@ -1347,7 +1350,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
>         x86_64-*linux*)
>           LD="${LD-ld} -m elf_x86_64"
>           ;;
> -       ppc*-*linux*|powerpc*-*linux*)
> +       powerpcle-*)
> +         LD="${LD-ld} -m elf64lppc"
> +         ;;
> +       powerpc-*)
>           LD="${LD-ld} -m elf64ppc"
>           ;;
>         s390*-*linux*|s390*-*tpf*)
> 
> 

Or what am I not getting? I'm probably just ignorant...รถ

Cheers,
Peter




reply via email to

[Prev in Thread] Current Thread [Next in Thread]