13#include "llvm/Config/config.h"
32#if defined(HAVE_REGISTER_FRAME) && defined(HAVE_DEREGISTER_FRAME) && \
33 !defined(__SEH__) && !defined(__USING_SJLJ_EXCEPTIONS__)
42 static bool Searched =
false;
43 static void (*rf)(
void *) = 0;
55 static bool Searched =
false;
56 static void (*df)(
void *) = 0;
61 "__deregister_frame");
70#if defined(HAVE_UNW_ADD_DYNAMIC_FDE) || defined(__APPLE__)
72static const char *processFDE(
const char *Entry,
bool isDeregister) {
94 const char *
P = (
const char *)
Addr;
97 P = processFDE(
P,
false);
102 const char *
P = (
const char *)
Addr;
105 P = processFDE(
P,
true);
146#if defined(__BIONIC__) && defined(__arm__)
153#define ARM_MATH_IMPORTS(PP) \
187 PP(__aeabi_idivmod) \
191 PP(__aeabi_ldivmod) \
198 PP(__aeabi_uidivmod) \
208#define ARM_MATH_DECL(name) extern "C" void name();
209ARM_MATH_IMPORTS(ARM_MATH_DECL)
213#if defined(__linux__) && defined(__GLIBC__) && \
214 (defined(__i386__) || defined(__x86_64__))
223#if defined(__linux__) && defined(__GLIBC__)
242#if defined(__i386__) || defined(__x86_64__)
244 if (&__morestack &&
Name ==
"__morestack")
250#if defined(__BIONIC__) && defined(__arm__)
251 if (
Name.compare(0, 8,
"__aeabi_") == 0) {
254#define ARM_MATH_CHECK(fn) if (Name == #fn) return (uint64_t)&fn;
255 ARM_MATH_IMPORTS(ARM_MATH_CHECK)
268 const char *NameStr =
Name.c_str();
273 if (NameStr[0] ==
'_')
281 bool AbortOnFailure) {
284 if (!
Addr && AbortOnFailure)
286 "' which could not be resolved!");
291void RTDyldMemoryManager::anchor() {}
292void MCJITMemoryManager::anchor() {}
#define LLVM_ATTRIBUTE_WEAK
static void deregisterEHFramesInProcess(uint8_t *Addr, size_t Size)
Deregister EH frames in the current process.
void registerEHFrames(uint8_t *Addr, uint64_t LoadAddr, size_t Size) override
Register the EH frames with the runtime so that c++ exceptions work.
virtual void * getPointerToNamedFunction(const std::string &Name, bool AbortOnFailure=true)
This method returns the address of the specified function.
virtual uint64_t getSymbolAddress(const std::string &Name)
Legacy symbol lookup - DEPRECATED! Please override findSymbol instead.
static uint64_t getSymbolAddressInProcess(const std::string &Name)
This method returns the address of the specified function or variable in the current process.
static void registerEHFramesInProcess(uint8_t *Addr, size_t Size)
Register EH frames in the current process.
~RTDyldMemoryManager() override
void deregisterEHFrames() override
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
static void * SearchForAddressOfSymbol(const char *symbolName)
This function will search through all previously loaded dynamic libraries for the symbol symbolName.
This is an optimization pass for GlobalISel generic memory operations.
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
void __register_frame(void *)
void __deregister_frame(void *)