99 lines
3.1 KiB
Diff
99 lines
3.1 KiB
Diff
--- a/renderdoc/os/posix/linux/linux_hook.cpp
|
|
+++ b/renderdoc/os/posix/linux/linux_hook.cpp
|
|
@@ -70,8 +70,10 @@ __attribute__((visibility("default"))) v
|
|
|
|
void *ret = passthru(filename, flag);
|
|
|
|
+#ifdef __GLIBC__
|
|
if(filename && ret && (flag & RTLD_DEEPBIND))
|
|
plthook_lib(ret);
|
|
+#endif
|
|
|
|
return ret;
|
|
}
|
|
@@ -506,8 +508,10 @@ void *intercept_dlopen(const char *filen
|
|
if(filename == NULL)
|
|
return ret;
|
|
|
|
+#ifdef __GLIBC__
|
|
if(flag & RTLD_DEEPBIND)
|
|
plthook_lib(ret);
|
|
+#endif
|
|
|
|
rdcstr base = get_basename(filename);
|
|
|
|
--- a/renderdoc/3rdparty/plthook/plthook_elf.c
|
|
+++ b/renderdoc/3rdparty/plthook/plthook_elf.c
|
|
@@ -62,7 +62,7 @@
|
|
#include <link.h>
|
|
#include "plthook.h"
|
|
|
|
-#if defined __UCLIBC__ && !defined RTLD_NOLOAD
|
|
+#if !defined(__GLIBC__) && !defined(RTLD_NOLOAD)
|
|
#define RTLD_NOLOAD 0
|
|
#endif
|
|
|
|
@@ -204,7 +204,7 @@ static int check_elf_header(const Elf_Eh
|
|
#endif
|
|
static void set_errmsg(const char *fmt, ...) __attribute__((__format__ (__printf__, 1, 2)));
|
|
|
|
-#if defined __ANDROID__ || defined __UCLIBC__
|
|
+#if defined(__linux__) && !defined(__GLIBC__)
|
|
struct dl_iterate_data {
|
|
char* addr;
|
|
struct link_map lmap;
|
|
@@ -249,7 +249,7 @@ int plthook_open(plthook_t **plthook_out
|
|
|
|
int plthook_open_by_handle(plthook_t **plthook_out, void *hndl)
|
|
{
|
|
-#if defined __ANDROID__ || defined __UCLIBC__
|
|
+#if defined (__linux__) && !defined(__GLIBC__)
|
|
const static char *symbols[] = {
|
|
"__INIT_ARRAY__",
|
|
"_end",
|
|
@@ -288,7 +288,7 @@ int plthook_open_by_address(plthook_t **
|
|
{
|
|
#if defined __FreeBSD__
|
|
return PLTHOOK_NOT_IMPLEMENTED;
|
|
-#elif defined __ANDROID__ || defined __UCLIBC__
|
|
+#elif defined(__linux__) && !defined(__GLIBC__)
|
|
struct dl_iterate_data data = {0,};
|
|
data.addr = address;
|
|
dl_iterate_phdr(dl_iterate_cb, &data);
|
|
@@ -312,7 +312,7 @@ int plthook_open_by_address(plthook_t **
|
|
|
|
static int plthook_open_executable(plthook_t **plthook_out)
|
|
{
|
|
-#if defined __ANDROID__ || defined __UCLIBC__
|
|
+#if defined(__linux__) && !defined(__GLIBC__)
|
|
return plthook_open_shared_library(plthook_out, NULL);
|
|
#elif defined __linux__
|
|
return plthook_open_real(plthook_out, _r_debug.r_map);
|
|
@@ -351,7 +351,7 @@ static int plthook_open_executable(pltho
|
|
static int plthook_open_shared_library(plthook_t **plthook_out, const char *filename)
|
|
{
|
|
void *hndl = dlopen(filename, RTLD_LAZY | RTLD_NOLOAD);
|
|
-#if defined __ANDROID__ || defined __UCLIBC__
|
|
+#if defined(__linux__) && !defined(__GLIBC__)
|
|
int rv;
|
|
#else
|
|
struct link_map *lmap = NULL;
|
|
@@ -361,7 +361,7 @@ static int plthook_open_shared_library(p
|
|
set_errmsg("dlopen error: %s", dlerror());
|
|
return PLTHOOK_FILE_NOT_FOUND;
|
|
}
|
|
-#if defined __ANDROID__ || defined __UCLIBC__
|
|
+#if defined(__linux__) && !defined(__GLIBC__)
|
|
rv = plthook_open_by_handle(plthook_out, hndl);
|
|
dlclose(hndl);
|
|
return rv;
|
|
@@ -553,7 +553,7 @@ static int plthook_open_real(plthook_t *
|
|
|
|
#if defined __linux__
|
|
plthook.plt_addr_base = (char*)lmap->l_addr;
|
|
-#if defined __ANDROID__ || defined __UCLIBC__
|
|
+#if !defined(__GLIBC__)
|
|
dyn_addr_base = (const char*)lmap->l_addr;
|
|
#endif
|
|
#elif defined __FreeBSD__ || defined __sun
|