From d24d9f34316870446a7e6d0990536f2b361b4064 Mon Sep 17 00:00:00 2001 From: christos Date: Mon, 21 Apr 2003 01:25:27 +0000 Subject: PR/8247: Simon Burge: monop(6) save/restore doesn't work. With the advent of elf and mmaping malloc, assumptions that the code made before about location and contents of the data segment broke. We supplied an sbrk() only malloc, and recorded the break point at the beginning of the program, so now save and restore works, in the traditional monop style. --- monop/execute.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'monop/execute.c') diff --git a/monop/execute.c b/monop/execute.c index 2eb9aa8c..608688ec 100644 --- a/monop/execute.c +++ b/monop/execute.c @@ -1,4 +1,4 @@ -/* $NetBSD: execute.c,v 1.8 2001/08/29 18:23:44 jsm Exp $ */ +/* $NetBSD: execute.c,v 1.9 2003/04/21 01:25:27 christos Exp $ */ /* * Copyright (c) 1980, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)execute.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: execute.c,v 1.8 2001/08/29 18:23:44 jsm Exp $"); +__RCSID("$NetBSD: execute.c,v 1.9 2003/04/21 01:25:27 christos Exp $"); #endif #endif /* not lint */ @@ -59,6 +59,7 @@ typedef struct tm TIME; static char buf[257]; static bool new_play; /* set if move on to new player */ +extern void *heapstart; static void show_move __P((void)); @@ -209,7 +210,7 @@ save() for (sp = buf; *sp != '\n'; sp++) continue; *sp = '\0'; - start = 0; + start = heapstart; end = sbrk(0); while (start < end) { /* write out entire data space */ num = start + 16 * 1024 > end ? end - start : 16 * 1024; @@ -258,7 +259,7 @@ rest_f(file) perror(file); exit(1); } - start = 0; + start = heapstart; brk(end = start + sbuf.st_size); while (start < end) { /* write out entire data space */ num = start + 16 * 1024 > end ? end - start : 16 * 1024; -- cgit v1.2.3-56-ge451