Skip to contentSkip to conversation

support/scripts/fix-rpath: exclude /lib/firmware in the target

PATCH New Thomas Petazzoni 3 participants 4 messages Apr 12, 2018 – May 1, 2018

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 support/scripts/fix-rpath: exclude /lib/firmware in the target

The /lib/firmware directory contains random firmware for various devices. It happens that some of them might be or appear to be ELF files, but they shouldn't be checked by fix-rpath. For example, one of the Qualcomm VPU firmware file appears to be an ELF file, but patchelf isn't happy about it:

$ ./output/host/bin/patchelf --print-rpath output/target/lib/firmware/qcom/venus-4.2/venus.b00
patchelf: patchelf.cc:387: void ElfFile<Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym>::parse() [with Elf_Ehdr = Elf32_Ehdr; Elf_Phdr = Elf32_Phdr; Elf_Shdr = Elf32_Shdr; Elf_Addr = unsigned int; Elf_Off = unsigned int; Elf_Dyn = Elf32_Dyn; Elf_Sym = Elf32_Sym]: Assertion `shstrtabIndex < shdrs.size()' failed.
Aborted (core dumped)

Even though patchelf definitely shouldn't crash, it anyway doesn't make sense to check ELF files in /lib/firmware, so let's exclude this directory from our check.

---
 support/scripts/fix-rpath | 6 ++++++
 1 file changed, 6 insertions(+)
support/scripts/fix-rpath +6 -0
index 15705a3b0d..fa138ca15a 100755
@@ -56,6 +56,7 @@ EOF
 # ELF files should not be in these sub-directories
 HOST_EXCLUDEPATHS="/share/terminfo"
 STAGING_EXCLUDEPATHS="/usr/include /usr/share/terminfo"
+TARGET_EXCLUDEPATHS="/lib/firmware"
 
 main() {
     local rootdir
@@ -106,6 +107,11 @@ main() {
 
         target)
             rootdir="${TARGET_DIR}"
+
+            for excludepath in ${TARGET_EXCLUDEPATHS}; do
+                find_args+=( "-path" "${TARGET_DIR}""${excludepath}" "-prune" "-o" )
+            done
+
             # we don't want $ORIGIN-based rpaths but absolute paths without rootdir.
             # we also want to remove rpaths pointing to /lib or /usr/lib.
             sanitize_extra_args+=( "--no-standard-lib-dirs" )
Signature · 1 line
2.14.3
#1 lore raw

PATCH 1/1 support/scripts/fix-rpath: exclude /lib/firmware in the target

Thomas, All,

On 2018-04-12 13:50 +0200, Thomas Petazzoni spake thusly:

Quoted 10 lines

The /lib/firmware directory contains random firmware for various devices. It happens that some of them might be or appear to be ELF files, but they shouldn't be checked by fix-rpath. For example, one of the Qualcomm VPU firmware file appears to be an ELF file, but patchelf isn't happy about it:

$ ./output/host/bin/patchelf --print-rpath output/target/lib/firmware/qcom/venus-4.2/venus.b00
patchelf: patchelf.cc:387: void ElfFile<Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym>::parse() [with Elf_Ehdr = Elf32_Ehdr; Elf_Phdr = Elf32_Phdr; Elf_Shdr = Elf32_Shdr; Elf_Addr = unsigned int; Elf_Off = unsigned int; Elf_Dyn = Elf32_Dyn; Elf_Sym = Elf32_Sym]: Assertion `shstrtabIndex < shdrs.size()' failed.
Aborted (core dumped)
Quoted 5 lines

Even though patchelf definitely shouldn't crash, it anyway doesn't make sense to check ELF files in /lib/firmware, so let's exclude this directory from our check.

Regards,
Yann E. MORIN.

Quoted 31 lines
---
 support/scripts/fix-rpath | 6 ++++++
 1 file changed, 6 insertions(+)
support/scripts/fix-rpath +6 -0
index 15705a3b0d..fa138ca15a 100755
@@ -56,6 +56,7 @@ EOF
 # ELF files should not be in these sub-directories
 HOST_EXCLUDEPATHS="/share/terminfo"
 STAGING_EXCLUDEPATHS="/usr/include /usr/share/terminfo"
+TARGET_EXCLUDEPATHS="/lib/firmware"
 
 main() {
     local rootdir
@@ -106,6 +107,11 @@ main() {
 
         target)
             rootdir="${TARGET_DIR}"
+
+            for excludepath in ${TARGET_EXCLUDEPATHS}; do
+                find_args+=( "-path" "${TARGET_DIR}""${excludepath}" "-prune" "-o" )
+            done
+
             # we don't want $ORIGIN-based rpaths but absolute paths without rootdir.
             # we also want to remove rpaths pointing to /lib or /usr/lib.
             sanitize_extra_args+=( "--no-standard-lib-dirs" )
Signature · 1 line
2.14.3
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
author Applied
#2 lore raw

PATCH 1/1 support/scripts/fix-rpath: exclude /lib/firmware in the target

In reply to Thomas Petazzoni

Hello,

Quoted 10 lines · Thomas Petazzoni

The /lib/firmware directory contains random firmware for various devices. It happens that some of them might be or appear to be ELF files, but they shouldn't be checked by fix-rpath. For example, one of the Qualcomm VPU firmware file appears to be an ELF file, but patchelf isn't happy about it:

$ ./output/host/bin/patchelf --print-rpath output/target/lib/firmware/qcom/venus-4.2/venus.b00
patchelf: patchelf.cc:387: void ElfFile<Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym>::parse() [with Elf_Ehdr = Elf32_Ehdr; Elf_Phdr = Elf32_Phdr; Elf_Shdr = Elf32_Shdr; Elf_Addr = unsigned int; Elf_Off = unsigned int; Elf_Dyn = Elf32_Dyn; Elf_Sym = Elf32_Sym]: Assertion `shstrtabIndex < shdrs.size()' failed.
Aborted (core dumped)
Quoted 8 lines

Even though patchelf definitely shouldn't crash, it anyway doesn't make sense to check ELF files in /lib/firmware, so let's exclude this directory from our check.

---
 support/scripts/fix-rpath | 6 ++++++
 1 file changed, 6 insertions(+)

Applied to master, thanks.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
#3 lore raw

PATCH 1/1 support/scripts/fix-rpath: exclude /lib/firmware in the target

In reply to Thomas Petazzoni
Quoted 12 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line

"Thomas" == Thomas Petazzoni <[email protected]> writes:

The /lib/firmware directory contains random firmware for various devices. It happens that some of them might be or appear to be ELF files, but they shouldn't be checked by fix-rpath. For example, one of the Qualcomm VPU firmware file appears to be an ELF file, but patchelf isn't happy about it:

$ ./output/host/bin/patchelf --print-rpath output/target/lib/firmware/qcom/venus-4.2/venus.b00
patchelf: patchelf.cc:387: void ElfFile<Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn, Elf_Sym>::parse() [with Elf_Ehdr = Elf32_Ehdr; Elf_Phdr = Elf32_Phdr; Elf_Shdr = Elf32_Shdr; Elf_Addr = unsigned int; Elf_Off = unsigned int; Elf_Dyn = Elf32_Dyn; Elf_Sym = Elf32_Sym]: Assertion `shstrtabIndex < shdrs.size()' failed.
Aborted (core dumped)
Quoted 5 lines

Even though patchelf definitely shouldn't crash, it anyway doesn't make sense to check ELF files in /lib/firmware, so let's exclude this directory from our check.

Committed to 2018.02.x, thanks.

Signature · 1 line
Bye, Peter Korsgaard