summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-06-01 03:55:04 +0000
committerRui Ueyama <ruiu@google.com>2015-06-01 03:55:04 +0000
commit5b25edddfe31ac73ec026f618d652e7436aae54d (patch)
tree441f521b40023d6be38661348163a8a49ad1f597
parent68216c680d616e15ce69290f470f8c6ed8e8c2c9 (diff)
downloadbcm5719-llvm-5b25edddfe31ac73ec026f618d652e7436aae54d.tar.gz
bcm5719-llvm-5b25edddfe31ac73ec026f618d652e7436aae54d.zip
COFF: Fix the import table Hint/Name field.
llvm-svn: 238719
-rw-r--r--lld/COFF/Chunks.cpp7
-rw-r--r--lld/COFF/Chunks.h5
2 files changed, 7 insertions, 5 deletions
diff --git a/lld/COFF/Chunks.cpp b/lld/COFF/Chunks.cpp
index 9e123384a1f..184c44d2ff5 100644
--- a/lld/COFF/Chunks.cpp
+++ b/lld/COFF/Chunks.cpp
@@ -171,8 +171,11 @@ void ImportThunkChunk::applyRelocations(uint8_t *Buf) {
write32le(Buf + FileOff + 2, Operand);
}
-HintNameChunk::HintNameChunk(StringRef N, uint16_t H)
- : Name(N), Hint(H), Size(RoundUpToAlignment(Name.size() + 4, 2)) {}
+size_t HintNameChunk::getSize() const {
+ // Starts with 2 byte Hint field, followed by a null-terminated string,
+ // ends with 0 or 1 byte padding.
+ return RoundUpToAlignment(Name.size() + 3, 2);
+}
void HintNameChunk::writeTo(uint8_t *Buf) {
write16le(Buf + FileOff, Hint);
diff --git a/lld/COFF/Chunks.h b/lld/COFF/Chunks.h
index 05561477b72..ade6a8a6f49 100644
--- a/lld/COFF/Chunks.h
+++ b/lld/COFF/Chunks.h
@@ -194,14 +194,13 @@ private:
// A chunk for the import descriptor table.
class HintNameChunk : public Chunk {
public:
- HintNameChunk(StringRef Name, uint16_t Hint);
- size_t getSize() const override { return Size; }
+ HintNameChunk(StringRef N, uint16_t H) : Name(N), Hint(H) {}
+ size_t getSize() const override;
void writeTo(uint8_t *Buf) override;
private:
StringRef Name;
uint16_t Hint;
- size_t Size;
};
// A chunk for the import descriptor table.
OpenPOWER on IntegriCloud