about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-11-07 17:14:19 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-11-07 17:14:19 +0100
commit128708db2d6fe99ba0fe25978316eec4b2088774 (patch)
tree0b6792d88777b0fa9415676334eaa32e385a5c9d /src
parent3027ee9f3e1ef39b49b8aef17ba0598470eeb282 (diff)
downloadbox64-128708db2d6fe99ba0fe25978316eec4b2088774.tar.gz
box64-128708db2d6fe99ba0fe25978316eec4b2088774.zip
[ELFLOADER] Better handling of symbols with COPY / GLOB_DAT (should helps #1412, but doesn't seems to help #1860, wich is strange)
Diffstat (limited to 'src')
-rw-r--r--src/librarian/library.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/librarian/library.c b/src/librarian/library.c
index a4d4e97f..bf922d60 100644
--- a/src/librarian/library.c
+++ b/src/librarian/library.c
@@ -175,6 +175,8 @@ int EmuLib_GetWeak(library_t* lib, const char* name, uintptr_t *offs, uintptr_t
     void* sym;
     if((sym = ElfGetWeakSymbolStartEnd(lib->e.elf, &start, &end, name, version, vername, local, veropt)))
     {
+        if(asked_size && asked_size!=end-start)
+            return 0;
         *offs = start;
         *sz = end-start;
         *weak = 1;
@@ -213,6 +215,8 @@ int EmuLib_GetGlobal(library_t* lib, const char* name, uintptr_t *offs, uintptr_
     void* sym;
     if((sym = ElfGetGlobalSymbolStartEnd(lib->e.elf, &start, &end, name, version, vername, local, veropt)))
     {
+        if(asked_size && asked_size!=end-start)
+            return 0;
         *offs = start;
         *sz = end-start;
         *weak = 0;
@@ -232,6 +236,8 @@ int EmuLib_GetLocal(library_t* lib, const char* name, uintptr_t *offs, uintptr_t
     void* sym;
     if((sym = ElfGetLocalSymbolStartEnd(lib->e.elf, &start, &end, name, version, vername, local, veropt)))
     {
+        if(asked_size && asked_size!=end-start)
+            return 0;
         *offs = start;
         *sz = end-start;
         *weak = 0;