Print this page
OS-3712 lx brand: DTrace pid provider induces core dumps on 64-bit processes (cstyle)
OS-3712 lx brand: DTrace pid provider induces core dumps on 64-bit processes

@@ -22,11 +22,13 @@
 /*
  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident   "%Z%%M% %I%     %E% SMI"
+/*
+ * Copyright (c) 2015, Joyent, Inc. All rights reserved.
+ */
 
 #include <sys/fasttrap_isa.h>
 #include <sys/fasttrap_impl.h>
 #include <sys/dtrace.h>
 #include <sys/dtrace_impl.h>

@@ -36,10 +38,13 @@
 #include <sys/segments.h>
 #include <sys/x86_archext.h>
 #include <sys/sysmacros.h>
 #include <sys/trap.h>
 #include <sys/archsystm.h>
+#include <sys/proc.h>
+#include <sys/brand.h>
+#include <sys/machbrand.h>
 
 /*
  * Lossless User-Land Tracing on x86
  * ---------------------------------
  *

@@ -1392,10 +1397,18 @@
                  * kernels.
                  */
 #if defined(__amd64)
                 if (p->p_model == DATAMODEL_LP64) {
                         addr = lwp->lwp_pcb.pcb_fsbase;
+
+                        /*
+                         * If we're branded, convert the fsbase from the
+                         * brand's fsbase to the native fsbase.
+                         */
+                        if (PROC_IS_BRANDED(p) && BRMOP(p)->b_fsbase != NULL)
+                                addr = BRMOP(p)->b_fsbase(lwp, addr);
+
                         addr += sizeof (void *);
                 } else {
                         addr = lwp->lwp_pcb.pcb_gsbase;
                         addr += sizeof (caddr32_t);
                 }