From d8698cdc84dddac084ee00172b28b65d1020888f Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 5 Jun 2022 16:54:16 +0200 Subject: Fixed an issue with GetNoSelfSymbolStartEnd function that would find in self first --- src/librarian/librarian.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src') 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 #include +#include #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; ilibsz && (go==-1); ++i) { + if(GetElfIndex(maplib->libraries[i])!=-1 && (maplib->context->elfs[GetElfIndex(maplib->libraries[i])]==self)) + go = i+1; } - for(int i=0; ilibsz; ++i) { + if(go<0) + go = 0; // not found... + for(int i=go; ilibsz; ++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; ilibsz; ++i) { + for(int i=0; ilibraries[i])!=-1 && (maplib->context->elfs[GetElfIndex(maplib->libraries[i])]==self)) if(GetLibSymbolStartEnd(maplib->libraries[i], name, start, end, version, vername, 1)) if(*start) -- cgit 1.4.1