Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jun 2012 17:56:12 +0200
From:      Jan Sieka <jps@semihalf.com>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        gjb@semihalf.com, Rafal Jaworowski <raj@semihalf.com>, freebsd-arm@freebsd.org, freebsd-current@freebsd.org, Ian Lepore <freebsd@damnhippie.dyndns.org>
Subject:   Re: Possible fix for Perl failing with ../lib/auto/POSIX/POSIX.so: Undefined symbol "__flt_rounds" on ARM
Message-ID:  <4FD7669C.8030802@semihalf.com>
In-Reply-To: <20120612084917.GL2337@deviant.kiev.zoral.com.ua>
References:  <4FCE211D.10204@semihalf.com> <0FE5C5BF-FADE-49BA-BF38-00018A752F14@kientzle.com> <4FD6FB72.10900@semihalf.com> <20120612084917.GL2337@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2012.06.12 10:49, Konstantin Belousov wrote:
> On Tue, Jun 12, 2012 at 10:18:58AM +0200, Jan Sieka wrote:
>> On 2012.06.09 18:11, Tim Kientzle wrote:
>>>
>>> On Jun 5, 2012, at 8:09 AM, Jan Sieka wrote:
>>>
>>>> Hello Ian!
>>>>
>>>> I tried recently to compile and run Perl 5.12 on ARM (SheevaPlug) using
>>>> HEAD from 22.05.2012 and got the following error while trying to run:
>>>> /usr/ports/lang/perl5.12 # make test
>>>> [...]
>>>> ../lib/auto/POSIX/POSIX.so: Undefined symbol "__flt_rounds
>>>> [...]
>>>>
>>>> After investigating the issue it appeared that __flt_rounds symbol is
>>>> not exported by libc. Applying the following patch, recompilling world
>>>> and Perl fixed the problem and allowed to use Perl on SheevaPlug:
>>>>
>>>> diff --git a/lib/libc/arm/Symbol.map b/lib/libc/arm/Symbol.map
>>>> index e8c7f1d..8cdcdaf 100644
>>>> --- a/lib/libc/arm/Symbol.map
>>>> +++ b/lib/libc/arm/Symbol.map
>>>> @@ -70,6 +70,7 @@ FBSDprivate_1.0 {
>>>>         __divdf3;
>>>>         __floatsisf;
>>>>         __floatsidf;
>>>> +       __flt_rounds;
>>>>         __fixsfsi;
>>>>         __fixdfsi;
>>>>         __fixunssfsi;
>>>>
>>>> Can you comment whether this is a correct solution?
>>>
>>> Great!  I had the same problem compiling Python last
>>> week and had planned to track it down.
>>>
>>> I just committed this to -CURRENT and will also
>>> merge it to the armv6 tree.
>> Hello Tim!
>>
>> Thanks for committing this but unfortunately that patch wasn't correct.
>> I had another discussion on freebsd-current@ (I forgot to do a
>> cross-list CC - now fixed) about how to add symbols to Symbols.map files
>> (see this thread:
>> http://lists.freebsd.org/pipermail/freebsd-current/2012-June/034511.html) and
>> from the answer and hints given by Konstantin Belousov I have prepared
>> another patch that adheres to library versioning guidelines. If nobody
>> objects this patch then feel free to commit it:
>>
>> diff --git a/lib/libc/arm/Symbol.map b/lib/libc/arm/Symbol.map
>> index dc46013..48f6747 100644
>> --- a/lib/libc/arm/Symbol.map
>> +++ b/lib/libc/arm/Symbol.map
>> @@ -33,6 +33,10 @@ FBSD_1.0 {
>>          sbrk;
>>   };
>>
>> +FBSD_1.3 {
>> +       __flt_rounds;
>> +};
>> +
>>   FBSDprivate_1.0 {
>>          /* PSEUDO syscalls */
>>          __sys_getlogin;
>>
>> I have verified the above patch is working on SheevaPlug on FreeBSD
>> 10-CURRENT from 2012-05-15 and Perl 5.12.4. Perl has to be recompiled
>> after applying this patch.
> Well, both committed version and this version should work, the question
> is which fix is right. Is __flt_rounds supposed to be linked to by
> applications ? If the symbols are used by normal programs, that I think
> we should indeed guarantee ABI stability for them, and FBSD_1.3
> namespace is the right namespace to use.
Both versions work indeed. I have analysed other architectures' 
lib/libc/<arch>/Symbol.map files and __flt_rounds should go into FBSD_ and *not* 
into FBSDprivate section. I have verified that at least one of the Perl's 
libraries (POSIX.so) links to __flt_rounds. Python also links to this function. 
So to the best of my knowledge current patch is the righteous one.

Best regards,

Jan Sieka




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FD7669C.8030802>