xref: /freebsd/contrib/llvm-project/lld/MachO/ObjC.h (revision 7fdf597e96a02165cfe22ff357b857d5fa15ed8a)
1 //===- ObjC.h ---------------------------------------------------*- C++ -*-===//
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_OBJC_H
10 #define LLD_MACHO_OBJC_H
11 
12 #include "llvm/Support/MemoryBuffer.h"
13 
14 namespace lld::macho {
15 
16 namespace objc {
17 
18 namespace symbol_names {
19 constexpr const char klass[] = "_OBJC_CLASS_$_";
20 constexpr const char klassPropList[] = "__OBJC_$_CLASS_PROP_LIST_";
21 
22 constexpr const char metaclass[] = "_OBJC_METACLASS_$_";
23 constexpr const char ehtype[] = "_OBJC_EHTYPE_$_";
24 constexpr const char ivar[] = "_OBJC_IVAR_$_";
25 constexpr const char instanceMethods[] = "__OBJC_$_INSTANCE_METHODS_";
26 constexpr const char classMethods[] = "__OBJC_$_CLASS_METHODS_";
27 constexpr const char listProprieties[] = "__OBJC_$_PROP_LIST_";
28 
29 constexpr const char category[] = "__OBJC_$_CATEGORY_";
30 constexpr const char categoryInstanceMethods[] =
31     "__OBJC_$_CATEGORY_INSTANCE_METHODS_";
32 constexpr const char categoryClassMethods[] =
33     "__OBJC_$_CATEGORY_CLASS_METHODS_";
34 constexpr const char categoryProtocols[] = "__OBJC_CATEGORY_PROTOCOLS_$_";
35 
36 constexpr const char swift_objc_category[] = "__CATEGORY_";
37 constexpr const char swift_objc_klass[] = "_$s";
38 } // namespace symbol_names
39 
40 // Check for duplicate method names within related categories / classes.
41 void checkCategories();
42 void mergeCategories();
43 
44 void doCleanup();
45 } // namespace objc
46 
47 bool hasObjCSection(llvm::MemoryBufferRef);
48 
49 } // namespace lld::macho
50 
51 #endif
52