diff options
| author | Shankar Easwaran <shankare@codeaurora.org> | 2013-03-11 01:38:22 +0000 |
|---|---|---|
| committer | Shankar Easwaran <shankare@codeaurora.org> | 2013-03-11 01:38:22 +0000 |
| commit | fc9d0a7d9bac2197266dbf1797f2a9f55f38ae54 (patch) | |
| tree | 83a29520da0dbb6cc3e6b760d5b5860db77a28d4 /lld/lib/ReaderWriter/ELF/HeaderChunks.h | |
| parent | 7b287eea228753b5bcaf44d39927e2832898cf5c (diff) | |
| download | bcm5719-llvm-fc9d0a7d9bac2197266dbf1797f2a9f55f38ae54.tar.gz bcm5719-llvm-fc9d0a7d9bac2197266dbf1797f2a9f55f38ae54.zip | |
[ELF] Set values for bss_start and end symbols properly, If there are two load segments with RW permissions, bss_start and end may get set inappropriate
llvm-svn: 176795
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/HeaderChunks.h')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/HeaderChunks.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/ELF/HeaderChunks.h b/lld/lib/ReaderWriter/ELF/HeaderChunks.h index 742f828e167..90bf2108ea0 100644 --- a/lld/lib/ReaderWriter/ELF/HeaderChunks.h +++ b/lld/lib/ReaderWriter/ELF/HeaderChunks.h @@ -89,6 +89,7 @@ class ProgramHeader : public Chunk<ELFT> { public: typedef llvm::object::Elf_Phdr_Impl<ELFT> Elf_Phdr; typedef typename std::vector<Elf_Phdr *>::iterator PhIterT; + typedef typename std::reverse_iterator<PhIterT> ReversePhIterT; /// \brief Find a program header entry, given the type of entry that /// we are looking for @@ -132,8 +133,9 @@ public: void write(ELFWriter *writer, llvm::FileOutputBuffer &buffer); /// \brief find a program header entry in the list of program headers - PhIterT findProgramHeader(uint64_t type, uint64_t flags, uint64_t flagClear) { - return std::find_if(_ph.begin(), _ph.end(), + ReversePhIterT + findProgramHeader(uint64_t type, uint64_t flags, uint64_t flagClear) { + return std::find_if(_ph.rbegin(), _ph.rend(), FindPhdr(type, flags, flagClear)); } @@ -145,6 +147,10 @@ public: return _ph.end(); } + ReversePhIterT rbegin() { return _ph.rbegin(); } + + ReversePhIterT rend() { return _ph.rend(); } + virtual void doPreFlight() {} void finalize() {} |

