xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/orc/macho_platform.h (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
1*fe6060f1SDimitry Andric //===- macho_platform.h -----------------------------------------*- C++ -*-===//
2*fe6060f1SDimitry Andric //
3*fe6060f1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*fe6060f1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*fe6060f1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*fe6060f1SDimitry Andric //
7*fe6060f1SDimitry Andric //===----------------------------------------------------------------------===//
8*fe6060f1SDimitry Andric //
9*fe6060f1SDimitry Andric // ORC Runtime support for Darwin dynamic loading features.
10*fe6060f1SDimitry Andric //
11*fe6060f1SDimitry Andric //===----------------------------------------------------------------------===//
12*fe6060f1SDimitry Andric 
13*fe6060f1SDimitry Andric #ifndef ORC_RT_MACHO_PLATFORM_H
14*fe6060f1SDimitry Andric #define ORC_RT_MACHO_PLATFORM_H
15*fe6060f1SDimitry Andric 
16*fe6060f1SDimitry Andric #include "common.h"
17*fe6060f1SDimitry Andric #include "executor_address.h"
18*fe6060f1SDimitry Andric 
19*fe6060f1SDimitry Andric // Atexit functions.
20*fe6060f1SDimitry Andric ORC_RT_INTERFACE int __orc_rt_macho_cxa_atexit(void (*func)(void *), void *arg,
21*fe6060f1SDimitry Andric                                                void *dso_handle);
22*fe6060f1SDimitry Andric ORC_RT_INTERFACE void __orc_rt_macho_cxa_finalize(void *dso_handle);
23*fe6060f1SDimitry Andric 
24*fe6060f1SDimitry Andric // dlfcn functions.
25*fe6060f1SDimitry Andric ORC_RT_INTERFACE const char *__orc_rt_macho_jit_dlerror();
26*fe6060f1SDimitry Andric ORC_RT_INTERFACE void *__orc_rt_macho_jit_dlopen(const char *path, int mode);
27*fe6060f1SDimitry Andric ORC_RT_INTERFACE int __orc_rt_macho_jit_dlclose(void *dso_handle);
28*fe6060f1SDimitry Andric ORC_RT_INTERFACE void *__orc_rt_macho_jit_dlsym(void *dso_handle,
29*fe6060f1SDimitry Andric                                                 const char *symbol);
30*fe6060f1SDimitry Andric 
31*fe6060f1SDimitry Andric namespace __orc_rt {
32*fe6060f1SDimitry Andric namespace macho {
33*fe6060f1SDimitry Andric 
34*fe6060f1SDimitry Andric enum dlopen_mode : int {
35*fe6060f1SDimitry Andric   ORC_RT_RTLD_LAZY = 0x1,
36*fe6060f1SDimitry Andric   ORC_RT_RTLD_NOW = 0x2,
37*fe6060f1SDimitry Andric   ORC_RT_RTLD_LOCAL = 0x4,
38*fe6060f1SDimitry Andric   ORC_RT_RTLD_GLOBAL = 0x8
39*fe6060f1SDimitry Andric };
40*fe6060f1SDimitry Andric 
41*fe6060f1SDimitry Andric } // end namespace macho
42*fe6060f1SDimitry Andric } // end namespace __orc_rt
43*fe6060f1SDimitry Andric 
44*fe6060f1SDimitry Andric #endif // ORC_RT_MACHO_PLATFORM_H
45