Module Name: src Committed By: rillig Date: Sun Nov 29 00:04:23 UTC 2020
Modified Files: src/usr.bin/make: main.c nonints.h parse.c targ.c Log Message: make(1): reduce memory allocation for targets This change moves the initialization and finalization of the list of targets to the same function. They had been split before. To generate a diff of this commit: cvs rdiff -u -r1.487 -r1.488 src/usr.bin/make/main.c cvs rdiff -u -r1.163 -r1.164 src/usr.bin/make/nonints.h cvs rdiff -u -r1.460 -r1.461 src/usr.bin/make/parse.c cvs rdiff -u -r1.146 -r1.147 src/usr.bin/make/targ.c 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/main.c diff -u src/usr.bin/make/main.c:1.487 src/usr.bin/make/main.c:1.488 --- src/usr.bin/make/main.c:1.487 Sat Nov 28 23:43:14 2020 +++ src/usr.bin/make/main.c Sun Nov 29 00:04:22 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.487 2020/11/28 23:43:14 rillig Exp $ */ +/* $NetBSD: main.c,v 1.488 2020/11/29 00:04:22 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -109,7 +109,7 @@ #include "trace.h" /* "@(#)main.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: main.c,v 1.487 2020/11/28 23:43:14 rillig Exp $"); +MAKE_RCSID("$NetBSD: main.c,v 1.488 2020/11/29 00:04:22 rillig Exp $"); #if defined(MAKE_NATIVE) && !defined(lint) __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 " "The Regents of the University of California. " @@ -913,7 +913,7 @@ doPrintVars(void) static Boolean runTargets(void) { - GNodeList *targs; /* target nodes to create */ + GNodeList targs = LST_INIT; /* target nodes to create */ Boolean outOfDate; /* FALSE if all targets up to date */ /* @@ -923,9 +923,9 @@ runTargets(void) * to create. */ if (Lst_IsEmpty(&opts.create)) - targs = Parse_MainName(); + Parse_MainName(&targs); else - targs = Targ_FindList(&opts.create); + Targ_FindList(&targs, &opts.create); if (!opts.compatMake) { /* @@ -941,16 +941,16 @@ runTargets(void) } /* Traverse the graph, checking on all the targets */ - outOfDate = Make_Run(targs); + outOfDate = Make_Run(&targs); } else { /* * Compat_Init will take care of creating all the * targets as well as initializing the module. */ - Compat_Run(targs); + Compat_Run(&targs); outOfDate = FALSE; } - Lst_Free(targs); + Lst_Done(&targs); /* Don't free the nodes. */ return outOfDate; } Index: src/usr.bin/make/nonints.h diff -u src/usr.bin/make/nonints.h:1.163 src/usr.bin/make/nonints.h:1.164 --- src/usr.bin/make/nonints.h:1.163 Sat Nov 28 22:56:01 2020 +++ src/usr.bin/make/nonints.h Sun Nov 29 00:04:22 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: nonints.h,v 1.163 2020/11/28 22:56:01 rillig Exp $ */ +/* $NetBSD: nonints.h,v 1.164 2020/11/29 00:04:22 rillig Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -153,7 +153,7 @@ void Parse_DoVar(VarAssign *, GNode *); void Parse_AddIncludeDir(const char *); void Parse_File(const char *, int); void Parse_SetInput(const char *, int, int, NextBufProc, void *); -GNodeList *Parse_MainName(void); +void Parse_MainName(GNodeList *); int Parse_GetFatals(void); /* str.c */ @@ -204,7 +204,7 @@ GNode *Targ_FindNode(const char *); GNode *Targ_GetNode(const char *); GNode *Targ_NewInternalNode(const char *); GNode *Targ_GetEndNode(void); -GNodeList *Targ_FindList(StringList *); +void Targ_FindList(GNodeList *, StringList *); Boolean Targ_Ignore(const GNode *); Boolean Targ_Silent(const GNode *); Boolean Targ_Precious(const GNode *); Index: src/usr.bin/make/parse.c diff -u src/usr.bin/make/parse.c:1.460 src/usr.bin/make/parse.c:1.461 --- src/usr.bin/make/parse.c:1.460 Sat Nov 28 23:39:58 2020 +++ src/usr.bin/make/parse.c Sun Nov 29 00:04:22 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.460 2020/11/28 23:39:58 rillig Exp $ */ +/* $NetBSD: parse.c,v 1.461 2020/11/29 00:04:22 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -117,7 +117,7 @@ #include "pathnames.h" /* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: parse.c,v 1.460 2020/11/28 23:39:58 rillig Exp $"); +MAKE_RCSID("$NetBSD: parse.c,v 1.461 2020/11/29 00:04:22 rillig Exp $"); /* types and constants */ @@ -208,7 +208,7 @@ static GNodeList *targets; * with duplicates. Kept in a separate list since the commands from .USE or * .USEBEFORE nodes are shared with other GNodes, thereby giving up the * easily understandable ownership over the allocated strings. */ -static StringList *targCmds; +static StringList targCmds = LST_INIT; #endif /* @@ -2862,7 +2862,7 @@ ParseLine_ShellCommand(const char *p) ParseAddCmd(gn, cmd); } #ifdef CLEANUP - Lst_Append(targCmds, cmd); + Lst_Append(&targCmds, cmd); #endif } } @@ -3115,9 +3115,6 @@ Parse_Init(void) sysIncPath = SearchPath_New(); defSysIncPath = SearchPath_New(); Vector_Init(&includes, sizeof(IFile)); -#ifdef CLEANUP - targCmds = Lst_New(); -#endif } /* Clean up the parsing module. */ @@ -3125,7 +3122,7 @@ void Parse_End(void) { #ifdef CLEANUP - Lst_Destroy(targCmds, free); + Lst_DoneCall(&targCmds, free); assert(targets == NULL); SearchPath_Free(defSysIncPath); SearchPath_Free(sysIncPath); @@ -3140,13 +3137,9 @@ Parse_End(void) * Return a list containing the single main target to create. * If no such target exists, we Punt with an obnoxious error message. */ -GNodeList * -Parse_MainName(void) +void +Parse_MainName(GNodeList *mainList) { - GNodeList *mainList; - - mainList = Lst_New(); - if (mainNode == NULL) Punt("no target to make."); @@ -3157,8 +3150,6 @@ Parse_MainName(void) Lst_Append(mainList, mainNode); Var_Append(".TARGETS", mainNode->name, VAR_GLOBAL); - - return mainList; } int Index: src/usr.bin/make/targ.c diff -u src/usr.bin/make/targ.c:1.146 src/usr.bin/make/targ.c:1.147 --- src/usr.bin/make/targ.c:1.146 Sat Nov 28 19:22:32 2020 +++ src/usr.bin/make/targ.c Sun Nov 29 00:04:22 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: targ.c,v 1.146 2020/11/28 19:22:32 rillig Exp $ */ +/* $NetBSD: targ.c,v 1.147 2020/11/29 00:04:22 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -119,7 +119,7 @@ #include "dir.h" /* "@(#)targ.c 8.2 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: targ.c,v 1.146 2020/11/28 19:22:32 rillig Exp $"); +MAKE_RCSID("$NetBSD: targ.c,v 1.147 2020/11/29 00:04:22 rillig Exp $"); /* * All target nodes that appeared on the left-hand side of one of the @@ -311,17 +311,15 @@ GNode *Targ_GetEndNode(void) } /* Return the named nodes, creating them as necessary. */ -GNodeList * -Targ_FindList(StringList *names) +void +Targ_FindList(GNodeList *nodes, StringList *names) { StringListNode *ln; - GNodeList *nodes = Lst_New(); for (ln = names->first; ln != NULL; ln = ln->next) { const char *name = ln->datum; GNode *gn = Targ_GetNode(name); Lst_Append(nodes, gn); } - return nodes; } /* Return true if should ignore errors when creating gn. */