public inbox for linux-man@vger.kernel.org
 help / color / mirror / Atom feed
From: "Alejandro Colomar (man-pages)" <alx.manpages@gmail.com>
To: Emanuele Torre <torreemanuele6@gmail.com>
Cc: linux-man@vger.kernel.org, mtk.manpages@gmail.com
Subject: Re: [man-pages] Misleading example in ldd(1).
Date: Fri, 6 Aug 2021 17:22:06 +0200	[thread overview]
Message-ID: <6788a215-74c4-e078-b480-a9a13842e5bb@gmail.com> (raw)
In-Reply-To: <CAA7hNqc8gExU=OfsoqY3Cw78J1BOCXrMfFmg+fUaCDt54wDrBQ@mail.gmail.com>

Hi Emanuele,

On 8/6/21 4:26 PM, Emanuele Torre wrote:
> I was reading the man page for ldd(1)[1]; and I read this in the first
> paragraph of the DECRIPTION section:
> 
>   ldd prints the shared objects (shared libraries) required by each
>   program or shared object specified on the command line.  An
>   example of its use and output (using sed(1) to trim leading white
>   space for readability in this page) is the following:
> 
>       $ ldd/bin/ls | sed 's/^ */    /'
>           linux-vdso.so.1 (0x00007ffcc3563000)
>           libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f87e5459000)
>           libcap.so.2 => /lib64/libcap.so.2 (0x00007f87e5254000)
>           libc.so.6 => /lib64/libc.so.6 (0x00007f87e4e92000)
>           libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f87e4c22000)
>           libdl.so.2 => /lib64/libdl.so.2 (0x00007f87e4a1e000)
>           /lib64/ld-linux-x86-64.so.2 (0x00005574bf12e000)
>           libattr.so.1 => /lib64/libattr.so.1 (0x00007f87e4817000)
>           libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f87e45fa000)
> 
> This is a little confusing though since that sed(1) command does not
> seem to work. (and also potentially misleading for someone who is trying
> figure out how to parse ldd(1)'s output.)
> 
> ldd(1) prepends a TAB character (0x09) to each line, not spaces:
> 
>   $ ldd /bin/ls | xxd | head -1
>   00000000: 096c 696e 7578 2d76 6473 6f2e 736f 2e31  .linux-vdso.so.1
> 
> I read ldd(1)'s source code[2] (it is part of glibc) and it seems to be
> a bash script that tries to use different rtld programs ( ld.so(8) )
> from an RTLDLIST.
> 
> Those, on my system, are:
> 
>   * /usr/lib/ld-linux.so.2
>   * /usr/lib64/ld-linux-x86-64.so.2
>   * /usr/libx32/ld-linux-x32.so.2
> 
> And they all seem to also be part of glibc.
> 
> I have tried to follow the git history of glibc to see when the switch
> from spaces to the TAB character occured, but, to me, it seems like
> glibc.git/elf/rtld.c has always used '\t'; at since
> 6a76c115150318eae5d02eca76f2fc03be7bd029[3] (358th commit since glibc
> started using the git repository repository - Nov 18th 1995): before
> that commit there are not any results for `git grep '\\t'` in the elf
> directory and I did not investigate further.
> 
> Still, at the time of that commit, glibc did not seem to have an ldd(1)
> utility.
> 
> Perhaps the man page is old and its original author was using and
> documenting an ldd(1) utility that was not part of glibc when he was
> writing it.
> 
> Anyhow, since I think that sed(1) command will not work on any system
> that uses, at least, the most recent version of glibc (because lld(1)
> and the ld.so(8) programs it depends on are all part of glibc), I think
> that that example should be changed to avoid confusions.
> 
> The output format of ldd(1) does not seem to be clearly defined, so I
> think this would be a good option:
> 
>   $ ldd/bin/ls | sed 's/^[[:space:]]*/    /'
> 
> NB: ^\s* should also work on most GNU/Linux systems, but \s is
>      non-standard or documented so I don not suggest using it in the man
>      page.
> 
> Another option could be to remove "the pipe to sed(1)" part and the note
> in parentheses that explains why it was used by the original author.

Thanks for the report!  I decided to remove the pipe for simplicity.

Cheers,

Alex


-- 
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/

      reply	other threads:[~2021-08-06 15:23 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-06 14:26 [man-pages] Misleading example in ldd(1) Emanuele Torre
2021-08-06 15:22 ` Alejandro Colomar (man-pages) [this message]

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=6788a215-74c4-e078-b480-a9a13842e5bb@gmail.com \
    --to=alx.manpages@gmail.com \
    --cc=linux-man@vger.kernel.org \
    --cc=mtk.manpages@gmail.com \
    --cc=torreemanuele6@gmail.com \
    /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