From 1f76ca5a2d1ddebdd81690a2891c11359e805ea9 Mon Sep 17 00:00:00 2001 From: Eric Beckmann Date: Tue, 13 Jun 2017 20:53:31 +0000 Subject: Fix a bug introduced in r305092 on big-endian systems. Summary: We were writing the length of the string based on system-endianness, and not universally little-endian. This fixes that. Reviewers: zturner Subscribers: hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D34159 llvm-svn: 305322 --- llvm/lib/Object/WindowsResource.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'llvm/lib/Object/WindowsResource.cpp') diff --git a/llvm/lib/Object/WindowsResource.cpp b/llvm/lib/Object/WindowsResource.cpp index fdf4690e604..a1a0d96acbc 100644 --- a/llvm/lib/Object/WindowsResource.cpp +++ b/llvm/lib/Object/WindowsResource.cpp @@ -691,10 +691,8 @@ void WindowsResourceCOFFWriter::writeDirectoryStringTable() { // Now write the directory string table for .rsrc$01 uint32_t TotalStringTableSize = 0; for (auto String : StringTable) { - auto *LengthField = - reinterpret_cast(BufferStart + CurrentOffset); uint16_t Length = String.size(); - *LengthField = Length; + support::endian::write16le(BufferStart + CurrentOffset, Length); CurrentOffset += sizeof(uint16_t); auto *Start = reinterpret_cast(BufferStart + CurrentOffset); std::copy(String.begin(), String.end(), Start); -- cgit v1.2.3