def IsBitcode(filename): fp = DriverOpen(filename, 'rb') header = fp.read(4) DriverClose(fp) # Raw bitcode if header == LLVM_BITCODE_MAGIC: return True # Wrapped bitcode return IsBitcodeWrapperHeader(header)
def SetPortableUrl(json_dict, shortname, filepath): json_dict['portable'] = {} json_dict['portable']['pnacl-translate'] = {} json_dict['portable']['pnacl-translate']['url'] = shortname fd = DriverOpen(filepath, 'r') sha = hashlib.sha256() sha.update(fd.read()) fd.close() json_dict['portable']['pnacl-translate']['sha256'] = sha.hexdigest()
def WrapBitcode(output): """ Hash the bitcode and insert a wrapper header with the sha value. If the bitcode is already wrapped, the old hash is overwritten. """ fd = DriverOpen(output, 'rb') maybe_header = fd.read(16) if IsBitcodeWrapperHeader(maybe_header): offset, bytes_left = GetBasicHeaderData(maybe_header) fd.seek(offset) else: offset = 0 fd.seek(0, os.SEEK_END) bytes_left = fd.tell() fd.seek(0) # get the hash sha = hashlib.sha256() while bytes_left: block = fd.read(min(bytes_left, 4096)) sha.update(block) bytes_left -= len(block) DriverClose(fd) # run bc-wrap Run(' '.join(['${LLVM_BCWRAP}', '-hash', sha.hexdigest(), '"%s"' % output]))
def GetELFHeader(filename): fp = DriverOpen(filename, 'rb') header = fp.read(16 + 2 + 2) DriverClose(fp) return DecodeELFHeader(header, filename)
def IsWrappedBitcode(filename): fp = DriverOpen(filename, 'rb') header = fp.read(4) iswbc = IsBitcodeWrapperHeader(header) DriverClose(fp) return iswbc
def GetELFHeader(filename): fp = DriverOpen(filename, 'rb') # Read max(sizeof(Elf64_Ehdr), sizeof(Elf32_Ehdr)), which is 64 bytes. header = fp.read(64) DriverClose(fp) return DecodeELFHeader(header, filename)
def GetBitcodeMagic(filename): fp = DriverOpen(filename, 'rb') header = fp.read(4) DriverClose(fp) return header