Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion
@ 2022-07-27 10:47 Thomas Petazzoni via buildroot
  2022-07-27 16:40 ` Yann E. MORIN
  2022-08-30 22:30 ` Peter Korsgaard
  0 siblings, 2 replies; 5+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-07-27 10:47 UTC (permalink / raw)
  To: Yann E. MORIN, Buildroot List, Romain Naour; +Cc: Thomas Petazzoni

Somewhere between binutils 2.35 and 2.37, some functionality was
added in readelf to parse more DWARF information. Unfortunately, as
reported in binutils bug
28981 ("https://sourceware.org/bugzilla/show_bug.cgi?id=28981"), this
feature causes a number of fairly scary warnings to be displayed when
running readelf on binaries built with Clang, such as the pre-built
rustc and rustdoc binaries part of the host-rust-bin package. It
looks like this:

readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Bogus end-of-siblings marker detected at offset 2f in .debug_info section
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Bogus end-of-siblings marker detected at offset 10b in .debug_info section
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Bogus end-of-siblings marker detected at offset 10c in .debug_info section
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Further warnings about bogus end-of-sibling markers suppressed
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: DIE at offset 0x1da refers to abbreviation number 5827 which does not exist

These warnings are caused by the readelf calls done by the
support/scripts/check-host-rpath script. The annoying thing is that
once host-rust-bin has been installed in $(HOST_DIR), this warning
appears after the installation of every single host package, because
support/scripts/check-host-rpath rescans all binaries every time.

To avoid showing those scary warnings, this commit sends the error
output of readelf to /dev/null.

Of course, it would be nicer to only filter out those warnings, but
filtering the error output without merging the error output into the
standard output is tricky, so let's keep things simple. If there is
really an error, readelf will abort.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 support/scripts/check-host-rpath | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/support/scripts/check-host-rpath b/support/scripts/check-host-rpath
index b27cb883f3..f36677cc96 100755
--- a/support/scripts/check-host-rpath
+++ b/support/scripts/check-host-rpath
@@ -61,7 +61,7 @@ elf_needs_rpath() {
 
     while read lib; do
         [ -e "${hostdir}/lib/${lib}" ] && return 0
-    done < <( readelf -d "${file}"                                         \
+    done < <( readelf -d "${file}" 2>/dev/null                             \
               |sed -r -e '/^.* \(NEEDED\) .*Shared library: \[(.+)\]$/!d;' \
                      -e 's//\1/;'                                          \
             )
@@ -100,7 +100,7 @@ check_elf_has_rpath() {
 	    # false.
             [[ ${dir} =~ "${perpackagedir}/"[^/]+/host/lib ]] && return 0
         done
-    done < <( readelf -d "${file}"                                              \
+    done < <( readelf -d "${file}" 2>/dev/null                                  \
               |sed -r -e '/.* \(R(UN)?PATH\) +Library r(un)?path: \[(.+)\]$/!d' \
                       -e 's//\3/;'                                              \
             )
-- 
2.37.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion
  2022-07-27 10:47 [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion Thomas Petazzoni via buildroot
@ 2022-07-27 16:40 ` Yann E. MORIN
  2022-07-27 17:42   ` Thomas Petazzoni via buildroot
  2022-08-30 22:30 ` Peter Korsgaard
  1 sibling, 1 reply; 5+ messages in thread
From: Yann E. MORIN @ 2022-07-27 16:40 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: Romain Naour, Buildroot List

Thomas, All,

On 2022-07-27 12:47 +0200, Thomas Petazzoni via buildroot spake thusly:
> Somewhere between binutils 2.35 and 2.37, some functionality was
> added in readelf to parse more DWARF information. Unfortunately, as
> reported in binutils bug
> 28981 ("https://sourceware.org/bugzilla/show_bug.cgi?id=28981"), this
> feature causes a number of fairly scary warnings to be displayed when
> running readelf on binaries built with Clang, such as the pre-built
> rustc and rustdoc binaries part of the host-rust-bin package. It
> looks like this:
> 
> readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
[--SNIP we got the idea, thanks--]
> These warnings are caused by the readelf calls done by the
> support/scripts/check-host-rpath script. The annoying thing is that
> once host-rust-bin has been installed in $(HOST_DIR), this warning
> appears after the installation of every single host package, because
> support/scripts/check-host-rpath rescans all binaries every time.
> 
> To avoid showing those scary warnings, this commit sends the error
> output of readelf to /dev/null.
> 
> Of course, it would be nicer to only filter out those warnings, but
> filtering the error output without merging the error output into the
> standard output is tricky, so let's keep things simple. If there is
> really an error, readelf will abort.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>

Applied to master, thanks.

Regards,
Yann E. MORIN.

> ---
>  support/scripts/check-host-rpath | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/support/scripts/check-host-rpath b/support/scripts/check-host-rpath
> index b27cb883f3..f36677cc96 100755
> --- a/support/scripts/check-host-rpath
> +++ b/support/scripts/check-host-rpath
> @@ -61,7 +61,7 @@ elf_needs_rpath() {
>  
>      while read lib; do
>          [ -e "${hostdir}/lib/${lib}" ] && return 0
> -    done < <( readelf -d "${file}"                                         \
> +    done < <( readelf -d "${file}" 2>/dev/null                             \
>                |sed -r -e '/^.* \(NEEDED\) .*Shared library: \[(.+)\]$/!d;' \
>                       -e 's//\1/;'                                          \
>              )
> @@ -100,7 +100,7 @@ check_elf_has_rpath() {
>  	    # false.
>              [[ ${dir} =~ "${perpackagedir}/"[^/]+/host/lib ]] && return 0
>          done
> -    done < <( readelf -d "${file}"                                              \
> +    done < <( readelf -d "${file}" 2>/dev/null                                  \
>                |sed -r -e '/.* \(R(UN)?PATH\) +Library r(un)?path: \[(.+)\]$/!d' \
>                        -e 's//\3/;'                                              \
>              )
> -- 
> 2.37.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/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.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion
  2022-07-27 16:40 ` Yann E. MORIN
@ 2022-07-27 17:42   ` Thomas Petazzoni via buildroot
  2022-07-30 16:31     ` Yann E. MORIN
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Petazzoni via buildroot @ 2022-07-27 17:42 UTC (permalink / raw)
  To: Yann E. MORIN; +Cc: Romain Naour, Buildroot List

On Wed, 27 Jul 2022 18:40:57 +0200
"Yann E. MORIN" <yann.morin.1998@free.fr> wrote:

> > Of course, it would be nicer to only filter out those warnings, but
> > filtering the error output without merging the error output into the
> > standard output is tricky, so let's keep things simple. If there is
> > really an error, readelf will abort.
> > 
> > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>  
> 
> Applied to master, thanks.

Thanks! I must say I was kind of hoping you would come up with a way of
keeping the errors displayed, while filtering the warnings :-)

But another issue in this script is that it doesn't have set -o
pipefail, so if readelf fails, because the output is piped into another
process, the script will not bork. Perhaps something to fix ;-) (hint hint!)

Thomas
-- 
Thomas Petazzoni, co-owner and CEO, Bootlin
Embedded Linux and Kernel engineering and training
https://bootlin.com
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion
  2022-07-27 17:42   ` Thomas Petazzoni via buildroot
@ 2022-07-30 16:31     ` Yann E. MORIN
  0 siblings, 0 replies; 5+ messages in thread
From: Yann E. MORIN @ 2022-07-30 16:31 UTC (permalink / raw)
  To: Thomas Petazzoni; +Cc: Romain Naour, Buildroot List

Thomas, All,

On 2022-07-27 19:42 +0200, Thomas Petazzoni via buildroot spake thusly:
> On Wed, 27 Jul 2022 18:40:57 +0200
> "Yann E. MORIN" <yann.morin.1998@free.fr> wrote:
> > > Of course, it would be nicer to only filter out those warnings, but
> > > filtering the error output without merging the error output into the
> > > standard output is tricky, so let's keep things simple. If there is
> > > really an error, readelf will abort.
> > Applied to master, thanks.
> Thanks! I must say I was kind of hoping you would come up with a way of
> keeping the errors displayed, while filtering the warnings :-)

That's going to be a little bit convoluted...

> But another issue in this script is that it doesn't have set -o
> pipefail, so if readelf fails, because the output is piped into another
> process, the script will not bork. Perhaps something to fix ;-) (hint hint!)

Using -o pipefail would not help, because the pipe is in a process
substitution:

    some-command < <( readelf blabla |sed foobar )

If we set -o pipefail, then the pipe will indeed fail, but the process
substitution will not fail.

So, meh.

However, check-host-rpath is slow as hell; it would highly benefit from
a makeover.

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  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.  |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion
  2022-07-27 10:47 [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion Thomas Petazzoni via buildroot
  2022-07-27 16:40 ` Yann E. MORIN
@ 2022-08-30 22:30 ` Peter Korsgaard
  1 sibling, 0 replies; 5+ messages in thread
From: Peter Korsgaard @ 2022-08-30 22:30 UTC (permalink / raw)
  To: Thomas Petazzoni via buildroot
  Cc: Romain Naour, Yann E. MORIN, Thomas Petazzoni

>>>>> "Thomas" == Thomas Petazzoni via buildroot <buildroot@buildroot.org> writes:

 > Somewhere between binutils 2.35 and 2.37, some functionality was
 > added in readelf to parse more DWARF information. Unfortunately, as
 > reported in binutils bug
 > 28981 ("https://sourceware.org/bugzilla/show_bug.cgi?id=28981"), this
 > feature causes a number of fairly scary warnings to be displayed when
 > running readelf on binaries built with Clang, such as the pre-built
 > rustc and rustdoc binaries part of the host-rust-bin package. It
 > looks like this:

 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc:
 > Warning: Bogus end-of-siblings marker detected at offset 2f in
 > .debug_info section
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc:
 > Warning: Bogus end-of-siblings marker detected at offset 10b in
 > .debug_info section
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc:
 > Warning: Bogus end-of-siblings marker detected at offset 10c in
 > .debug_info section
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc:
 > Warning: Further warnings about bogus end-of-sibling markers
 > suppressed
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x23
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc: Warning: Unrecognized form: 0x22
 > readelf: /home/thomas/projets/buildroot/output/host/bin/rustc:
 > Warning: DIE at offset 0x1da refers to abbreviation number 5827 which
 > does not exist

 > These warnings are caused by the readelf calls done by the
 > support/scripts/check-host-rpath script. The annoying thing is that
 > once host-rust-bin has been installed in $(HOST_DIR), this warning
 > appears after the installation of every single host package, because
 > support/scripts/check-host-rpath rescans all binaries every time.

 > To avoid showing those scary warnings, this commit sends the error
 > output of readelf to /dev/null.

 > Of course, it would be nicer to only filter out those warnings, but
 > filtering the error output without merging the error output into the
 > standard output is tricky, so let's keep things simple. If there is
 > really an error, readelf will abort.

 > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>

Committed to 2022.05.x and 2022.02.x, thanks.

-- 
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-08-30 22:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-27 10:47 [Buildroot] [PATCH] support/scripts/check-host-rpath: send readelf error output to oblivion Thomas Petazzoni via buildroot
2022-07-27 16:40 ` Yann E. MORIN
2022-07-27 17:42   ` Thomas Petazzoni via buildroot
2022-07-30 16:31     ` Yann E. MORIN
2022-08-30 22:30 ` Peter Korsgaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox