Index: llvm/lib/Object/COFFObjectFile.cpp =================================================================== --- llvm/lib/Object/COFFObjectFile.cpp +++ llvm/lib/Object/COFFObjectFile.cpp @@ -1602,8 +1602,6 @@ uint16_t Length; RETURN_IF_ERROR(Reader.readInteger(Length)); ArrayRef RawDirString; - // Strings are stored as 2-byte aligned unicode characters but readFixedString - // assumes byte string, so we double length. RETURN_IF_ERROR(Reader.readArray(RawDirString, Length)); return RawDirString; } Index: llvm/tools/llvm-readobj/COFFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/COFFDumper.cpp +++ llvm/tools/llvm-readobj/COFFDumper.cpp @@ -1562,8 +1562,14 @@ raw_svector_ostream OS(IDStr); if (i < Table.NumberOfNameEntries) { ArrayRef RawEntryNameString = unwrapOrError(RSF.getEntryNameString(Entry)); + std::vector EndianCorrectedNameString(RawEntryNameString.size() + + 1); + std::copy(RawEntryNameString.begin(), RawEntryNameString.end(), + EndianCorrectedNameString.begin() + 1); + EndianCorrectedNameString[0] = 0xFEFF; std::string EntryNameString; - if (!llvm::convertUTF16ToUTF8String(RawEntryNameString, EntryNameString)) + if (!llvm::convertUTF16ToUTF8String(EndianCorrectedNameString, + EntryNameString)) error(object_error::parse_failed); OS << ": "; OS << EntryNameString;