Orc.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. #pragma once
  2. #ifdef __GNUC__
  3. #pragma GCC diagnostic push
  4. #pragma GCC diagnostic ignored "-Wunused-parameter"
  5. #endif
  6. /*===---------------- llvm-c/Orc.h - OrcV2 C bindings -----------*- C++ -*-===*\
  7. |* *|
  8. |* Part of the LLVM Project, under the Apache License v2.0 with LLVM *|
  9. |* Exceptions. *|
  10. |* See https://llvm.org/LICENSE.txt for license information. *|
  11. |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception *|
  12. |* *|
  13. |*===----------------------------------------------------------------------===*|
  14. |* *|
  15. |* This header declares the C interface to libLLVMOrcJIT.a, which implements *|
  16. |* JIT compilation of LLVM IR. Minimal documentation of C API specific issues *|
  17. |* (especially memory ownership rules) is provided. Core Orc concepts are *|
  18. |* documented in llvm/docs/ORCv2.rst and APIs are documented in the C++ *|
  19. |* headers *|
  20. |* *|
  21. |* Many exotic languages can interoperate with C code but have a harder time *|
  22. |* with C++ due to name mangling. So in addition to C, this interface enables *|
  23. |* tools written in such languages. *|
  24. |* *|
  25. |* Note: This interface is experimental. It is *NOT* stable, and may be *|
  26. |* changed without warning. Only C API usage documentation is *|
  27. |* provided. See the C++ documentation for all higher level ORC API *|
  28. |* details. *|
  29. |* *|
  30. \*===----------------------------------------------------------------------===*/
  31. #ifndef LLVM_C_ORC_H
  32. #define LLVM_C_ORC_H
  33. #include "llvm-c/Error.h"
  34. #include "llvm-c/TargetMachine.h"
  35. #include "llvm-c/Types.h"
  36. LLVM_C_EXTERN_C_BEGIN
  37. /**
  38. * Represents an address in the target process.
  39. */
  40. typedef uint64_t LLVMOrcJITTargetAddress;
  41. /**
  42. * Represents generic linkage flags for a symbol definition.
  43. */
  44. typedef enum {
  45. LLVMJITSymbolGenericFlagsExported = 1U << 0,
  46. LLVMJITSymbolGenericFlagsWeak = 1U << 1
  47. } LLVMJITSymbolGenericFlags;
  48. /**
  49. * Represents target specific flags for a symbol definition.
  50. */
  51. typedef uint8_t LLVMJITTargetSymbolFlags;
  52. /**
  53. * Represents the linkage flags for a symbol definition.
  54. */
  55. typedef struct {
  56. uint8_t GenericFlags;
  57. uint8_t TargetFlags;
  58. } LLVMJITSymbolFlags;
  59. /**
  60. * Represents an evaluated symbol address and flags.
  61. */
  62. typedef struct {
  63. LLVMOrcJITTargetAddress Address;
  64. LLVMJITSymbolFlags Flags;
  65. } LLVMJITEvaluatedSymbol;
  66. /**
  67. * A reference to an orc::ExecutionSession instance.
  68. */
  69. typedef struct LLVMOrcOpaqueExecutionSession *LLVMOrcExecutionSessionRef;
  70. /**
  71. * Error reporter function.
  72. */
  73. typedef void (*LLVMOrcErrorReporterFunction)(void *Ctx, LLVMErrorRef Err);
  74. /**
  75. * A reference to an orc::SymbolStringPool.
  76. */
  77. typedef struct LLVMOrcOpaqueSymbolStringPool *LLVMOrcSymbolStringPoolRef;
  78. /**
  79. * A reference to an orc::SymbolStringPool table entry.
  80. */
  81. typedef struct LLVMOrcOpaqueSymbolStringPoolEntry
  82. *LLVMOrcSymbolStringPoolEntryRef;
  83. /**
  84. * Represents a pair of a symbol name and an evaluated symbol.
  85. */
  86. typedef struct {
  87. LLVMOrcSymbolStringPoolEntryRef Name;
  88. LLVMJITEvaluatedSymbol Sym;
  89. } LLVMJITCSymbolMapPair;
  90. /**
  91. * Represents a list of (SymbolStringPtr, JITEvaluatedSymbol) pairs that can be
  92. * used to construct a SymbolMap.
  93. */
  94. typedef LLVMJITCSymbolMapPair *LLVMOrcCSymbolMapPairs;
  95. /**
  96. * Lookup kind. This can be used by definition generators when deciding whether
  97. * to produce a definition for a requested symbol.
  98. *
  99. * This enum should be kept in sync with llvm::orc::LookupKind.
  100. */
  101. typedef enum {
  102. LLVMOrcLookupKindStatic,
  103. LLVMOrcLookupKindDLSym
  104. } LLVMOrcLookupKind;
  105. /**
  106. * JITDylib lookup flags. This can be used by definition generators when
  107. * deciding whether to produce a definition for a requested symbol.
  108. *
  109. * This enum should be kept in sync with llvm::orc::JITDylibLookupFlags.
  110. */
  111. typedef enum {
  112. LLVMOrcJITDylibLookupFlagsMatchExportedSymbolsOnly,
  113. LLVMOrcJITDylibLookupFlagsMatchAllSymbols
  114. } LLVMOrcJITDylibLookupFlags;
  115. /**
  116. * Symbol lookup flags for lookup sets. This should be kept in sync with
  117. * llvm::orc::SymbolLookupFlags.
  118. */
  119. typedef enum {
  120. LLVMOrcSymbolLookupFlagsRequiredSymbol,
  121. LLVMOrcSymbolLookupFlagsWeaklyReferencedSymbol
  122. } LLVMOrcSymbolLookupFlags;
  123. /**
  124. * An element type for a symbol lookup set.
  125. */
  126. typedef struct {
  127. LLVMOrcSymbolStringPoolEntryRef Name;
  128. LLVMOrcSymbolLookupFlags LookupFlags;
  129. } LLVMOrcCLookupSetElement;
  130. /**
  131. * A set of symbols to look up / generate.
  132. *
  133. * The list is terminated with an element containing a null pointer for the
  134. * Name field.
  135. *
  136. * If a client creates an instance of this type then they are responsible for
  137. * freeing it, and for ensuring that all strings have been retained over the
  138. * course of its life. Clients receiving a copy from a callback are not
  139. * responsible for managing lifetime or retain counts.
  140. */
  141. typedef LLVMOrcCLookupSetElement *LLVMOrcCLookupSet;
  142. /**
  143. * A reference to an orc::MaterializationUnit.
  144. */
  145. typedef struct LLVMOrcOpaqueMaterializationUnit *LLVMOrcMaterializationUnitRef;
  146. /**
  147. * A reference to an orc::JITDylib instance.
  148. */
  149. typedef struct LLVMOrcOpaqueJITDylib *LLVMOrcJITDylibRef;
  150. /**
  151. * A reference to an orc::ResourceTracker instance.
  152. */
  153. typedef struct LLVMOrcOpaqueResourceTracker *LLVMOrcResourceTrackerRef;
  154. /**
  155. * A reference to an orc::DefinitionGenerator.
  156. */
  157. typedef struct LLVMOrcOpaqueDefinitionGenerator
  158. *LLVMOrcDefinitionGeneratorRef;
  159. /**
  160. * An opaque lookup state object. Instances of this type can be captured to
  161. * suspend a lookup while a custom generator function attempts to produce a
  162. * definition.
  163. *
  164. * If a client captures a lookup state object then they must eventually call
  165. * LLVMOrcLookupStateContinueLookup to restart the lookup. This is required
  166. * in order to release memory allocated for the lookup state, even if errors
  167. * have occurred while the lookup was suspended (if these errors have made the
  168. * lookup impossible to complete then it will issue its own error before
  169. * destruction).
  170. */
  171. typedef struct LLVMOrcOpaqueLookupState *LLVMOrcLookupStateRef;
  172. /**
  173. * A custom generator function. This can be used to create a custom generator
  174. * object using LLVMOrcCreateCustomCAPIDefinitionGenerator. The resulting
  175. * object can be attached to a JITDylib, via LLVMOrcJITDylibAddGenerator, to
  176. * receive callbacks when lookups fail to match existing definitions.
  177. *
  178. * GeneratorObj will contain the address of the custom generator object.
  179. *
  180. * Ctx will contain the context object passed to
  181. * LLVMOrcCreateCustomCAPIDefinitionGenerator.
  182. *
  183. * LookupState will contain a pointer to an LLVMOrcLookupStateRef object. This
  184. * can optionally be modified to make the definition generation process
  185. * asynchronous: If the LookupStateRef value is copied, and the original
  186. * LLVMOrcLookupStateRef set to null, the lookup will be suspended. Once the
  187. * asynchronous definition process has been completed clients must call
  188. * LLVMOrcLookupStateContinueLookup to continue the lookup (this should be
  189. * done unconditionally, even if errors have occurred in the mean time, to
  190. * free the lookup state memory and notify the query object of the failures. If
  191. * LookupState is captured this function must return LLVMErrorSuccess.
  192. *
  193. * The Kind argument can be inspected to determine the lookup kind (e.g.
  194. * as-if-during-static-link, or as-if-during-dlsym).
  195. *
  196. * The JD argument specifies which JITDylib the definitions should be generated
  197. * into.
  198. *
  199. * The JDLookupFlags argument can be inspected to determine whether the original
  200. * lookup included non-exported symobls.
  201. *
  202. * Finally, the LookupSet argument contains the set of symbols that could not
  203. * be found in JD already (the set of generation candidates).
  204. */
  205. typedef LLVMErrorRef (*LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction)(
  206. LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
  207. LLVMOrcLookupStateRef *LookupState, LLVMOrcLookupKind Kind,
  208. LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags,
  209. LLVMOrcCLookupSet LookupSet, size_t LookupSetSize);
  210. /**
  211. * Predicate function for SymbolStringPoolEntries.
  212. */
  213. typedef int (*LLVMOrcSymbolPredicate)(void *Ctx,
  214. LLVMOrcSymbolStringPoolEntryRef Sym);
  215. /**
  216. * A reference to an orc::ThreadSafeContext instance.
  217. */
  218. typedef struct LLVMOrcOpaqueThreadSafeContext *LLVMOrcThreadSafeContextRef;
  219. /**
  220. * A reference to an orc::ThreadSafeModule instance.
  221. */
  222. typedef struct LLVMOrcOpaqueThreadSafeModule *LLVMOrcThreadSafeModuleRef;
  223. /**
  224. * A reference to an orc::JITTargetMachineBuilder instance.
  225. */
  226. typedef struct LLVMOrcOpaqueJITTargetMachineBuilder
  227. *LLVMOrcJITTargetMachineBuilderRef;
  228. /**
  229. * A reference to an orc::ObjectLayer instance.
  230. */
  231. typedef struct LLVMOrcOpaqueObjectLayer *LLVMOrcObjectLayerRef;
  232. /**
  233. * Attach a custom error reporter function to the ExecutionSession.
  234. *
  235. * The error reporter will be called to deliver failure notices that can not be
  236. * directly reported to a caller. For example, failure to resolve symbols in
  237. * the JIT linker is typically reported via the error reporter (callers
  238. * requesting definitions from the JIT will typically be delivered a
  239. * FailureToMaterialize error instead).
  240. */
  241. void LLVMOrcExecutionSessionSetErrorReporter(
  242. LLVMOrcExecutionSessionRef ES, LLVMOrcErrorReporterFunction ReportError,
  243. void *Ctx);
  244. /**
  245. * Return a reference to the SymbolStringPool for an ExecutionSession.
  246. *
  247. * Ownership of the pool remains with the ExecutionSession: The caller is
  248. * not required to free the pool.
  249. */
  250. LLVMOrcSymbolStringPoolRef
  251. LLVMOrcExecutionSessionGetSymbolStringPool(LLVMOrcExecutionSessionRef ES);
  252. /**
  253. * Clear all unreferenced symbol string pool entries.
  254. *
  255. * This can be called at any time to release unused entries in the
  256. * ExecutionSession's string pool. Since it locks the pool (preventing
  257. * interning of any new strings) it is recommended that it only be called
  258. * infrequently, ideally when the caller has reason to believe that some
  259. * entries will have become unreferenced, e.g. after removing a module or
  260. * closing a JITDylib.
  261. */
  262. void LLVMOrcSymbolStringPoolClearDeadEntries(LLVMOrcSymbolStringPoolRef SSP);
  263. /**
  264. * Intern a string in the ExecutionSession's SymbolStringPool and return a
  265. * reference to it. This increments the ref-count of the pool entry, and the
  266. * returned value should be released once the client is done with it by
  267. * calling LLVMOrReleaseSymbolStringPoolEntry.
  268. *
  269. * Since strings are uniqued within the SymbolStringPool
  270. * LLVMOrcSymbolStringPoolEntryRefs can be compared by value to test string
  271. * equality.
  272. *
  273. * Note that this function does not perform linker-mangling on the string.
  274. */
  275. LLVMOrcSymbolStringPoolEntryRef
  276. LLVMOrcExecutionSessionIntern(LLVMOrcExecutionSessionRef ES, const char *Name);
  277. /**
  278. * Increments the ref-count for a SymbolStringPool entry.
  279. */
  280. void LLVMOrcRetainSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S);
  281. /**
  282. * Reduces the ref-count for of a SymbolStringPool entry.
  283. */
  284. void LLVMOrcReleaseSymbolStringPoolEntry(LLVMOrcSymbolStringPoolEntryRef S);
  285. const char *LLVMOrcSymbolStringPoolEntryStr(LLVMOrcSymbolStringPoolEntryRef S);
  286. /**
  287. * Reduces the ref-count of a ResourceTracker.
  288. */
  289. void LLVMOrcReleaseResourceTracker(LLVMOrcResourceTrackerRef RT);
  290. /**
  291. * Transfers tracking of all resources associated with resource tracker SrcRT
  292. * to resource tracker DstRT.
  293. */
  294. void LLVMOrcResourceTrackerTransferTo(LLVMOrcResourceTrackerRef SrcRT,
  295. LLVMOrcResourceTrackerRef DstRT);
  296. /**
  297. * Remove all resources associated with the given tracker. See
  298. * ResourceTracker::remove().
  299. */
  300. LLVMErrorRef LLVMOrcResourceTrackerRemove(LLVMOrcResourceTrackerRef RT);
  301. /**
  302. * Dispose of a JITDylib::DefinitionGenerator. This should only be called if
  303. * ownership has not been passed to a JITDylib (e.g. because some error
  304. * prevented the client from calling LLVMOrcJITDylibAddGenerator).
  305. */
  306. void LLVMOrcDisposeDefinitionGenerator(LLVMOrcDefinitionGeneratorRef DG);
  307. /**
  308. * Dispose of a MaterializationUnit.
  309. */
  310. void LLVMOrcDisposeMaterializationUnit(LLVMOrcMaterializationUnitRef MU);
  311. /**
  312. * Create a MaterializationUnit to define the given symbols as pointing to
  313. * the corresponding raw addresses.
  314. */
  315. LLVMOrcMaterializationUnitRef
  316. LLVMOrcAbsoluteSymbols(LLVMOrcCSymbolMapPairs Syms, size_t NumPairs);
  317. /**
  318. * Create a "bare" JITDylib.
  319. *
  320. * The client is responsible for ensuring that the JITDylib's name is unique,
  321. * e.g. by calling LLVMOrcExecutionSessionGetJTIDylibByName first.
  322. *
  323. * This call does not install any library code or symbols into the newly
  324. * created JITDylib. The client is responsible for all configuration.
  325. */
  326. LLVMOrcJITDylibRef
  327. LLVMOrcExecutionSessionCreateBareJITDylib(LLVMOrcExecutionSessionRef ES,
  328. const char *Name);
  329. /**
  330. * Create a JITDylib.
  331. *
  332. * The client is responsible for ensuring that the JITDylib's name is unique,
  333. * e.g. by calling LLVMOrcExecutionSessionGetJTIDylibByName first.
  334. *
  335. * If a Platform is attached to the ExecutionSession then
  336. * Platform::setupJITDylib will be called to install standard platform symbols
  337. * (e.g. standard library interposes). If no Platform is installed then this
  338. * call is equivalent to LLVMExecutionSessionRefCreateBareJITDylib and will
  339. * always return success.
  340. */
  341. LLVMErrorRef
  342. LLVMOrcExecutionSessionCreateJITDylib(LLVMOrcExecutionSessionRef ES,
  343. LLVMOrcJITDylibRef *Result,
  344. const char *Name);
  345. /**
  346. * Returns the JITDylib with the given name, or NULL if no such JITDylib
  347. * exists.
  348. */
  349. LLVMOrcJITDylibRef
  350. LLVMOrcExecutionSessionGetJITDylibByName(LLVMOrcExecutionSessionRef ES,
  351. const char *Name);
  352. /**
  353. * Return a reference to a newly created resource tracker associated with JD.
  354. * The tracker is returned with an initial ref-count of 1, and must be released
  355. * with LLVMOrcReleaseResourceTracker when no longer needed.
  356. */
  357. LLVMOrcResourceTrackerRef
  358. LLVMOrcJITDylibCreateResourceTracker(LLVMOrcJITDylibRef JD);
  359. /**
  360. * Return a reference to the default resource tracker for the given JITDylib.
  361. * This operation will increase the retain count of the tracker: Clients should
  362. * call LLVMOrcReleaseResourceTracker when the result is no longer needed.
  363. */
  364. LLVMOrcResourceTrackerRef
  365. LLVMOrcJITDylibGetDefaultResourceTracker(LLVMOrcJITDylibRef JD);
  366. /**
  367. * Add the given MaterializationUnit to the given JITDylib.
  368. *
  369. * If this operation succeeds then JITDylib JD will take ownership of MU.
  370. * If the operation fails then ownership remains with the caller who should
  371. * call LLVMOrcDisposeMaterializationUnit to destroy it.
  372. */
  373. LLVMErrorRef LLVMOrcJITDylibDefine(LLVMOrcJITDylibRef JD,
  374. LLVMOrcMaterializationUnitRef MU);
  375. /**
  376. * Calls remove on all trackers associated with this JITDylib, see
  377. * JITDylib::clear().
  378. */
  379. LLVMErrorRef LLVMOrcJITDylibClear(LLVMOrcJITDylibRef JD);
  380. /**
  381. * Add a DefinitionGenerator to the given JITDylib.
  382. *
  383. * The JITDylib will take ownership of the given generator: The client is no
  384. * longer responsible for managing its memory.
  385. */
  386. void LLVMOrcJITDylibAddGenerator(LLVMOrcJITDylibRef JD,
  387. LLVMOrcDefinitionGeneratorRef DG);
  388. /**
  389. * Create a custom generator.
  390. */
  391. LLVMOrcDefinitionGeneratorRef LLVMOrcCreateCustomCAPIDefinitionGenerator(
  392. LLVMOrcCAPIDefinitionGeneratorTryToGenerateFunction F, void *Ctx);
  393. /**
  394. * Get a DynamicLibrarySearchGenerator that will reflect process symbols into
  395. * the JITDylib. On success the resulting generator is owned by the client.
  396. * Ownership is typically transferred by adding the instance to a JITDylib
  397. * using LLVMOrcJITDylibAddGenerator,
  398. *
  399. * The GlobalPrefix argument specifies the character that appears on the front
  400. * of linker-mangled symbols for the target platform (e.g. '_' on MachO).
  401. * If non-null, this character will be stripped from the start of all symbol
  402. * strings before passing the remaining substring to dlsym.
  403. *
  404. * The optional Filter and Ctx arguments can be used to supply a symbol name
  405. * filter: Only symbols for which the filter returns true will be visible to
  406. * JIT'd code. If the Filter argument is null then all process symbols will
  407. * be visible to JIT'd code. Note that the symbol name passed to the Filter
  408. * function is the full mangled symbol: The client is responsible for stripping
  409. * the global prefix if present.
  410. */
  411. LLVMErrorRef LLVMOrcCreateDynamicLibrarySearchGeneratorForProcess(
  412. LLVMOrcDefinitionGeneratorRef *Result, char GlobalPrefx,
  413. LLVMOrcSymbolPredicate Filter, void *FilterCtx);
  414. /**
  415. * Create a ThreadSafeContext containing a new LLVMContext.
  416. *
  417. * Ownership of the underlying ThreadSafeContext data is shared: Clients
  418. * can and should dispose of their ThreadSafeContext as soon as they no longer
  419. * need to refer to it directly. Other references (e.g. from ThreadSafeModules)
  420. * will keep the data alive as long as it is needed.
  421. */
  422. LLVMOrcThreadSafeContextRef LLVMOrcCreateNewThreadSafeContext(void);
  423. /**
  424. * Get a reference to the wrapped LLVMContext.
  425. */
  426. LLVMContextRef
  427. LLVMOrcThreadSafeContextGetContext(LLVMOrcThreadSafeContextRef TSCtx);
  428. /**
  429. * Dispose of a ThreadSafeContext.
  430. */
  431. void LLVMOrcDisposeThreadSafeContext(LLVMOrcThreadSafeContextRef TSCtx);
  432. /**
  433. * Create a ThreadSafeModule wrapper around the given LLVM module. This takes
  434. * ownership of the M argument which should not be disposed of or referenced
  435. * after this function returns.
  436. *
  437. * Ownership of the ThreadSafeModule is unique: If it is transferred to the JIT
  438. * (e.g. by LLVMOrcLLJITAddLLVMIRModule) then the client is no longer
  439. * responsible for it. If it is not transferred to the JIT then the client
  440. * should call LLVMOrcDisposeThreadSafeModule to dispose of it.
  441. */
  442. LLVMOrcThreadSafeModuleRef
  443. LLVMOrcCreateNewThreadSafeModule(LLVMModuleRef M,
  444. LLVMOrcThreadSafeContextRef TSCtx);
  445. /**
  446. * Dispose of a ThreadSafeModule. This should only be called if ownership has
  447. * not been passed to LLJIT (e.g. because some error prevented the client from
  448. * adding this to the JIT).
  449. */
  450. void LLVMOrcDisposeThreadSafeModule(LLVMOrcThreadSafeModuleRef TSM);
  451. /**
  452. * Create a JITTargetMachineBuilder by detecting the host.
  453. *
  454. * On success the client owns the resulting JITTargetMachineBuilder. It must be
  455. * passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder) or disposed
  456. * of by calling LLVMOrcDisposeJITTargetMachineBuilder.
  457. */
  458. LLVMErrorRef LLVMOrcJITTargetMachineBuilderDetectHost(
  459. LLVMOrcJITTargetMachineBuilderRef *Result);
  460. /**
  461. * Create a JITTargetMachineBuilder from the given TargetMachine template.
  462. *
  463. * This operation takes ownership of the given TargetMachine and destroys it
  464. * before returing. The resulting JITTargetMachineBuilder is owned by the client
  465. * and must be passed to a consuming operation (e.g. LLVMOrcCreateLLJITBuilder)
  466. * or disposed of by calling LLVMOrcDisposeJITTargetMachineBuilder.
  467. */
  468. LLVMOrcJITTargetMachineBuilderRef
  469. LLVMOrcJITTargetMachineBuilderCreateFromTargetMachine(LLVMTargetMachineRef TM);
  470. /**
  471. * Dispose of a JITTargetMachineBuilder.
  472. */
  473. void LLVMOrcDisposeJITTargetMachineBuilder(
  474. LLVMOrcJITTargetMachineBuilderRef JTMB);
  475. /**
  476. * Dispose of an ObjectLayer.
  477. */
  478. void LLVMOrcDisposeObjectLayer(LLVMOrcObjectLayerRef ObjLayer);
  479. LLVM_C_EXTERN_C_END
  480. #endif /* LLVM_C_ORC_H */
  481. #ifdef __GNUC__
  482. #pragma GCC diagnostic pop
  483. #endif