Print this page
OS-3280 need a way to specify the root of a native system in the lx brand
OS-3279 lx brand should allow delegated datasets
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libdtrace/common/dt_open.c
          +++ new/usr/src/lib/libdtrace/common/dt_open.c
↓ open down ↓ 32 lines elided ↑ open up ↑
  33   33  #include <libelf.h>
  34   34  #include <strings.h>
  35   35  #include <alloca.h>
  36   36  #include <limits.h>
  37   37  #include <unistd.h>
  38   38  #include <stdlib.h>
  39   39  #include <stdio.h>
  40   40  #include <fcntl.h>
  41   41  #include <errno.h>
  42   42  #include <assert.h>
       43 +#include <zone.h>
  43   44  
  44   45  #define _POSIX_PTHREAD_SEMANTICS
  45   46  #include <dirent.h>
  46   47  #undef  _POSIX_PTHREAD_SEMANTICS
  47   48  
  48   49  #include <dt_impl.h>
  49   50  #include <dt_program.h>
  50   51  #include <dt_module.h>
  51   52  #include <dt_printf.h>
  52   53  #include <dt_string.h>
↓ open down ↓ 625 lines elided ↑ open up ↑
 678  679  };
 679  680  
 680  681  const dtrace_pattr_t _dtrace_prvdesc = {
 681  682  { DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_COMMON },
 682  683  { DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_COMMON },
 683  684  { DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_COMMON },
 684  685  { DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_COMMON },
 685  686  { DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_COMMON },
 686  687  };
 687  688  
 688      -const char *_dtrace_defcpp = "/usr/ccs/lib/cpp"; /* default cpp(1) to invoke */
 689      -const char *_dtrace_defld = "/usr/ccs/bin/ld";   /* default ld(1) to invoke */
      689 +const char *_dtrace_defcpp = "/usr/lib/cpp"; /* default cpp(1) to invoke */
      690 +const char *_dtrace_defld = "/usr/bin/ld";   /* default ld(1) to invoke */
 690  691  
 691  692  const char *_dtrace_libdir = "/usr/lib/dtrace"; /* default library directory */
 692  693  const char *_dtrace_provdir = "/dev/dtrace/provider"; /* provider directory */
 693  694  
 694  695  int _dtrace_strbuckets = 211;   /* default number of hash buckets (prime) */
 695  696  int _dtrace_intbuckets = 256;   /* default number of integer buckets (Pof2) */
 696  697  uint_t _dtrace_strsize = 256;   /* default size of string intrinsic type */
 697  698  uint_t _dtrace_stkindent = 14;  /* default whitespace indent for stack/ustack */
 698  699  uint_t _dtrace_pidbuckets = 64; /* default number of pid hash buckets */
 699  700  uint_t _dtrace_pidlrulim = 8;   /* default number of pid handles to cache */
↓ open down ↓ 119 lines elided ↑ open up ↑
 819  820  dt_vopen(int version, int flags, int *errp,
 820  821      const dtrace_vector_t *vector, void *arg)
 821  822  {
 822  823          dtrace_hdl_t *dtp = NULL;
 823  824          int dtfd = -1, ftfd = -1, fterr = 0;
 824  825          dtrace_prog_t *pgp;
 825  826          dt_module_t *dmp;
 826  827          dt_provmod_t *provmod = NULL;
 827  828          int i, err;
 828  829          struct rlimit rl;
      830 +        const char *zroot;
      831 +        char *libpath = NULL;
 829  832  
 830  833          const dt_intrinsic_t *dinp;
 831  834          const dt_typedef_t *dtyp;
 832  835          const dt_ident_t *idp;
 833  836  
 834  837          dtrace_typeinfo_t dtt;
 835  838          ctf_funcinfo_t ctc;
 836  839          ctf_arinfo_t ctr;
 837  840  
 838  841          dt_fdlist_t df = { NULL, 0, 0 };
↓ open down ↓ 112 lines elided ↑ open up ↑
 951  954          dtp->dt_fterr = fterr;
 952  955          dtp->dt_cdefs_fd = -1;
 953  956          dtp->dt_ddefs_fd = -1;
 954  957          dtp->dt_stdout_fd = -1;
 955  958          dtp->dt_modbuckets = _dtrace_strbuckets;
 956  959          dtp->dt_mods = calloc(dtp->dt_modbuckets, sizeof (dt_module_t *));
 957  960          dtp->dt_provbuckets = _dtrace_strbuckets;
 958  961          dtp->dt_provs = calloc(dtp->dt_provbuckets, sizeof (dt_provider_t *));
 959  962          dt_proc_init(dtp);
 960  963          dtp->dt_vmax = DT_VERS_LATEST;
 961      -        dtp->dt_cpp_path = strdup(_dtrace_defcpp);
      964 +        zroot = zone_get_nroot();
      965 +        if (zroot != NULL) {
      966 +                (void) asprintf(&dtp->dt_ld_path, "%s/%s", zroot,
      967 +                    _dtrace_defld);
      968 +                (void) asprintf(&dtp->dt_cpp_path, "%s/%s", zroot,
      969 +                    _dtrace_defcpp);
      970 +        } else {
      971 +                dtp->dt_ld_path = strdup(_dtrace_defld);
      972 +                dtp->dt_cpp_path = strdup(_dtrace_defcpp);
      973 +        }
 962  974          dtp->dt_cpp_argv = malloc(sizeof (char *));
 963  975          dtp->dt_cpp_argc = 1;
 964  976          dtp->dt_cpp_args = 1;
 965      -        dtp->dt_ld_path = strdup(_dtrace_defld);
 966  977          dtp->dt_provmod = provmod;
 967  978          dtp->dt_vector = vector;
 968  979          dtp->dt_varg = arg;
 969  980          dt_dof_init(dtp);
 970  981          (void) uname(&dtp->dt_uts);
 971  982  
 972  983          if (dtp->dt_mods == NULL || dtp->dt_provs == NULL ||
 973  984              dtp->dt_procs == NULL || dtp->dt_proc_env == NULL ||
 974  985              dtp->dt_ld_path == NULL || dtp->dt_cpp_path == NULL ||
 975  986              dtp->dt_cpp_argv == NULL)
↓ open down ↓ 324 lines elided ↑ open up ↑
1300 1311  
1301 1312          dt_program_destroy(dtp, pgp);
1302 1313  
1303 1314          /*
1304 1315           * Set up the default DTrace library path.  Once set, the next call to
1305 1316           * dt_compile() will compile all the libraries.  We intentionally defer
1306 1317           * library processing to improve overhead for clients that don't ever
1307 1318           * compile, and to provide better error reporting (because the full
1308 1319           * reporting of compiler errors requires dtrace_open() to succeed).
1309 1320           */
1310      -        if (dtrace_setopt(dtp, "libdir", _dtrace_libdir) != 0)
     1321 +        if (zroot != NULL)
     1322 +                (void) asprintf(&libpath, "%s/%s", zroot, _dtrace_libdir);
     1323 +        if (dtrace_setopt(dtp, "libdir",
     1324 +            libpath != NULL ? libpath : _dtrace_libdir) != 0)
1311 1325                  return (set_open_errno(dtp, errp, dtp->dt_errno));
1312 1326  
     1327 +        if (libpath != NULL)
     1328 +                free(libpath);
     1329 +
1313 1330          return (dtp);
1314 1331  }
1315 1332  
1316 1333  dtrace_hdl_t *
1317 1334  dtrace_open(int version, int flags, int *errp)
1318 1335  {
1319 1336          return (dt_vopen(version, flags, errp, NULL, NULL));
1320 1337  }
1321 1338  
1322 1339  dtrace_hdl_t *
↓ open down ↓ 106 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX