mirror of
https://github.com/intel/llvm.git
synced 2026-01-18 16:50:51 +08:00
Factor out placeOrphanSections. NFC.
llvm-svn: 286824
This commit is contained in:
@@ -583,14 +583,11 @@ static bool shouldSkip(const BaseCommand &Cmd) {
|
||||
return Assign->Name != ".";
|
||||
}
|
||||
|
||||
// Orphan sections are sections present in the input files which are not
|
||||
// explicitly placed into the output file by the linker script. This just
|
||||
// places them in the order already decided in OutputSections.
|
||||
template <class ELFT>
|
||||
void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs) {
|
||||
// Orphan sections are sections present in the input files which
|
||||
// are not explicitly placed into the output file by the linker script.
|
||||
// We place orphan sections at end of file.
|
||||
// Other linkers places them using some heuristics as described in
|
||||
// https://sourceware.org/binutils/docs/ld/Orphan-Sections.html#Orphan-Sections.
|
||||
|
||||
void LinkerScript<ELFT>::placeOrphanSections() {
|
||||
// The OutputSections are already in the correct order.
|
||||
// This loops creates or moves commands as needed so that they are in the
|
||||
// correct order.
|
||||
@@ -622,6 +619,11 @@ void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs) {
|
||||
// Continue from where we found it.
|
||||
CmdIndex = (Pos - Opt.Commands.begin()) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
void LinkerScript<ELFT>::assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs) {
|
||||
placeOrphanSections();
|
||||
|
||||
// Assign addresses as instructed by linker script SECTIONS sub-commands.
|
||||
Dot = 0;
|
||||
|
||||
@@ -229,6 +229,7 @@ public:
|
||||
bool hasLMA(StringRef Name);
|
||||
bool shouldKeep(InputSectionBase<ELFT> *S);
|
||||
void assignOffsets(OutputSectionCommand *Cmd);
|
||||
void placeOrphanSections();
|
||||
void assignAddresses(std::vector<PhdrEntry<ELFT>> &Phdrs);
|
||||
bool hasPhdrsCommands();
|
||||
uint64_t getOutputSectionAddress(StringRef Name) override;
|
||||
|
||||
Reference in New Issue
Block a user