diff --git a/llvm/tools/llvm-objcopy/ELF/Object.cpp b/llvm/tools/llvm-objcopy/ELF/Object.cpp --- a/llvm/tools/llvm-objcopy/ELF/Object.cpp +++ b/llvm/tools/llvm-objcopy/ELF/Object.cpp @@ -1342,13 +1342,15 @@ if (R.HexData.empty()) continue; RecAddr = R.Addr + SegmentAddr + BaseAddr; - if (!Section || Section->Addr + Section->Size != RecAddr) + if (!Section || (Section->Addr + Section->Size) != RecAddr) { // OriginalOffset field is only used to sort section properly, so // instead of keeping track of real offset in IHEX file, we use // section number. Section = &Obj->addSection( - ".sec" + std::to_string(SecNo++), RecAddr, - ELF::SHF_ALLOC | ELF::SHF_WRITE, SecNo); + ".sec" + std::to_string(SecNo), RecAddr, + ELF::SHF_ALLOC | ELF::SHF_WRITE, SecNo + 1); + ++SecNo; + } Section->appendHexData(R.HexData); break; case IHexRecord::EndOfFile: