# HG changeset patch # User raf # Date 1172866491 28800 # Node ID 47ed52d6b3bdd0fb29bbec58a1d37fd7442476d1 # Parent 9405aaf598cde95c42a710c5a8d01dce9e8c1490 6524709 executables using /usr/lib/libc.so.1 as the ELF interpreter dump core diff -r 9405aaf598cd -r 47ed52d6b3bd deleted_files/usr/src/cmd/sgs/rtld/amd64/dtrace_data.c --- /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 + +/* + * 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= 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: + * p_filesz: + * p_offset: + * p_align: + * + * 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 +}; diff -r 9405aaf598cd -r 47ed52d6b3bd deleted_files/usr/src/cmd/sgs/rtld/i386/dtrace_data.c --- /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 + +/* + * 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= 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: + * p_filesz: + * p_offset: + * p_align: + * + * 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 +}; diff -r 9405aaf598cd -r 47ed52d6b3bd deleted_files/usr/src/lib/libc/amd64/crt/_rtboot.s --- /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 + + .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 diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/Makefile.var --- 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= diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/packages/common/SUNWonld-README --- 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) diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/packages/inc.flg --- 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 \ diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/Makefile.com --- 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) \ diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/Makefile.targ --- 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) diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/amd64/Makefile --- 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= diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/amd64/dtrace_data.c --- 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 - -/* - * 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= 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: - * p_filesz: - * p_offset: - * p_align: - * - * 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 -}; diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/i386/Makefile --- 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= diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/i386/dtrace_data.c --- 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 - -/* - * 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= 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: - * p_filesz: - * p_offset: - * p_align: - * - * 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 -}; diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/sparc/Makefile --- 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 diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/sparc/dtrace_data.c --- 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 - -/* - * 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= 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: - * p_filesz: - * p_offset: - * p_align: - * - * 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 -}; diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/cmd/sgs/rtld/sparcv9/Makefile --- 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= diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/common/dtrace/dtrace_data.c --- /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 + +/* + * 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= 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: + * p_filesz: + * p_offset: + * p_align: + * + * 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 diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/lib/libc/Makefile.targ --- 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) diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/lib/libc/amd64/crt/_rtboot.s --- 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 - - .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 diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/lib/libc/i386/Makefile.com --- 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) \ diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/lib/libc/req.flg --- 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 diff -r 9405aaf598cd -r 47ed52d6b3bd usr/src/lib/libc/sparc/Makefile --- 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) \