diff options
Diffstat (limited to 'contrib/llvm/tools/lld/COFF/DLL.cpp')
| -rw-r--r-- | contrib/llvm/tools/lld/COFF/DLL.cpp | 16 | 
1 files changed, 15 insertions, 1 deletions
| diff --git a/contrib/llvm/tools/lld/COFF/DLL.cpp b/contrib/llvm/tools/lld/COFF/DLL.cpp index 599cc5892a16..c06027d3e5c3 100644 --- a/contrib/llvm/tools/lld/COFF/DLL.cpp +++ b/contrib/llvm/tools/lld/COFF/DLL.cpp @@ -47,6 +47,7 @@ public:    }    void writeTo(uint8_t *Buf) const override { +    memset(Buf + OutputSectionOff, 0, getSize());      write16le(Buf + OutputSectionOff, Hint);      memcpy(Buf + OutputSectionOff + 2, Name.data(), Name.size());    } @@ -63,7 +64,10 @@ public:    size_t getSize() const override { return Config->Wordsize; }    void writeTo(uint8_t *Buf) const override { -    write32le(Buf + OutputSectionOff, HintName->getRVA()); +    if (Config->is64()) +      write64le(Buf + OutputSectionOff, HintName->getRVA()); +    else +      write32le(Buf + OutputSectionOff, HintName->getRVA());    }    Chunk *HintName; @@ -99,6 +103,8 @@ public:    size_t getSize() const override { return sizeof(ImportDirectoryTableEntry); }    void writeTo(uint8_t *Buf) const override { +    memset(Buf + OutputSectionOff, 0, getSize()); +      auto *E = (coff_import_directory_table_entry *)(Buf + OutputSectionOff);      E->ImportLookupTableRVA = LookupTab->getRVA();      E->NameRVA = DLLName->getRVA(); @@ -118,6 +124,10 @@ public:    bool hasData() const override { return false; }    size_t getSize() const override { return Size; } +  void writeTo(uint8_t *Buf) const override { +    memset(Buf + OutputSectionOff, 0, Size); +  } +  private:    size_t Size;  }; @@ -160,6 +170,8 @@ public:    }    void writeTo(uint8_t *Buf) const override { +    memset(Buf + OutputSectionOff, 0, getSize()); +      auto *E = (delay_import_directory_table_entry *)(Buf + OutputSectionOff);      E->Attributes = 1;      E->Name = DLLName->getRVA(); @@ -392,6 +404,8 @@ public:    }    void writeTo(uint8_t *Buf) const override { +    memset(Buf + OutputSectionOff, 0, getSize()); +      auto *E = (export_directory_table_entry *)(Buf + OutputSectionOff);      E->NameRVA = DLLName->getRVA();      E->OrdinalBase = 0; | 
