1b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines//===- AArch64CA53Erratum843419Stub2.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_AARCH64CA53ERRATUM843419STUB2_H_ 10b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#define TARGET_AARCH64_AARCH64CA53ERRATUM843419STUB2_H_ 11b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 12b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include "AArch64CA53ErratumStub.h" 13b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 14b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include "mcld/Support/Compiler.h" 15b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include <llvm/Support/DataTypes.h> 16b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include <string> 17b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#include <vector> 18b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 19b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesnamespace mcld { 20b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 21b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesclass FragmentRef; 22b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 23b0d0eb206527b43c771933602e147bbd7b471082Stephen Hinesclass AArch64CA53Erratum843419Stub2 : public AArch64CA53ErratumStub { 24b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines public: 25b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines static constexpr unsigned ErratumInsnOffset = 12; 26b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 27b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines struct ErratumSequence { 28b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines unsigned insns[4]; 29b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines }; 30b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 31b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines public: 32b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines AArch64CA53Erratum843419Stub2(); 33b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 34b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines ~AArch64CA53Erratum843419Stub2(); 35b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 36b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines bool isMyDuty(const FragmentRef& pFragRef) const; 37b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 38b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines unsigned getErratumInsnOffset() const { 39b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines return ErratumInsnOffset; 40b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines } 41b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 42b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines unsigned getErratumSequenceSize() const { 43b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines return sizeof(ErratumSequence); 44b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines } 45b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 46b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines private: 47b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines /// for doClone 48b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines AArch64CA53Erratum843419Stub2(const uint32_t* pData, 49b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines size_t pSize, 50b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const char* pName, 51b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const_fixup_iterator pBegin, 52b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines const_fixup_iterator pEnd); 53b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 54b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines /// doClone 55b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines Stub* doClone(); 56b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 57b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines private: 58b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines DISALLOW_COPY_AND_ASSIGN(AArch64CA53Erratum843419Stub2); 59b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines}; 60b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 61b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines} // namespace mcld 62b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines 63b0d0eb206527b43c771933602e147bbd7b471082Stephen Hines#endif // TARGET_AARCH64_AARCH64CA53ERRATUM843419STUB2_H_ 64