summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/HeaderChunks.h
diff options
context:
space:
mode:
authorShankar Easwaran <shankare@codeaurora.org>2013-03-11 01:38:22 +0000
committerShankar Easwaran <shankare@codeaurora.org>2013-03-11 01:38:22 +0000
commitfc9d0a7d9bac2197266dbf1797f2a9f55f38ae54 (patch)
tree83a29520da0dbb6cc3e6b760d5b5860db77a28d4 /lld/lib/ReaderWriter/ELF/HeaderChunks.h
parent7b287eea228753b5bcaf44d39927e2832898cf5c (diff)
downloadbcm5719-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.h10
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() {}
OpenPOWER on IntegriCloud