1 //===- UnwindInfoSection.h ------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLD_MACHO_UNWIND_INFO_H 10 #define LLD_MACHO_UNWIND_INFO_H 11 12 #include "ConcatOutputSection.h" 13 #include "SyntheticSections.h" 14 #include "llvm/ADT/MapVector.h" 15 16 #include "mach-o/compact_unwind_encoding.h" 17 18 namespace lld { 19 namespace macho { 20 21 class UnwindInfoSection : public SyntheticSection { 22 public: 23 // If all functions are free of unwind info, we can omit the unwind info 24 // section entirely. 25 bool isNeeded() const override { return !allEntriesAreOmitted; } 26 void addSymbol(const Defined *); 27 virtual void prepare() = 0; 28 29 protected: 30 UnwindInfoSection(); 31 32 llvm::MapVector<std::pair<const InputSection *, uint64_t /*Defined::value*/>, 33 const Defined *> 34 symbols; 35 bool allEntriesAreOmitted = true; 36 }; 37 38 UnwindInfoSection *makeUnwindInfoSection(); 39 40 } // namespace macho 41 } // namespace lld 42 43 #endif 44