Commit a patch that fixes a problem in the #pragma statement when searching
for and loading dependent modules. This addresses a bug seen with io.d where it was being doubly included. PR: 171678 Submitted by: Mark Johnston MFC after: 2 weeks
This commit is contained in:
parent
02b3906712
commit
03a9b7c085
@ -241,6 +241,8 @@ dt_pragma_depends(const char *prname, dt_node_t *cnp)
|
||||
int found;
|
||||
dt_lib_depend_t *dld;
|
||||
char lib[MAXPATHLEN];
|
||||
size_t plen;
|
||||
char *provs, *cpy, *tok;
|
||||
|
||||
if (cnp == NULL || nnp == NULL ||
|
||||
cnp->dn_kind != DT_NODE_IDENT || nnp->dn_kind != DT_NODE_IDENT) {
|
||||
@ -248,9 +250,31 @@ dt_pragma_depends(const char *prname, dt_node_t *cnp)
|
||||
"<class> <name>\n", prname);
|
||||
}
|
||||
|
||||
if (strcmp(cnp->dn_string, "provider") == 0)
|
||||
found = dt_provider_lookup(dtp, nnp->dn_string) != NULL;
|
||||
else if (strcmp(cnp->dn_string, "module") == 0) {
|
||||
if (strcmp(cnp->dn_string, "provider") == 0) {
|
||||
/*
|
||||
* First try to get the provider list using the
|
||||
* debug.dtrace.providers sysctl, since that'll work even if
|
||||
* we're not running as root.
|
||||
*/
|
||||
provs = NULL;
|
||||
if (sysctlbyname("debug.dtrace.providers", NULL, &plen, NULL, 0) ||
|
||||
((provs = dt_alloc(dtp, plen)) == NULL) ||
|
||||
sysctlbyname("debug.dtrace.providers", provs, &plen, NULL, 0))
|
||||
found = dt_provider_lookup(dtp, nnp->dn_string) != NULL;
|
||||
else {
|
||||
found = B_FALSE;
|
||||
for (cpy = provs; (tok = strsep(&cpy, " ")) != NULL; )
|
||||
if (strcmp(tok, nnp->dn_string) == 0) {
|
||||
found = B_TRUE;
|
||||
break;
|
||||
}
|
||||
if (found == B_FALSE)
|
||||
found = dt_provider_lookup(dtp,
|
||||
nnp->dn_string) != NULL;
|
||||
}
|
||||
if (provs != NULL)
|
||||
dt_free(dtp, provs);
|
||||
} else if (strcmp(cnp->dn_string, "module") == 0) {
|
||||
dt_module_t *mp = dt_module_lookup_by_name(dtp, nnp->dn_string);
|
||||
found = mp != NULL && dt_module_getctf(dtp, mp) != NULL;
|
||||
} else if (strcmp(cnp->dn_string, "library") == 0) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user