diff --git a/lld/COFF/DLL.cpp b/lld/COFF/DLL.cpp index 2d20b094888c7..797d9f1490253 100644 --- a/lld/COFF/DLL.cpp +++ b/lld/COFF/DLL.cpp @@ -131,7 +131,14 @@ class ImportDirectoryChunk : public NonSectionChunk { // Contents of this chunk is always null bytes. class NullChunk : public NonSectionChunk { public: - explicit NullChunk(size_t n) : size(n) { hasData = false; } + explicit NullChunk(size_t n, uint32_t align) : size(n) { + hasData = false; + setAlignment(align); + } + explicit NullChunk(COFFLinkerContext &ctx) + : NullChunk(ctx.config.wordsize, ctx.config.wordsize) {} + explicit NullChunk(COFFLinkerContext &ctx, size_t n) + : NullChunk(n, ctx.config.wordsize) {} size_t getSize() const override { return size; } void writeTo(uint8_t *buf) const override { @@ -737,11 +744,11 @@ void IdataContents::create(COFFLinkerContext &ctx) { } } // Terminate with null values. - lookups.push_back(make(ctx.config.wordsize)); - addresses.push_back(make(ctx.config.wordsize)); + lookups.push_back(make(ctx)); + addresses.push_back(make(ctx)); if (ctx.config.machine == ARM64EC) { - auxIat.push_back(make(ctx.config.wordsize)); - auxIatCopy.push_back(make(ctx.config.wordsize)); + auxIat.push_back(make(ctx)); + auxIatCopy.push_back(make(ctx)); } for (int i = 0, e = syms.size(); i < e; ++i) @@ -755,7 +762,7 @@ void IdataContents::create(COFFLinkerContext &ctx) { dirs.push_back(dir); } // Add null terminator. - dirs.push_back(make(sizeof(ImportDirectoryTableEntry))); + dirs.push_back(make(sizeof(ImportDirectoryTableEntry), 4)); } std::vector DelayLoadContents::getChunks() { @@ -830,17 +837,16 @@ void DelayLoadContents::create(Defined *h) { saver().save("__tailMerge_" + syms[0]->getDLLName().lower()); ctx.symtab.addSynthetic(tmName, tm); // Terminate with null values. - addresses.push_back(make(8)); - names.push_back(make(8)); + addresses.push_back(make(ctx, 8)); + names.push_back(make(ctx, 8)); if (ctx.config.machine == ARM64EC) { - auxIat.push_back(make(8)); - auxIatCopy.push_back(make(8)); + auxIat.push_back(make(ctx, 8)); + auxIatCopy.push_back(make(ctx, 8)); } for (int i = 0, e = syms.size(); i < e; ++i) syms[i]->setLocation(addresses[base + i]); - auto *mh = make(8); - mh->setAlignment(8); + auto *mh = make(8, 8); moduleHandles.push_back(mh); // Fill the delay import table header fields. @@ -853,7 +859,8 @@ void DelayLoadContents::create(Defined *h) { if (unwind) unwindinfo.push_back(unwind); // Add null terminator. - dirs.push_back(make(sizeof(delay_import_directory_table_entry))); + dirs.push_back( + make(sizeof(delay_import_directory_table_entry), 4)); } Chunk *DelayLoadContents::newTailMergeChunk(Chunk *dir) {