Module Name:    src
Committed By:   kamil
Date:           Tue Feb  7 19:29:40 UTC 2017

Modified Files:
        src/lib/libc/gen: Makefile.inc
        src/lib/libc/sys: Makefile.inc
Added Files:
        src/lib/libc/gen: exect.c
Removed Files:
        src/lib/libc/arch/aarch64/sys: exect.S
        src/lib/libc/arch/alpha/sys: exect.S
        src/lib/libc/arch/arm/sys: exect.S
        src/lib/libc/arch/hppa/sys: exect.S
        src/lib/libc/arch/i386/sys: exect.S
        src/lib/libc/arch/ia64/sys: exect.S
        src/lib/libc/arch/m68k/sys: exect.S
        src/lib/libc/arch/mips/sys: exect.S
        src/lib/libc/arch/or1k/sys: exect.S
        src/lib/libc/arch/powerpc/sys: exect.S
        src/lib/libc/arch/powerpc64/sys: exect.S
        src/lib/libc/arch/riscv/sys: exect.S
        src/lib/libc/arch/sh3/sys: exect.S
        src/lib/libc/arch/sparc/sys: exect.S
        src/lib/libc/arch/sparc64/sys: exect.S
        src/lib/libc/arch/vax/sys: exect.S
        src/lib/libc/arch/x86_64/sys: exect.S
        src/lib/libc/sys: Lint_exect.c

Log Message:
Mark exect(3) obsolete and bind it to plain execve(2) on all platforms

The original exect(2) from BSD4.2 was enabling bit for tracing
(single-step mode) and calling execve(2). The purpose of it was to generate
a signal for a tracer once the application will change its image to a new
program.

This approach no longer works as:
 - exect(2) traces (single-steps) libc and it requires hundreds or
   thousands steps before entering a new image
 - it's vax and x86 specific code
 - this functionality has been moved to the kernel - once a process is
   traced it will generate SIGTRAP with si_code TRAP_EXEC and route it to
   its debugger
 - the side effects and unportability make this interface unusable
 - there are no known users of this interface
 - it apparently never worked better since day0 of NetBSD ("day0 bug")

Users are requested to move to other execve(2) variants. Calling current
execve(2) as it is the most similar behavior to this one from BSD4.2.

Discussed several times on mailing lists and in PR/51700.

Add warning to exect(3) telling about marking this function obsolete.

This function is prepared to be removed in next libc major bump.

Sponsored by <The NetBSD Foundation>


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/aarch64/sys/exect.S
cvs rdiff -u -r1.3 -r0 src/lib/libc/arch/alpha/sys/exect.S
cvs rdiff -u -r1.4 -r0 src/lib/libc/arch/arm/sys/exect.S
cvs rdiff -u -r1.2 -r0 src/lib/libc/arch/hppa/sys/exect.S
cvs rdiff -u -r1.15 -r0 src/lib/libc/arch/i386/sys/exect.S
cvs rdiff -u -r1.2 -r0 src/lib/libc/arch/ia64/sys/exect.S
cvs rdiff -u -r1.8 -r0 src/lib/libc/arch/m68k/sys/exect.S
cvs rdiff -u -r1.10 -r0 src/lib/libc/arch/mips/sys/exect.S
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/or1k/sys/exect.S
cvs rdiff -u -r1.3 -r0 src/lib/libc/arch/powerpc/sys/exect.S
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/powerpc64/sys/exect.S
cvs rdiff -u -r1.1 -r0 src/lib/libc/arch/riscv/sys/exect.S
cvs rdiff -u -r1.5 -r0 src/lib/libc/arch/sh3/sys/exect.S
cvs rdiff -u -r1.3 -r0 src/lib/libc/arch/sparc/sys/exect.S
cvs rdiff -u -r1.2 -r0 src/lib/libc/arch/sparc64/sys/exect.S
cvs rdiff -u -r1.6 -r0 src/lib/libc/arch/vax/sys/exect.S
cvs rdiff -u -r1.4 -r0 src/lib/libc/arch/x86_64/sys/exect.S
cvs rdiff -u -r1.197 -r1.198 src/lib/libc/gen/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/lib/libc/gen/exect.c
cvs rdiff -u -r1.2 -r0 src/lib/libc/sys/Lint_exect.c
cvs rdiff -u -r1.231 -r1.232 src/lib/libc/sys/Makefile.inc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/gen/Makefile.inc
diff -u src/lib/libc/gen/Makefile.inc:1.197 src/lib/libc/gen/Makefile.inc:1.198
--- src/lib/libc/gen/Makefile.inc:1.197	Thu Jan 12 00:38:01 2017
+++ src/lib/libc/gen/Makefile.inc	Tue Feb  7 19:29:40 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.197 2017/01/12 00:38:01 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.198 2017/02/07 19:29:40 kamil Exp $
 #	from: @(#)Makefile.inc	8.6 (Berkeley) 5/4/95
 
 # gen sources
@@ -13,7 +13,7 @@ SRCS+=	alarm.c alphasort.c arc4random.c 
 	confstr.c ctermid.c ctype_.c \
 	dehumanize_number.c devname.c dirname.c disklabel.c err.c errx.c \
 	errc.c errlist.c errno.c execl.c execle.c execlp.c execv.c execvp.c \
-	extattr.c fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \
+	exect.c extattr.c fmtcheck.c fmtmsg.c fnmatch.c fstab.c ftok.c \
 	fts.c ftw.c getbsize.c getcap.c getcwd.c \
 	getdevmajor.c getdomainname.c getgrent.c \
 	getgrouplist.c getgroupmembership.c gethostname.c \

Index: src/lib/libc/sys/Makefile.inc
diff -u src/lib/libc/sys/Makefile.inc:1.231 src/lib/libc/sys/Makefile.inc:1.232
--- src/lib/libc/sys/Makefile.inc:1.231	Sun Jul  3 14:24:58 2016
+++ src/lib/libc/sys/Makefile.inc	Tue Feb  7 19:29:40 2017
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.231 2016/07/03 14:24:58 christos Exp $
+#	$NetBSD: Makefile.inc,v 1.232 2017/02/07 19:29:40 kamil Exp $
 #	@(#)Makefile.inc	8.3 (Berkeley) 10/24/94
 
 # sys sources
@@ -13,13 +13,13 @@ SRCS+=	posix_fadvise.c posix_madvise.c s
 
 .if ${RUMPRUN} != "yes"
 # modules with non-default implementations on at least one architecture:
-SRCS+=	__clone.S __vfork14.S brk.S exect.S fork.S pipe.S \
+SRCS+=	__clone.S __vfork14.S brk.S fork.S pipe.S \
 	getcontext.S \
 	ptrace.S sbrk.S shmat.S \
 	syscall.S __syscall.S __clone.S cerror.S
 
 _LSRC+=	Lint___clone.c Lint___vfork14.c Lint_brk.c Lint_clone.c \
-	Lint_getcontext.c Lint_exect.c Lint_pipe.c Lint_ptrace.c \
+	Lint_getcontext.c Lint_pipe.c Lint_ptrace.c \
 	Lint_sbrk.c Lint___sigaction14.c Lint_syscall.c Lint___syscall.c \
 	LintSysNormal.c LintSysNoerr.c LintSysPseudoNoerr.c
 

Added files:

Index: src/lib/libc/gen/exect.c
diff -u /dev/null src/lib/libc/gen/exect.c:1.1
--- /dev/null	Tue Feb  7 19:29:40 2017
+++ src/lib/libc/gen/exect.c	Tue Feb  7 19:29:40 2017
@@ -0,0 +1,43 @@
+/*	$NetBSD: exect.c,v 1.1 2017/02/07 19:29:40 kamil Exp $	*/
+
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#if !defined(lint)
+__RCSID("$NetBSD: exect.c,v 1.1 2017/02/07 19:29:40 kamil Exp $");
+#endif
+
+#include <unistd.h>
+
+__warn_references(exect,
+    "warning: exect() is obsolete, its functionality has moved to the kernel")
+
+int
+exect(const char *path, char *const argv[], char *const envp[])
+{
+	return execve(path, argv, envp);
+}

Reply via email to