浏览代码

make dladdr consistently produce the first symbol in presence of aliases

the early-exit condition for the symbol match loop on exact matches
caused dladdr to produce the first match for an exact match, but the
last match for an inexact match. in the interest of consistency,
require a strictly-closer match to replace an already-found one.
Rich Felker 6 年之前
父节点
当前提交
f6870d6b4f
共有 1 个文件被更改,包括 1 次插入1 次删除
  1. 1 1
      ldso/dynlink.c

+ 1 - 1
ldso/dynlink.c

@@ -1978,7 +1978,7 @@ int dladdr(const void *addr_arg, Dl_info *info)
 		 && (1<<(sym->st_info&0xf) & OK_TYPES)
 		 && (1<<(sym->st_info>>4) & OK_BINDS)) {
 			size_t symaddr = (size_t)laddr(p, sym->st_value);
-			if (symaddr > addr || symaddr < best)
+			if (symaddr > addr || symaddr <= best)
 				continue;
 			best = symaddr;
 			bestsym = sym;