insane: only parse ELFs if they're files, not symlinks

This reduces the number of files that need to be swept by not scanning
eg the library symlinks, and means we can remove the explicit islink()
checks in many of the tests.

(From OE-Core rev: aa9ec4b5c719bf610ad953095d1111e4c257747e)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton 2024-10-10 17:06:17 +01:00 committed by Richard Purdie
parent 91ba10c7a3
commit 27ab030dc0

View File

@ -122,9 +122,6 @@ def package_qa_check_rpath(file,name, d, elf):
if not elf:
return
if os.path.islink(file):
return
bad_dirs = [d.getVar('BASE_WORKDIR'), d.getVar('STAGING_DIR_TARGET')]
phdrs = elf.run_objdump("-p", d)
@ -150,9 +147,6 @@ def package_qa_check_useless_rpaths(file, name, d, elf):
if not elf:
return
if os.path.islink(file):
return
libdir = d.getVar("libdir")
base_libdir = d.getVar("base_libdir")
@ -337,11 +331,6 @@ def package_qa_check_arch(path,name,d, elf):
oe.qa.handle_error("arch", pn + ": Recipe inherits the allarch class, but has packaged architecture-specific binaries", d)
return
# avoid following links to /usr/bin (e.g. on udev builds)
# we will check the files pointed to anyway...
if os.path.islink(path):
return
#if this will throw an exception, then fix the dict above
(machine, osabi, abiversion, littleendian, bits) \
= oe.elf.machine_dict(d)[host_os][host_arch]
@ -383,9 +372,6 @@ def package_qa_textrel(path, name, d, elf):
if not elf:
return
if os.path.islink(path):
return
phdrs = elf.run_objdump("-p", d)
import re
@ -405,9 +391,6 @@ def package_qa_hash_style(path, name, d, elf):
if not elf:
return
if os.path.islink(path):
return
gnu_hash = "--hash-style=gnu" in d.getVar('LDFLAGS')
if not gnu_hash:
gnu_hash = "--hash-style=both" in d.getVar('LDFLAGS')
@ -601,7 +584,7 @@ def check_32bit_symbols(path, packagename, d, elf):
)
# elf is a oe.qa.ELFFile object
if elf is not None:
if elf:
phdrs = elf.run_objdump("-tw", d)
syms = re.finditer(ptrn, phdrs)
usedapis = {sym.group('notag') for sym in syms}
@ -789,7 +772,7 @@ def package_qa_walk(checkfuncs, package, d):
elves = {}
for path in pkgfiles[package]:
elf = None
if os.path.isfile(path):
if os.path.isfile(path) and not os.path.islink(path):
elf = oe.qa.ELFFile(path)
try:
elf.open()