//===-- Utility.cpp -------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

#include "Utility.h"

#include "lldb/Core/Module.h"
#include "lldb/Target/Target.h"

namespace lldb_private {

std::tuple<lldb::ModuleSP, HistoryPCType>
GetPreferredAsanModule(const Target &target) {
  // Currently only Darwin provides (partial) runtime support as part of the OS
  // (libsanitizers).
  if (!target.GetArchitecture().GetTriple().isOSDarwin())
    return {nullptr, HistoryPCType::Calls};

  lldb::ModuleSP module;
  llvm::Regex pattern(R"(libclang_rt\.asan_.*_dynamic\.dylib)");
  target.GetImages().ForEach([&](const lldb::ModuleSP &m) {
    if (pattern.match(m->GetFileSpec().GetFilename())) {
      module = m;
      return IterationAction::Stop;
    }

    return IterationAction::Continue;
  });

  // `Calls` - The ASan compiler-rt runtime already massages the return
  //   addresses into call addresses, so we don't want LLDB's unwinder to try to
  //   locate the previous instruction again as this might lead to us reporting
  //   a different line.
  // `ReturnsNoZerothFrame` - Darwin, but not ASan compiler-rt implies
  //   libsanitizers which collects return addresses.  It also discards a few
  //   non-user frames at the top of the stack.
  auto pc_type =
      (module ? HistoryPCType::Calls : HistoryPCType::ReturnsNoZerothFrame);
  return {module, pc_type};
}

} // namespace lldb_private
