Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [git commit] package/patchelf: keep RPATH entries even without DT_NEEDED libraries
Date: Tue, 25 Aug 2020 18:16:59 +0200	[thread overview]
Message-ID: <20200825161659.GE2246@scaer> (raw)
In-Reply-To: <20200825110428.40F71815AF@busybox.osuosl.org>

thomas, All,

On 2020-08-25 13:11 +0200, Thomas Petazzoni spake thusly:
> commit: https://git.buildroot.net/buildroot/commit/?id=bcdb74512d9f6e7eca878c53aca2eb3eccac7ef3
> branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master
> 
> Our patch
> 0003-Add-option-to-make-the-rpath-relative-under-a-specif.patch adds
> an option --make-rpath-relative, which we use to tweak RPATH of target
> binaries.
> 
> However, one of the effect of this option is that it drops RPATH
> entries if the corresponding directory does not contain a library that
> is referenced by a DT_NEEDED entry of the binary.
> 
> This unfortunately isn't correct, as RPATH entries are not only used
> by the dynamic linker to resolve the location of libraries listed
> through DT_NEEDED entries: RPATH entries are also used by dlopen()
> when resolving the location of libraries that are loaded at runtime.
[--SNIP--]
> @@ -250,12 +250,6 @@ index 1d9a772..35b4a33 100644
>  +                }
>  +            }
>  +
> -+            if (!libFoundInRPath(canonicalPath, neededLibs, neededLibFound)) {
> -+                debug("removing directory '%s' from RPATH because it does not contain needed libs\n",
> -+                      dirName.c_str());
> -+                continue;

I'd rather that we keep that as a warning, because in some cases it
really is an error to keep an RPATH with no DT_NEEDED.

    debug("keeping directory %s in RPATH, even though it contains no needed library\n", dirName.c_str())

Bonus points if it would be driven by a --option on the command line. ;-)

Regards,
Yann E. MORIN.

> -+            }
> -+
>  +            /* Finally make "canonicalPath" relative to "filedir" in "rootDir" */
>  +            if (relativeToFile)
>  +                concatToRPath(newRPath, makePathRelative(canonicalPath, fileDir));
> @@ -268,7 +262,7 @@ index 1d9a772..35b4a33 100644
>       if (op == rpRemove) {
>           if (!rpath) {
>               debug("no RPATH to delete\n");
> -@@ -1413,7 +1549,9 @@ static bool shrinkRPath = false;
> +@@ -1413,7 +1543,9 @@ static bool shrinkRPath = false;
>   static bool removeRPath = false;
>   static bool setRPath = false;
>   static bool printRPath = false;
> @@ -278,7 +272,7 @@ index 1d9a772..35b4a33 100644
>   static set<string> neededLibsToRemove;
>   static map<string, string> neededLibsToReplace;
>   static set<string> neededLibsToAdd;
> -@@ -1438,14 +1576,16 @@ static void patchElf2(ElfFile & elfFile)
> +@@ -1438,14 +1570,16 @@ static void patchElf2(ElfFile & elfFile)
>           elfFile.setInterpreter(newInterpreter);
>   
>       if (printRPath)
> @@ -299,7 +293,7 @@ index 1d9a772..35b4a33 100644
>   
>       if (printNeeded) elfFile.printNeededLibs();
>   
> -@@ -1508,6 +1648,9 @@ void showHelp(const string & progName)
> +@@ -1508,6 +1642,9 @@ void showHelp(const string & progName)
>     [--set-rpath RPATH]\n\
>     [--remove-rpath]\n\
>     [--shrink-rpath]\n\
> @@ -309,7 +303,7 @@ index 1d9a772..35b4a33 100644
>     [--print-rpath]\n\
>     [--force-rpath]\n\
>     [--add-needed LIBRARY]\n\
> -@@ -1564,6 +1707,17 @@ int main(int argc, char * * argv)
> +@@ -1564,6 +1701,17 @@ int main(int argc, char * * argv)
>               setRPath = true;
>               newRPath = argv[i];
>           }
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2020-08-25 16:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-25 11:11 [Buildroot] [git commit] package/patchelf: keep RPATH entries even without DT_NEEDED libraries Thomas Petazzoni
2020-08-25 16:16 ` Yann E. MORIN [this message]
2020-08-25 19:27   ` Thomas Petazzoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200825161659.GE2246@scaer \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox