Lines Matching defs:Seg

39 template <class ELFT> void ELFWriter<ELFT>::writePhdr(const Segment &Seg) {
41 Obj.ProgramHdrSegment.Offset + Seg.Index * sizeof(Elf_Phdr);
43 Phdr.p_type = Seg.Type;
44 Phdr.p_flags = Seg.Flags;
45 Phdr.p_offset = Seg.Offset;
46 Phdr.p_vaddr = Seg.VAddr;
47 Phdr.p_paddr = Seg.PAddr;
48 Phdr.p_filesz = Seg.FileSize;
49 Phdr.p_memsz = Seg.MemSize;
50 Phdr.p_align = Seg.Align;
347 Segment *Seg = Sec->ParentSegment;
348 if (Seg && Seg->Type != ELF::PT_LOAD)
349 Seg = nullptr;
350 return Seg ? Seg->PAddr + Sec->OriginalOffset - Seg->OriginalOffset
1219 static bool sectionWithinSegment(const SectionBase &Sec, const Segment &Seg) {
1235 bool SegmentIsTLS = Seg.Type == PT_TLS;
1239 return Seg.VAddr <= Sec.Addr &&
1240 Seg.VAddr + Seg.MemSize >= Sec.Addr + SecSize;
1243 return Seg.Offset <= Sec.OriginalOffset &&
1244 Seg.Offset + Seg.FileSize >= Sec.OriginalOffset + SecSize;
1468 Segment &Seg = Obj.addSegment(Data);
1469 Seg.Type = Phdr.p_type;
1470 Seg.Flags = Phdr.p_flags;
1471 Seg.OriginalOffset = Phdr.p_offset + EhdrOffset;
1472 Seg.Offset = Phdr.p_offset + EhdrOffset;
1473 Seg.VAddr = Phdr.p_vaddr;
1474 Seg.PAddr = Phdr.p_paddr;
1475 Seg.FileSize = Phdr.p_filesz;
1476 Seg.MemSize = Phdr.p_memsz;
1477 Seg.Align = Phdr.p_align;
1478 Seg.Index = Index++;
1480 if (sectionWithinSegment(Sec, Seg)) {
1481 Seg.addSection(&Sec);
1482 if (!Sec.ParentSegment || Sec.ParentSegment->Offset > Seg.Offset)
1483 Sec.ParentSegment = &Seg;
2080 for (auto &Seg : Obj.segments())
2081 writePhdr(Seg);
2126 for (Segment &Seg : Obj.segments()) {
2127 size_t Size = std::min<size_t>(Seg.FileSize, Seg.getContents().size());
2128 std::memcpy(Buf->getBufferStart() + Seg.Offset, Seg.getContents().data(),
2330 for (Segment *Seg : Segments) {
2335 if (Seg->ParentSegment != nullptr) {
2336 Segment *Parent = Seg->ParentSegment;
2337 Seg->Offset =
2338 Parent->Offset + Seg->OriginalOffset - Parent->OriginalOffset;
2340 Seg->Offset =
2341 alignTo(Offset, std::max<uint64_t>(Seg->Align, 1), Seg->VAddr);
2343 Offset = std::max(Offset, Seg->Offset + Seg->FileSize);
2444 for (Segment *Seg : Segments) {
2445 if (Seg->Type == PT_PHDR)
2454 const SectionBase *FirstSec = Seg->firstSection();
2457 : (Seg->ParentSegment ? Seg->ParentSegment->Offset : 0);
2459 for (const SectionBase *Sec : Seg->Sections) {
2467 if (Seg->Offset < HdrEnd && HdrEnd <= Seg->Offset + Seg->FileSize) {
2468 FileSize += Offset - Seg->Offset;
2469 Offset = Seg->Offset;
2473 Seg->Offset = Offset;
2474 Seg->FileSize = FileSize;