diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-05-23 22:54:06 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-05-23 22:54:06 +0000 |
| commit | aeb4b7d217dae0ad2d29a5aa9a67cf2309432522 (patch) | |
| tree | c178714cd8705d1f1903c185bec6d20c2727e39b /lld | |
| parent | 6a1aa8d9b451b9d9f1452e86ce0b02993b8fae36 (diff) | |
| download | bcm5719-llvm-aeb4b7d217dae0ad2d29a5aa9a67cf2309432522.tar.gz bcm5719-llvm-aeb4b7d217dae0ad2d29a5aa9a67cf2309432522.zip | |
Clear OutSec->Sections.
Once the dummy linker script is created, we want it to be used for
everything to avoid having two redundant representations that can get
out of sync.
We were already clearing OutputSections. With this patch we clear the
Sections vector of every OutputSection.
llvm-svn: 303703
Diffstat (limited to 'lld')
| -rw-r--r-- | lld/ELF/MapFile.cpp | 17 | ||||
| -rw-r--r-- | lld/ELF/Writer.cpp | 15 |
2 files changed, 22 insertions, 10 deletions
diff --git a/lld/ELF/MapFile.cpp b/lld/ELF/MapFile.cpp index 7b82eceba02..806e99e3d9d 100644 --- a/lld/ELF/MapFile.cpp +++ b/lld/ELF/MapFile.cpp @@ -132,12 +132,17 @@ void elf::writeMapFile(llvm::ArrayRef<BaseCommand *> Script) { OS << OSec->Name << '\n'; // Dump symbols for each input section. - for (InputSection *IS : OSec->Sections) { - writeHeader<ELFT>(OS, OSec->Addr + IS->OutSecOff, IS->getSize(), - IS->Alignment); - OS << indent(1) << toString(IS) << '\n'; - for (DefinedRegular *Sym : SectionSyms[IS]) - OS << SymStr[Sym] << '\n'; + for (BaseCommand *Base : Cmd->Commands) { + auto *ISD = dyn_cast<InputSectionDescription>(Base); + if (!ISD) + continue; + for (InputSection *IS : ISD->Sections) { + writeHeader<ELFT>(OS, OSec->Addr + IS->OutSecOff, IS->getSize(), + IS->Alignment); + OS << indent(1) << toString(IS) << '\n'; + for (DefinedRegular *Sym : SectionSyms[IS]) + OS << SymStr[Sym] << '\n'; + } } } } diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 7a21d2b9f13..0528434b97e 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -46,6 +46,7 @@ public: void run(); private: + void clearOutputSections(); void createSyntheticSections(); void copyLocalSymbols(); void addSectionSymbols(); @@ -198,6 +199,15 @@ template <class ELFT> static void combineEhFrameSections() { V.erase(std::remove(V.begin(), V.end(), nullptr), V.end()); } +template <class ELFT> void Writer<ELFT>::clearOutputSections() { + // Clear the OutputSections to make sure it is not used anymore. Any + // code from this point on should be using the linker script + // commands. + for (OutputSection *Sec : OutputSections) + Sec->Sections.clear(); + OutputSections.clear(); +} + // The main function of the writer. template <class ELFT> void Writer<ELFT>::run() { // Create linker-synthesized sections such as .got or .plt. @@ -288,10 +298,7 @@ template <class ELFT> void Writer<ELFT>::run() { if (ErrorCount) return; - // Clear the OutputSections to make sure it is not used anymore. Any - // code from this point on should be using the linker script - // commands. - OutputSections.clear(); + clearOutputSections(); // Handle -Map option. writeMapFile<ELFT>(Script->Opt.Commands); |

