Module Name:    src
Committed By:   rillig
Date:           Sun Jan 19 10:57:10 UTC 2025

Modified Files:
        src/usr.bin/make: Makefile compat.c job.c main.c make.h

Log Message:
make: fix code coverage counts

See tests/usr.bin/gcov/t_gcov.sh.


To generate a diff of this commit:
cvs rdiff -u -r1.127 -r1.128 src/usr.bin/make/Makefile
cvs rdiff -u -r1.261 -r1.262 src/usr.bin/make/compat.c
cvs rdiff -u -r1.484 -r1.485 src/usr.bin/make/job.c
cvs rdiff -u -r1.636 -r1.637 src/usr.bin/make/main.c
cvs rdiff -u -r1.348 -r1.349 src/usr.bin/make/make.h

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

Modified files:

Index: src/usr.bin/make/Makefile
diff -u src/usr.bin/make/Makefile:1.127 src/usr.bin/make/Makefile:1.128
--- src/usr.bin/make/Makefile:1.127	Tue Dec 19 20:08:27 2023
+++ src/usr.bin/make/Makefile	Sun Jan 19 10:57:10 2025
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.127 2023/12/19 20:08:27 rillig Exp $
+#	$NetBSD: Makefile,v 1.128 2025/01/19 10:57:10 rillig Exp $
 #	@(#)Makefile	5.2 (Berkeley) 12/28/90
 
 PROG=	make
@@ -28,6 +28,7 @@ WARNS=	6
 USE_COVERAGE?=	no		# works only with gcc; clang9 fails to link
 .if ${USE_COVERAGE} == "yes"
 GCOV?=		gcov
+CPPFLAGS+=	-DFORK_FUNCTION=fork
 COPTS+=		--coverage -O0 -ggdb
 GCOV_PERL=	if (/^File '(?:.*\/)?(\S+)'/) {
 GCOV_PERL+=		$$file = $$1; $$func = "";

Index: src/usr.bin/make/compat.c
diff -u src/usr.bin/make/compat.c:1.261 src/usr.bin/make/compat.c:1.262
--- src/usr.bin/make/compat.c:1.261	Sat Jul 20 11:05:11 2024
+++ src/usr.bin/make/compat.c	Sun Jan 19 10:57:10 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat.c,v 1.261 2024/07/20 11:05:11 rillig Exp $	*/
+/*	$NetBSD: compat.c,v 1.262 2025/01/19 10:57:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -91,7 +91,7 @@
 #include "pathnames.h"
 
 /*	"@(#)compat.c	8.2 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: compat.c,v 1.261 2024/07/20 11:05:11 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.262 2025/01/19 10:57:10 rillig Exp $");
 
 static GNode *curTarg = NULL;
 static pid_t compatChild;
@@ -203,7 +203,7 @@ UseShell(const char *cmd MAKE_ATTR_UNUSE
 static int
 Compat_Spawn(const char **av)
 {
-	int pid = vfork();
+	int pid = FORK_FUNCTION();
 	if (pid < 0)
 		Fatal("Could not fork");
 

Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.484 src/usr.bin/make/job.c:1.485
--- src/usr.bin/make/job.c:1.484	Fri Jan  3 04:51:42 2025
+++ src/usr.bin/make/job.c	Sun Jan 19 10:57:10 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.484 2025/01/03 04:51:42 rillig Exp $	*/
+/*	$NetBSD: job.c,v 1.485 2025/01/19 10:57:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -141,7 +141,7 @@
 #include "trace.h"
 
 /*	"@(#)job.c	8.2 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: job.c,v 1.484 2025/01/03 04:51:42 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.485 2025/01/19 10:57:10 rillig Exp $");
 
 /*
  * A shell defines how the commands are run.  All commands for a target are
@@ -1416,9 +1416,9 @@ JobExec(Job *job, char **argv)
 
 	Var_ReexportVars(job->node);
 
-	cpid = vfork();
+	cpid = FORK_FUNCTION();
 	if (cpid == -1)
-		Punt("Cannot vfork: %s", strerror(errno));
+		Punt("Cannot fork: %s", strerror(errno));
 
 	if (cpid == 0) {
 		/* Child */

Index: src/usr.bin/make/main.c
diff -u src/usr.bin/make/main.c:1.636 src/usr.bin/make/main.c:1.637
--- src/usr.bin/make/main.c:1.636	Sat Nov 23 22:59:51 2024
+++ src/usr.bin/make/main.c	Sun Jan 19 10:57:10 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.636 2024/11/23 22:59:51 rillig Exp $	*/
+/*	$NetBSD: main.c,v 1.637 2025/01/19 10:57:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -111,7 +111,7 @@
 #include "trace.h"
 
 /*	"@(#)main.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: main.c,v 1.636 2024/11/23 22:59:51 rillig Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.637 2025/01/19 10:57:10 rillig Exp $");
 #if defined(MAKE_NATIVE)
 __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 "
 	    "The Regents of the University of California.  "
@@ -1780,7 +1780,7 @@ Cmd_Exec(const char *cmd, char **error)
 
 	Var_ReexportVars(SCOPE_GLOBAL);
 
-	switch (cpid = vfork()) {
+	switch (cpid = FORK_FUNCTION()) {
 	case 0:
 		(void)close(pipefds[0]);
 		(void)dup2(pipefds[1], STDOUT_FILENO);

Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.348 src/usr.bin/make/make.h:1.349
--- src/usr.bin/make/make.h:1.348	Sat Jan 11 21:21:33 2025
+++ src/usr.bin/make/make.h	Sun Jan 19 10:57:10 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.h,v 1.348 2025/01/11 21:21:33 rillig Exp $	*/
+/*	$NetBSD: make.h,v 1.349 2025/01/19 10:57:10 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -178,6 +178,15 @@ typedef unsigned char bool;
 #define false	0
 #endif
 
+/*
+ * In code coverage mode with gcc>=12, calling vfork/exec does not mark any
+ * further code from the parent process as covered. gcc-10.5.0 is fine, as
+ * are fork/exec calls, as well as posix_spawn.
+ */
+#ifndef FORK_FUNCTION
+#define FORK_FUNCTION vfork
+#endif
+
 #include "lst.h"
 #include "make_malloc.h"
 #include "str.h"

Reply via email to