Skip to content

Commit 639e14f

Browse files
committed
fix dosStubSize align and coffHeaderOffset respectively
1 parent 8bac7cd commit 639e14f

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

lld/COFF/Writer.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -728,10 +728,8 @@ void Writer::writePEChecksum() {
728728
uint32_t *buf = (uint32_t *)buffer->getBufferStart();
729729
uint32_t size = (uint32_t)(buffer->getBufferSize());
730730

731-
coff_file_header *coffHeader =
732-
(coff_file_header *)((uint8_t *)buf + dosStubSize + sizeof(PEMagic));
733-
pe32_header *peHeader =
734-
(pe32_header *)((uint8_t *)coffHeader + sizeof(coff_file_header));
731+
pe32_header *peHeader = (pe32_header *)((uint8_t *)buf + coffHeaderOffset +
732+
sizeof(coff_file_header));
735733

736734
uint64_t sum = 0;
737735
uint32_t count = size;
@@ -1038,7 +1036,7 @@ void Writer::sortSections() {
10381036

10391037
void Writer::calculateStubDependentSizes() {
10401038
if (ctx.config.dosStub)
1041-
dosStubSize = ctx.config.dosStub->getBufferSize();
1039+
dosStubSize = alignTo(ctx.config.dosStub->getBufferSize(), 8);
10421040
else
10431041
dosStubSize = sizeof(dos_header) + sizeof(dosProgram);
10441042

@@ -1690,11 +1688,10 @@ template <typename PEHeaderTy> void Writer::writeHeader() {
16901688
config->dosStub->getBufferSize());
16911689
// MS link.exe accepts an invalid `e_lfanew` (AddressOfNewExeHeader) and
16921690
// updates it automatically. Replicate the same behaviour.
1693-
dos->AddressOfNewExeHeader = config->dosStub->getBufferSize();
1694-
buf += config->dosStub->getBufferSize();
1691+
dos->AddressOfNewExeHeader = alignTo(config->dosStub->getBufferSize(), 8);
16951692
// Unlike MS link.exe, LLD accepts non-8-byte-aligned stubs.
16961693
// In that case, we add zero paddings ourselves.
1697-
buf += (8 - (config->dosStub->getBufferSize() % 8)) % 8;
1694+
buf += alignTo(config->dosStub->getBufferSize(), 8);
16981695
} else {
16991696
buf += sizeof(dos_header);
17001697
dos->Magic[0] = 'M';

0 commit comments

Comments
 (0)