1
Description: <short summary of the patch>
2
TODO: Put a short summary on the line above and replace this paragraph
3
with a longer explanation of this change. Complete the meta-information
4
with other relevant fields (see below for details). To make it easier, the
5
information below has been extracted from the changelog. Adjust it or drop
8
gcl (2.6.10-5) unstable; urgency=high
11
Author: Camm Maguire <camm@debian.org>
14
The information above should follow the Patch Tagging Guidelines, please
15
checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
16
are templates for supplementary fields that you might want to add:
18
Origin: <vendor|upstream|other>, <url of original patch>
19
Bug: <url in upstream bugtracker>
20
Bug-Debian: http://bugs.debian.org/<bugnumber>
21
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
22
Forwarded: <no|not-needed|url proving that it has been forwarded>
23
Reviewed-By: <name and email of someone who approved the patch>
24
Last-Update: <YYYY-MM-DD>
26
--- gcl-2.6.10.orig/configure
27
+++ gcl-2.6.10/configure
28
@@ -8428,6 +8428,16 @@ fi
29
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
32
+for ac_func in sigaltstack
34
+ ac_fn_c_check_func "$LINENO" "sigaltstack" "ac_cv_func_sigaltstack"
35
+if test "x$ac_cv_func_sigaltstack" = xyes; then :
36
+ cat >>confdefs.h <<_ACEOF
37
+#define HAVE_SIGALTSTACK 1
44
#if test $use = "386-linux" ; then
45
--- gcl-2.6.10.orig/configure.in
46
+++ gcl-2.6.10/configure.in
47
@@ -2410,8 +2410,7 @@ int joe=SIGEMT;
53
+AC_CHECK_FUNCS(sigaltstack)
55
#if test $use = "386-linux" ; then
56
AC_CHECK_HEADERS(asm/sigcontext.h)
57
--- gcl-2.6.10.orig/gcl-tk/tkMain.c
58
+++ gcl-2.6.10/gcl-tk/tkMain.c
63
+int writable_malloc=0; /*FIXME, don't wrap fopen here, exclude notcomp.h or equivalent */
66
struct connection_state *dsfd;
67
/*-------------------------------------------------------------------*/
68
--- gcl-2.6.10.orig/h/386-bsd.h
69
+++ gcl-2.6.10/h/386-bsd.h
72
/* end listen for input */
74
-/* we dont need to worry about zeroing fp->_base , to prevent */
75
-#define FCLOSE_SETBUF_OK
77
#define DATA_BEGIN (char *)N_DATADDR(header);
78
#define UNIXSAVE "unexlin.c"
81
#define DONT_NEED_MALLOC
84
-#define INSTALL_SEGMENTATION_CATCHER \
85
- (void) signal(SIGSEGV,segmentation_catcher); \
86
- (void) signal(SIGBUS,segmentation_catcher)
88
/* Begin for cmpinclude */
91
--- gcl-2.6.10.orig/h/386-macosx.h
92
+++ gcl-2.6.10/h/386-macosx.h
93
@@ -113,18 +113,6 @@ extern int seek_to_end_ofile (FILE *);
94
/* Copied from {Net,Free,Open}BSD.h */
95
/* Modified according to Camm's instructions on April 15, 2004. */
96
#define HAVE_SIGPROCMASK
97
-/* #define SIG_STACK_SIZE (SIGSTKSZ/sizeof(double)) */
98
-#define SETUP_SIG_STACK \
100
-static stack_t estack; \
101
-static double estack_buf [SIG_STACK_SIZE]; \
102
-bzero(estack_buf, sizeof(estack_buf)); \
103
-estack.ss_sp = (char *) &estack_buf[SIG_STACK_SIZE-1]; \
104
-estack.ss_flags = 0; \
105
-estack.ss_size = SIGSTKSZ; \
106
-if (sigaltstack(&estack, 0) < 0) \
107
- perror("sigaltstack"); \
110
/* until the sgc/save problem can be fixed. 20050114 CM*/
112
@@ -141,10 +129,6 @@ do {
113
sigaction (SIGSEGV, &sact, 0); \
116
-#define INSTALL_SEGMENTATION_CATCHER \
117
- (void) signal (SIGSEGV, segmentation_catcher); \
118
- (void) signal (SIGBUS, segmentation_catcher)
120
/* si_addr not containing the faulting address is a bug in Darwin.
121
Work around this by looking at the dar field of the exception state. */
122
#define GET_FAULT_ADDR(sig,code,sv,a) ((siginfo_t *)code)->si_addr
123
@@ -190,9 +174,6 @@ do {int c=0;
127
-/* We (hopefully) dont need to worry about zeroing fp->_base. */
128
-#define FCLOSE_SETBUF_OK
130
#define GET_FULL_PATH_SELF(a_) \
132
extern int _NSGetExecutablePath (char *, unsigned long *); \
133
--- gcl-2.6.10.orig/h/FreeBSD.h
134
+++ gcl-2.6.10/h/FreeBSD.h
135
@@ -79,23 +79,6 @@ do { \
136
#define HAVE_SIGPROCMASK
137
#define SIG_STACK_SIZE (SIGSTKSZ/sizeof(double))
139
-#undef SETUP_SIG_STACK
140
-#define SETUP_SIG_STACK { \
141
- static struct sigaltstack estack; \
142
- if (estack.ss_sp == NULL && \
143
- (estack.ss_sp = malloc(SIGSTKSZ)) == NULL) \
144
- perror("malloc"); \
145
- estack.ss_size = SIGSTKSZ; \
146
- estack.ss_flags = 0; \
147
- if (sigaltstack(&estack, 0) < 0) \
148
- perror("sigaltstack"); \
151
-#undef INSTALL_SEGMENTATION_CATCHER
152
-#define INSTALL_SEGMENTATION_CATCHER \
153
- (void) gcl_signal(SIGSEGV, segmentation_catcher); \
154
- (void) gcl_signal(SIGBUS, segmentation_catcher)
157
* The next two defines are for SGC,
158
* one of which needs to go in cmpinclude.h.
159
--- gcl-2.6.10.orig/h/NetBSD.h
160
+++ gcl-2.6.10/h/NetBSD.h
163
/* end stuff for dumping and reloading */
165
-/* begin setup alternate signal stack */
166
-#define SIG_STACK_SIZE SIGSTKSZ
167
-#define SETUP_SIG_STACK \
168
-{ static struct sigaltstack estack ; \
169
- estack.ss_size = sizeof(estack_buf) ; \
170
- estack.ss_flags = 0; \
171
- estack.ss_base = (char *) &estack_buf[SIG_STACK_SIZE-1]; \
172
- if (sigaltstack(&estack, (struct sigaltstack *)0) < 0) \
173
- perror("sigaltstack");} \
175
-/* end setup signal stack */
183
/* end read header */
185
-#define INSTALL_SEGMENTATION_CATCHER \
186
- (void) signal(SIGSEGV,segmentation_catcher); \
187
- (void) signal(SIGBUS,segmentation_catcher)
194
--- gcl-2.6.10.orig/h/OpenBSD.h
195
+++ gcl-2.6.10/h/OpenBSD.h
200
-/* we don't need to worry about zeroing fp->_base, to prevent what??? */
201
-#define FCLOSE_SETBUF_OK
203
/* #undef HAVE_XDR */
207
#define PAGEWIDTH 12 /* i386 sees 4096 byte pages */
210
-#define SIG_STACK_SIZE (SIGSTKSZ/sizeof(double))
211
-#define SETUP_SIG_STACK \
213
- static struct sigaltstack estack; \
214
- estack.ss_sp = estack_buf; \
215
- estack.ss_size = SIGSTKSZ; \
216
- estack.ss_flags = 0; \
217
- if (sigaltstack(&estack, 0) < 0) \
218
- perror("sigaltstack"); \
221
-#define INSTALL_SEGMENTATION_CATCHER \
222
- (void) gcl_signal(SIGSEGV, segmentation_catcher); \
223
- (void) gcl_signal(SIGBUS, segmentation_catcher)
226
* The next two defines are for SGC,
227
* one of which needs to go in cmpinclude.h.
228
--- gcl-2.6.10.orig/h/gclincl.h.in
229
+++ gcl-2.6.10/h/gclincl.h.in
231
/* have setenv call */
234
+/* Define to 1 if you have the `sigaltstack' function. */
235
+#undef HAVE_SIGALTSTACK
237
/* have sigcontext */
238
#undef HAVE_SIGCONTEXT
240
--- gcl-2.6.10.orig/h/gnuwin95.h
241
+++ gcl-2.6.10/h/gnuwin95.h
242
@@ -50,7 +50,6 @@ extern DBEGIN_TY _dbegin;
244
#define HAVE_SIGACTION
246
-#define SETUP_SIG_STACK
249
#define brk(x) printf("not doing break\n");
250
@@ -82,8 +81,6 @@ extern DBEGIN_TY _dbegin;
254
-#define FCLOSE_SETBUF_OK
259
--- gcl-2.6.10.orig/h/hp300-bsd.h
260
+++ gcl-2.6.10/h/hp300-bsd.h
263
#define GET_FAULT_ADDR(sig,code,sv,a) ((char *) code)
265
-#define INSTALL_SEGMENTATION_CATCHER \
266
- (void) signal(SIGSEGV,segmentation_catcher); \
267
- (void) signal(SIGBUS,segmentation_catcher)
272
/* Begin for cmpinclude */
275
--- gcl-2.6.10.orig/h/linux.h
276
+++ gcl-2.6.10/h/linux.h
277
@@ -79,8 +79,6 @@ do {static struct sigaction action; \
280
#define HAVE_SIGACTION
281
-/* make this a noop */
282
-/* #define SETUP_SIG_STACK */
283
#ifndef HAVE_SV_ONSTACK
286
@@ -109,9 +107,6 @@ do { int c = 0; \
287
&& (ioctl((fp)->_fileno, FIONREAD, &c),c<=0)) \
290
-/* we dont need to worry about zeroing fp->_base , to prevent */
291
-#define FCLOSE_SETBUF_OK
293
/* #define DATA_BEGIN((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1)); */
294
#define DATA_BEGIN (char *)(char *)N_DATADDR(header);
296
@@ -123,11 +118,6 @@ do { int c = 0; \
298
#define PATHNAME_CACHE 10
301
-#define INSTALL_SEGMENTATION_CATCHER \
302
- (void) gcl_signal(SIGSEGV,segmentation_catcher)
305
/* get the fileno of a FILE* */
306
#define FILENO(x) fileno(x)
308
--- gcl-2.6.10.orig/h/mingw.h
309
+++ gcl-2.6.10/h/mingw.h
310
@@ -95,7 +95,6 @@ extern DBEGIN_TY _stacktop, _stackbottom
311
#define NEED_TO_REINSTALL_SIGNALS
313
/*#define HAVE_SIGACTION*/
314
-#define SETUP_SIG_STACK
318
@@ -141,7 +140,6 @@ extern DBEGIN_TY _stacktop, _stackbottom
322
-#define FCLOSE_SETBUF_OK
326
--- gcl-2.6.10.orig/h/notcomp.h
327
+++ gcl-2.6.10/h/notcomp.h
328
@@ -284,3 +284,7 @@ gcl_init_cmp_anon(void);
329
#include "gmp_wrappers.h"
331
#define massert(a_) if (!(a_)) assert_error(#a_,__LINE__,__FILE__,__FUNCTION__)
333
+extern bool writable_malloc;
334
+#define writable_malloc_wrap(f_,rt_,a_...) ({rt_ v;bool w=writable_malloc;writable_malloc=1;v=f_(a_);writable_malloc=w;v;})
335
+#define fopen(a_,b_) writable_malloc_wrap(fopen,FILE *,a_,b_)
336
--- gcl-2.6.10.orig/h/powerpc-macosx.h
337
+++ gcl-2.6.10/h/powerpc-macosx.h
338
@@ -98,18 +98,6 @@ do {
339
/* Copied from {Net,Free,Open}BSD.h */
340
/* Modified according to Camm's instructions on April 15, 2004. */
341
#define HAVE_SIGPROCMASK
342
-/* #define SIG_STACK_SIZE (SIGSTKSZ/sizeof(double)) */
343
-#define SETUP_SIG_STACK \
345
-static struct sigaltstack estack; \
346
-static double estack_buf [SIG_STACK_SIZE]; \
347
-bzero(estack_buf, sizeof(estack_buf)); \
348
-estack.ss_sp = (char *) &estack_buf[SIG_STACK_SIZE-1]; \
349
-estack.ss_flags = 0; \
350
-estack.ss_size = SIGSTKSZ; \
351
-if (sigaltstack(&estack, 0) < 0) \
352
- perror("sigaltstack"); \
355
/* until the sgc/save problem can be fixed. 20050114 CM*/
357
@@ -126,10 +114,6 @@ do {
358
sigaction (SIGSEGV, &sact, 0); \
361
-#define INSTALL_SEGMENTATION_CATCHER \
362
- (void) signal (SIGSEGV, segmentation_catcher); \
363
- (void) signal (SIGBUS, segmentation_catcher)
365
/* si_addr not containing the faulting address is a bug in Darwin.
366
Work around this by looking at the dar field of the exception state. */
367
#define GET_FAULT_ADDR(sig,code,scp,addr) ((char *) (((ucontext_t *) scp)->uc_mcontext->es.dar))
368
@@ -174,9 +158,6 @@ do {int c=0;
372
-/* We (hopefully) dont need to worry about zeroing fp->_base. */
373
-#define FCLOSE_SETBUF_OK
375
#define GET_FULL_PATH_SELF(a_) \
377
extern int _NSGetExecutablePath (char *, unsigned long *); \
378
--- gcl-2.6.10.orig/h/protoize.h
379
+++ gcl-2.6.10/h/protoize.h
380
@@ -1899,3 +1899,7 @@ object
381
number_dpb(object,object,object);
383
number_dpf(object,object,object);
386
+void init_darwin_zone_compat ();
388
--- gcl-2.6.10.orig/h/rios-aix3.h
389
+++ gcl-2.6.10/h/rios-aix3.h
390
@@ -225,11 +225,6 @@ for the kernel. See aix3_mprotect dire
395
-#define INSTALL_SEGMENTATION_CATCHER \
396
- sigstack(&estack,0); \
397
- (void) gcl_signal(SIGSEGV,segmentation_catcher);
399
#if defined(IN_SOCKETS) || defined(IN_GUIS)
400
#include <sys/select.h>
402
--- gcl-2.6.10.orig/h/rios.h
403
+++ gcl-2.6.10/h/rios.h
404
@@ -235,10 +235,6 @@ for the kernel. See aix3_mprotect dire
408
-#define INSTALL_SEGMENTATION_CATCHER \
409
- sigstack(&estack,0); \
410
- (void) gcl_signal(SIGSEGV,segmentation_catcher);
412
#if defined(IN_SOCKETS) || defined(IN_GUIS)
413
#include <sys/select.h>
415
--- gcl-2.6.10.orig/h/sun4.h
416
+++ gcl-2.6.10/h/sun4.h
418
#define GET_FAULT_ADDR(sig,code,scp,addr) \
419
(code ? ((siginfo_t *)code )->si_addr : error("no address info"))
421
-#define SETUP_SIG_STACK \
422
-{ static stack_t estack ; \
423
- estack.ss_size = sizeof(estack_buf) ; \
424
- estack.ss_flags = 0; \
425
- estack.ss_sp = (char *) &estack_buf[SIG_STACK_SIZE-1]; \
426
- if (sigaltstack(&estack, (stack_t *)0) < 0) \
427
- perror("sigaltstack");} \
430
#define HAVE_AOUT <elf.h>
432
--- gcl-2.6.10.orig/o/alloc.c
433
+++ gcl-2.6.10/o/alloc.c
434
@@ -1063,33 +1063,27 @@ gcl_init_alloc(void *cs_start) {
435
cs_limit = cs_org + CSTACK_DIRECTION*cssize;
439
- extern void * __libc_ia64_register_backing_store_base;
440
- cs_org2=cs_base2=__libc_ia64_register_backing_store_base;
443
+ extern void * __libc_ia64_register_backing_store_base;
444
+ cs_org2=cs_base2=__libc_ia64_register_backing_store_base;
448
-#ifdef SETUP_SIG_STACK
451
-#if defined(HAVE_SIGACTION) || defined(HAVE_SIGVEC)
453
- /* make sure the stack is 8 byte aligned */
454
- static double estack_buf[32*SIGSTKSZ];
455
- static struct sigaltstack estack;
457
- bzero(estack_buf,sizeof(estack_buf));
458
- estack.ss_sp = estack_buf;
459
- estack.ss_flags = 0;
460
- estack.ss_size = sizeof(estack_buf);
461
- massert(sigaltstack(&estack, 0)>=0);
466
+#ifdef HAVE_SIGALTSTACK
468
+ /* make sure the stack is 8 byte aligned */
469
+ static double estack_buf[32*SIGSTKSZ];
470
+ static stack_t estack;
472
+ estack.ss_sp = estack_buf;
473
+ estack.ss_flags = 0;
474
+ estack.ss_size = sizeof(estack_buf);
475
+ massert(sigaltstack(&estack, 0)>=0);
480
install_segmentation_catcher();
485
massert(getpagesize()<=PAGESIZE);
486
@@ -1592,6 +1586,8 @@ static char *baby_malloc(n)
490
+bool writable_malloc=0;
493
malloc(size_t size) {
495
@@ -1609,7 +1605,8 @@ malloc(size_t size) {
496
malloc_list = make_cons(Cnil, malloc_list);
497
malloc_list->c.c_car = alloc_simple_string(size);
498
malloc_list->c.c_car->st.st_self = alloc_contblock(size);
500
+ malloc_list->c.c_car->st.st_adjustable=writable_malloc;
502
/* FIXME: this is just to handle clean freeing of the
503
monstartup memory allocated automatically on raw image
504
startup. In saved images, monstartup memory is only
505
--- gcl-2.6.10.orig/o/file.d
506
+++ gcl-2.6.10/o/file.d
507
@@ -309,34 +309,27 @@ BEGIN:
510
setup_stream_buffer(object x) {
512
- char *buf=alloc_contblock(BUFSIZ);
513
- x->sm.sm_buffer = buf;
514
- setbuf(x->sm.sm_fp, buf);
516
+ massert(!setvbuf(x->sm.sm_fp,x->sm.sm_buffer=NULL,_IONBF,0));
518
- setvbuf(x->sm.sm_fp,NULL,_IONBF,0);
520
+ massert(!setvbuf(x->sm.sm_fp,x->sm.sm_buffer=writable_malloc_wrap(malloc,void *,BUFSIZ),_IOFBF,BUFSIZ));
525
deallocate_stream_buffer(object strm) {
527
+ if (strm->sm.sm_buffer==NULL)
530
/* SGC contblock pages: Its possible this is on an old page CM 20030827 */
531
- if (strm->sm.sm_buffer) {
533
- insert_maybe_sgc_contblock(strm->sm.sm_buffer, BUFSIZ);
534
+ insert_maybe_sgc_contblock(strm->sm.sm_buffer,BUFSIZ);
536
- insert_contblock(strm->sm.sm_buffer, BUFSIZ);
537
+ insert_contblock(strm->sm.sm_buffer,BUFSIZ);
539
- if (strm->sm.sm_fp)
540
- setvbuf(strm->sm.sm_fp,NULL,_IONBF,0);
541
- strm->sm.sm_buffer = 0;
544
-#ifndef FCLOSE_SETBUF_OK
545
- strm->sm.sm_fp->_base = NULL;
547
+ massert(!setvbuf(strm->sm.sm_fp,strm->sm.sm_buffer=NULL,_IONBF,0));
551
--- gcl-2.6.10.orig/o/main.c
552
+++ gcl-2.6.10/o/main.c
553
@@ -105,15 +105,6 @@ int sgc_enabled;
555
void install_segmentation_catcher(void);
557
-#ifndef SIG_STACK_SIZE
558
-#define SIG_STACK_SIZE 1000
560
-#ifndef SETUP_SIG_STACK
561
-#if defined(HAVE_SIGACTION) || defined(HAVE_SIGVEC)
562
- struct sigstack estack;
567
cstack_dir(fixnum j) {
569
@@ -362,13 +353,8 @@ main(int argc, char **argv, char **envp)
570
/* catch certain signals */
571
void install_segmentation_catcher(void)
573
-#ifdef INSTALL_SEGMENTATION_CATCHER
574
- INSTALL_SEGMENTATION_CATCHER;
577
- (void) gcl_signal(SIGSEGV,segmentation_catcher);
580
+ (void) gcl_signal(SIGSEGV,segmentation_catcher);
581
+ (void) gcl_signal(SIGBUS,segmentation_catcher);
585
@@ -585,13 +571,6 @@ ihs_overflow(void) {
588
segmentation_catcher(int i) {
589
-#ifndef SIG_STACK_SIZE
594
- printf("Segmentation violation: c stack ok:signalling error");
596
error("Segmentation violation.");
599
--- gcl-2.6.10.orig/o/sfaslcoff.c
600
+++ gcl-2.6.10/o/sfaslcoff.c
601
@@ -59,7 +59,8 @@ struct reloc {
602
} __attribute__ ((packed));
603
#define R_ABS 0x0000 /* absolute, no relocation is necessary */
604
#define R_DIR32 0x0006 /* Direct 32-bit reference to the symbols virtual address */
605
-#define R_PCRLONG 0x0014 /* 32-bit reference pc relative to the symbols virtual address */
606
+#define R_SECREL32 0x000B /* Currently ignored, used only for debugging strings FIXME */
607
+#define R_PCRLONG 0x0014 /* 32-bit reference pc relative to the symbols virtual address */
611
@@ -113,6 +114,7 @@ relocate(struct scnhdr *sec,struct reloc
612
switch(rel->r_type) {
619
--- gcl-2.6.10.orig/o/sgbc.c
620
+++ gcl-2.6.10/o/sgbc.c
621
@@ -415,7 +415,7 @@ sgc_mark_object1(object x) {
622
sgc_mark_object(x->sm.sm_object1);
624
FILE *fp = x->sm.sm_fp;
625
- if (fp != 0 && fp != stdin && fp !=stdout) {
626
+ if (fp != 0 /* && fp != stdin && fp !=stdout */) {
630
@@ -1309,19 +1309,6 @@ sgc_start(void) {
631
SET_WRITABLE(page(pi));
633
tm_of(pi->type)->tm_alt_npage++;
634
-#ifndef NO_SETBUF /*FIXME, implement restartable getc with read in readc_stream*/
637
- if (pi->type!=(tm=tm_of(t_stream))->tm_type) continue;
638
- for (v=pagetochar(page(pi)),ve=v+tm->tm_nppage*tm->tm_size;v<ve;v+=tm->tm_size) {
640
- if (type_of(x)!=t_stream || is_free(x)) continue;
641
- if (x->sm.sm_buffer)
642
- for (i=page(x->sm.sm_buffer);i<=page(x->sm.sm_buffer+BUFSIZ-1);i++)
648
for (pi=contblock_list_head;pi;pi=pi->next)/*FIXME*/
649
if (pi->sgc_flags&SGC_WRITABLE)
650
@@ -1329,14 +1316,16 @@ sgc_start(void) {
651
SET_WRITABLE(page(pi)+i);
653
tm_of(t_contiguous)->tm_alt_npage+=pi->in_use;
656
- extern object gprof_array;
657
- if (gprof_array!=Cnil)
658
- for (i=0;i<(gprof_array->st.st_fillp +PAGESIZE-1)/PAGESIZE;i++)
659
- SET_WRITABLE(page(gprof_array->st.st_self)+i);
660
+ extern object malloc_list;
663
+ for (x=malloc_list;x!=Cnil;x=x->c.c_cdr)
664
+ if (x->c.c_car->st.st_adjustable)
665
+ for (i=page(x->c.c_car->st.st_self);i<=page(x->c.c_car->st.st_self+x->c.c_car->st.st_fillp-1);i++)
670
for (i=page(heap_end);i<page(old_rb_start);i++)
672
tm_of(t_relocatable)->tm_alt_npage=page(rb_start)-page(old_rb_start);
673
--- gcl-2.6.10.orig/o/unixsave.c
674
+++ gcl-2.6.10/o/unixsave.c
675
@@ -140,33 +140,19 @@ char *original_file, *save_file;
677
extern void _cleanup();
681
- char filename[256];
684
- check_type_or_pathname_string_symbol_stream(&vs_base[0]);
685
- coerce_to_filename(vs_base[0], filename);
694
- nfile = NUMBER_OPEN_FILES;
696
- for (p = &_iob[3]; p < &_iob[nfile]; p++)
700
- memory_save(kcl_self, filename);
707
+ char filename[256];
710
+ check_type_or_pathname_string_symbol_stream(&vs_base[0]);
711
+ coerce_to_filename(vs_base[0], filename);
716
+ memory_save(kcl_self, filename);
721
#endif /* UNIXSAVE include */