1*dda28197Spatrick #ifndef LLDB_TEST_DYLIB_H
2*dda28197Spatrick #define LLDB_TEST_DYLIB_H
3*dda28197Spatrick
4*dda28197Spatrick #include <stdio.h>
5*dda28197Spatrick
6*dda28197Spatrick #ifdef _WIN32
7*dda28197Spatrick #include <Windows.h>
8*dda28197Spatrick
9*dda28197Spatrick #define dylib_get_symbol(handle, name) GetProcAddress((HMODULE)handle, name)
10*dda28197Spatrick #define dylib_close(handle) (!FreeLibrary((HMODULE)handle))
11*dda28197Spatrick #else
12*dda28197Spatrick #include <dlfcn.h>
13*dda28197Spatrick
14*dda28197Spatrick #define dylib_get_symbol(handle, name) dlsym(handle, name)
15*dda28197Spatrick #define dylib_close(handle) dlclose(handle)
16*dda28197Spatrick #endif
17*dda28197Spatrick
18*dda28197Spatrick
dylib_open(const char * name)19*dda28197Spatrick inline void *dylib_open(const char *name) {
20*dda28197Spatrick char dylib_prefix[] =
21*dda28197Spatrick #ifdef _WIN32
22*dda28197Spatrick "";
23*dda28197Spatrick #else
24*dda28197Spatrick "lib";
25*dda28197Spatrick #endif
26*dda28197Spatrick char dylib_suffix[] =
27*dda28197Spatrick #ifdef _WIN32
28*dda28197Spatrick ".dll";
29*dda28197Spatrick #elif defined(__APPLE__)
30*dda28197Spatrick ".dylib";
31*dda28197Spatrick #else
32*dda28197Spatrick ".so";
33*dda28197Spatrick #endif
34*dda28197Spatrick char fullname[1024];
35*dda28197Spatrick snprintf(fullname, sizeof(fullname), "%s%s%s", dylib_prefix, name, dylib_suffix);
36*dda28197Spatrick #ifdef _WIN32
37*dda28197Spatrick return LoadLibraryA(fullname);
38*dda28197Spatrick #else
39*dda28197Spatrick return dlopen(fullname, RTLD_NOW);
40*dda28197Spatrick #endif
41*dda28197Spatrick }
42*dda28197Spatrick
dylib_last_error()43*dda28197Spatrick inline const char *dylib_last_error() {
44*dda28197Spatrick #ifndef _WIN32
45*dda28197Spatrick return dlerror();
46*dda28197Spatrick #else
47*dda28197Spatrick DWORD err = GetLastError();
48*dda28197Spatrick char *msg;
49*dda28197Spatrick FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
50*dda28197Spatrick NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (char *)&msg, 0, NULL);
51*dda28197Spatrick return msg;
52*dda28197Spatrick #endif
53*dda28197Spatrick }
54*dda28197Spatrick
55*dda28197Spatrick #endif
56