fix error reporting for dlsym with global symbols
authorRich Felker <dalias@aerifal.cx>
Sat, 5 May 2012 00:18:18 +0000 (20:18 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 5 May 2012 00:18:18 +0000 (20:18 -0400)
src/ldso/dynlink.c

index b51ae77fecb4ab825b6a45f8af9cad7e01a7afff..02c880b4b87ecddbc65ab5221847157b84d49e15 100644 (file)
@@ -723,7 +723,7 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra)
        }
        if (p == head || p == RTLD_DEFAULT) {
                void *res = find_sym(head, s, 0);
-               if (!res) errflag = 1;
+               if (!res) goto failed;
                return res;
        }
        h = hash(s);
@@ -736,6 +736,7 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra)
                if (sym && sym->st_value && (1<<(sym->st_info&0xf) & OK_TYPES))
                        return p->deps[i]->base + sym->st_value;
        }
+failed:
        errflag = 1;
        snprintf(errbuf, sizeof errbuf, "Symbol not found: %s", s);
        return 0;