diff options
| -rw-r--r-- | meta/classes/insane.bbclass | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index 8d5da00d16..c45f2cb4b3 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
| @@ -92,7 +92,7 @@ def package_qa_get_machine_dict(): | |||
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | 94 | ||
| 95 | WARN_QA ?= "dev-so rpaths debug-deps dev-deps debug-files arch la2 pkgconfig desktop la ldflags perms" | 95 | WARN_QA ?= "dev-so rpaths debug-deps dev-deps debug-files arch la2 pkgconfig desktop la ldflags perms useless-rpaths" |
| 96 | ERROR_QA ?= "" | 96 | ERROR_QA ?= "" |
| 97 | #ERROR_QA ?= "rpaths debug-deps dev-deps debug-files arch pkgconfig perms" | 97 | #ERROR_QA ?= "rpaths debug-deps dev-deps debug-files arch pkgconfig perms" |
| 98 | 98 | ||
| @@ -141,6 +141,31 @@ def package_qa_check_rpath(file,name, d, elf, messages): | |||
| 141 | if dir in line: | 141 | if dir in line: |
| 142 | messages.append("package %s contains bad RPATH %s in file %s" % (name, line, file)) | 142 | messages.append("package %s contains bad RPATH %s in file %s" % (name, line, file)) |
| 143 | 143 | ||
| 144 | QAPATHTEST[useless-rpaths] = "package_qa_check_useless_rpaths" | ||
| 145 | def package_qa_check_useless_rpaths(file,name, d, elf, messages): | ||
| 146 | """ | ||
| 147 | Check for RPATHs that are useless but not dangerous | ||
| 148 | """ | ||
| 149 | if not elf: | ||
| 150 | return | ||
| 151 | |||
| 152 | objdump = bb.data.getVar('OBJDUMP', d, True) | ||
| 153 | env_path = bb.data.getVar('PATH', d, True) | ||
| 154 | |||
| 155 | libdir = bb.data.getVar("libdir", d, True) | ||
| 156 | base_libdir = bb.data.getVar("base_libdir", d, True) | ||
| 157 | |||
| 158 | import re | ||
| 159 | rpath_re = re.compile("\s+RPATH\s+(.*)") | ||
| 160 | for line in os.popen("LC_ALL=C PATH=%s %s -p '%s' 2> /dev/null" % (env_path, objdump, file), "r"): | ||
| 161 | m = rpath_re.match(line) | ||
| 162 | if m: | ||
| 163 | rpath = m.group(1) | ||
| 164 | if rpath == libdir or rpath == base_libdir: | ||
| 165 | # The dynamic linker searches both these places anyway. There is no point in | ||
| 166 | # looking there again. | ||
| 167 | messages.append("dynamic section contains probably-redundant RPATH %s" % rpath) | ||
| 168 | |||
| 144 | QAPATHTEST[dev-so] = "package_qa_check_dev" | 169 | QAPATHTEST[dev-so] = "package_qa_check_dev" |
| 145 | def package_qa_check_dev(path, name, d, elf, messages): | 170 | def package_qa_check_dev(path, name, d, elf, messages): |
| 146 | """ | 171 | """ |
| @@ -238,22 +263,19 @@ def package_qa_hash_style(path, name, d, elf, messages): | |||
| 238 | objdump = bb.data.getVar('OBJDUMP', d, True) | 263 | objdump = bb.data.getVar('OBJDUMP', d, True) |
| 239 | env_path = bb.data.getVar('PATH', d, True) | 264 | env_path = bb.data.getVar('PATH', d, True) |
| 240 | 265 | ||
| 241 | sane = True | 266 | sane = False |
| 242 | elf = False | 267 | has_syms = False |
| 243 | # A bit hacky. We do not know if path is an elf binary or not | 268 | |
| 244 | # we will search for 'NEEDED' or 'INIT' as this should be printed... | 269 | # If this binary has symbols, we expect it to have GNU_HASH too. |
| 245 | # and come before the HASH section (guess!!!) and works on split out | ||
| 246 | # debug symbols too | ||
| 247 | for line in os.popen("LC_ALL=C PATH=%s %s -p '%s' 2> /dev/null" % (env_path, objdump, path), "r"): | 270 | for line in os.popen("LC_ALL=C PATH=%s %s -p '%s' 2> /dev/null" % (env_path, objdump, path), "r"): |
| 248 | if "NEEDED" in line or "INIT" in line: | 271 | if "SYMTAB" in line: |
| 249 | sane = False | 272 | has_syms = True |
| 250 | elf = True | ||
| 251 | if "GNU_HASH" in line: | 273 | if "GNU_HASH" in line: |
| 252 | sane = True | 274 | sane = True |
| 253 | if "[mips32]" in line or "[mips64]" in line: | 275 | if "[mips32]" in line or "[mips64]" in line: |
| 254 | sane = True | 276 | sane = True |
| 255 | 277 | ||
| 256 | if elf and not sane: | 278 | if has_syms and not sane: |
| 257 | messages.append("No GNU_HASH in the elf binary: '%s'" % path) | 279 | messages.append("No GNU_HASH in the elf binary: '%s'" % path) |
| 258 | 280 | ||
| 259 | 281 | ||
