//===-- CompactUnwindInfo.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 LLDB_SYMBOL_COMPACTUNWINDINFO_H #define LLDB_SYMBOL_COMPACTUNWINDINFO_H #include "lldb/Symbol/ObjectFile.h" #include "lldb/Symbol/UnwindPlan.h" #include "lldb/Utility/DataExtractor.h" #include "lldb/Utility/RangeMap.h" #include "lldb/lldb-private.h" #include <mutex> #include <vector> namespace lldb_private { // Compact Unwind info is an unwind format used on Darwin. The unwind // instructions for typical compiler-generated functions can be expressed in a // 32-bit encoding. The format includes a two-level index so the unwind // information for a function can be found by two binary searches in the // section. It can represent both stack frames that use a frame-pointer // register and frameless functions, on i386/x86_64 for instance. When a // function is too complex to be represented in the compact unwind format, it // calls out to eh_frame unwind instructions. // On Mac OS X / iOS, a function will have either a compact unwind // representation or an eh_frame representation. If lldb is going to benefit // from the compiler's description about saved register locations, it must be // able to read both sources of information. class CompactUnwindInfo { … }; } // namespace lldb_private #endif // LLDB_SYMBOL_COMPACTUNWINDINFO_H