[Buildroot] [RFC PATCH v3 00/10] Make the SDK relocatable
Wolfgang Grandegger
wg at grandegger.com
Fri Jun 30 08:50:11 UTC 2017
Hello,
Am 29.06.2017 um 10:02 schrieb Wolfgang Grandegger:
> Hello Arnout,
>
> about rpath sanitazion of patchelf and m4...
>
> Am 29.06.2017 um 08:13 schrieb Wolfgang Grandegger:
>>
>>
>> Am 28.06.2017 um 21:33 schrieb Arnout Vandecappelle:
>>>
>>>
>>> On 28-06-17 14:36, Wolfgang Grandegger wrote:
>>>>
>>>>
>>>> Am 28.06.2017 um 13:16 schrieb Arnout Vandecappelle:
>>>>>
>>>>>
>>>>> On 28-06-17 12:57, Wolfgang Grandegger wrote:
>>>>> [snip]
>>>>>> The list is built with "comm -13 ...". While implementing that
>>>>>> way, I realized
>>>>>> that I need patchelf for the host as very first package. Any idea
>>>>>> how that could
>>>>>> achieved?
>>>>>
>>>>> host-patchelf should be added to DEPENDENCIES_HOST_PREREQ so it
>>>>> gets built
>>>>> before all the rest. In the instrumentation hook, you should also
>>>>> skip the
>>>>> sanitization when the package is not in DEPENDENCIES_HOST_PREREQ.
>>>>
>>>> I thought all host binaries must have an rpath to <path>/usr/lib,
>>>> which should
>>>> be replaced with "$ORIGIN/../../../usr/lib"
>>>
>>> Only if they use a library in $HOST_DIR/usr/lib - otherwise
>>> sanitize-rpath will
>>> remove the rpatch completely, no?
>>
>> Makes sense.
>>
>>> DEPENDENCIES_HOST_PREREQ contains only a few packages, none of
>>> which are linked
>>> with any library in $HOST_DIR/usr/lib. At least I think so.
>>
>> In may case it only contains "patchelf", which needs rpath sanitation.
>>
>>>>> That means that those packages will not get sanitized - which
>>>>> shouldn't be
>>>>> necessary since they anyway don't have an rpath. But perhaps it's a
>>>>> good idea
>>>>> then to add a readelf-based check for them that verifies they don't
>>>>> have
>>>>> DT_RUNPATH or DT_RPATH. The latter is just a nice-to-have, though,
>>>>> so don't
>>>>> worry about it at first.
>>>>
>>>> See above.
>>>>
>>>> Even with setting DEPENDENCIES_HOST_PREREQ to patchelf at the first
>>>> place, some
>>>> packages are required in advance to build patchelf :(.
>>>
>>> Really? Which ones? patchelf has no dependencies.
>>
>> host-m4-1.4.18
>> host-libtool-2.4.6
>> host-autoconf-2.69
>> host-automake-1.15
>> host-patchelf-29c085fd9d3fc972f75b3961905d6b4ecce7eb2b
>>
>> Here is the order in which the packages are built. Patchelf needs
>> automake and friends. The "host-m4" binary m4 has an rpath;
>>
>> <buildroot-build-dir>/host/usr/lib
>>
>> The others have perl scripts only. Hence, we need to sanitize the
>> "host-m4" package after patchelf is available. Not too bad.
>
> Neither patchelf nor m4 uses libraries from /usr/lib and therefore the
> rpath is empty. A mistake in my scripts confused me... sorry for the noise.
I must again correct myself :(. Both binaries have
"<buildroot-build-dir>/host/usr/lib" in their rpath after the build step and
the sanitation will remove it:
patching ELF file '/home/wolf/test/bdo/imx6ulpico/host/usr/bin/patchelf'
removing directory '/home/wolf/test/bdo/imx6ulpico/host/usr/lib' from RPATH because it does not contain needed libs
new rpath is ''
I have just sent out a new patch series doing the sanitation per
package and build step. It will use "--debug" to show the sanitation
results. I have attached the "rpath-sanitation-imx6ulpico.log" output
to show what sanitation is doing for "imx6ulpico_defconfig" with
"glibc", "sudo" and "pulseaudio". Some quick observations:
- It removes "/usr/lib" from most host binaries because it does not
contain needed libs. It uses "$ORIGIN/../../usr/lib" otherwise.
- It clears the RPATH for most target binaries. Only a few remain,
e.g. for the "sudo" and "pulseaudio" package (not pointing to
"/lib" or "/usr/lib".
Concerning that topic, I also realized that "readelf" is used with
"regexp" heavily. I think using "patchelf" for that purpose would be
faster.
Then happy hacking at the Summer Camp.
Wolfgang.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rpath-sanitation-imx6ulpico.log
Type: text/x-log
Size: 182714 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20170630/a873e4e9/attachment-0002.bin>
More information about the buildroot
mailing list