diff --git a/lld/lib/ReaderWriter/ELF/HeaderChunks.h b/lld/lib/ReaderWriter/ELF/HeaderChunks.h index 64400dc26d0f..95473d8b4ce4 100644 --- a/lld/lib/ReaderWriter/ELF/HeaderChunks.h +++ b/lld/lib/ReaderWriter/ELF/HeaderChunks.h @@ -163,20 +163,18 @@ public: } private: - std::pair allocateProgramHeader() { + Elf_Phdr *allocateProgramHeader(bool &allocatedNew) { Elf_Phdr *phdr; - bool ret = false; if (_phi == _ph.end()) { phdr = new (_allocator) Elf_Phdr; _ph.push_back(phdr); _phi = _ph.end(); - ret = true; + allocatedNew = true; } else { phdr = (*_phi); ++_phi; } - - return std::make_pair(phdr, ret); + return phdr; } std::vector _ph; @@ -191,17 +189,15 @@ bool ProgramHeader::addSegment(Segment *segment) { // just pick the values directly from the segment as there // wouldnt be any slices within that if (segment->segmentType() != llvm::ELF::PT_LOAD) { - auto phdr = allocateProgramHeader(); - if (phdr.second) - allocatedNew = true; - phdr.first->p_type = segment->segmentType(); - phdr.first->p_offset = segment->fileOffset(); - phdr.first->p_vaddr = segment->virtualAddr(); - phdr.first->p_paddr = segment->virtualAddr(); - phdr.first->p_filesz = segment->fileSize(); - phdr.first->p_memsz = segment->memSize(); - phdr.first->p_flags = segment->flags(); - phdr.first->p_align = segment->align2(); + Elf_Phdr *phdr = allocateProgramHeader(allocatedNew); + phdr->p_type = segment->segmentType(); + phdr->p_offset = segment->fileOffset(); + phdr->p_vaddr = segment->virtualAddr(); + phdr->p_paddr = segment->virtualAddr(); + phdr->p_filesz = segment->fileSize(); + phdr->p_memsz = segment->memSize(); + phdr->p_flags = segment->flags(); + phdr->p_align = segment->align2(); this->_fsize = fileSize(); this->_msize = this->_fsize; return allocatedNew; @@ -209,17 +205,15 @@ bool ProgramHeader::addSegment(Segment *segment) { // For all other segments, use the slice // to derive program headers for (auto slice : segment->slices()) { - auto phdr = allocateProgramHeader(); - if (phdr.second) - allocatedNew = true; - phdr.first->p_type = segment->segmentType(); - phdr.first->p_offset = slice->fileOffset(); - phdr.first->p_vaddr = slice->virtualAddr(); - phdr.first->p_paddr = slice->virtualAddr(); - phdr.first->p_filesz = slice->fileSize(); - phdr.first->p_memsz = slice->memSize(); - phdr.first->p_flags = segment->flags(); - phdr.first->p_align = (phdr.first->p_type == llvm::ELF::PT_LOAD) ? + Elf_Phdr *phdr = allocateProgramHeader(allocatedNew); + phdr->p_type = segment->segmentType(); + phdr->p_offset = slice->fileOffset(); + phdr->p_vaddr = slice->virtualAddr(); + phdr->p_paddr = slice->virtualAddr(); + phdr->p_filesz = slice->fileSize(); + phdr->p_memsz = slice->memSize(); + phdr->p_flags = segment->flags(); + phdr->p_align = (phdr->p_type == llvm::ELF::PT_LOAD) ? segment->pageSize() : slice->align2(); } this->_fsize = fileSize();