diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-11-19 17:08:00 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-11-19 17:08:00 +0000 |
commit | 78e12c73e533ee71d3a79576c34ac52ce35a1f10 (patch) | |
tree | 83c2a71945fbe4ff1621ca716521b5b09e1de62b /llvm | |
parent | 446948e094b6b8d66745e3c50d006c5c7385c0fa (diff) | |
download | bcm5719-llvm-78e12c73e533ee71d3a79576c34ac52ce35a1f10.tar.gz bcm5719-llvm-78e12c73e533ee71d3a79576c34ac52ce35a1f10.zip |
Correct the computation of when to add the padding. It is not based on the
member's size. It is based on the oddness/evenness of the file pointer.
This fixes a bug with llvm-ar not being able to read archives produced by
llvm-ranlib when there are members with odd long file name lengths.
llvm-svn: 17997
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Bytecode/Archive/ArchiveReader.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/Bytecode/Archive/ArchiveWriter.cpp | 2 |
2 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Bytecode/Archive/ArchiveReader.cpp b/llvm/lib/Bytecode/Archive/ArchiveReader.cpp index c0f0d1569bd..6f9a75ae7aa 100644 --- a/llvm/lib/Bytecode/Archive/ArchiveReader.cpp +++ b/llvm/lib/Bytecode/Archive/ArchiveReader.cpp @@ -227,7 +227,7 @@ Archive::loadArchive() { // with it. It doesn't count as the "first file". foreignST = mbr; At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; } else if (mbr->isStringTable()) { // Simply suck the entire string table into a string @@ -236,7 +236,7 @@ Archive::loadArchive() { // (SVR4 style long names). strtab.assign(At,mbr->getSize()); At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; delete mbr; } else if (mbr->isLLVMSymbolTable()) { @@ -247,7 +247,7 @@ Archive::loadArchive() { parseSymbolTable(mbr->getData(),mbr->getSize()); seenSymbolTable = true; At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; delete mbr; // We don't need this member in the list of members. } else { @@ -259,7 +259,7 @@ Archive::loadArchive() { } members.push_back(mbr); At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; } } @@ -317,7 +317,7 @@ Archive::loadSymbolTable() { if (mbr->isForeignSymbolTable()) { // Skip the foreign symbol table, we don't do anything with it At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; delete mbr; @@ -330,7 +330,7 @@ Archive::loadSymbolTable() { // Process the string table entry strtab.assign((const char*)mbr->getData(),mbr->getSize()); At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; delete mbr; // Get the next one @@ -342,7 +342,7 @@ Archive::loadSymbolTable() { if (mbr->isLLVMSymbolTable()) { parseSymbolTable(mbr->getData(),mbr->getSize()); FirstFile = At + mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) FirstFile++; } else { // There's no symbol table in the file. We have to rebuild it from scratch @@ -454,7 +454,7 @@ Archive::findModulesDefiningSymbols(std::set<std::string>& symbols, // Go to the next file location At += mbr->getSize(); - if ((mbr->getSize() & 1) == 1) + if ((intptr_t(At) & 1) == 1) At++; } } diff --git a/llvm/lib/Bytecode/Archive/ArchiveWriter.cpp b/llvm/lib/Bytecode/Archive/ArchiveWriter.cpp index bd9851eb598..c3c7d12676e 100644 --- a/llvm/lib/Bytecode/Archive/ArchiveWriter.cpp +++ b/llvm/lib/Bytecode/Archive/ArchiveWriter.cpp @@ -290,7 +290,7 @@ Archive::writeMember( ARFile.write(data,fSize); // Make sure the member is an even length - if (ARFile.tellp() % 2 != 0) + if (ARFile.tellp() & 1 == 1) ARFile << ARFILE_PAD; // Free the compressed data, if necessary |