diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-06-05 16:54:16 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-06-05 16:54:16 +0200 |
| commit | d8698cdc84dddac084ee00172b28b65d1020888f (patch) | |
| tree | 3b45a47a135913826b422b7e9116f26c64787298 /src | |
| parent | 1ae19066376651d29d6322ccd3728479d2c4d147 (diff) | |
| download | box64-d8698cdc84dddac084ee00172b28b65d1020888f.tar.gz box64-d8698cdc84dddac084ee00172b28b65d1020888f.zip | |
Fixed an issue with GetNoSelfSymbolStartEnd function that would find in self first
Diffstat (limited to 'src')
| -rwxr-xr-x | src/librarian/librarian.c | 21 |
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) |