diff options
author | markj <markj@FreeBSD.org> | 2014-05-03 04:44:03 +0000 |
---|---|---|
committer | markj <markj@FreeBSD.org> | 2014-05-03 04:44:03 +0000 |
commit | 75ad05df26f3cecd5f725835509a6a1da7d56b77 (patch) | |
tree | 7884e396a0047dc82d52f581518423af55054191 /lib/libproc/proc_sym.c | |
parent | 9b78ac2c57dff6f432596ec30c4f310e854ac95c (diff) | |
download | FreeBSD-src-75ad05df26f3cecd5f725835509a6a1da7d56b77.zip FreeBSD-src-75ad05df26f3cecd5f725835509a6a1da7d56b77.tar.gz |
Allow "a.out" as an alias for the executable if no other matching entries
are found. This improves compatibility with Solaris' libproc and fixes a
number of failing DTrace tests that rely on this feature.
MFC after: 3 weeks
Diffstat (limited to 'lib/libproc/proc_sym.c')
-rw-r--r-- | lib/libproc/proc_sym.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/libproc/proc_sym.c b/lib/libproc/proc_sym.c index 2338895..3777a46 100644 --- a/lib/libproc/proc_sym.c +++ b/lib/libproc/proc_sym.c @@ -112,17 +112,23 @@ proc_obj2map(struct proc_handle *p, const char *objname) rd_loadobj_t *rdl; char path[MAXPATHLEN]; + rdl = NULL; for (i = 0; i < p->nobjs; i++) { - rdl = &p->rdobjs[i]; - basename_r(rdl->rdl_path, path); + basename_r(p->rdobjs[i].rdl_path, path); if (strcmp(path, objname) == 0) { - if ((map = malloc(sizeof(*map))) == NULL) - return (NULL); - proc_rdl2prmap(rdl, map); - return (map); + rdl = &p->rdobjs[i]; + break; } } - return (NULL); + if (rdl == NULL && strcmp(objname, "a.out") == 0 && p->rdexec != NULL) + rdl = p->rdexec; + else + return (NULL); + + if ((map = malloc(sizeof(*map))) == NULL) + return (NULL); + proc_rdl2prmap(rdl, map); + return (map); } int @@ -386,8 +392,9 @@ proc_name2map(struct proc_handle *p, const char *name) free(kves); return (NULL); } - if (name == NULL || strcmp(name, "a.out") == 0) { - map = proc_addr2map(p, p->rdobjs[0].rdl_saddr); + if ((name == NULL || strcmp(name, "a.out") == 0) && + p->rdexec != NULL) { + map = proc_addr2map(p, p->rdexec->rdl_saddr); return (map); } for (i = 0; i < p->nobjs; i++) { |