|  | @@ -1067,7 +1067,11 @@ int dladdr(const void *__address, Dl_info * __info)
 | 
	
		
			
				|  |  |  					ElfW(Addr) symbol_addr;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					symbol_addr = (ElfW(Addr)) DL_RELOC_ADDR(pelf->loadaddr, symtab[si].st_value);
 | 
	
		
			
				|  |  | -					if (symbol_addr <= (ElfW(Addr))__address && (!sf || sa < symbol_addr)) {
 | 
	
		
			
				|  |  | +					if ((symtab[si].st_shndx != SHN_UNDEF
 | 
	
		
			
				|  |  | +						 || symtab[si].st_value != 0)
 | 
	
		
			
				|  |  | +						&& ELF_ST_TYPE(symtab[si].st_info) != STT_TLS
 | 
	
		
			
				|  |  | +						&& DL_ADDR_SYM_MATCH(symbol_addr, &symtab[si], sa,
 | 
	
		
			
				|  |  | +											 (ElfW(Addr)) __address)) {
 | 
	
		
			
				|  |  |  						sa = symbol_addr;
 | 
	
		
			
				|  |  |  						sn = si;
 | 
	
		
			
				|  |  |  						sf = 1;
 | 
	
	
		
			
				|  | @@ -1083,7 +1087,11 @@ int dladdr(const void *__address, Dl_info * __info)
 | 
	
		
			
				|  |  |  				ElfW(Addr) symbol_addr;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				symbol_addr = (ElfW(Addr)) DL_RELOC_ADDR(pelf->loadaddr, symtab[si].st_value);
 | 
	
		
			
				|  |  | -				if (symbol_addr <= (ElfW(Addr))__address && (!sf || sa < symbol_addr)) {
 | 
	
		
			
				|  |  | +				if ((symtab[si].st_shndx != SHN_UNDEF
 | 
	
		
			
				|  |  | +					 || symtab[si].st_value != 0)
 | 
	
		
			
				|  |  | +					&& ELF_ST_TYPE(symtab[si].st_info) != STT_TLS
 | 
	
		
			
				|  |  | +					&& DL_ADDR_SYM_MATCH(symbol_addr, &symtab[si], sa,
 | 
	
		
			
				|  |  | +										 (ElfW(Addr)) __address)) {
 | 
	
		
			
				|  |  |  					sa = symbol_addr;
 | 
	
		
			
				|  |  |  					sn = si;
 | 
	
		
			
				|  |  |  					sf = 1;
 |