diff options
| author | Shankar Easwaran <shankare@codeaurora.org> | 2013-01-11 18:56:11 +0000 |
|---|---|---|
| committer | Shankar Easwaran <shankare@codeaurora.org> | 2013-01-11 18:56:11 +0000 |
| commit | b1d09c07f1f153589b2aa0bf721e1c488cf6f3f5 (patch) | |
| tree | c5276c5deeac7267ac6a363ed3aef9ce5b3e6146 | |
| parent | f73d7a53ed2ab7d00bfa2fd7dffce3596b1a4001 (diff) | |
| download | bcm5719-llvm-b1d09c07f1f153589b2aa0bf721e1c488cf6f3f5.tar.gz bcm5719-llvm-b1d09c07f1f153589b2aa0bf721e1c488cf6f3f5.zip | |
better implementation for findOutputSection
llvm-svn: 172236
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/WriterELF.cpp | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/lld/lib/ReaderWriter/ELF/WriterELF.cpp b/lld/lib/ReaderWriter/ELF/WriterELF.cpp index 467db99c81a..aa6c8ef4c3b 100644 --- a/lld/lib/ReaderWriter/ELF/WriterELF.cpp +++ b/lld/lib/ReaderWriter/ELF/WriterELF.cpp @@ -1716,23 +1716,13 @@ public: return error_code::success(); } - /// \biref Find an output Section given a section name. - /// - /// \todo Make this not O(n). We can't use _mergedSectionMap because it - /// doesn't get virtual addresses set :( - Chunk<target_endianness, max_align, is64Bits> * + /// \brief Find an output Section given a section name. + MergedSections<target_endianness, max_align, is64Bits> * findOutputSection(StringRef name) { - for (auto seg : _segments) { - for (auto sliceI = seg->slices_begin(), - sliceE = seg->slices_end(); sliceI != sliceE; ++sliceI) { - for (auto secI = (*sliceI)->sections_begin(), - secE = (*sliceI)->sections_end(); secI != secE; ++secI) { - if ((*secI)->name() == name) - return *secI; - } - } - } - return nullptr; + auto iter = _mergedSectionMap.find(name); + if (iter == _mergedSectionMap.end()) + return nullptr; + return iter->second; } /// \brief find a absolute atom given a name |

