mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-16 08:29:43 +00:00
Add a helper for getting a section's content as an array.
It will be used in lld shortly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249690 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
dd7476cff0
commit
f53283b3ae
@ -210,6 +210,8 @@ public:
|
||||
}
|
||||
|
||||
ErrorOr<StringRef> getSectionName(const Elf_Shdr *Section) const;
|
||||
template <typename T>
|
||||
ErrorOr<ArrayRef<T>> getSectionContentsAsArray(const Elf_Shdr *Sec) const;
|
||||
ErrorOr<ArrayRef<uint8_t> > getSectionContents(const Elf_Shdr *Sec) const;
|
||||
};
|
||||
|
||||
@ -243,12 +245,25 @@ ELFFile<ELFT>::getSection(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
ErrorOr<ArrayRef<uint8_t> >
|
||||
ELFFile<ELFT>::getSectionContents(const Elf_Shdr *Sec) const {
|
||||
if (Sec->sh_offset + Sec->sh_size > Buf.size())
|
||||
template <typename T>
|
||||
ErrorOr<ArrayRef<T>>
|
||||
ELFFile<ELFT>::getSectionContentsAsArray(const Elf_Shdr *Sec) const {
|
||||
uintX_t Offset = Sec->sh_offset;
|
||||
uintX_t Size = Sec->sh_size;
|
||||
|
||||
if (Size % sizeof(T))
|
||||
return object_error::parse_failed;
|
||||
const uint8_t *Start = base() + Sec->sh_offset;
|
||||
return makeArrayRef(Start, Sec->sh_size);
|
||||
if (Offset + Size > Buf.size())
|
||||
return object_error::parse_failed;
|
||||
|
||||
const T *Start = reinterpret_cast<const T *>(base() + Offset);
|
||||
return makeArrayRef(Start, Size / sizeof(T));
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
ErrorOr<ArrayRef<uint8_t>>
|
||||
ELFFile<ELFT>::getSectionContents(const Elf_Shdr *Sec) const {
|
||||
return getSectionContentsAsArray<uint8_t>(Sec);
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
|
Loading…
Reference in New Issue
Block a user