[ELF] - Move ThreadBssOffset and Dot to LinkerScriptBase. NFC.

One more step to combine LinkerScript and LinkerScriptBase.

llvm-svn: 297722
This commit is contained in:
George Rimar 2017-03-14 10:00:19 +00:00
parent 72e3fa7e2c
commit 0c1c8085bc
2 changed files with 8 additions and 9 deletions

View File

@ -81,7 +81,7 @@ static bool isUnderSysroot(StringRef Path) {
template <class ELFT>
void LinkerScript<ELFT>::setDot(Expr E, const Twine &Loc, bool InSec) {
uintX_t Val = E();
uint64_t Val = E();
if (Val < Dot) {
if (InSec)
error(Loc + ": unable to move location counter backward for: " +
@ -398,7 +398,7 @@ template <class ELFT> void LinkerScript<ELFT>::output(InputSection *S) {
return;
bool IsTbss = isTbss<ELFT>(CurOutSec);
uintX_t Pos = IsTbss ? Dot + ThreadBssOffset : Dot;
uint64_t Pos = IsTbss ? Dot + ThreadBssOffset : Dot;
Pos = alignTo(Pos, S->Alignment);
S->OutSecOff = Pos - CurOutSec->Addr;
Pos += S->getSize();
@ -555,7 +555,7 @@ void LinkerScript<ELFT>::assignOffsets(OutputSectionCommand *Cmd) {
setDot(Cmd->AddrExpr, Cmd->Location);
if (Cmd->LMAExpr) {
uintX_t D = Dot;
uint64_t D = Dot;
LMAOffset = [=] { return Cmd->LMAExpr() - D; };
}
@ -612,7 +612,7 @@ template <class ELFT> void LinkerScript<ELFT>::adjustSectionsBeforeSorting() {
// corresponding output section. The bfd linker seems to only create them if
// '.' is assigned to, but creating these section should not have any bad
// consequeces and gives us a section to put the symbol in.
uintX_t Flags = SHF_ALLOC;
uint64_t Flags = SHF_ALLOC;
uint32_t Type = SHT_NOBITS;
for (const std::unique_ptr<BaseCommand> &Base : Opt.Commands) {
auto *Cmd = dyn_cast<OutputSectionCommand>(Base.get());
@ -784,7 +784,7 @@ void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry> &Phdrs) {
assignOffsets(Cmd);
}
uintX_t MinVA = std::numeric_limits<uintX_t>::max();
uint64_t MinVA = std::numeric_limits<uint64_t>::max();
for (OutputSection *Sec : *OutputSections) {
if (Sec->Flags & SHF_ALLOC)
MinVA = std::min<uint64_t>(MinVA, Sec->Addr);

View File

@ -234,6 +234,9 @@ protected:
// "ScriptConfig" is a bit too long, so define a short name for it.
ScriptConfiguration &Opt = *ScriptConfig;
uint64_t Dot;
uint64_t ThreadBssOffset = 0;
public:
bool hasPhdrsCommands() { return !Opt.PhdrsCommands.empty(); }
@ -248,8 +251,6 @@ public:
// This is a runner of the linker script.
template <class ELFT> class LinkerScript final : public LinkerScriptBase {
typedef typename ELFT::uint uintX_t;
public:
LinkerScript();
~LinkerScript();
@ -297,11 +298,9 @@ private:
MemoryRegion *findMemoryRegion(OutputSectionCommand *Cmd, OutputSection *Sec);
uintX_t Dot;
std::function<uint64_t()> LMAOffset;
OutputSection *CurOutSec = nullptr;
MemoryRegion *CurMemRegion = nullptr;
uintX_t ThreadBssOffset = 0;
void switchTo(OutputSection *Sec);
void flush();
void output(InputSection *Sec);