Print this page
OS-3477 lx brand: mdb(1) doesn't find branded symbols
OS-3426 lx brand: dtrace(1M) doesn't find branded symbols

*** 21,30 **** --- 21,34 ---- /* * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ + /* + * Copyright (c) 2014 Joyent, Inc. All rights reserved. + */ + #include <stdlib.h> #include <stdio.h> #include <proc_service.h> #include <link.h> #include <rtld_db.h>
*** 36,45 **** --- 40,57 ---- #include <limits.h> #include <string.h> #include <sys/param.h> /* + * We want to include zone.h to pull in the prototype for zone_get_nroot(), + * but we need to avoid pulling in <sys/stream.h>, which has a definition + * of M_DATA that conflicts with the ELF-related definition in machdep_*.h. + */ + #define _SYS_STREAM_H + #include <zone.h> + + /* * 64-bit builds are going to compile this module twice, the * second time with _ELF64 defined. These defines should make * all the necessary adjustments to the code. */ #ifdef _LP64
*** 281,291 **** /* * If we are debugging a branded executable, load the appropriate * helper library, and call its initialization routine. Being unable * to load the helper library is not a critical error. (Hopefully ! * we'll still be able to access some objects in the target.) */ ps_pbrandname = (ps_pbrandname_fp_t)dlsym(RTLD_PROBE, "ps_pbrandname"); while ((ps_pbrandname != NULL) && (ps_pbrandname(php, brandname, MAXPATHLEN) == PS_OK)) { const char *isa = ""; --- 293,305 ---- /* * If we are debugging a branded executable, load the appropriate * helper library, and call its initialization routine. Being unable * to load the helper library is not a critical error. (Hopefully ! * we'll still be able to access some objects in the target.) Note ! * that we pull in the native root here to allow for helper libraries ! * to be properly found from within the branded zone. */ ps_pbrandname = (ps_pbrandname_fp_t)dlsym(RTLD_PROBE, "ps_pbrandname"); while ((ps_pbrandname != NULL) && (ps_pbrandname(php, brandname, MAXPATHLEN) == PS_OK)) { const char *isa = "";
*** 292,312 **** #ifdef _LP64 isa = MSG_ORIG(MSG_DB_64BIT_PREFIX); #endif /* _LP64 */ ! if (rtld_db_helper_path[0] != '\0') (void) snprintf(brandlib, MAXPATHLEN, MSG_ORIG(MSG_DB_BRAND_HELPERPATH_PREFIX), rtld_db_helper_path, MSG_ORIG(MSG_DB_HELPER_PREFIX), brandname, isa, brandname); ! else (void) snprintf(brandlib, MAXPATHLEN, ! MSG_ORIG(MSG_DB_BRAND_HELPERPATH), MSG_ORIG(MSG_DB_HELPER_PREFIX), brandname, isa, brandname); rap->rd_helper.rh_dlhandle = dlopen(brandlib, RTLD_LAZY | RTLD_LOCAL); if (rap->rd_helper.rh_dlhandle == NULL) { LOG(ps_plog(MSG_ORIG(MSG_DB_HELPERLOADFAILED), --- 306,332 ---- #ifdef _LP64 isa = MSG_ORIG(MSG_DB_64BIT_PREFIX); #endif /* _LP64 */ ! if (rtld_db_helper_path[0] != '\0') { (void) snprintf(brandlib, MAXPATHLEN, MSG_ORIG(MSG_DB_BRAND_HELPERPATH_PREFIX), rtld_db_helper_path, MSG_ORIG(MSG_DB_HELPER_PREFIX), brandname, isa, brandname); ! } else { ! const char *nroot = zone_get_nroot(); ! ! if (nroot == NULL) ! nroot = ""; ! (void) snprintf(brandlib, MAXPATHLEN, ! MSG_ORIG(MSG_DB_BRAND_HELPERPATH), nroot, MSG_ORIG(MSG_DB_HELPER_PREFIX), brandname, isa, brandname); + } rap->rd_helper.rh_dlhandle = dlopen(brandlib, RTLD_LAZY | RTLD_LOCAL); if (rap->rd_helper.rh_dlhandle == NULL) { LOG(ps_plog(MSG_ORIG(MSG_DB_HELPERLOADFAILED),