[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