diff options
Diffstat (limited to 'lib/libdtrace/common/dt_pragma.c')
-rw-r--r-- | lib/libdtrace/common/dt_pragma.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/lib/libdtrace/common/dt_pragma.c b/lib/libdtrace/common/dt_pragma.c index 9fae5ac42c40..9cb3c3b8d615 100644 --- a/lib/libdtrace/common/dt_pragma.c +++ b/lib/libdtrace/common/dt_pragma.c @@ -21,19 +21,14 @@ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2011, Joyent Inc. All rights reserved. */ #include <assert.h> #include <strings.h> #include <alloca.h> -#include <fcntl.h> #include <stdlib.h> #include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> - #include <dt_parser.h> #include <dt_impl.h> #include <dt_provider.h> @@ -201,29 +196,6 @@ dt_pragma_binding(const char *prname, dt_node_t *dnp) dtp->dt_globals->dh_defer = &dt_pragma_apply; } -static void -dt_pragma_depends_finddep(dtrace_hdl_t *dtp, const char *lname, char *lib, - size_t len) -{ - dt_dirpath_t *dirp; - struct stat sbuf; - int found = 0; - - for (dirp = dt_list_next(&dtp->dt_lib_path); dirp != NULL; - dirp = dt_list_next(dirp)) { - (void) snprintf(lib, len, "%s/%s", dirp->dir_path, lname); - - if (stat(lib, &sbuf) == 0) { - found = 1; - break; - } - } - - if (!found) - xyerror(D_PRAGMA_DEPEND, - "failed to find dependency in libpath: %s", lname); -} - /* * The #pragma depends_on directive can be used to express a dependency on a * module, provider or library which if not present will cause processing to @@ -253,13 +225,16 @@ dt_pragma_depends(const char *prname, dt_node_t *cnp) if (yypcb->pcb_cflags & DTRACE_C_CTL) { assert(dtp->dt_filetag != NULL); - dt_pragma_depends_finddep(dtp, nnp->dn_string, lib, - sizeof (lib)); - + /* + * We have the file we are working on in dtp->dt_filetag + * so find that node and add the dependency in. + */ dld = dt_lib_depend_lookup(&dtp->dt_lib_dep, dtp->dt_filetag); assert(dld != NULL); + (void) snprintf(lib, sizeof (lib), "%s%s", + dld->dtld_libpath, nnp->dn_string); if ((dt_lib_depend_add(dtp, &dld->dtld_dependencies, lib)) != 0) { xyerror(D_PRAGMA_DEPEND, @@ -281,8 +256,8 @@ dt_pragma_depends(const char *prname, dt_node_t *cnp) dtp->dt_filetag); assert(dld != NULL); - dt_pragma_depends_finddep(dtp, nnp->dn_string, lib, - sizeof (lib)); + (void) snprintf(lib, sizeof (lib), "%s%s", + dld->dtld_libpath, nnp->dn_string); dld = dt_lib_depend_lookup(&dtp->dt_lib_dep_sorted, lib); assert(dld != NULL); |