[OE-core] [PATCH] package.bbclass: only one hardlink of separated debug info file in each directory
Hongxu Jia
hongxu.jia at windriver.com
Fri Aug 24 07:16:26 UTC 2018
Hi RP,
With this fix, we could not use yesterday's workaround fix
`git: create symlink rather than hardlink between bin/ and libexec/',
But it is no harm for us, btw, Ubuntu use symlink in git , and Fedora
use hardlink in git
[Ubuntu 1604/1804]
$ ls /usr/bin/git* -al
-rwxr-xr-x 1 root root 2343536 6月 1 01:50 /usr/bin/git
-rwxr-xr-x 1 root root 6094 7月 5 22:00 /usr/bin/git-deborig
lrwxrwxrwx 1 root root 3 6月 1 01:50 /usr/bin/git-receive-pack ->
git
-rwxr-xr-x 1 root root 1304912 6月 1 01:50 /usr/bin/git-shell
lrwxrwxrwx 1 root root 3 6月 1 01:50 /usr/bin/git-upload-archive
-> git
-rwxr-xr-x 1 root root 1313024 6月 1 01:50 /usr/bin/git-upload-pack
[Ubuntu 1604/1804]
[Fedora 25]
$ ls /usr/bin/git* -al
-rwxr-xr-x. 115 root root 2033328 1月 19 2017 /usr/bin/git
-rwxr-xr-x. 115 root root 2033328 1月 19 2017 /usr/bin/git-receive-pack
-rwxr-xr-x. 2 root root 1004840 1月 19 2017 /usr/bin/git-shell
-rwxr-xr-x. 115 root root 2033328 1月 19 2017 /usr/bin/git-upload-archive
-rwxr-xr-x. 2 root root 1084152 1月 19 2017 /usr/bin/git-upload-pack
[Fedora 25]
//Hongxu
On 2018年08月24日 15:00, Hongxu Jia wrote:
> While multiple hardlinks of binary located in different dirs,
> there are also multiple hardlinks of separated debug info file
> with the same binary name in same debug dirs. But in each dir,
> only one debug file with original name works. Because all of
> binary hardlinks have one `.gnu_debuglink' which is added in
> `splitdebuginfo'. It caused gdb could not find debugging
> symbols.
>
> [Before the patch]
> $ find .
> ./usr/bin/foo
> ./usr/bin/foo-hd1
> ./usr/bin/.debug
> ./usr/bin/.debug/foo
> ./usr/bin/.debug/foo-hd1
> ./usr/libexec/foo-hd2
> ./usr/libexec/.debug
> ./usr/libexec/.debug/foo-hd2
>
> $ readelf --debug-dump usr/libexec/foo-hd2
> Contents of the .gnu_debuglink section:
> Separate debug info file: foo
>
> $ gdb usr/libexec/foo-hd2
> Reading symbols from usr/libexec/foo-hd2...(no debugging symbols found)...done.
> [Before the patch]
>
> [Apply the patch]
> $ find .
> ./usr/bin/foo
> ./usr/bin/foo-hd1
> ./usr/bin/.debug
> ./usr/bin/.debug/foo
> ./usr/libexec/foo-hd2
> ./usr/libexec/.debug
> ./usr/libexec/.debug/foo
>
> $ gdb usr/libexec/foo-hd2
> Reading symbols from usr/libexec/foo-hd2...Reading symbols from usr/libexec/.debug/foo...done.
> [Apply the patch]
>
> Signed-off-by: Hongxu Jia <hongxu.jia at windriver.com>
> ---
> meta/classes/package.bbclass | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/meta/classes/package.bbclass b/meta/classes/package.bbclass
> index 4ce9de2..a2a45f6 100644
> --- a/meta/classes/package.bbclass
> +++ b/meta/classes/package.bbclass
> @@ -1048,15 +1048,18 @@ python split_and_strip_files () {
> for ref in inodes:
> if len(inodes[ref]) == 1:
> continue
> +
> + target = inodes[ref][0][len(dvar):]
> for file in inodes[ref][1:]:
> src = file[len(dvar):]
> - dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(src) + debugappend
> + dest = debuglibdir + os.path.dirname(src) + debugdir + "/" + os.path.basename(target) + debugappend
> fpath = dvar + dest
> - target = inodes[ref][0][len(dvar):]
> ftarget = dvar + debuglibdir + os.path.dirname(target) + debugdir + "/" + os.path.basename(target) + debugappend
> bb.utils.mkdirhier(os.path.dirname(fpath))
> - #bb.note("Link %s -> %s" % (fpath, ftarget))
> - os.link(ftarget, fpath)
> + # Only one hardlink of separated debug info file in each directory
> + if not os.access(fpath, os.R_OK):
> + #bb.note("Link %s -> %s" % (fpath, ftarget))
> + os.link(ftarget, fpath)
>
> # Create symlinks for all cases we were able to split symbols
> for file in symlinks:
More information about the Openembedded-core
mailing list