Cross-Prelink: Difference between revisions
Tom de Vries (talk | contribs) (Testing prelink/cross-prelink on Ubuntu) |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
This limitation is due to the prelink software requiring the runtime linker to be available in order to resolve linking dependencies. | This limitation is due to the prelink software requiring the runtime linker to be available in order to resolve linking dependencies. | ||
The cross prelink patches began at MontaVista around 2003 in order to work around this limitation. The original patches added the ability to emulate a runtime linker, as well as enabled a sysroot option. Over time, this work was continued by MontaVista, Wind River and | The cross prelink patches began at MontaVista around 2003 in order to work around this limitation. The original patches added the ability to emulate a runtime linker, as well as enabled a sysroot option. Over time, this work was continued by MontaVista, Wind River and CodeSourcery. Unfortunately, while all of the patches had been made public in one fashion or another, there was no central location that gathered and offered to manage these changes. Starting with the Yocto Project we have decided to put together these patches and make them available as a single unit, with a clear upstream that will happily accept patches. | ||
== Upstream Prelink == | == Upstream Prelink == | ||
Line 15: | Line 15: | ||
For SVN access to the upstream tree, see: svn://sourceware.org/svn/prelink/ | For SVN access to the upstream tree, see: svn://sourceware.org/svn/prelink/ | ||
== Yocto Project Prelink == | == Yocto Project Cross-Prelink == | ||
See the | See the https://www.yoctoproject.org/tools-resources/projects/cross-prelink page on the website for more information on this project. | ||
Mark Hatle -- [[User:Mhatle]] is the project maintainer for the cross-prelink component of the Yocto Project. | Mark Hatle -- [[User:Mhatle]] is the project maintainer for the cross-prelink component of the Yocto Project. | ||
== Patch Submission == | |||
For Yocto-generic information on patch submission, see the [https://wiki.yoctoproject.org/wiki/Contribution_Guidelines Contribution Guidelines]. | |||
For cross-prelink specific information, see [http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/tree/trunk/README.cross?h=cross_prelink_staging README.cross]. | |||
== Git Archive Branches == | |||
The main branches of interest of the [http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/ git archive] are: | |||
* [http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/log/?h=cross_prelink cross_prelink] contains the cross-prelink sources. | |||
* [http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/log/?h=cross_prelink_staging cross_prelink_staging] contains proposed changes for the cross-prelink sources. | |||
* [http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/log master] tracks the upstream prelink tree. Note that this may or may not be up to date. | |||
== Testing prelink/cross-prelink on Ubuntu == | |||
On recent Ubuntu versions, the default gcc passes -Wl,--as-needed to the linker by default (see [https://wiki.ubuntu.com/ToolChain/CompilerFlags#A-Wl.2C--as-needed here] for more info). This will cause some prelink/cross-prelink tests to [http://sourceware.org/ml/prelink/2013-q2/msg00002.html fail]. This can be worked around by passing overrides in CC and CXX to make check: | |||
<nowiki> | |||
$ make check CC='gcc -Wl,--no-as-needed' CXX='g++ -Wl,--no-as-needed'</nowiki> | |||
On recent Ubuntu versions, the libraries are layed out according to the [https://help.ubuntu.com/community/MultiArch multiarch spec]. This causes most cross-prelink tests to fail. This can be worked around by passing a library path to prelink-rtld: | |||
<nowiki> | |||
$ make check LDD="../src/rtld/prelink-rtld --library-path=/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu"</nowiki> |
Latest revision as of 08:19, 8 May 2013
Project Background
The upstream prelink project was founded by Jakub Jelinek at Red Hat. The upstream project is primarily focused on self-hosted configurations and does not support prelinking a target filesystem in a cross-development environment.
This limitation is due to the prelink software requiring the runtime linker to be available in order to resolve linking dependencies.
The cross prelink patches began at MontaVista around 2003 in order to work around this limitation. The original patches added the ability to emulate a runtime linker, as well as enabled a sysroot option. Over time, this work was continued by MontaVista, Wind River and CodeSourcery. Unfortunately, while all of the patches had been made public in one fashion or another, there was no central location that gathered and offered to manage these changes. Starting with the Yocto Project we have decided to put together these patches and make them available as a single unit, with a clear upstream that will happily accept patches.
Upstream Prelink
The upstream prelink project is located at sourceware.org.
For mailing lists, see: http://sourceware.org/ml/prelink/
For SVN access to the upstream tree, see: svn://sourceware.org/svn/prelink/
Yocto Project Cross-Prelink
See the https://www.yoctoproject.org/tools-resources/projects/cross-prelink page on the website for more information on this project.
Mark Hatle -- User:Mhatle is the project maintainer for the cross-prelink component of the Yocto Project.
Patch Submission
For Yocto-generic information on patch submission, see the Contribution Guidelines.
For cross-prelink specific information, see README.cross.
Git Archive Branches
The main branches of interest of the git archive are:
- cross_prelink contains the cross-prelink sources.
- cross_prelink_staging contains proposed changes for the cross-prelink sources.
- master tracks the upstream prelink tree. Note that this may or may not be up to date.
Testing prelink/cross-prelink on Ubuntu
On recent Ubuntu versions, the default gcc passes -Wl,--as-needed to the linker by default (see here for more info). This will cause some prelink/cross-prelink tests to fail. This can be worked around by passing overrides in CC and CXX to make check:
$ make check CC='gcc -Wl,--no-as-needed' CXX='g++ -Wl,--no-as-needed'
On recent Ubuntu versions, the libraries are layed out according to the multiarch spec. This causes most cross-prelink tests to fail. This can be worked around by passing a library path to prelink-rtld:
$ make check LDD="../src/rtld/prelink-rtld --library-path=/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu"