View previous topic :: View next topic |
Author |
Message |
flexibeast Guru
Joined: 04 Apr 2022 Posts: 449 Location: Naarm/Melbourne, Australia
|
Posted: Sun Nov 10, 2024 8:34 am Post subject: splitdebug not working due to path issue |
|
|
Hi all,
Not sure if this is a bug, or (more likely) some sort of PEBKAC issue.
i'm again wanting to step through some s6 code. So, with the env files described on the "Debugging" wiki page, i enabled them on sys-apps/s6, and rebuilt the package.
* The relevant debug files are indeed created in /usr/lib/debug/ (e.g. /usr/lib/debug/bin/s6-notifyoncheck.debug).
* The binary indeed has a debug link:
Code: | $ readelf --string-dump=.gnu_debuglink /bin/s6-notifyoncheck
String dump of section '.gnu_debuglink':
[ 0] s6-notifyoncheck.debug
[ 1a] X^I |
* There are two actually two paths to the s6-notifyoncheck binary, with the same inode:
Code: | $ ls -i /bin/s6-notifyoncheck
3154773 /bin/s6-notifyoncheck*
$ ls -i /usr/bin/s6-notifyoncheck
3154773 /usr/bin/s6-notifyoncheck* |
* But:
Code: | $ $ gdb /bin/s6-notifyoncheck
[snip]
Reading symbols from /bin/s6-notifyoncheck...
(No debugging symbols found in /bin/s6-notifyoncheck)
(gdb) set debug separate-debug-file on
(gdb) file /bin/s6-notifyoncheck
Reading symbols from /bin/s6-notifyoncheck...
Looking for separate debug info (debug link) for /usr/bin/s6-notifyoncheck
Trying /usr/bin/s6-notifyoncheck.debug... no, unable to open.
Trying /usr/bin/.debug/s6-notifyoncheck.debug... no, unable to open.
Trying /usr/lib/debug//usr/bin/s6-notifyoncheck.debug... no, unable to open.
(No debugging symbols found in /bin/s6-notifyoncheck) |
because indeed, the path to s6-notifyoncheck.debug doesn't have 'usr' in it.
Not sure if this is related to me being on a (default/linux/amd64/23.0) merged-usr system. Full `emerge --info` output. _________________ https://wiki.gentoo.org/wiki/User:Flexibeast |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1699 Location: South America
|
Posted: Sun Nov 10, 2024 1:06 pm Post subject: Re: splitdebug not working due to path issue |
|
|
flexibeast wrote: | Not sure if this is related to me being on a (default/linux/amd64/23.0) merged-usr system. Full `emerge --info` output. |
I'm quite sure it is. I guess /usr-merged filesystems also need /usr/lib/debug/bin -> /usr/lib/debug/usr/bin and the other symlinks...
It looks like pathnames of split debug information are somehow derived from the pathnames constructed by the build system for installation, regardless of where files actually end up because of symlinks.
Does 'reverse symlinking' /usr/lib/debug/usr/bin -> /usr/lib/debug/bin make GDB work?
On the other hand, out of curiosity, what do you want to debug in s6-notifyoncheck? _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
sam_ Developer
Joined: 14 Aug 2020 Posts: 1961
|
Posted: Sun Nov 10, 2024 3:11 pm Post subject: |
|
|
See bug 917287. There's a workaround in there (run merge-usr with --prefix=). |
|
Back to top |
|
|
flexibeast Guru
Joined: 04 Apr 2022 Posts: 449 Location: Naarm/Melbourne, Australia
|
Posted: Sun Nov 10, 2024 10:44 pm Post subject: Re: splitdebug not working due to path issue |
|
|
GDH-gentoo wrote: | what do you want to debug in s6-notifyoncheck? |
i'm putting together an Emacs service. The servicedir, ~/s6/emacs/, has a file, notification-fd, containing only the value '3'. If, with that servicedir as my current working directory, i do:
Code: | $ s6-notifyoncheck emacs --fg-daemon |
i get:
Code: | s6-notifyoncheck: fatal: notification-fd sanity check failed: Bad file descriptor |
which comes from this part of s6-notifyoncheck.c:
Code: | if (autodetect)
{
int r = read_uint("notification-fd", &fd) ;
if (r < 0) strerr_diefu2sys(111, "read ", "./notification-fd") ;
if (!r) strerr_dief2x(100, "invalid ", "./notification-fd") ;
}
if (fcntl(fd, F_GETFD) < 0)
strerr_dief2sys(111, "notification-fd", " sanity check failed") ; |
i want to know the actual value pointed to by the `fd` variable, which i'd expect to be 3. _________________ https://wiki.gentoo.org/wiki/User:Flexibeast |
|
Back to top |
|
|
flexibeast Guru
Joined: 04 Apr 2022 Posts: 449 Location: Naarm/Melbourne, Australia
|
Posted: Sun Nov 10, 2024 10:50 pm Post subject: |
|
|
sam_ wrote: | See bug 917287. There's a workaround in there (run merge-usr with --prefix=). |
Thanks! However:
Code: | # merge-usr --prefix /usr/lib/debug/
INFO: Migrating files from '/usr/lib/debug/bin' to '/usr/lib/debug/usr/bin'
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.12/merge-usr", line 183, in link_or_copy_file
os.link(src, tmp, follow_symlinks=False)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/debug/bin/s6-svok.debug' -> '/usr/lib/debug/usr/bin/tmpr5vtyghr'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.12/merge-usr", line 308, in <module>
sys.exit(main())
^^^^^^
File "/usr/lib/python-exec/python3.12/merge-usr", line 303, in main
if not mu.run():
^^^^^^^^
File "/usr/lib/python-exec/python3.12/merge-usr", line 257, in run
self.copy_tree(src, dst)
File "/usr/lib/python-exec/python3.12/merge-usr", line 225, in copy_tree
self.link_or_copy_file(src, dst)
File "/usr/lib/python-exec/python3.12/merge-usr", line 187, in link_or_copy_file
shutil.copy2(src, tmp, follow_symlinks=False)
File "/usr/lib/python3.12/shutil.py", line 475, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.12/shutil.py", line 262, in copyfile
with open(dst, 'wb') as fdst:
^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/debug/usr/bin/tmpr5vtyghr' |
i presume i'm holding it wrong? _________________ https://wiki.gentoo.org/wiki/User:Flexibeast |
|
Back to top |
|
|
GDH-gentoo Veteran
Joined: 20 Jul 2019 Posts: 1699 Location: South America
|
Posted: Sun Nov 10, 2024 11:39 pm Post subject: Re: splitdebug not working due to path issue |
|
|
flexibeast wrote: | If, with that servicedir as my current working directory, i do:
Code: | $ s6-notifyoncheck emacs --fg-daemon |
i get:
Code: | s6-notifyoncheck: fatal: notification-fd sanity check failed: Bad file descriptor |
|
You mean that you ran s6-notifyoncheck from a shell? If yes, that is not going to work, it needs to inherit the writing end of the readiness notification pipe from s6-supervise, and the number read from the notification-fd file has to match its file descriptor. Therefore, it only makes sense to call s6-notifyoncheck from the run script in the service directory (or s6-rc longrun definition directory).
flexibeast wrote: | i want to know the actual value pointed to by the `fd` variable, which i'd expect to be 3. |
It likely is the number 3, but it won't match a file descriptor _________________
NeddySeagoon wrote: | I'm not a witch, I'm a retired electronics engineer |
Ionen wrote: | As a packager I just don't want things to get messier with weird build systems and multiple toolchains requirements though |
|
|
Back to top |
|
|
floppymaster Developer
Joined: 07 Jul 2010 Posts: 231 Location: Detroit, MI, USA
|
Posted: Mon Nov 11, 2024 1:24 am Post subject: |
|
|
flexibeast wrote: | sam_ wrote: | See bug 917287. There's a workaround in there (run merge-usr with --prefix=). |
Thanks! However:
Code: | # merge-usr --prefix /usr/lib/debug/
INFO: Migrating files from '/usr/lib/debug/bin' to '/usr/lib/debug/usr/bin'
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.12/merge-usr", line 183, in link_or_copy_file
os.link(src, tmp, follow_symlinks=False)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/debug/bin/s6-svok.debug' -> '/usr/lib/debug/usr/bin/tmpr5vtyghr'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python-exec/python3.12/merge-usr", line 308, in <module>
sys.exit(main())
^^^^^^
File "/usr/lib/python-exec/python3.12/merge-usr", line 303, in main
if not mu.run():
^^^^^^^^
File "/usr/lib/python-exec/python3.12/merge-usr", line 257, in run
self.copy_tree(src, dst)
File "/usr/lib/python-exec/python3.12/merge-usr", line 225, in copy_tree
self.link_or_copy_file(src, dst)
File "/usr/lib/python-exec/python3.12/merge-usr", line 187, in link_or_copy_file
shutil.copy2(src, tmp, follow_symlinks=False)
File "/usr/lib/python3.12/shutil.py", line 475, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/lib/python3.12/shutil.py", line 262, in copyfile
with open(dst, 'wb') as fdst:
^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/debug/usr/bin/tmpr5vtyghr' |
i presume i'm holding it wrong? |
I think merge-usr assumes that /usr/lib/debug/usr/bin already exists. Try creating an empty directory there if one does not exist already. |
|
Back to top |
|
|
flexibeast Guru
Joined: 04 Apr 2022 Posts: 449 Location: Naarm/Melbourne, Australia
|
Posted: Mon Nov 11, 2024 2:49 am Post subject: |
|
|
floppymaster wrote: | I think merge-usr assumes that /usr/lib/debug/usr/bin already exists. Try creating an empty directory there if one does not exist already. |
Yep, that worked, thanks! i also had to create /usr/lib/debug/usr/lib64/ before merge-usr returned successfully.
@sam_:
Is this something that should be noted in either bug 917287, or in a new bug, or in an addition to the "Debugging" page on the wiki? _________________ https://wiki.gentoo.org/wiki/User:Flexibeast |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|