forked from OSchip/llvm-project
Revert "Simplify symbol computation for non alloc sections."
This reverts commit r294346. Looks like it regressed the build of magenta. llvm-svn: 294460
This commit is contained in:
parent
bb64200e16
commit
ea590d91a0
|
@ -101,8 +101,12 @@ static void assignSymbol(SymbolAssignment *Cmd, typename ELFT::uint Dot = 0) {
|
|||
|
||||
if (auto *Body = dyn_cast<DefinedSynthetic>(Cmd->Sym)) {
|
||||
Body->Section = Cmd->Expression.Section();
|
||||
if (Body->Section)
|
||||
Body->Value = Cmd->Expression(Dot) - Body->Section->Addr;
|
||||
if (Body->Section) {
|
||||
uint64_t VA = 0;
|
||||
if (Body->Section->Flags & SHF_ALLOC)
|
||||
VA = Body->Section->Addr;
|
||||
Body->Value = Cmd->Expression(Dot) - VA;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -802,9 +806,12 @@ void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry> &Phdrs) {
|
|||
}
|
||||
|
||||
uintX_t MinVA = std::numeric_limits<uintX_t>::max();
|
||||
for (OutputSectionBase *Sec : *OutputSections)
|
||||
for (OutputSectionBase *Sec : *OutputSections) {
|
||||
if (Sec->Flags & SHF_ALLOC)
|
||||
MinVA = std::min<uint64_t>(MinVA, Sec->Addr);
|
||||
else
|
||||
Sec->Addr = 0;
|
||||
}
|
||||
|
||||
allocateHeaders<ELFT>(Phdrs, *OutputSections, MinVA);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ void OutputSectionBase::writeHeaderTo(typename ELFT::Shdr *Shdr) {
|
|||
Shdr->sh_flags = Flags;
|
||||
Shdr->sh_info = Info;
|
||||
Shdr->sh_link = Link;
|
||||
Shdr->sh_addr = (Flags & SHF_ALLOC) ? Addr : 0;
|
||||
Shdr->sh_addr = Addr;
|
||||
Shdr->sh_size = Size;
|
||||
Shdr->sh_name = ShName;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue