changeset 3746:47ed52d6b3bd

6524709 executables using /usr/lib/libc.so.1 as the ELF interpreter dump core
author raf
date Fri, 02 Mar 2007 12:14:51 -0800
parents 9405aaf598cd
children abf8c88154bf
files deleted_files/usr/src/cmd/sgs/rtld/amd64/dtrace_data.c deleted_files/usr/src/cmd/sgs/rtld/i386/dtrace_data.c deleted_files/usr/src/lib/libc/amd64/crt/_rtboot.s usr/src/cmd/sgs/Makefile.var usr/src/cmd/sgs/packages/common/SUNWonld-README usr/src/cmd/sgs/packages/inc.flg usr/src/cmd/sgs/rtld/Makefile.com usr/src/cmd/sgs/rtld/Makefile.targ usr/src/cmd/sgs/rtld/amd64/Makefile usr/src/cmd/sgs/rtld/amd64/dtrace_data.c usr/src/cmd/sgs/rtld/i386/Makefile usr/src/cmd/sgs/rtld/i386/dtrace_data.c usr/src/cmd/sgs/rtld/sparc/Makefile usr/src/cmd/sgs/rtld/sparc/dtrace_data.c usr/src/cmd/sgs/rtld/sparcv9/Makefile usr/src/common/dtrace/dtrace_data.c usr/src/lib/libc/Makefile.targ usr/src/lib/libc/amd64/crt/_rtboot.s usr/src/lib/libc/i386/Makefile.com usr/src/lib/libc/req.flg usr/src/lib/libc/sparc/Makefile
diffstat 21 files changed, 497 insertions(+), 399 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deleted_files/usr/src/cmd/sgs/rtld/amd64/dtrace_data.c	Fri Mar 02 12:14:51 2007 -0800
@@ -0,0 +1,61 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident	"%Z%%M%	%I%	%E% SMI"
+
+#include <sys/types.h>
+
+/*
+ * In order to let the DTrace fasttrap provider trace processes before libc
+ * is initialized, we place this structure in the thread pointer register.
+ * This is communicated to the kernel (in the elfexec() function) by
+ * placing the address of this structure in the PT_SUNWDTRACE program header
+ * with the -zdtrace_data=<object> option to ld.
+ *
+ * The fields of the program header are set as follows:
+ *	p_type:         PT_SUNWDTRACE
+ *	p_vaddr:        address of dtrace_data
+ *	p_memsz:        size of dtrace_data
+ *	p_flags:        flags of segment dtrace_data is assigned to
+ *	p_paddr:        <reserved>
+ *	p_filesz:       <reserved>
+ *	p_offset:       <reserved>
+ *	p_align:        <reserved>
+ *
+ * See the comment in fasttrap.h for information on how to safely change
+ * this data structure and the other places that need to be kept in sync.
+ */
+#pragma align 64(dtrace_data)
+uint8_t	dtrace_data[64] = {
+	0, 0, 0, 0, 0, 0, 0, 0,		/* self pointer (must be zero) */
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deleted_files/usr/src/cmd/sgs/rtld/i386/dtrace_data.c	Fri Mar 02 12:14:51 2007 -0800
@@ -0,0 +1,62 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident	"%Z%%M%	%I%	%E% SMI"
+
+#include <sys/types.h>
+
+/*
+ * In order to let the DTrace fasttrap provider trace processes before libc
+ * is initialized, we place this structure in the thread pointer register.
+ * This is communicated to the kernel (in the elfexec() function) by
+ * placing the address of this structure in the PT_SUNWDTRACE program header
+ * with the -zdtrace_data=<object> option to ld.
+ *
+ * The fields of the program header are set as follows:
+ *	p_type:         PT_SUNWDTRACE
+ *	p_vaddr:        address of dtrace_data
+ *	p_memsz:        size of dtrace_data
+ *	p_flags:        flags of segment dtrace_data is assigned to
+ *	p_paddr:        <reserved>
+ *	p_filesz:       <reserved>
+ *	p_offset:       <reserved>
+ *	p_align:        <reserved>
+ *
+ * See the comment in fasttrap.h for information on how to safely change
+ * this data structure and the other places that need to be kept in sync.
+ */
+#pragma align 64(dtrace_data)
+uint8_t	dtrace_data[64] = {
+	0, 0, 0, 0,			/* self pointer (must be zero)  */
+	0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deleted_files/usr/src/lib/libc/amd64/crt/_rtboot.s	Fri Mar 02 12:14:51 2007 -0800
@@ -0,0 +1,193 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+	.ident	"%Z%%M%	%I%	%E% SMI"
+
+	.file	"%M%"
+
+/ bootstrap routine for run-time linker
+/ we get control from exec which has loaded our text and
+/ data into the process' address space and created the process 
+/ stack
+/
+/ on entry, the process stack looks like this:
+/
+/			# <- %esp
+/_______________________#  high addresses
+/	strings		#  
+/_______________________#
+/	0 word		#
+/_______________________#
+/	Auxiliary	#
+/	entries		#
+/	...		#
+/	(size varies)	#
+/_______________________#
+/	0 word		#
+/_______________________#
+/	Environment	#
+/	pointers	#
+/	...		#
+/	(one word each)	#
+/_______________________#
+/	0 word		#
+/_______________________#
+/	Argument	# low addresses
+/	pointers	#
+/	Argc words	#
+/_______________________#
+/	argc		# 
+/_______________________# <- %ebp
+
+#include <SYS.h>
+
+	.set	EB_NULL,0
+	.set	EB_DYNAMIC,1
+	.set	EB_LDSO_BASE,2
+	.set	EB_ARGV,3
+	.set	EB_ENVP,4
+	.set	EB_AUXV,5
+	.set	EB_DEVZERO,6
+	.set	EB_PAGESIZE,7
+	.set	EB_MAX,8
+	.set	EB_MAX_SIZE32,64
+
+	.text
+	.globl	__rtboot
+	.globl	__rtld
+	.type	__rtboot,@function
+	.align	4
+__rtboot:
+	movl	%esp,%ebp
+	subl	$EB_MAX_SIZE32,%esp	/ make room for a max sized boot vector
+	movl	%esp,%esi		/ use esi as a pointer to &eb[0]
+	movl	$EB_ARGV,0(%esi)	/ set up tag for argv
+	leal	4(%ebp),%eax		/ get address of argv
+	movl	%eax,4(%esi)		/ put after tag
+	movl	$EB_ENVP,8(%esi)	/ set up tag for envp
+	movl	(%ebp),%eax		/ get # of args
+	addl	$2,%eax			/ one for the zero & one for argc
+	leal	(%ebp,%eax,4),%edi	/ now points past args & @ envp
+	movl	%edi,12(%esi)		/ set envp
+	addl	$-4,%edi		/ start loop at &env[-1]
+.L00:	addl	$4,%edi			/ next
+	cmpl	$0,(%edi)		/ search for 0 at end of env
+	jne	.L00
+	addl	$4,%edi			/ advance past 0
+	movl	$EB_AUXV,16(%esi)	/ set up tag for auxv
+	movl	%edi,20(%esi)		/ point to auxv
+	movl	$EB_NULL,24(%esi)	/ set up NULL tag
+	call	.L01		/ only way to get IP into a register
+.L01:	popl	%ebx		/ pop the IP we just "pushed"
+	leal	s.EMPTY - .L01(%ebx),%eax
+	pushl	%eax
+	leal	s.ZERO - .L01(%ebx),%eax
+	pushl	%eax
+	leal	s.LDSO - .L01(%ebx),%eax
+	pushl	%eax
+	movl	%esp,%edi	/ save pointer to strings
+	leal	f.MUNMAP - .L01(%ebx),%eax
+	pushl	%eax
+	leal	f.CLOSE - .L01(%ebx),%eax
+	pushl	%eax
+	leal	f.SYSCONFIG - .L01(%ebx),%eax
+	pushl	%eax
+	leal	f.FSTAT - .L01(%ebx),%eax
+	pushl	%eax
+	leal	f.MMAP - .L01(%ebx),%eax
+	pushl	%eax
+	leal	f.OPEN - .L01(%ebx),%eax
+	pushl	%eax
+	leal	f.PANIC - .L01(%ebx),%eax
+	pushl	%eax
+	movl	%esp,%ecx	/ save pointer to functions
+
+	pushl	%ecx		/ address of functions
+	pushl	%edi		/ address of strings
+	pushl	%esi		/ &eb[0]
+	call	__rtld		/ __rtld(&eb[0], strings, funcs)
+	movl	%esi,%esp	/ restore the stack (but leaving boot vector)
+	jmp	*%eax 		/ transfer control to ld.so.1
+	.size	__rtboot,.-__rtboot
+
+	.align	4
+s.LDSO:		.string	"/usr/lib/ld.so.1"
+s.ZERO:		.string	"/dev/zero"
+s.EMPTY:	.string	"(null)"
+s.ERROR:	.string	": no (or bad) /usr/lib/ld.so.1\n"
+l.ERROR:
+
+	.align	4
+f.PANIC:
+	movl	%esp,%ebp
+/ Add using of argument string
+	pushl	$l.ERROR - s.ERROR
+	call	.L02
+.L02:	popl	%ebx
+	leal	s.ERROR - .L02(%ebx),%eax
+	pushl	%eax
+	pushl	$2
+	call	f.WRITE
+	jmp	f.EXIT
+/ Not reached
+	
+f.OPEN:
+	movl	$SYS_open,%eax
+	jmp	__syscall
+f.MMAP:
+	movl	$SYS_mmap,%eax
+	jmp	__syscall
+f.MUNMAP:
+	movl	$SYS_munmap,%eax
+	jmp	__syscall
+f.READ:
+	movl	$SYS_read,%eax
+	jmp	__syscall
+f.WRITE:
+	movl	$SYS_write,%eax
+	jmp	__syscall
+f.LSEEK:
+	movl	$SYS_lseek,%eax
+	jmp	__syscall
+f.CLOSE:
+	movl	$SYS_close,%eax
+	jmp	__syscall
+f.FSTAT:
+	movl	$SYS_fxstat,%eax	/ NEEDSWORK: temp kludge for G6
+	jmp	__syscall
+f.SYSCONFIG:
+	movl	$SYS_sysconfig,%eax
+	jmp	__syscall
+f.EXIT:
+	movl	$SYS_exit,%eax
+/	jmp	__syscall
+__syscall:
+	lcall   $SYSCALL_TRAPNUM,$0
+	jc	__err_exit
+	ret
+__err_exit:
+	movl	$-1,%eax
+	ret
--- a/usr/src/cmd/sgs/Makefile.var	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/Makefile.var	Fri Mar 02 12:14:51 2007 -0800
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -139,6 +139,14 @@
 VAR_AVLINCDIR=
 
 #
+# VAR_DTRDIR - directory to find dtrace_data.c in.
+#
+# The dtrace_data.c is under usr/src/common/dtrace in Solaris 11 (and later),
+# but in earlier releases was maintained as separate files under sgs/rtld.
+#
+VAR_DTRDIR=             $(SRCBASE)/common/dtrace
+
+#
 # ld
 #
 VAR_LD_NATIVE_LLDLIBS=
--- a/usr/src/cmd/sgs/packages/common/SUNWonld-README	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/packages/common/SUNWonld-README	Fri Mar 02 12:14:51 2007 -0800
@@ -1193,3 +1193,5 @@
 	PSARC/2007/074 -L option for nm(1) to display SHT_SUNW_LDYNSYM symbols
 6523787 dlopen() handle gets mistakenly orphaned - results in access to freed
 	memory
+6524709 executables using /usr/lib/libc.so.1 as the ELF interpreter dump core
+	(link-editor components only)
--- a/usr/src/cmd/sgs/packages/inc.flg	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/packages/inc.flg	Fri Mar 02 12:14:51 2007 -0800
@@ -19,9 +19,8 @@
 #
 # CDDL HEADER END
 #
-
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI" 
@@ -59,6 +58,7 @@
 	usr/src/cmd/sgs/0@0 \
 	usr/src/cmd/sgs/sgsdemangler \
 	usr/src/common/avl \
+	usr/src/common/dtrace \
 	usr/src/common/elfcap \
 	usr/src/common/sgsrtcid \
 	usr/src/lib/libc/inc \
--- a/usr/src/cmd/sgs/rtld/Makefile.com	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/rtld/Makefile.com	Fri Mar 02 12:14:51 2007 -0800
@@ -28,10 +28,12 @@
 RTLD=		ld.so.1
 
 AVLOBJ=		avl.o
+DTROBJ=		dtrace_data.o
 TOOLOBJS=	alist.o strhash.o
 BLTOBJ=		msg.o
 OBJECTS=	$(BLTOBJ) \
 		$(AVLOBJ) \
+		$(DTROBJ) \
 		$(TOOLOBJS) \
 		$(P_ASOBJS)   $(P_COMOBJS)   $(P_MACHOBJS)   $(G_MACHOBJS)  \
 		$(S_ASOBJS)   $(S_COMOBJS)   $(S_MACHOBJS)   $(CP_MACHOBJS)
@@ -47,7 +49,7 @@
 SRCDIR =	../common
 PLAT =		$(VAR_PLAT_$(BASEPLAT))
 
-# Dtrace needs an executable data segment.
+# DTrace needs an executable data segment.
 NX_MAP=
 
 MAPFILES +=	$(MAPFILE-ORDER) $(MAPFILE-PLAT)
@@ -125,6 +127,7 @@
 SGSMSGFLAGS2=	$(SGSMSGFLAGS) -h $(BLTDEFS) -d $(BLTDATA) -n rtld_msg
 
 SRCS=		$(AVLOBJ:%.o=$(VAR_AVLDIR)/%.c) \
+		$(DTROBJ:%.o=$(VAR_DTRDIR)/%.c) \
 		$(TOOLOBJS:%.o=$(SGSTOOLS)/common/%.c) \
 		$(COMOBJS:%.o=../common/%.c)  $(MACHOBJS:%.o=%.c) $(BLTDATA) \
 		$(G_MACHOBJS:%.o=$(SRCBASE)/uts/$(PLAT)/krtld/%.c) \
--- a/usr/src/cmd/sgs/rtld/Makefile.targ	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/rtld/Makefile.targ	Fri Mar 02 12:14:51 2007 -0800
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -54,6 +54,10 @@
 		$(COMPILE.c) -o $@ $< $(WARNFLAGS)
 		$(POST_PROCESS_O)
 
+pics/%.o:	$(VAR_DTRDIR)/%.c
+		$(COMPILE.c) -o $@ $< $(WARNFLAGS)
+		$(POST_PROCESS_O)
+
 pics/%.o:	$(SGSTOOLS)/common/%.c
 		$(COMPILE.c) -o $@ $< $(WARNFLAGS)
 		$(POST_PROCESS_O)
--- a/usr/src/cmd/sgs/rtld/amd64/Makefile	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/rtld/amd64/Makefile	Fri Mar 02 12:14:51 2007 -0800
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -45,7 +45,7 @@
 P_MACHOBJS=	amd64_elf.o	_setup.o	zero.o  \
 		dlamd64getunwind.o
 
-CP_MACHOBJS=	dtrace_data.o
+CP_MACHOBJS=
 
 S_MACHOBJS=	
 
--- a/usr/src/cmd/sgs/rtld/amd64/dtrace_data.c	Thu Mar 01 22:33:42 2007 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-
-/*
- * In order to let the DTrace fasttrap provider trace processes before libc
- * is initialized, we place this structure in the thread pointer register.
- * This is communicated to the kernel (in the elfexec() function) by
- * placing the address of this structure in the PT_SUNWDTRACE program header
- * with the -zdtrace_data=<object> option to ld.
- *
- * The fields of the program header are set as follows:
- *	p_type:         PT_SUNWDTRACE
- *	p_vaddr:        address of dtrace_data
- *	p_memsz:        size of dtrace_data
- *	p_flags:        flags of segment dtrace_data is assigned to
- *	p_paddr:        <reserved>
- *	p_filesz:       <reserved>
- *	p_offset:       <reserved>
- *	p_align:        <reserved>
- *
- * See the comment in fasttrap.h for information on how to safely change
- * this data structure and the other places that need to be kept in sync.
- */
-#pragma align 64(dtrace_data)
-uint8_t	dtrace_data[64] = {
-	0, 0, 0, 0, 0, 0, 0, 0,		/* self pointer (must be zero) */
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0
-};
--- a/usr/src/cmd/sgs/rtld/i386/Makefile	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/rtld/i386/Makefile	Fri Mar 02 12:14:51 2007 -0800
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -44,7 +44,7 @@
 
 P_MACHOBJS=	i386_elf.o	_setup.o	zero.o
 
-CP_MACHOBJS=	dtrace_data.o
+CP_MACHOBJS=
 
 S_MACHOBJS=
 
--- a/usr/src/cmd/sgs/rtld/i386/dtrace_data.c	Thu Mar 01 22:33:42 2007 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-
-/*
- * In order to let the DTrace fasttrap provider trace processes before libc
- * is initialized, we place this structure in the thread pointer register.
- * This is communicated to the kernel (in the elfexec() function) by
- * placing the address of this structure in the PT_SUNWDTRACE program header
- * with the -zdtrace_data=<object> option to ld.
- *
- * The fields of the program header are set as follows:
- *	p_type:         PT_SUNWDTRACE
- *	p_vaddr:        address of dtrace_data
- *	p_memsz:        size of dtrace_data
- *	p_flags:        flags of segment dtrace_data is assigned to
- *	p_paddr:        <reserved>
- *	p_filesz:       <reserved>
- *	p_offset:       <reserved>
- *	p_align:        <reserved>
- *
- * See the comment in fasttrap.h for information on how to safely change
- * this data structure and the other places that need to be kept in sync.
- */
-#pragma align 64(dtrace_data)
-uint8_t	dtrace_data[64] = {
-	0, 0, 0, 0,			/* self pointer (must be zero)  */
-	0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0
-};
--- a/usr/src/cmd/sgs/rtld/sparc/Makefile	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/rtld/sparc/Makefile	Fri Mar 02 12:14:51 2007 -0800
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -43,7 +43,7 @@
 
 P_MACHOBJS=	sparc_elf.o	_setup.o
 
-CP_MACHOBJS=	common_sparc.o	dtrace_data.o
+CP_MACHOBJS=	common_sparc.o
 
 S_MACHOBJS=	sparc_a.out.o
 
--- a/usr/src/cmd/sgs/rtld/sparc/dtrace_data.c	Thu Mar 01 22:33:42 2007 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-#include <sys/types.h>
-
-/*
- * In order to let the DTrace fasttrap provider trace processes before libc
- * is initialized, we place this structure in the thread pointer register.
- * This is communicated to the kernel (in the elfexec() function) by
- * placing the address of this structure in the PT_SUNWDTRACE program header
- * with the -zdtrace_data=<object> option to ld.
- *
- * The fields of the program header are set as follows:
- *	p_type:         PT_SUNWDTRACE
- *	p_vaddr:        address of dtrace_data
- *	p_memsz:        size of dtrace_data
- *	p_flags:        flags of segment dtrace_data is assigned to
- *	p_paddr:        <reserved>
- *	p_filesz:       <reserved>
- *	p_offset:       <reserved>
- *	p_align:        <reserved>
- *
- * See the comment in fasttrap.h for information on how to safely change
- * this data structure and the other places that need to be kept in sync.
- */
-#pragma align 64(dtrace_data)
-uint32_t	dtrace_data[32] = {
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0,
-	0x9de04000,			/* save %g1, %g0, %sp */
-	0x81e80000,			/* restore %g0, %g0, %g0 */
-	0x91d0203a,			/* ta 0x3a */
-	0x81ca0000,			/* return %o0 */
-	0, 0,				/* self pointer (must be zero) */
-	0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0
-};
--- a/usr/src/cmd/sgs/rtld/sparcv9/Makefile	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/cmd/sgs/rtld/sparcv9/Makefile	Fri Mar 02 12:14:51 2007 -0800
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -42,7 +42,7 @@
 
 P_MACHOBJS=	sparc_elf.o	_setup.o
 
-CP_MACHOBJS=	common_sparc.o	dtrace_data.o
+CP_MACHOBJS=	common_sparc.o
 
 S_MACHOBJS=	
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/common/dtrace/dtrace_data.c	Fri Mar 02 12:14:51 2007 -0800
@@ -0,0 +1,113 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident	"%Z%%M%	%I%	%E% SMI"
+
+#include <sys/types.h>
+
+/*
+ * In order to let the DTrace fasttrap provider trace processes before libc
+ * is initialized, we place this structure in the thread pointer register.
+ * This is communicated to the kernel (in the elfexec() function) by
+ * placing the address of this structure in the PT_SUNWDTRACE program
+ * header with the -zdtrace_data=<object> option to ld(1).
+ *
+ * Besides DTrace use, the initialization sequence carried out for the
+ * PT_SUNWDTRACE data is an essential step required for the correct
+ * initialization of any process.  Therefore, PT_SUNWDTRACE data must
+ * exist in any interpretor available on Solaris.
+ *
+ * ld.so.1 is the standard interpretor on all Solaris platforms.  However,
+ * for ABI compliance, 32-bit executables are able to identify libc.so.1
+ * as their interpretor.  Therefore, this data file is used to build all
+ * instances of ld.so.1, and the 32-bit versions of libc.so.1.  Note,
+ * although libc.so.1 can act as an interpretor for 32-bit applications,
+ * libc.so.1 only provides a bootstrap mechanism to load and jump to
+ * ld.so.1.
+ *
+ * The fields of the program header are set as follows:
+ *	p_type:         PT_SUNWDTRACE
+ *	p_vaddr:        address of dtrace_data
+ *	p_memsz:        size of dtrace_data
+ *	p_flags:        flags of segment dtrace_data is assigned to
+ *	p_paddr:        <reserved>
+ *	p_filesz:       <reserved>
+ *	p_offset:       <reserved>
+ *	p_align:        <reserved>
+ *
+ * See the comment in fasttrap.h for information on how to safely change
+ * this data structure and the other places that need to be kept in sync.
+ */
+
+#if defined(__sparc)
+
+#pragma align 64(dtrace_data)
+uint32_t	dtrace_data[32] = {
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0x9de04000,			/* save %g1, %g0, %sp */
+	0x81e80000,			/* restore %g0, %g0, %g0 */
+	0x91d0203a,			/* ta 0x3a */
+	0x81ca0000,			/* return %o0 */
+	0, 0,				/* self pointer (must be zero) */
+	0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0
+};
+
+#elif defined(__amd64)
+
+#pragma align 64(dtrace_data)
+uint8_t	dtrace_data[64] = {
+	0, 0, 0, 0, 0, 0, 0, 0,		/* self pointer (must be zero) */
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0
+};
+
+#elif defined(__i386)
+
+#pragma align 64(dtrace_data)
+uint8_t	dtrace_data[64] = {
+	0, 0, 0, 0,			/* self pointer (must be zero)  */
+	0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0
+};
+
+#else
+
+#error "unknown ISA"
+
+#endif
--- a/usr/src/lib/libc/Makefile.targ	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/lib/libc/Makefile.targ	Fri Mar 02 12:14:51 2007 -0800
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -272,7 +272,11 @@
 	$(COMPILE.c) -o $@ $(SRC)/common/util/$(@F:.o=.c)
 	$(POST_PROCESS_O)
 
-# dtrace rules
+$(DTRACEOBJS:%=pics/%): $(SRC)/common/dtrace/$$(@F:.o=.c)
+	$(COMPILE.c) -o $@ $(SRC)/common/dtrace/$(@F:.o=.c)
+	$(POST_PROCESS_O)
+
+# DTrace rules
 pics/%.o: ../port/threads/%.d $(THREADSOBJS:%=pics/%)
 	$(COMPILE.d) -C -xlazyload -s $< -o $@ $(THREADSOBJS:%=pics/%)
 	$(POST_PROCESS_O)
--- a/usr/src/lib/libc/amd64/crt/_rtboot.s	Thu Mar 01 22:33:42 2007 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,193 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-	.ident	"%Z%%M%	%I%	%E% SMI"
-
-	.file	"%M%"
-
-/ bootstrap routine for run-time linker
-/ we get control from exec which has loaded our text and
-/ data into the process' address space and created the process 
-/ stack
-/
-/ on entry, the process stack looks like this:
-/
-/			# <- %esp
-/_______________________#  high addresses
-/	strings		#  
-/_______________________#
-/	0 word		#
-/_______________________#
-/	Auxiliary	#
-/	entries		#
-/	...		#
-/	(size varies)	#
-/_______________________#
-/	0 word		#
-/_______________________#
-/	Environment	#
-/	pointers	#
-/	...		#
-/	(one word each)	#
-/_______________________#
-/	0 word		#
-/_______________________#
-/	Argument	# low addresses
-/	pointers	#
-/	Argc words	#
-/_______________________#
-/	argc		# 
-/_______________________# <- %ebp
-
-#include <SYS.h>
-
-	.set	EB_NULL,0
-	.set	EB_DYNAMIC,1
-	.set	EB_LDSO_BASE,2
-	.set	EB_ARGV,3
-	.set	EB_ENVP,4
-	.set	EB_AUXV,5
-	.set	EB_DEVZERO,6
-	.set	EB_PAGESIZE,7
-	.set	EB_MAX,8
-	.set	EB_MAX_SIZE32,64
-
-	.text
-	.globl	__rtboot
-	.globl	__rtld
-	.type	__rtboot,@function
-	.align	4
-__rtboot:
-	movl	%esp,%ebp
-	subl	$EB_MAX_SIZE32,%esp	/ make room for a max sized boot vector
-	movl	%esp,%esi		/ use esi as a pointer to &eb[0]
-	movl	$EB_ARGV,0(%esi)	/ set up tag for argv
-	leal	4(%ebp),%eax		/ get address of argv
-	movl	%eax,4(%esi)		/ put after tag
-	movl	$EB_ENVP,8(%esi)	/ set up tag for envp
-	movl	(%ebp),%eax		/ get # of args
-	addl	$2,%eax			/ one for the zero & one for argc
-	leal	(%ebp,%eax,4),%edi	/ now points past args & @ envp
-	movl	%edi,12(%esi)		/ set envp
-	addl	$-4,%edi		/ start loop at &env[-1]
-.L00:	addl	$4,%edi			/ next
-	cmpl	$0,(%edi)		/ search for 0 at end of env
-	jne	.L00
-	addl	$4,%edi			/ advance past 0
-	movl	$EB_AUXV,16(%esi)	/ set up tag for auxv
-	movl	%edi,20(%esi)		/ point to auxv
-	movl	$EB_NULL,24(%esi)	/ set up NULL tag
-	call	.L01		/ only way to get IP into a register
-.L01:	popl	%ebx		/ pop the IP we just "pushed"
-	leal	s.EMPTY - .L01(%ebx),%eax
-	pushl	%eax
-	leal	s.ZERO - .L01(%ebx),%eax
-	pushl	%eax
-	leal	s.LDSO - .L01(%ebx),%eax
-	pushl	%eax
-	movl	%esp,%edi	/ save pointer to strings
-	leal	f.MUNMAP - .L01(%ebx),%eax
-	pushl	%eax
-	leal	f.CLOSE - .L01(%ebx),%eax
-	pushl	%eax
-	leal	f.SYSCONFIG - .L01(%ebx),%eax
-	pushl	%eax
-	leal	f.FSTAT - .L01(%ebx),%eax
-	pushl	%eax
-	leal	f.MMAP - .L01(%ebx),%eax
-	pushl	%eax
-	leal	f.OPEN - .L01(%ebx),%eax
-	pushl	%eax
-	leal	f.PANIC - .L01(%ebx),%eax
-	pushl	%eax
-	movl	%esp,%ecx	/ save pointer to functions
-
-	pushl	%ecx		/ address of functions
-	pushl	%edi		/ address of strings
-	pushl	%esi		/ &eb[0]
-	call	__rtld		/ __rtld(&eb[0], strings, funcs)
-	movl	%esi,%esp	/ restore the stack (but leaving boot vector)
-	jmp	*%eax 		/ transfer control to ld.so.1
-	.size	__rtboot,.-__rtboot
-
-	.align	4
-s.LDSO:		.string	"/usr/lib/ld.so.1"
-s.ZERO:		.string	"/dev/zero"
-s.EMPTY:	.string	"(null)"
-s.ERROR:	.string	": no (or bad) /usr/lib/ld.so.1\n"
-l.ERROR:
-
-	.align	4
-f.PANIC:
-	movl	%esp,%ebp
-/ Add using of argument string
-	pushl	$l.ERROR - s.ERROR
-	call	.L02
-.L02:	popl	%ebx
-	leal	s.ERROR - .L02(%ebx),%eax
-	pushl	%eax
-	pushl	$2
-	call	f.WRITE
-	jmp	f.EXIT
-/ Not reached
-	
-f.OPEN:
-	movl	$SYS_open,%eax
-	jmp	__syscall
-f.MMAP:
-	movl	$SYS_mmap,%eax
-	jmp	__syscall
-f.MUNMAP:
-	movl	$SYS_munmap,%eax
-	jmp	__syscall
-f.READ:
-	movl	$SYS_read,%eax
-	jmp	__syscall
-f.WRITE:
-	movl	$SYS_write,%eax
-	jmp	__syscall
-f.LSEEK:
-	movl	$SYS_lseek,%eax
-	jmp	__syscall
-f.CLOSE:
-	movl	$SYS_close,%eax
-	jmp	__syscall
-f.FSTAT:
-	movl	$SYS_fxstat,%eax	/ NEEDSWORK: temp kludge for G6
-	jmp	__syscall
-f.SYSCONFIG:
-	movl	$SYS_sysconfig,%eax
-	jmp	__syscall
-f.EXIT:
-	movl	$SYS_exit,%eax
-/	jmp	__syscall
-__syscall:
-	lcall   $SYSCALL_TRAPNUM,$0
-	jc	__err_exit
-	ret
-__err_exit:
-	movl	$-1,%eax
-	ret
--- a/usr/src/lib/libc/i386/Makefile.com	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/lib/libc/i386/Makefile.com	Fri Mar 02 12:14:51 2007 -0800
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -93,6 +93,9 @@
 	strtol.o		\
 	strtoul.o
 
+DTRACEOBJS=			\
+	dtrace_data.o
+
 GENOBJS=			\
 	_div64.o		\
 	_divdi3.o		\
@@ -874,6 +877,7 @@
 	$(FPASMOBJS)		\
 	$(ATOMICOBJS)		\
 	$(COMOBJS)		\
+	$(DTRACEOBJS)		\
 	$(GENOBJS)		\
 	$(PORTFP)		\
 	$(PORTGEN)		\
@@ -971,6 +975,14 @@
 DYNFLAGS +=	-e __rtboot
 DYNFLAGS +=	$(EXTN_DYNFLAGS)
 
+# Inform the kernel about the initial DTrace area (in case
+# libc is being used as the interpreter / runtime linker).
+DTRACE_DATA =	-zdtrace=dtrace_data
+DYNFLAGS +=	$(DTRACE_DATA)
+
+# DTrace needs an executable data segment.
+NX_MAP=
+
 BUILD.s=	$(AS) $(ASFLAGS) $< -o $@
 
 # Override this top level flag so the compiler builds in its native
@@ -1001,6 +1013,7 @@
 SRCS=							\
 	$(ATOMICOBJS:%.o=$(SRC)/common/atomic/%.c)	\
 	$(COMOBJS:%.o=$(SRC)/common/util/%.c)		\
+	$(DTRACEOBJS:%.o=$(SRC)/common/dtrace/%.c)	\
 	$(PORTFP:%.o=../port/fp/%.c)			\
 	$(PORTGEN:%.o=../port/gen/%.c)			\
 	$(PORTI18N:%.o=../port/i18n/%.c)		\
--- a/usr/src/lib/libc/req.flg	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/lib/libc/req.flg	Fri Mar 02 12:14:51 2007 -0800
@@ -3,9 +3,8 @@
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
 #
 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 # or http://www.opensolaris.org/os/licensing.
@@ -21,11 +20,12 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
 
 find_files "s.*" usr/src/common/atomic
 find_files "s.*" usr/src/common/util
+find_files "s.*" usr/src/common/dtrace
 find_files "s.*" usr/src/lib/common
--- a/usr/src/lib/libc/sparc/Makefile	Thu Mar 01 22:33:42 2007 -0800
+++ b/usr/src/lib/libc/sparc/Makefile	Fri Mar 02 12:14:51 2007 -0800
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 # ident	"%Z%%M%	%I%	%E% SMI"
@@ -113,6 +113,9 @@
 	strtol.o		\
 	strtoul.o
 
+DTRACEOBJS=			\
+	dtrace_data.o
+
 GENOBJS=			\
 	_getsp.o		\
 	_xregs_clrptr.o		\
@@ -901,6 +904,7 @@
 	$(FPASMOBJS)		\
 	$(ATOMICOBJS)		\
 	$(COMOBJS)		\
+	$(DTRACEOBJS)		\
 	$(GENOBJS)		\
 	$(PORTFP)		\
 	$(PORTGEN)		\
@@ -988,6 +992,14 @@
 DYNFLAGS +=	-e __rtboot
 DYNFLAGS +=	$(EXTN_DYNFLAGS)
 
+# Inform the kernel about the initial DTrace area (in case
+# libc is being used as the interpreter / runtime linker).
+DTRACE_DATA =	-zdtrace=dtrace_data
+DYNFLAGS +=	$(DTRACE_DATA)
+
+# DTrace needs an executable data segment.
+NX_MAP=
+
 BUILD.s=	$(AS) $(ASFLAGS) $< -o $@
 
 # Override this top level flag so the compiler builds in its native
@@ -1018,6 +1030,7 @@
 SRCS=							\
 	$(ATOMICOBJS:%.o=$(SRC)/common/atomic/%.c)	\
 	$(COMOBJS:%.o=$(SRC)/common/util/%.c)		\
+	$(DTRACEOBJS:%.o=$(SRC)/common/dtrace/%.c)	\
 	$(PORTFP:%.o=../port/fp/%.c)			\
 	$(PORTGEN:%.o=../port/gen/%.c)			\
 	$(PORTI18N:%.o=../port/i18n/%.c)		\