//===- 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;
class 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
