aboutsummaryrefslogtreecommitdiff
path: root/lib/darwin
diff options
context:
space:
mode:
Diffstat (limited to 'lib/darwin')
-rw-r--r--lib/darwin/find-syms.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/darwin/find-syms.c b/lib/darwin/find-syms.c
index 0205afe..d3524e2 100644
--- a/lib/darwin/find-syms.c
+++ b/lib/darwin/find-syms.c
@@ -239,6 +239,7 @@ ok: ;
ok2: ;
symtab = (void *) symtab + *slide;
strtab = (void *) strtab + *slide;
+ size_t found_syms = 0;
for (int type = 0; type <= 1; type++) {
const substitute_sym *this_symtab = type ? cache_syms : symtab;
@@ -251,14 +252,16 @@ ok2: ;
uint32_t strx = sym->n_un.n_strx;
const char *name = strx == 0 ? "" : this_strtab + strx;
for (size_t j = 0; j < nsyms; j++) {
- if (!strcmp(name, names[j])) {
+ if (!syms[j] && !strcmp(name, names[j])) {
syms[j] = sym_to_ptr(sym, *slide);
- break;
+ if (++found_syms == nsyms)
+ goto end;
}
}
}
}
+end:
if (mapping_size)
munmap(mapping, mapping_size);
}