diff options
author | Mark Hatle <mark.hatle@windriver.com> | 2011-03-01 12:42:28 -0600 |
---|---|---|
committer | Saul Wold <sgw@linux.intel.com> | 2011-03-01 16:36:44 -0800 |
commit | 3a39d969286a2b2abb81c9d055ad558c258bbea2 (patch) | |
tree | 4bbc609aa25e7dccf4224b5e6f3cbd867fc14175 /meta/classes | |
parent | 65d37c34b7d3615be328db138d5cd283abab227a (diff) | |
download | poky-3a39d969286a2b2abb81c9d055ad558c258bbea2.tar.gz |
insane.bbclass: Fix ELF bitsize comparison
Fix the way the ELF size is compared to ensure that incorrectly
sized ELF binaries are captured during the file scan.
lib/oe/qa.py is changed to accept a bitsize as a parameter. Instead
of previously defining true/false, it now takes "0" undefined, "32"
32-bit, and "64" 64-bit as the size argument. This allows us to
preserve existing behavior of only loading one ELF type, while
allowing the function to be able to discover the size on it's own.
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/insane.bbclass | 84 |
1 files changed, 43 insertions, 41 deletions
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index b376470bd7..812438494b 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -32,58 +32,58 @@ PACKAGEFUNCS += " do_package_qa " | |||
32 | def package_qa_get_machine_dict(): | 32 | def package_qa_get_machine_dict(): |
33 | return { | 33 | return { |
34 | "darwin9" : { | 34 | "darwin9" : { |
35 | "arm" : (40, 0, 0, True, True), | 35 | "arm" : (40, 0, 0, True, 32), |
36 | }, | 36 | }, |
37 | "linux" : { | 37 | "linux" : { |
38 | "arm" : (40, 97, 0, True, True), | 38 | "arm" : (40, 97, 0, True, 32), |
39 | "armeb": (40, 97, 0, False, True), | 39 | "armeb": (40, 97, 0, False, 32), |
40 | "powerpc": (20, 0, 0, False, True), | 40 | "powerpc": (20, 0, 0, False, 32), |
41 | "i386": ( 3, 0, 0, True, True), | 41 | "i386": ( 3, 0, 0, True, 32), |
42 | "i486": ( 3, 0, 0, True, True), | 42 | "i486": ( 3, 0, 0, True, 32), |
43 | "i586": ( 3, 0, 0, True, True), | 43 | "i586": ( 3, 0, 0, True, 32), |
44 | "i686": ( 3, 0, 0, True, True), | 44 | "i686": ( 3, 0, 0, True, 32), |
45 | "x86_64": (62, 0, 0, True, False), | 45 | "x86_64": (62, 0, 0, True, 64), |
46 | "ia64": (50, 0, 0, True, False), | 46 | "ia64": (50, 0, 0, True, 64), |
47 | "alpha": (36902, 0, 0, True, False), | 47 | "alpha": (36902, 0, 0, True, 64), |
48 | "hppa": (15, 3, 0, False, True), | 48 | "hppa": (15, 3, 0, False, 32), |
49 | "m68k": ( 4, 0, 0, False, True), | 49 | "m68k": ( 4, 0, 0, False, 32), |
50 | "mips": ( 8, 0, 0, False, True), | 50 | "mips": ( 8, 0, 0, False, 32), |
51 | "mipsel": ( 8, 0, 0, True, True), | 51 | "mipsel": ( 8, 0, 0, True, 32), |
52 | "s390": (22, 0, 0, False, True), | 52 | "s390": (22, 0, 0, False, 32), |
53 | "sh4": (42, 0, 0, True, True), | 53 | "sh4": (42, 0, 0, True, 32), |
54 | "sparc": ( 2, 0, 0, False, True), | 54 | "sparc": ( 2, 0, 0, False, 32), |
55 | }, | 55 | }, |
56 | "linux-uclibc" : { | 56 | "linux-uclibc" : { |
57 | "arm" : ( 40, 97, 0, True, True), | 57 | "arm" : ( 40, 97, 0, True, 32), |
58 | "armeb": ( 40, 97, 0, False, True), | 58 | "armeb": ( 40, 97, 0, False, 32), |
59 | "powerpc": ( 20, 0, 0, False, True), | 59 | "powerpc": ( 20, 0, 0, False, 32), |
60 | "i386": ( 3, 0, 0, True, True), | 60 | "i386": ( 3, 0, 0, True, 32), |
61 | "i486": ( 3, 0, 0, True, True), | 61 | "i486": ( 3, 0, 0, True, 32), |
62 | "i586": ( 3, 0, 0, True, True), | 62 | "i586": ( 3, 0, 0, True, 32), |
63 | "i686": ( 3, 0, 0, True, True), | 63 | "i686": ( 3, 0, 0, True, 32), |
64 | "x86_64": ( 62, 0, 0, True, False), | 64 | "x86_64": ( 62, 0, 0, True, 64), |
65 | "mips": ( 8, 0, 0, False, True), | 65 | "mips": ( 8, 0, 0, False, 32), |
66 | "mipsel": ( 8, 0, 0, True, True), | 66 | "mipsel": ( 8, 0, 0, True, 32), |
67 | "avr32": (6317, 0, 0, False, True), | 67 | "avr32": (6317, 0, 0, False, 32), |
68 | "sh4": (42, 0, 0, True, True), | 68 | "sh4": (42, 0, 0, True, 32), |
69 | 69 | ||
70 | }, | 70 | }, |
71 | "uclinux-uclibc" : { | 71 | "uclinux-uclibc" : { |
72 | "bfin": ( 106, 0, 0, True, True), | 72 | "bfin": ( 106, 0, 0, True, 32), |
73 | }, | 73 | }, |
74 | "linux-gnueabi" : { | 74 | "linux-gnueabi" : { |
75 | "arm" : (40, 0, 0, True, True), | 75 | "arm" : (40, 0, 0, True, 32), |
76 | "armeb" : (40, 0, 0, False, True), | 76 | "armeb" : (40, 0, 0, False, 32), |
77 | }, | 77 | }, |
78 | "linux-uclibcgnueabi" : { | 78 | "linux-uclibcgnueabi" : { |
79 | "arm" : (40, 0, 0, True, True), | 79 | "arm" : (40, 0, 0, True, 32), |
80 | "armeb" : (40, 0, 0, False, True), | 80 | "armeb" : (40, 0, 0, False, 32), |
81 | }, | 81 | }, |
82 | "linux-gnuspe" : { | 82 | "linux-gnuspe" : { |
83 | "powerpc": (20, 0, 0, False, True), | 83 | "powerpc": (20, 0, 0, False, 32), |
84 | }, | 84 | }, |
85 | "linux-uclibcspe" : { | 85 | "linux-uclibcspe" : { |
86 | "powerpc": (20, 0, 0, False, True), | 86 | "powerpc": (20, 0, 0, False, 32), |
87 | }, | 87 | }, |
88 | 88 | ||
89 | } | 89 | } |
@@ -243,7 +243,7 @@ def package_qa_check_arch(path,name,d, elf): | |||
243 | return True | 243 | return True |
244 | 244 | ||
245 | #if this will throw an exception, then fix the dict above | 245 | #if this will throw an exception, then fix the dict above |
246 | (machine, osabi, abiversion, littleendian, bits32) \ | 246 | (machine, osabi, abiversion, littleendian, bits) \ |
247 | = package_qa_get_machine_dict()[target_os][target_arch] | 247 | = package_qa_get_machine_dict()[target_os][target_arch] |
248 | 248 | ||
249 | # Check the architecture and endiannes of the binary | 249 | # Check the architecture and endiannes of the binary |
@@ -251,6 +251,10 @@ def package_qa_check_arch(path,name,d, elf): | |||
251 | error_msg = "Architecture did not match (%d to %d) on %s" % \ | 251 | error_msg = "Architecture did not match (%d to %d) on %s" % \ |
252 | (machine, elf.machine(), package_qa_clean_path(path,d)) | 252 | (machine, elf.machine(), package_qa_clean_path(path,d)) |
253 | sane = package_qa_handle_error(4, error_msg, name, path, d) | 253 | sane = package_qa_handle_error(4, error_msg, name, path, d) |
254 | elif not bits == elf.abiSize(): | ||
255 | error_msg = "Bit size did not match (%d to %d) on %s" % \ | ||
256 | (bits, elf.abiSize(), package_qa_clean_path(path,d)) | ||
257 | sane = package_qa_handle_error(4, error_msg, name, path, d) | ||
254 | elif not littleendian == elf.isLittleEndian(): | 258 | elif not littleendian == elf.isLittleEndian(): |
255 | error_msg = "Endiannes did not match (%d to %d) on %s" % \ | 259 | error_msg = "Endiannes did not match (%d to %d) on %s" % \ |
256 | (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d)) | 260 | (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d)) |
@@ -445,14 +449,12 @@ def package_qa_walk(path, funcs, package,d): | |||
445 | #if this will throw an exception, then fix the dict above | 449 | #if this will throw an exception, then fix the dict above |
446 | target_os = bb.data.getVar('TARGET_OS', d, True) | 450 | target_os = bb.data.getVar('TARGET_OS', d, True) |
447 | target_arch = bb.data.getVar('TARGET_ARCH', d, True) | 451 | target_arch = bb.data.getVar('TARGET_ARCH', d, True) |
448 | (machine, osabi, abiversion, littleendian, bits32) \ | ||
449 | = package_qa_get_machine_dict()[target_os][target_arch] | ||
450 | 452 | ||
451 | sane = True | 453 | sane = True |
452 | for root, dirs, files in os.walk(path): | 454 | for root, dirs, files in os.walk(path): |
453 | for file in files: | 455 | for file in files: |
454 | path = os.path.join(root,file) | 456 | path = os.path.join(root,file) |
455 | elf = oe.qa.ELFFile(path, bits32) | 457 | elf = oe.qa.ELFFile(path) |
456 | try: | 458 | try: |
457 | elf.open() | 459 | elf.open() |
458 | except: | 460 | except: |