diff options
author | diggerlin <digger.llvm@gmail.com> | 2019-11-07 11:51:34 -0500 |
---|---|---|
committer | diggerlin <digger.llvm@gmail.com> | 2019-11-07 11:51:34 -0500 |
commit | c63c1a72dab96b0d090b2601eb1e7f40df2db534 (patch) | |
tree | 91dedf130518cb04ba71df4938d6d981d856e100 /llvm/lib/Object/XCOFFObjectFile.cpp | |
parent | 44f43461c018e7fdc3b1cf3a7a41f52b1cb20a39 (diff) | |
download | llvm-c63c1a72dab96b0d090b2601eb1e7f40df2db534.zip llvm-c63c1a72dab96b0d090b2601eb1e7f40df2db534.tar.gz llvm-c63c1a72dab96b0d090b2601eb1e7f40df2db534.tar.bz2 |
Using crtp to refactor the xcoff section header
SUMMARY:
According to https://reviews.llvm.org/D68575#inline-617586, Create a NFC patch for it.
Using crtp to refactor the xcoff section header
Move the define of SectionFlagsReservedMask and SectionFlagsTypeMask from XCOFFDumper.cpp to XCOFFObjectFile.h
Reviewers: hubert.reinterpretcast,jasonliu
Subscribers: rupprecht, seiyai,hiraditya
Differential Revision: https://reviews.llvm.org/D69131
Diffstat (limited to 'llvm/lib/Object/XCOFFObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/XCOFFObjectFile.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/llvm/lib/Object/XCOFFObjectFile.cpp b/llvm/lib/Object/XCOFFObjectFile.cpp index 98782c2..6f1d999 100644 --- a/llvm/lib/Object/XCOFFObjectFile.cpp +++ b/llvm/lib/Object/XCOFFObjectFile.cpp @@ -46,6 +46,25 @@ static StringRef generateXCOFFFixedNameStringRef(const char *Name) { : StringRef(Name, XCOFF::NameSize); } +// Explictly instantiate template classes. +template struct XCOFFSectionHeader<XCOFFSectionHeader32>; +template struct XCOFFSectionHeader<XCOFFSectionHeader64>; + +template <typename T> StringRef XCOFFSectionHeader<T>::getName() const { + const T &DerivedXCOFFSectionHeader = static_cast<const T &>(*this); + return generateXCOFFFixedNameStringRef(DerivedXCOFFSectionHeader.Name); +} + +template <typename T> uint16_t XCOFFSectionHeader<T>::getSectionType() const { + const T &DerivedXCOFFSectionHeader = static_cast<const T &>(*this); + return DerivedXCOFFSectionHeader.Flags & SectionFlagsTypeMask; +} + +template <typename T> +bool XCOFFSectionHeader<T>::isReservedSectionType() const { + return getSectionType() & SectionFlagsReservedMask; +} + bool XCOFFRelocation32::isRelocationSigned() const { return Info & XR_SIGN_INDICATOR_MASK; } @@ -688,14 +707,6 @@ ObjectFile::createXCOFFObjectFile(MemoryBufferRef MemBufRef, return XCOFFObjectFile::create(FileType, MemBufRef); } -StringRef XCOFFSectionHeader32::getName() const { - return generateXCOFFFixedNameStringRef(Name); -} - -StringRef XCOFFSectionHeader64::getName() const { - return generateXCOFFFixedNameStringRef(Name); -} - XCOFF::StorageClass XCOFFSymbolRef::getStorageClass() const { return OwningObjectPtr->toSymbolEntry(SymEntDataRef)->StorageClass; } |