Date: Tue, 12 Jun 2012 17:56:12 +0200 From: Jan Sieka <jps@semihalf.com> To: Konstantin Belousov <kostikbel@gmail.com> Cc: Tim Kientzle <tim@kientzle.com>, freebsd-arm@freebsd.org, freebsd-current@freebsd.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>
index | next in thread | previous in thread | raw e-mail
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
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FD7669C.8030802>
