AArch64CA53ErratumStub.h revision b0d0eb206527b43c771933602e147bbd7b471082
1b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines//===- AArch64CA53ErratumStub.h -------------------------------------------===// 2b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines// 3b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines// The MCLinker Project 4b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines// 5b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines// This file is distributed under the University of Illinois Open Source 6b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines// License. See LICENSE.TXT for details. 7b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines// 8b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines//===----------------------------------------------------------------------===// 9b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#ifndef TARGET_AARCH64_AARCH64CA53ERRATUMSTUB_H_ 10b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#define TARGET_AARCH64_AARCH64CA53ERRATUMSTUB_H_ 11b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 12b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include "mcld/Fragment/Stub.h" 13b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include "mcld/Support/Compiler.h" 14b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include <llvm/Support/DataTypes.h> 15b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include <string> 16b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include <vector> 17b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 18b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesnamespace mcld { 19b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 20b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesclass BranchIsland; 21b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesclass FragmentRef; 22b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesclass IRBuilder; 23b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 24b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesclass AArch64CA53ErratumStub : public Stub { 25b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines public: 26b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines AArch64CA53ErratumStub(); 27b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 28b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines AArch64CA53ErratumStub(const uint32_t* pData, 29b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines size_t pSize, 30b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const char* pName, 31b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const_fixup_iterator pBegin, 32b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const_fixup_iterator pEnd); 33b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 34b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines ~AArch64CA53ErratumStub(); 35b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 36b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines bool isMyDuty(const FragmentRef& pFragRef) const; 37b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 38b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines void applyFixup(FragmentRef& pSrcFragRef, 39b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines IRBuilder& pBuilder, 40b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines BranchIsland& pIsland); 41b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 42b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const std::string& name() const; 43b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 44b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const uint32_t* getData() const; 45b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 46b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const uint8_t* getContent() const; 47b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 48b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines size_t size() const; 49b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 50b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines size_t alignment() const; 51b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 52b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines public: 53b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines virtual unsigned getErratumSequenceSize() const = 0; 54b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 55b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines virtual unsigned getErratumInsnOffset() const = 0; 56b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 57b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines private: 58b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines static const uint32_t TEMPLATE[]; 59b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 60b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines private: 61b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const uint32_t* m_pData; 62b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines std::string m_Name; 63b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines size_t m_Size; 64b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 65b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines private: 66b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines DISALLOW_COPY_AND_ASSIGN(AArch64CA53ErratumStub); 67b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines}; 68b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 69b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines} // namespace mcld 70b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 71b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#endif // TARGET_AARCH64_AARCH64CA53ERRATUMSTUB_H_ 72