Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Dec 2017 22:06:22 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r326812 - in head/stand: . common efi/loader i386/loader mips/beri/loader ofw/common powerpc/kboot powerpc/ps3 sparc64/loader uboot/common userboot/userboot
Message-ID:  <201712122206.vBCM6MBO094260@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Tue Dec 12 22:06:22 2017
New Revision: 326812
URL: https://svnweb.freebsd.org/changeset/base/326812

Log:
  Revert r326792, r326784, r326772, r326712
  
  Something subtle is creating problems for disk access on ubldr. Back
  it out unti that can be sorted out.
  
  Sponsored by: Netflix

Deleted:
  head/stand/common/interp.h
  head/stand/common/interp_simple.c
Modified:
  head/stand/common/bootstrap.h
  head/stand/common/interp.c
  head/stand/common/interp_forth.c
  head/stand/efi/loader/main.c
  head/stand/i386/loader/main.c
  head/stand/loader.mk
  head/stand/mips/beri/loader/main.c
  head/stand/ofw/common/main.c
  head/stand/powerpc/kboot/main.c
  head/stand/powerpc/ps3/main.c
  head/stand/sparc64/loader/main.c
  head/stand/uboot/common/main.c
  head/stand/userboot/userboot/main.c

Modified: head/stand/common/bootstrap.h
==============================================================================
--- head/stand/common/bootstrap.h	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/common/bootstrap.h	Tue Dec 12 22:06:22 2017	(r326812)
@@ -45,7 +45,7 @@ extern char	command_errbuf[COMMAND_ERRBUFSZ];
 #define CMD_FATAL	4
 
 /* interp.c */
-void	interact(void);
+void	interact(const char *rc);
 int	include(const char *filename);
 
 /* interp_backslash.c */
@@ -53,6 +53,10 @@ char	*backslash(const char *str);
 
 /* interp_parse.c */
 int	parse(int *argc, char ***argv, const char *str);
+
+/* interp_forth.c */
+void	bf_init(const char *rc);
+int	bf_run(char *line);
 
 /* boot.c */
 int	autoboot(int timeout, char *prompt);

Modified: head/stand/common/interp.c
==============================================================================
--- head/stand/common/interp.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/common/interp.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -1,6 +1,5 @@
 /*-
  * Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
- * Copyright (c) 2011 Wojciech A. Koszek <wkoszek@FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -24,6 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  */
+
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
@@ -36,60 +36,112 @@ __FBSDID("$FreeBSD$");
 #include <stand.h>
 #include <string.h>
 #include "bootstrap.h"
-#include "interp.h"
 
+#ifdef BOOT_FORTH
+#include "ficl.h"
+#define	RETURN(x)	stackPushINT(bf_vm->pStack,!x); return(x)
 
-#define	MAXARGS	20			/* maximum number of arguments allowed */
-
-struct interp	*interp =
-#if defined(BOOT_FORTH)
-	&boot_interp_forth;
+extern FICL_VM *bf_vm;
 #else
-	&boot_interp_simple;
+#define	RETURN(x)	return(x)
 #endif
 
+#define	MAXARGS	20			/* maximum number of arguments allowed */
+
+static void	prompt(void);
+
+#ifndef BOOT_FORTH
+static int	perform(int argc, char *argv[]);
+
+/*
+ * Perform the command
+ */
 int
-default_load_config(void *ctx)
+perform(int argc, char *argv[])
 {
-	return INTERP_INCL(interp, "/boot/loader.rc");
+    int				result;
+    struct bootblk_command	**cmdp;
+    bootblk_cmd_t		*cmd;
+
+    if (argc < 1)
+	return(CMD_OK);
+
+    /* set return defaults; a successful command will override these */
+    command_errmsg = command_errbuf;
+    strcpy(command_errbuf, "no error message");
+    cmd = NULL;
+    result = CMD_ERROR;
+
+    /* search the command set for the command */
+    SET_FOREACH(cmdp, Xcommand_set) {
+	if (((*cmdp)->c_name != NULL) && !strcmp(argv[0], (*cmdp)->c_name))
+	    cmd = (*cmdp)->c_fn;
+    }
+    if (cmd != NULL) {
+	result = (cmd)(argc, argv);
+    } else {
+	command_errmsg = "unknown command";
+    }
+    RETURN(result);
 }
+#endif	/* ! BOOT_FORTH */
 
 /*
  * Interactive mode
  */
 void
-interact(void)
+interact(const char *rc)
 {
-	static char	input[256];			/* big enough? */
+    static char	input[256];			/* big enough? */
+#ifndef BOOT_FORTH
+    int		argc;
+    char	**argv;
+#endif
 
-	INTERP_INIT(interp);
+#ifdef BOOT_FORTH
+    bf_init((rc) ? "" : NULL);
+#endif
 
-	/*
-	 * Read our default configuration
-	 */
-	INTERP_LOAD_DEF_CONFIG(interp);
-	printf("\n");
-	/*
-	 * Before interacting, we might want to autoboot.
-	 */
-	autoboot_maybe();
+    if (rc == NULL) {
+	/* Read our default configuration. */
+	include("/boot/loader.rc");
+    } else if (*rc != '\0')
+	include(rc);
 
-	/*
-	 * Not autobooting, go manual
-	 */
-	printf("\nType '?' for a list of commands, 'help' for more detailed help.\n");
-	if (getenv("prompt") == NULL)
-		setenv("prompt", "${interpret}", 1);
-	if (getenv("interpret") == NULL)
-		setenv("interpret", "OK", 1);
+    printf("\n");
 
+    /*
+     * Before interacting, we might want to autoboot.
+     */
+    autoboot_maybe();
+    
+    /*
+     * Not autobooting, go manual
+     */
+    printf("\nType '?' for a list of commands, 'help' for more detailed help.\n");
+    if (getenv("prompt") == NULL)
+	setenv("prompt", "${interpret}", 1);
+    if (getenv("interpret") == NULL)
+        setenv("interpret", "OK", 1);
+    
 
-	for (;;) {
-		input[0] = '\0';
-		prompt();
-		ngets(input, sizeof(input));
-		INTERP_RUN(interp, input);
+    for (;;) {
+	input[0] = '\0';
+	prompt();
+	ngets(input, sizeof(input));
+#ifdef BOOT_FORTH
+	bf_vm->sourceID.i = 0;
+	bf_run(input);
+#else
+	if (!parse(&argc, &argv, input)) {
+	    if (perform(argc, argv))
+		printf("%s: %s\n", argv[0], command_errmsg);
+	    free(argv);
+	} else {
+	    printf("parse error\n");
 	}
+#endif
+    }
 }
 
 /*
@@ -106,90 +158,214 @@ COMMAND_SET(include, "include", "read commands from a 
 static int
 command_include(int argc, char *argv[])
 {
-	int		i;
-	int		res;
-	char	**argvbuf;
+    int		i;
+    int		res;
+    char	**argvbuf;
 
-	/*
-	 * Since argv is static, we need to save it here.
-	 */
-	argvbuf = (char**) calloc((u_int)argc, sizeof(char*));
-	for (i = 0; i < argc; i++)
-		argvbuf[i] = strdup(argv[i]);
+    /* 
+     * Since argv is static, we need to save it here.
+     */
+    argvbuf = (char**) calloc((u_int)argc, sizeof(char*));
+    for (i = 0; i < argc; i++)
+	argvbuf[i] = strdup(argv[i]);
 
-	res=CMD_OK;
-	for (i = 1; (i < argc) && (res == CMD_OK); i++)
-		res = INTERP_INCL(interp, argvbuf[i]);
+    res=CMD_OK;
+    for (i = 1; (i < argc) && (res == CMD_OK); i++)
+	res = include(argvbuf[i]);
 
-	for (i = 0; i < argc; i++)
-		free(argvbuf[i]);
-	free(argvbuf);
+    for (i = 0; i < argc; i++)
+	free(argvbuf[i]);
+    free(argvbuf);
 
-	if (res != CMD_OK)
-		printf("%s", command_errbuf);
-
-	return(res);
+    return(res);
 }
 
 /*
- * Perform the command
+ * Header prepended to each line. The text immediately follows the header.
+ * We try to make this short in order to save memory -- the loader has
+ * limited memory available, and some of the forth files are very long.
  */
+struct includeline 
+{
+    struct includeline	*next;
+#ifndef BOOT_FORTH
+    int			flags;
+    int			line;
+#define SL_QUIET	(1<<0)
+#define SL_IGNOREERR	(1<<1)
+#endif
+    char		text[0];
+};
+
 int
-perform(int argc, char *argv[])
+include(const char *filename)
 {
-	int				result;
-	struct bootblk_command	**cmdp;
-	bootblk_cmd_t		*cmd;
+    struct includeline	*script, *se, *sp;
+    char		input[256];			/* big enough? */
+#ifdef BOOT_FORTH
+    int			res;
+    char		*cp;
+    int			prevsrcid, fd, line;
+#else
+    int			argc,res;
+    char		**argv, *cp;
+    int			fd, flags, line;
+#endif
 
-	if (argc < 1)
-		return(CMD_OK);
+    if (((fd = open(filename, O_RDONLY)) == -1)) {
+	snprintf(command_errbuf, sizeof(command_errbuf),
+	    "can't open '%s': %s", filename, strerror(errno));
+	return(CMD_ERROR);
+    }
 
-	/* set return defaults; a successful command will override these */
-	command_errmsg = command_errbuf;
-	strcpy(command_errbuf, "no error message");
-	cmd = NULL;
-	result = CMD_ERROR;
-
-	/* search the command set for the command */
-	SET_FOREACH(cmdp, Xcommand_set) {
-		if (((*cmdp)->c_name != NULL) && !strcmp(argv[0], (*cmdp)->c_name))
-			cmd = (*cmdp)->c_fn;
+    /*
+     * Read the script into memory.
+     */
+    script = se = NULL;
+    line = 0;
+	
+    while (fgetstr(input, sizeof(input), fd) >= 0) {
+	line++;
+#ifdef BOOT_FORTH
+	cp = input;
+#else
+	flags = 0;
+	/* Discard comments */
+	if (strncmp(input+strspn(input, " "), "\\ ", 2) == 0)
+	    continue;
+	cp = input;
+	/* Echo? */
+	if (input[0] == '@') {
+	    cp++;
+	    flags |= SL_QUIET;
 	}
-	if (cmd != NULL) {
-		result = (cmd)(argc, argv);
+	/* Error OK? */
+	if (input[0] == '-') {
+	    cp++;
+	    flags |= SL_IGNOREERR;
+	}
+#endif
+	/* Allocate script line structure and copy line, flags */
+	if (*cp == '\0')
+		continue;	/* ignore empty line, save memory */
+	sp = malloc(sizeof(struct includeline) + strlen(cp) + 1);
+	/* On malloc failure (it happens!), free as much as possible and exit */
+	if (sp == NULL) {
+		while (script != NULL) {
+			se = script;
+			script = script->next;
+			free(se);
+		}
+		snprintf(command_errbuf, sizeof(command_errbuf),
+		    "file '%s' line %d: memory allocation failure - aborting",
+		    filename, line);
+		return (CMD_ERROR);
+	}
+	strcpy(sp->text, cp);
+#ifndef BOOT_FORTH
+	sp->flags = flags;
+	sp->line = line;
+#endif
+	sp->next = NULL;
+	    
+	if (script == NULL) {
+	    script = sp;
 	} else {
-		command_errmsg = "unknown command";
+	    se->next = sp;
 	}
-	return result;
+	se = sp;
+    }
+    close(fd);
+    
+    /*
+     * Execute the script
+     */
+#ifndef BOOT_FORTH
+    argv = NULL;
+#else
+    prevsrcid = bf_vm->sourceID.i;
+    bf_vm->sourceID.i = fd;
+#endif
+    res = CMD_OK;
+    for (sp = script; sp != NULL; sp = sp->next) {
+	
+#ifdef BOOT_FORTH
+	res = bf_run(sp->text);
+	if (res != VM_OUTOFTEXT) {
+		snprintf(command_errbuf, sizeof(command_errbuf),
+		    "Error while including %s, in the line:\n%s",
+		    filename, sp->text);
+		res = CMD_ERROR;
+		break;
+	} else
+		res = CMD_OK;
+#else
+	/* print if not being quiet */
+	if (!(sp->flags & SL_QUIET)) {
+	    prompt();
+	    printf("%s\n", sp->text);
+	}
+
+	/* Parse the command */
+	if (!parse(&argc, &argv, sp->text)) {
+	    if ((argc > 0) && (perform(argc, argv) != 0)) {
+		/* normal command */
+		printf("%s: %s\n", argv[0], command_errmsg);
+		if (!(sp->flags & SL_IGNOREERR)) {
+		    res=CMD_ERROR;
+		    break;
+		}
+	    }
+	    free(argv);
+	    argv = NULL;
+	} else {
+	    printf("%s line %d: parse error\n", filename, sp->line);
+	    res=CMD_ERROR;
+	    break;
+	}
+#endif
+    }
+#ifndef BOOT_FORTH
+    if (argv != NULL)
+	free(argv);
+#else
+    bf_vm->sourceID.i = prevsrcid;
+#endif
+    while(script != NULL) {
+	se = script;
+	script = script->next;
+	free(se);
+    }
+    return(res);
 }
 
 /*
  * Emit the current prompt; use the same syntax as the parser
  * for embedding environment variables.
  */
-void
-prompt(void)
+static void
+prompt(void) 
 {
-	char	*pr, *p, *cp, *ev;
+    char	*pr, *p, *cp, *ev;
+    
+    if ((cp = getenv("prompt")) == NULL)
+	cp = ">";
+    pr = p = strdup(cp);
 
-	if ((cp = getenv("prompt")) == NULL)
-		cp = ">";
-	pr = p = strdup(cp);
-
-	while (*p != 0) {
-		if ((*p == '$') && (*(p+1) == '{')) {
-			for (cp = p + 2; (*cp != 0) && (*cp != '}'); cp++)
-				;
-			*cp = 0;
-			ev = getenv(p + 2);
-
-			if (ev != NULL)
-				printf("%s", ev);
-			p = cp + 1;
-			continue;
-		}
-		putchar(*p++);
+    while (*p != 0) {
+	if ((*p == '$') && (*(p+1) == '{')) {
+	    for (cp = p + 2; (*cp != 0) && (*cp != '}'); cp++)
+		;
+	    *cp = 0;
+	    ev = getenv(p + 2);
+	    
+	    if (ev != NULL)
+		printf("%s", ev);
+	    p = cp + 1;
+	    continue;
 	}
-	putchar(' ');
-	free(pr);
+	putchar(*p++);
+    }
+    putchar(' ');
+    free(pr);
 }

Modified: head/stand/common/interp_forth.c
==============================================================================
--- head/stand/common/interp_forth.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/common/interp_forth.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -1,6 +1,5 @@
 /*-
  * Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
- * Copyright (c) 2011 Wojciech A. Koszek <wkoszek@FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,7 +32,6 @@ __FBSDID("$FreeBSD$");
 #include <stand.h>
 #include "bootstrap.h"
 #include "ficl.h"
-#include "interp.h"
 
 extern unsigned bootprog_rev;
 
@@ -62,14 +60,9 @@ extern unsigned bootprog_rev;
 /*
  * BootForth   Interface to Ficl Forth interpreter.
  */
-struct interp_forth_softc {
-	FICL_SYSTEM *bf_sys;
-	FICL_VM	*bf_vm;
-	FICL_WORD *pInterp;
-};
-struct interp_forth_softc	forth_softc = { NULL, NULL, NULL };
 
-#define	RETURN(x)	stackPushINT(bf_vm->pStack,!x); return(x)
+FICL_SYSTEM *bf_sys;
+FICL_VM	*bf_vm;
 
 /*
  * Shim for taking commands from BF and passing them out to 'standard'
@@ -78,93 +71,91 @@ struct interp_forth_softc	forth_softc = { NULL, NULL, 
 static void
 bf_command(FICL_VM *vm)
 {
-	char			*name, *line, *tail, *cp;
-	size_t			len;
-	struct bootblk_command	**cmdp;
-	bootblk_cmd_t		*cmd;
-	int			nstrings, i;
-	int			argc, result;
-	char			**argv;
+    char			*name, *line, *tail, *cp;
+    size_t			len;
+    struct bootblk_command	**cmdp;
+    bootblk_cmd_t		*cmd;
+    int				nstrings, i;
+    int				argc, result;
+    char			**argv;
 
-	/* Get the name of the current word */
-	name = vm->runningWord->name;
+    /* Get the name of the current word */
+    name = vm->runningWord->name;
+    
+    /* Find our command structure */
+    cmd = NULL;
+    SET_FOREACH(cmdp, Xcommand_set) {
+	if (((*cmdp)->c_name != NULL) && !strcmp(name, (*cmdp)->c_name))
+	    cmd = (*cmdp)->c_fn;
+    }
+    if (cmd == NULL)
+	panic("callout for unknown command '%s'", name);
+   
+    /* Check whether we have been compiled or are being interpreted */
+    if (stackPopINT(vm->pStack)) {
+	/*
+	 * Get parameters from stack, in the format:
+	 * an un ... a2 u2 a1 u1 n --
+	 * Where n is the number of strings, a/u are pairs of
+	 * address/size for strings, and they will be concatenated
+	 * in LIFO order.
+	 */
+	nstrings = stackPopINT(vm->pStack);
+	for (i = 0, len = 0; i < nstrings; i++)
+	    len += stackFetch(vm->pStack, i * 2).i + 1;
+	line = malloc(strlen(name) + len + 1);
+	strcpy(line, name);
 
-	/* Find our command structure */
-	cmd = NULL;
-	SET_FOREACH(cmdp, Xcommand_set) {
-		if (((*cmdp)->c_name != NULL) && !strcmp(name, (*cmdp)->c_name))
-			cmd = (*cmdp)->c_fn;
+	if (nstrings)
+	    for (i = 0; i < nstrings; i++) {
+		len = stackPopINT(vm->pStack);
+		cp = stackPopPtr(vm->pStack);
+		strcat(line, " ");
+		strncat(line, cp, len);
+	    }
+    } else {
+	/* Get remainder of invocation */
+	tail = vmGetInBuf(vm);
+	for (cp = tail, len = 0; cp != vm->tib.end && *cp != 0 && *cp != '\n'; cp++, len++)
+	    ;
+    
+	line = malloc(strlen(name) + len + 2);
+	strcpy(line, name);
+	if (len > 0) {
+	    strcat(line, " ");
+	    strncat(line, tail, len);
+	    vmUpdateTib(vm, tail + len);
 	}
-	if (cmd == NULL)
-		panic("callout for unknown command '%s'", name);
+    }
+    DEBUG("cmd '%s'", line);
+    
+    command_errmsg = command_errbuf;
+    command_errbuf[0] = 0;
+    if (!parse(&argc, &argv, line)) {
+	result = (cmd)(argc, argv);
+	free(argv);
+    } else {
+	result=BF_PARSE;
+    }
 
-	/* Check whether we have been compiled or are being interpreted */
-	if (stackPopINT(vm->pStack)) {
-		/*
-		* Get parameters from stack, in the format:
-		* an un ... a2 u2 a1 u1 n --
-		* Where n is the number of strings, a/u are pairs of
-		* address/size for strings, and they will be concatenated
-		* in LIFO order.
-		*/
-		nstrings = stackPopINT(vm->pStack);
-		for (i = 0, len = 0; i < nstrings; i++)
-			len += stackFetch(vm->pStack, i * 2).i + 1;
-		line = malloc(strlen(name) + len + 1);
-		strcpy(line, name);
+    switch (result) {
+    case CMD_CRIT:
+	printf("%s\n", command_errmsg);
+	break;
+    case CMD_FATAL:
+	panic("%s\n", command_errmsg);
+    }
 
-		if (nstrings)
-			for (i = 0; i < nstrings; i++) {
-				len = stackPopINT(vm->pStack);
-				cp = stackPopPtr(vm->pStack);
-				strcat(line, " ");
-				strncat(line, cp, len);
-			}
-	} else {
-		/* Get remainder of invocation */
-		tail = vmGetInBuf(vm);
-		for (cp = tail, len = 0; cp != vm->tib.end && *cp != 0 && *cp != '\n'; cp++, len++)
-			;
+    free(line);
+    /*
+     * If there was error during nested ficlExec(), we may no longer have
+     * valid environment to return.  Throw all exceptions from here.
+     */
+    if (result != CMD_OK)
+	vmThrow(vm, result);
 
-		line = malloc(strlen(name) + len + 2);
-		strcpy(line, name);
-		if (len > 0) {
-			strcat(line, " ");
-			strncat(line, tail, len);
-			vmUpdateTib(vm, tail + len);
-		}
-	}
-	DEBUG("cmd '%s'", line);
-
-	command_errmsg = command_errbuf;
-	command_errbuf[0] = 0;
-	if (!parse(&argc, &argv, line)) {
-		result = (cmd)(argc, argv);
-		free(argv);
-	} else {
-		result=BF_PARSE;
-	}
-
-	/* XXX Not sure about the rest of this -- imp */
-
-	switch (result) {
-	case CMD_CRIT:
-		printf("%s\n", command_errmsg);
-		break;
-	case CMD_FATAL:
-		panic("%s\n", command_errmsg);
-	}
-
-	free(line);
-	/*
-	 * If there was error during nested ficlExec(), we may no longer have
-	 * valid environment to return.  Throw all exceptions from here.
-	 */
-	if (result != CMD_OK)
-		vmThrow(vm, result);
-
-	/* This is going to be thrown!!! */
-	stackPushINT(vm->pStack,result);
+    /* This is going to be thrown!!! */
+    stackPushINT(vm->pStack,result);
 }
 
 /*
@@ -258,23 +249,16 @@ bf_command(FICL_VM *vm)
 /*
  * Initialise the Forth interpreter, create all our commands as words.
  */
-static void
-interp_forth_init(void *ctx)
+void
+bf_init(const char *rc)
 {
-    struct interp_forth_softc   *softc;
     struct bootblk_command	**cmdp;
     char create_buf[41];	/* 31 characters-long builtins */
-    FICL_SYSTEM *bf_sys;
-    FICL_VM	*bf_vm;
+    int fd;
 
-    softc = ctx;
+    bf_sys = ficlInitSystem(BF_DICTSIZE);
+    bf_vm = ficlNewVM(bf_sys);
 
-    assert((softc->bf_sys == NULL) && (softc->bf_vm == NULL) &&
-	(softc->pInterp == NULL));	/* No Forth context at this stage */
-
-    bf_sys = softc->bf_sys = ficlInitSystem(BF_DICTSIZE);
-    bf_vm = softc->bf_vm = ficlNewVM(bf_sys);
-
     /* Put all private definitions in a "builtins" vocabulary */
     ficlExec(bf_vm, "vocabulary builtins also builtins definitions");
 
@@ -294,21 +278,29 @@ interp_forth_init(void *ctx)
     /* Export some version numbers so that code can detect the loader/host version */
     ficlSetEnv(bf_sys, "FreeBSD_version", __FreeBSD_version);
     ficlSetEnv(bf_sys, "loader_version", bootprog_rev);
+
+    /* try to load and run init file if present */
+    if (rc == NULL)
+	rc = "/boot/boot.4th";
+    if (*rc != '\0') {
+	fd = open(rc, O_RDONLY);
+	if (fd != -1) {
+	    (void)ficlExecFD(bf_vm, fd);
+	    close(fd);
+	}
+    }
 }
 
 /*
  * Feed a line of user input to the Forth interpreter
  */
-static int
-interp_forth_run(void *ctx, const char *line)
+int
+bf_run(char *line)
 {
-    struct interp_forth_softc *softc;
     int		result;
 
-    softc = ctx;
+    result = ficlExec(bf_vm, line);
 
-    result = ficlExec(softc->bf_vm, (char *)line);
-
     DEBUG("ficlExec '%s' = %d", line, result);
     switch (result) {
     case VM_OUTOFTEXT:
@@ -334,34 +326,7 @@ interp_forth_run(void *ctx, const char *line)
     
     if (result == VM_USEREXIT)
 	panic("interpreter exit");
-    setenv("interpret", softc->bf_vm->state ? "" : "OK", 1);
+    setenv("interpret", bf_vm->state ? "" : "OK", 1);
 
     return (result);
 }
-
-static int
-interp_forth_incl(void *ctx, const char *filename)
-{
-	struct interp_forth_softc *softc;
-	int	fd;
-
-	softc = ctx;
-
-	fd = open(filename, O_RDONLY);
-	if (fd == -1) {
-		/* Hihger layers print the error message */
-		snprintf(command_errbuf, sizeof(command_errbuf),
-		    "can't open %s\n", filename);
-		return (CMD_ERROR);
-	}
-	return (ficlExecFD(softc->bf_vm, fd));
-}
-
-
-struct interp boot_interp_forth = {
-	.init = interp_forth_init,
-	.run = interp_forth_run,
-	.incl = interp_forth_incl,
-	.load_configs = default_load_config,
-	.context = &forth_softc
-};

Modified: head/stand/efi/loader/main.c
==============================================================================
--- head/stand/efi/loader/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/efi/loader/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -501,7 +501,7 @@ main(int argc, CHAR16 *argv[])
 #endif
 	}
 
-	interact();			/* doesn't return */
+	interact(NULL);			/* doesn't return */
 
 	return (EFI_SUCCESS);		/* keep compiler happy */
 }

Modified: head/stand/i386/loader/main.c
==============================================================================
--- head/stand/i386/loader/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/i386/loader/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -232,7 +232,7 @@ main(void)
     
     bios_getsmap();
 
-    interact();
+    interact(NULL);
 
     /* if we ever get here, it is an error */
     return (1);

Modified: head/stand/loader.mk
==============================================================================
--- head/stand/loader.mk	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/loader.mk	Tue Dec 12 22:06:22 2017	(r326812)
@@ -59,8 +59,6 @@ SRCS+=	pnp.c
 .if ${MK_FORTH} != "no"
 SRCS+=	interp_forth.c
 .include "${BOOTSRC}/ficl.mk"
-.else
-SRCS+=	interp_simple.c
 .endif
 
 .if defined(BOOT_PROMPT_123)

Modified: head/stand/mips/beri/loader/main.c
==============================================================================
--- head/stand/mips/beri/loader/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/mips/beri/loader/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -149,7 +149,7 @@ main(int argc, char *argv[], char *envv[], struct boot
 	printf("bootpath=\"%s\"\n", bootpath);
 #endif
 
-	interact();
+	interact(NULL);
 	return (0);
 }
 

Modified: head/stand/ofw/common/main.c
==============================================================================
--- head/stand/ofw/common/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/ofw/common/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -157,7 +157,7 @@ main(int (*openfirm)(void *))
 	archsw.arch_readin = ofw_readin;
 	archsw.arch_autoload = ofw_autoload;
 
-	interact();				/* doesn't return */
+	interact(NULL);				/* doesn't return */
 
 	OF_exit();
 

Modified: head/stand/powerpc/kboot/main.c
==============================================================================
--- head/stand/powerpc/kboot/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/powerpc/kboot/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -122,7 +122,7 @@ main(int argc, const char **argv)
 	setenv("loaddev", bootdev, 1);
 	setenv("LINES", "24", 1);
 
-	interact();			/* doesn't return */
+	interact(NULL);			/* doesn't return */
 
 	return (0);
 }

Modified: head/stand/powerpc/ps3/main.c
==============================================================================
--- head/stand/powerpc/ps3/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/powerpc/ps3/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -140,7 +140,7 @@ main(void)
 	setenv("LINES", "24", 1);
 	setenv("hw.platform", "ps3", 1);
 
-	interact();			/* doesn't return */
+	interact(NULL);			/* doesn't return */
 
 	return (0);
 }

Modified: head/stand/sparc64/loader/main.c
==============================================================================
--- head/stand/sparc64/loader/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/sparc64/loader/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -902,7 +902,7 @@ main(int (*openfirm)(void *))
 	printf("bootpath=\"%s\"\n", bootpath);
 
 	/* Give control to the machine independent loader code. */
-	interact();
+	interact(NULL);
 	return (1);
 }
 

Modified: head/stand/uboot/common/main.c
==============================================================================
--- head/stand/uboot/common/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/uboot/common/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -500,7 +500,7 @@ main(int argc, char **argv)
 	archsw.arch_readin = uboot_readin;
 	archsw.arch_autoload = uboot_autoload;
 
-	interact();				/* doesn't return */
+	interact(NULL);				/* doesn't return */
 
 	return (0);
 }

Modified: head/stand/userboot/userboot/main.c
==============================================================================
--- head/stand/userboot/userboot/main.c	Tue Dec 12 20:41:11 2017	(r326811)
+++ head/stand/userboot/userboot/main.c	Tue Dec 12 22:06:22 2017	(r326812)
@@ -142,7 +142,7 @@ loader_main(struct loader_callbacks *cb, void *arg, in
 	if (setjmp(jb))
 		return;
 
-	interact();			/* doesn't return */
+	interact(NULL);			/* doesn't return */
 
 	exit(0);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201712122206.vBCM6MBO094260>