about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-06-05 16:54:16 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-06-05 16:54:16 +0200
commitd8698cdc84dddac084ee00172b28b65d1020888f (patch)
tree3b45a47a135913826b422b7e9116f26c64787298 /src
parent1ae19066376651d29d6322ccd3728479d2c4d147 (diff)
downloadbox64-d8698cdc84dddac084ee00172b28b65d1020888f.tar.gz
box64-d8698cdc84dddac084ee00172b28b65d1020888f.zip
Fixed an issue with GetNoSelfSymbolStartEnd function that would find in self first
Diffstat (limited to 'src')
-rwxr-xr-xsrc/librarian/librarian.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/librarian/librarian.c b/src/librarian/librarian.c
index fdb6fd41..d21c7b8c 100755
--- a/src/librarian/librarian.c
+++ b/src/librarian/librarian.c
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 
 #include <pthread.h>
+#include <assert.h>
 
 #include "debug.h"
 #include "librarian.h"
@@ -398,16 +399,16 @@ static int isLocal(elfheader_t* self, library_t* l)
 
 int GetNoSelfSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, uintptr_t* end, elfheader_t* self, int version, const char* vername)
 {
-    //excude self if defined
-    if(maplib->context->elfs[0]!=self) {
-        if(GetSymbolStartEnd(maplib->mapsymbols, name, start, end, version, vername, 0))
-            if(*start)
-                return 1;
-        if(GetSymbolStartEnd(maplib->weaksymbols, name, start, end, version, vername, 0))
-            if(*start)
-                return 1;
+    assert(self);   // need self for this one
+    //search for the self, to start "next"
+    int go = -1;
+    for(int i=0; i<maplib->libsz && (go==-1); ++i) {
+        if(GetElfIndex(maplib->libraries[i])!=-1 && (maplib->context->elfs[GetElfIndex(maplib->libraries[i])]==self))
+            go = i+1;
     }
-    for(int i=0; i<maplib->libsz; ++i) {
+    if(go<0)
+        go = 0; // not found...
+    for(int i=go; i<maplib->libsz; ++i) {
         if(GetElfIndex(maplib->libraries[i])==-1 || (maplib->context->elfs[GetElfIndex(maplib->libraries[i])]!=self))
             if(GetLibSymbolStartEnd(maplib->libraries[i], name, start, end, version, vername, 0))
                 if(*start)
@@ -423,7 +424,7 @@ int GetNoSelfSymbolStartEnd(lib_t *maplib, const char* name, uintptr_t* start, u
                 if(*start)
                     return 1;
         }
-        for(int i=0; i<maplib->libsz; ++i) {
+        for(int i=0; i<go; ++i) {
             if(GetElfIndex(maplib->libraries[i])!=-1 && (maplib->context->elfs[GetElfIndex(maplib->libraries[i])]==self))
                 if(GetLibSymbolStartEnd(maplib->libraries[i], name, start, end, version, vername, 1))
                     if(*start)