diff options
-rw-r--r-- | meta/classes/insane.bbclass | 84 | ||||
-rw-r--r-- | meta/lib/oe/qa.py | 21 |
2 files changed, 60 insertions, 45 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: |
diff --git a/meta/lib/oe/qa.py b/meta/lib/oe/qa.py index 01813931bb..7adf4d03ae 100644 --- a/meta/lib/oe/qa.py +++ b/meta/lib/oe/qa.py | |||
@@ -25,9 +25,9 @@ class ELFFile: | |||
25 | #print "'%x','%x' %s" % (ord(expectation), ord(result), self.name) | 25 | #print "'%x','%x' %s" % (ord(expectation), ord(result), self.name) |
26 | raise Exception("This does not work as expected") | 26 | raise Exception("This does not work as expected") |
27 | 27 | ||
28 | def __init__(self, name, bits32): | 28 | def __init__(self, name, bits = 0): |
29 | self.name = name | 29 | self.name = name |
30 | self.bits32 = bits32 | 30 | self.bits = bits |
31 | 31 | ||
32 | def open(self): | 32 | def open(self): |
33 | self.file = file(self.name, "r") | 33 | self.file = file(self.name, "r") |
@@ -38,10 +38,20 @@ class ELFFile: | |||
38 | self.my_assert(self.data[1], 'E') | 38 | self.my_assert(self.data[1], 'E') |
39 | self.my_assert(self.data[2], 'L') | 39 | self.my_assert(self.data[2], 'L') |
40 | self.my_assert(self.data[3], 'F') | 40 | self.my_assert(self.data[3], 'F') |
41 | if self.bits32 : | 41 | if self.bits == 0: |
42 | if self.data[ELFFile.EI_CLASS] == chr(ELFFile.ELFCLASS32): | ||
43 | self.bits == 32 | ||
44 | elif self.data[ELFFile.EI_CLASS] == chr(ELFFile.ELFCLASS64): | ||
45 | self.bits == 64 | ||
46 | else: | ||
47 | # Not 32-bit or 64.. lets assert | ||
48 | raise Exception("ELF but not 32 or 64 bit.") | ||
49 | elif self.bits == 32: | ||
42 | self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32)) | 50 | self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32)) |
43 | else: | 51 | elif self.bits == 64: |
44 | self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64)) | 52 | self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64)) |
53 | else: | ||
54 | raise Exception("Must specify unknown, 32 or 64 bit size.") | ||
45 | self.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) ) | 55 | self.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) ) |
46 | 56 | ||
47 | self.sex = self.data[ELFFile.EI_DATA] | 57 | self.sex = self.data[ELFFile.EI_DATA] |
@@ -60,6 +70,9 @@ class ELFFile: | |||
60 | def abiVersion(self): | 70 | def abiVersion(self): |
61 | return ord(self.data[ELFFile.EI_ABIVERSION]) | 71 | return ord(self.data[ELFFile.EI_ABIVERSION]) |
62 | 72 | ||
73 | def abiSize(self): | ||
74 | return self.bits | ||
75 | |||
63 | def isLittleEndian(self): | 76 | def isLittleEndian(self): |
64 | return self.sex == "<" | 77 | return self.sex == "<" |
65 | 78 | ||