@@ -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
10391037void 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