Bug 12226

Summary: [ross/mut] go-cross fails on musl and nightly-no-x11
Product: [Build System, Metadata & Runtime] OE-Core Reporter: Armin Kuster <akuster>
Component: coreAssignee: Ross Burton <ross.burton>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: Undecided CC: meta.mr.watcher, meta.watcher
Version: 2.4.1   
Target Milestone: ---   
Hardware: x86   
OS: Multiple   
Whiteboard:
OS type for building Yocto: --- Type of Regression: ---
Verified: Documentation change: Don't know

Description Armin Kuster 2017-10-14 04:15:09 UTC
ERROR: go-cross-i586-1.9-r0 do_populate_sysroot_setscene: Error executing a python function in exec_python_func() autogenerated:

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
     0001:
 *** 0002:uninative_changeinterp(d)
     0003:
File: '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl/build/meta/classes/uninative.bbclass', lineno: 136, function: uninative_changeinterp
     0132:            try:
     0133:                elf.open()
     0134:            except oe.qa.NotELFFileError:
     0135:                continue
 *** 0136:            if not elf.isDynamic():
     0137:                continue
     0138:
     0139:            subprocess.check_output(("patchelf-uninative", "--set-interpreter", d.getVar("UNINATIVE_LOADER"), f), stderr=subprocess.STDOUT)
     0140:}
File: '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl/build/meta/lib/oe/qa.py', lineno: 28, function: isDynamic
     0024:    def isLittleEndian(self):
     0025:        return self.elf.endian == Elf.Endian.le
     0026:
     0027:    def isDynamic(self):
 *** 0028:        for p in self.elf.header.program_headers:
     0029:            if p.type == Elf.PhType.interp:
     0030:                return True
     0031:        return False
     0032:
File: '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl/build/meta/lib/oe/elf.py', lineno: 464, function: program_headers
     0460:                self._m_program_headers = [None] * (self.qty_program_header)
     0461:                for i in range(self.qty_program_header):
     0462:                    self._raw__m_program_headers[i] = self._io.read_bytes(self.program_header_entry_size)
     0463:                    io = KaitaiStream(BytesIO(self._raw__m_program_headers[i]))
 *** 0464:                    self._m_program_headers[i] = self._root.EndianElf.ProgramHeader(io, self, self._root, self._is_le)
     0465:
     0466:            else:
     0467:                self._raw__m_program_headers = [None] * (self.qty_program_header)
     0468:                self._m_program_headers = [None] * (self.qty_program_header)
File: '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl/build/meta/lib/oe/elf.py', lineno: 207, function: __init__
     0203:                self._io = _io
     0204:                self._parent = _parent
     0205:                self._root = _root if _root else self
     0206:                self._is_le = _is_le
 *** 0207:                self._read()
     0208:
     0209:            def _read(self):
     0210:
     0211:                if self._is_le == True:
File: '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl/build/meta/lib/oe/elf.py', lineno: 212, function: _read
     0208:
     0209:            def _read(self):
     0210:
     0211:                if self._is_le == True:
 *** 0212:                    self._read_le()
     0213:                elif self._is_le == False:
     0214:                    self._read_be()
     0215:                else:
     0216:                    raise Exception("Unable to decide endianness")
File: '/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-musl/build/meta/lib/oe/elf.py', lineno: 219, function: _read_le
     0215:                else:
     0216:                    raise Exception("Unable to decide endianness")
     0217:
     0218:            def _read_le(self):
 *** 0219:                self.type = self._root.PhType(self._io.read_u4le())
     0220:                if self._root.bits == self._root.Bits.b64:
     0221:                    self.flags64 = self._io.read_u4le()
     0222:
     0223:                _on = self._root.bits
File: '/usr/lib/python3.5/enum.py', lineno: 241, function: __call__
     0237:        `type`, if set, will be mixed in as the first base class.
     0238:
     0239:        """
     0240:        if names is None:  # simple value lookup
 *** 0241:            return cls.__new__(cls, value)
     0242:        # otherwise, functional API: we're creating a new Enum type
     0243:        return cls._create_(value, names, module=module, qualname=qualname, type=type, start=start)
     0244:
     0245:    def __contains__(cls, member):
File: '/usr/lib/python3.5/enum.py', lineno: 476, function: __new__
     0472:            # not there, now do long search -- O(n) behavior
     0473:            for member in cls._member_map_.values():
     0474:                if member._value_ == value:
     0475:                    return member
 *** 0476:        raise ValueError("%r is not a valid %s" % (value, cls.__name__))
     0477:
     0478:    def __repr__(self):
     0479:        return "<%s.%s: %r>" % (
     0480:                self.__class__.__name__, self._name_, self._value_)
Exception: ValueError: 1694766464 is not a valid PhType

NOTE: recipe expat-native-2.2.3-r0: task do_populate_sysroot_setscene: Started
Comment 1 Ross Burton 2017-10-16 20:34:47 UTC
Bug in my new ELF parser and specific to MUT, fixed locally.