add back support for loading libraries linked against bionic

This commit is contained in:
Mis012 2022-09-20 15:32:37 +02:00
parent d0962b9974
commit 2f785e2a59

View file

@ -8,6 +8,39 @@
#include <dlfcn.h>
// for getting _r_debug out of the dynamic section
// this is needed by the shim bionic linker to register stuff with gdb
#include <elf.h>
#include <link.h>
// the dynamic section
extern Elf64_Dyn _DYNAMIC[];
extern struct r_debug *_r_debug_ptr;
void init__r_debug() {
#if defined(_r_debug)
// _r_debug is defined by glibc and is declared as extern in link.h
_r_debug_ptr = &_r_debug;
#else
int i = 0;
Elf64_Dyn current;
do {
current = _DYNAMIC[i];
if(current.d_tag == 0x15) {
_r_debug_ptr = (struct r_debug *)current.d_un.d_ptr;
break;
}
i++;
} while(current.d_tag != 0);
if(!_r_debug_ptr) {
fprintf(stderr, "error: no DEBUG tag in the dynamic section, treating this as fatal\n");
exit(1);
}
#endif
}
GtkWidget *window;
// standard Gtk Application stuff, more or less
@ -227,6 +260,8 @@ int main(int argc, char **argv/*, JNIEnv *env*/)
GtkApplication *app;
int status;
init__r_debug();
struct jni_callback_data *callback_data = malloc(sizeof(struct jni_callback_data));
callback_data->apk_main_activity_class = NULL;
callback_data->window_width = 960;