[yocto] perl 5.22 and 32 bit targets

Gary Thomas gary at mlbassoc.com
Wed Mar 23 02:09:12 PDT 2016


On 2016-03-23 09:57, Jens Rehsack wrote:
>
>> Am 23.03.2016 um 09:40 schrieb Gary Thomas <gary at mlbassoc.com>:
>>
>> On 2016-03-23 09:09, Gary Thomas wrote:
>>> On 2016-03-23 06:36, Khem Raj wrote:
>>>> On Tue, Mar 22, 2016 at 9:53 PM, Gary Thomas <gary at mlbassoc.com> wrote:
>>>>> I hope this is the correct place to discuss this problem.  It
>>>>> is all about a difference in behavior between a program built
>>>>> using bitbake/OE (only OE-core is needed) vs building the program
>>>>> on the target hardware itself.
>>>>>
>>>>> I've been struggling with this problem since perl was upgraded
>>>>> to version 5.22.  I'm working on Amanda (Advanced Maryland Archive
>>>>> tool) which is written primarily in perl and uses swig interfaces
>>>>> to access native C functions.  This code works great when using
>>>>> the previous perl (5.20.x) but fails on all 32 bit targets with
>>>>> perl 5.22
>>>>>
>>>>> The interesting thing is that if I build Amanda on my target
>>>>> directly (using SDK tools), it works perfectly even with perl
>>>>> 5.22, so it seems that there is some [subtle] difference between
>>>>> building using bitbake/OE than when built on the self-hosted
>>>>> target.  I've compared the builds and the only thing I could
>>>>> find (from the output of configure) is a difference in sizeof(off_t)
>>>>> Sadly, when I tried to adjust this in the OE build, it didn't
>>>>> make any difference, but perhaps I didn't make this change
>>>>> correctly or completely.
>>>>
>>>> do you have largefile support turned on ? if you do then it might
>>>> be detecting it wrongly during configure since we cache it to a
>>>> non-largefile case
>>>>
>>>> so try to add something like
>>>>
>>>> EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'largefile',
>>>> 'ac_cv_sizeof_off_t=8', '', d)}"
>>>>
>>>> while building perl or the affected program and see if that helps
>>>
>>> Thanks for the idea, but that didn't help.  I also forced some CFLAGS
>>> to match, in particular:
>>>    -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
>>> but this didn't make any difference either.
>>>
>>
>> On a whim I just tried a little experiment where I took the *.o files
>> from the perl subdirectory (where all the swig shims live) from a working
>> (self-hosted) build and moved them to my bitbake/OE build.  I then touched
>> all the *.o and *.lo files in the perl tree to force a relink. I then ran
>>   % bitbake amanda -C compile && bitbake core-image-base
>> to my surprise, amanda works!  So the culprit lies somewhere within the
>> swig generated glue.  I've tried comparing these files before and I didn't
>> find anything other than cosmetic differences (mostly comments about the
>> name of the file processed, etc).  I've added this subtree to "results"
>> in my github layer in case someone can see what might be relevant.
>>
>> Any ideas what might be different and make this swig generated glue fail?
>> Note that the swig interface files are rebuilt as part of the build process
>> and both bitbake/OE and self-hosted are using the same swig version.
>
> I digged a bit through your layer (while my up2date scanner over meta-cpan
> blocks my build chain :P) and realized that you use perl-5.20.0 as it was
> in poky. A "simple" downgrade would be more reasonable ... if reason applys
> here in general :)

In practice, I am doing that.  However, I want to understand why perl 5.22
breaks things and get it fixed.

>
> When you fail on cross-build and succeed in target build, try to compare the
> C files and includes (even swig libraries) used.
>
> It smells more like a "wrong source" than a "perl problem" (and even when
> I never would read any python thread, the same problem would likely occur
> there, too ^^).
>
> Which perl headers are used in your build? To dig down, more logs would
> be reasonable ...

Everything comes from the same sources, same revisions, etc, as I'm using
either a bitbake/OE build or the embedded (self-hosted) version from the
same build plus SDK tools.

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------



More information about the yocto mailing list