diff options
Diffstat (limited to 'lld/ELF/ARMErrataFix.h')
-rw-r--r-- | lld/ELF/ARMErrataFix.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/lld/ELF/ARMErrataFix.h b/lld/ELF/ARMErrataFix.h new file mode 100644 index 00000000000..5a39bcc75cd --- /dev/null +++ b/lld/ELF/ARMErrataFix.h @@ -0,0 +1,51 @@ +//===- ARMErrataFix.h -------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLD_ELF_ARMA8ERRATAFIX_H +#define LLD_ELF_ARMA8ERRATAFIX_H + +#include "lld/Common/LLVM.h" +#include "llvm/ADT/DenseMap.h" +#include <map> +#include <vector> + +namespace lld { +namespace elf { + +class Defined; +class InputSection; +struct InputSectionDescription; +class OutputSection; +class Patch657417Section; + +class ARMErr657417Patcher { +public: + // Return true if Patches have been added to the OutputSections. + bool createFixes(); + +private: + std::vector<Patch657417Section *> + patchInputSectionDescription(InputSectionDescription &isd); + + void insertPatches(InputSectionDescription &isd, + std::vector<Patch657417Section *> &patches); + + void init(); + + // A cache of the mapping symbols defined by the InputSection sorted in order + // of ascending value with redundant symbols removed. These describe + // the ranges of code and data in an executable InputSection. + llvm::DenseMap<InputSection *, std::vector<const Defined *>> sectionMap; + + bool initialized = false; +}; + +} // namespace elf +} // namespace lld + +#endif |