Lines Matching defs:Seg

36 template <class ELFT> void ELFWriter<ELFT>::writePhdr(const Segment &Seg) {
38 Obj.ProgramHdrSegment.Offset + Seg.Index * sizeof(Elf_Phdr);
40 Phdr.p_type = Seg.Type;
41 Phdr.p_flags = Seg.Flags;
42 Phdr.p_offset = Seg.Offset;
43 Phdr.p_vaddr = Seg.VAddr;
44 Phdr.p_paddr = Seg.PAddr;
45 Phdr.p_filesz = Seg.FileSize;
46 Phdr.p_memsz = Seg.MemSize;
47 Phdr.p_align = Seg.Align;
344 Segment *Seg = Sec->ParentSegment;
345 if (Seg && Seg->Type != ELF::PT_LOAD)
346 Seg = nullptr;
347 return Seg ? Seg->PAddr + Sec->OriginalOffset - Seg->OriginalOffset
1216 static bool sectionWithinSegment(const SectionBase &Sec, const Segment &Seg) {
1232 bool SegmentIsTLS = Seg.Type == PT_TLS;
1236 return Seg.VAddr <= Sec.Addr &&
1237 Seg.VAddr + Seg.MemSize >= Sec.Addr + SecSize;
1240 return Seg.Offset <= Sec.OriginalOffset &&
1241 Seg.Offset + Seg.FileSize >= Sec.OriginalOffset + SecSize;
1465 Segment &Seg = Obj.addSegment(Data);
1466 Seg.Type = Phdr.p_type;
1467 Seg.Flags = Phdr.p_flags;
1468 Seg.OriginalOffset = Phdr.p_offset + EhdrOffset;
1469 Seg.Offset = Phdr.p_offset + EhdrOffset;
1470 Seg.VAddr = Phdr.p_vaddr;
1471 Seg.PAddr = Phdr.p_paddr;
1472 Seg.FileSize = Phdr.p_filesz;
1473 Seg.MemSize = Phdr.p_memsz;
1474 Seg.Align = Phdr.p_align;
1475 Seg.Index = Index++;
1477 if (sectionWithinSegment(Sec, Seg)) {
1478 Seg.addSection(&Sec);
1479 if (!Sec.ParentSegment || Sec.ParentSegment->Offset > Seg.Offset)
1480 Sec.ParentSegment = &Seg;
2077 for (auto &Seg : Obj.segments())
2078 writePhdr(Seg);
2123 for (Segment &Seg : Obj.segments()) {
2124 size_t Size = std::min<size_t>(Seg.FileSize, Seg.getContents().size());
2125 std::memcpy(Buf->getBufferStart() + Seg.Offset, Seg.getContents().data(),
2336 for (Segment *Seg : Segments) {
2341 if (Seg->ParentSegment != nullptr) {
2342 Segment *Parent = Seg->ParentSegment;
2343 Seg->Offset =
2344 Parent->Offset + Seg->OriginalOffset - Parent->OriginalOffset;
2346 Seg->Offset =
2347 alignTo(Offset, std::max<uint64_t>(Seg->Align, 1), Seg->VAddr);
2349 Offset = std::max(Offset, Seg->Offset + Seg->FileSize);
2450 for (Segment *Seg : Segments) {
2451 if (Seg->Type == PT_PHDR)
2460 const SectionBase *FirstSec = Seg->firstSection();
2463 : (Seg->ParentSegment ? Seg->ParentSegment->Offset : 0);
2465 for (const SectionBase *Sec : Seg->Sections) {
2473 if (Seg->Offset < HdrEnd && HdrEnd <= Seg->Offset + Seg->FileSize) {
2474 FileSize += Offset - Seg->Offset;
2475 Offset = Seg->Offset;
2479 Seg->Offset = Offset;
2480 Seg->FileSize = FileSize;