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),