diff options
author | markj <markj@FreeBSD.org> | 2014-08-27 19:51:42 +0000 |
---|---|---|
committer | markj <markj@FreeBSD.org> | 2014-08-27 19:51:42 +0000 |
commit | 385503e19fd756c955fb493debec6f49a00f545c (patch) | |
tree | 10ea8d1f8133c8133073dc8c9445a4aabad67376 /lib/libproc/proc_sym.c | |
parent | 3d2bab33aa9bc3dde1dd57cf667e10eb89730df8 (diff) | |
download | FreeBSD-src-385503e19fd756c955fb493debec6f49a00f545c.zip FreeBSD-src-385503e19fd756c955fb493debec6f49a00f545c.tar.gz |
MFC r265255, r270506:
Allow "a.out" as an alias for the executable if no other matching entries
are found.
Diffstat (limited to 'lib/libproc/proc_sym.c')
-rw-r--r-- | lib/libproc/proc_sym.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/lib/libproc/proc_sym.c b/lib/libproc/proc_sym.c index f2514b9..aa879ec 100644 --- a/lib/libproc/proc_sym.c +++ b/lib/libproc/proc_sym.c @@ -113,17 +113,25 @@ 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) { + if (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 @@ -381,8 +389,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++) { |