Skip to content

Commit

Permalink
[pdb] Fix issues with pdb writing.
Browse files Browse the repository at this point in the history
This fixes an alignment issue by forcing all cached allocations
to be 8 byte aligned, and also fixes an issue arising on big
endian systems by writing ulittle32_t's instead of uint32_t's
in the test.

llvm-svn: 272437
  • Loading branch information
Zachary Turner committed Jun 10, 2016
1 parent e1f60b1 commit 97609bb
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
2 changes: 1 addition & 1 deletion llvm/lib/DebugInfo/PDB/Raw/MappedBlockStream.cpp
Expand Up @@ -104,7 +104,7 @@ Error MappedBlockStream::readBytes(uint32_t Offset, uint32_t Size,
// into it, and return an ArrayRef to that. Do not touch existing pool
// allocations, as existing clients may be holding a pointer which must
// not be invalidated.
uint8_t *WriteBuffer = Pool.Allocate<uint8_t>(Size);
uint8_t *WriteBuffer = static_cast<uint8_t *>(Pool.Allocate(Size, 8));
if (auto EC = readBytes(Offset, MutableArrayRef<uint8_t>(WriteBuffer, Size)))
return EC;

Expand Down
5 changes: 4 additions & 1 deletion llvm/unittests/DebugInfo/PDB/MappedBlockStreamTest.cpp
Expand Up @@ -308,14 +308,17 @@ TEST(MappedBlockStreamTest, TestWriteThenRead) {
MappedBlockStreamImpl S(llvm::make_unique<IndexedStreamData>(0, F), F);

enum class MyEnum : uint32_t { Val1 = 2908234, Val2 = 120891234 };
using support::ulittle32_t;

uint16_t u16[] = {31468, 0};
uint32_t u32[] = {890723408, 0};
MyEnum Enum[] = {MyEnum::Val1, MyEnum::Val2};
StringRef ZStr[] = {"Zero Str", ""};
StringRef FStr[] = {"Fixed Str", ""};
ArrayRef<uint8_t> byteArray[] = {{'1', '2'}, {'0', '0'}};
ArrayRef<uint32_t> intArray[] = {{890723408, 29082234}, {0, 0}};
ArrayRef<support::ulittle32_t> intArray[] = {
{ulittle32_t(890723408), ulittle32_t(29082234)},
{ulittle32_t(0), ulittle32_t(0)}};

StreamReader Reader(S);
StreamWriter Writer(S);
Expand Down

0 comments on commit 97609bb

Please sign in to comment.