about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-11 19:55:27 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-07-11 19:55:27 +0200
commit1bb27f2b807c3a9b67a0fdaf52f7390c6551acdd (patch)
tree8a648585ddf6bc7a4ed857ae7273aa9cef9ad2ab
parent96dae29f4dc438d9eb0c59bc61e4f30cbcfc094c (diff)
downloadbox64-1bb27f2b807c3a9b67a0fdaf52f7390c6551acdd.tar.gz
box64-1bb27f2b807c3a9b67a0fdaf52f7390c6551acdd.zip
Added a workaround for missing __gxx_personality_v0 function (for #349)
-rwxr-xr-xsrc/elfs/elfloader.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c
index 4f054785..f20e9e36 100755
--- a/src/elfs/elfloader.c
+++ b/src/elfs/elfloader.c
@@ -716,9 +716,13 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t
                 break;
             case R_X86_64_64:
                 if (!offs) {
-                    printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name);
-                    ret_ok = 1;
-                    // return -1;
+                    if(symname && !strcmp(symname, "__gxx_personality_v0")) {
+                        printf_dump(LOG_NEVER, "Warning: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name);
+                    } else {
+                        printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name);
+                        ret_ok = 1;
+                        // return -1;
+                    }
                 } else {
                     printf_dump(LOG_NEVER, "Apply %s R_X86_64_64 @%p with sym=%s (ver=%d/%s) addend=0x%lx (%p -> %p)\n", 
                         (bind==STB_LOCAL)?"Local":"Global", p, symname, version, vername?vername:"(none)", rela[i].r_addend, *(void**)p, (void*)(offs+rela[i].r_addend/*+*(uint64_t*)p*/));