From: Klaus E. G. <gr...@di...> - 2006-02-08 08:50:30
|
Hi cli...@li... The :executable keyword to saveinitmem is a great enhancement since it avoids workarounds like concatenating #!/usr/bin/clisp -norc -x "(init)" -M in front of memory dumps or making separate one-line script files like #!/usr/bin/clisp -norc -x "(init)" -M my.mem Actually, :executable almost allows me to make the users of my programs think that they are using 'normal' programs, not Lisp programs. But when I use :executable, I have to tell my users to invoke my programs with "--" as first parameter. Or else they get Lisp error messages. Below, I have included an example where I define "echo" so that echo -- abc answers "abc". Unfortunately, echo abc answers LOAD: A file with name abc does not exist Do you know a way to specify an implicit "--" in front of the arguments the user types on the command line? Cheers, Klaus --- $ clisp -q -norc [1]> (defun init () (princ (car *args*)) (quit)) INIT [2]> (saveinitmem "echo" :init-function 'init :quiet t :norc t :executable t :keep-global-handlers nil) 1911560 ; 524288 [3]> (quit) $ ./echo -- abc abc $ ./echo abc *** - LOAD: A file with name abc does not exist $ ./echo -abc GNU CLISP: invalid argument: '-abc' GNU CLISP: use '-h' for help $ |
From: Klaus E. G. <gr...@di...> - 2007-05-18 09:27:36
|
Hi cli...@li..., Sorry for bugging you (again). Some time ago (February 21, 2006) I suggested to add a :parse-options keyword to saveinitmem such that :executable t :parse-options nil had the effect of adding an understood -- in front of the arguments to the executable memory dump. I also came up with a patch which burried a Boolean inside the executable. That Boolean was checked as the very very first thing in the craddle-to-grave sequence and decided whether the argument list should have an understood -- in front. The patch had the side effect that one could lock out the user from access to clisp features, giving access only to the features of the dumped program. As an example, one would be unable to see that the program was actually a clisp memory dump. And if one knew that the program was a clisp one, one would be unable to see e.g. which version of clisp was used. As far as I understand, this side effect was undesired and the patch was never accepted. I just stumbled over yet another situation where an understood -- would be nice to have: Suppose an executable memory dump M drops the user to a clisp prompt. Suppose one invokes M by a command like 'M arg1 arg2 arg3' where arg1 does not start with a hyphen. Suppose one accidentally invokes the debugger from the clisp prompt. Then M quits. If one instead invokes M by 'M -- arg1 arg2 arg3' then in the situation above, then instead of quiting, M invokes the debugger as desired. So I make another try: I suggest adding a new argument named ++ which, when given first in the argument list, forces traditional command line parsing. So that e.g. clisp -version has the same effect as clisp ++ -version In other words, I suggest having a new argument named ++ which has the opposite effect of --. Then I suggest adding a :parse-options keyword such that the (saveinitmem ... :parse-options nil) lets the dumped executable have an understood -- and such that the (saveinitmem ... :parse-options t) lets the dumped executable have an understood ++. The default for :parse-options should be t for backward compatibility. Then for a saved memory dump M we would have 'M -- arg1 arg2 arg3' does no parsing of arguments 'M ++ arg1 arg2 arg3' does parsing of arguments 'M arg1 arg2 arg3' does what :parse-options said. I case this is acceptable, I would be happy to develop a patch which implements the change. Cheers, Klaus |
From: Sam S. <sd...@gn...> - 2007-05-29 19:04:16
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 any chance your needs are satisfied by the :script option to EXT:SAVEINITMEM? http://clisp.cons.org/impnotes/image.html Sam. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGXHkkPp1Qsf2qnMcRAnyIAKCfqAslOs9vxr3t+V8tb5jc9jqpjgCfUWD0 ENSUyJffkibpCtpZ7kj2n/Y= =o10o -----END PGP SIGNATURE----- |
From: Klaus E. G. <gr...@di...> - 2007-10-26 20:04:55
|
Hi, I just installed clisp 2.42. Then got this: [grue@heimdal build-dir]$ clisp --version GNU CLISP 2.41.1 (2007-10-12) (built 3402416387) (memory 3402416546) Software: GNU C 4.0.0 20050519 (Red Hat 4.0.0-8) gcc -g -O2 -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -Wno-sign-compare -O2 -fexpensive-optimizations -falign-functions=4 -DUNICODE -DDYNAMIC_FFI -I. -x none libcharset.a libavcall.a libcallback.a /usr/local/lib/libreadline.so -Wl,-rpath -Wl,/usr/local/lib -lncurses -ldl -L/usr/local/lib -lsigsegv -lc -L/usr/X11R6/lib SAFETY=0 HEAPCODES LINUX_NOEXEC_HEAPCODES GENERATIONAL_GC SPVW_BLOCKS SPVW_MIXED TRIVIALMAP_MEMORY libsigsegv 2.4 libreadline 5.1 Features: (READLINE REGEXP SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL COMMON-LISP LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI GETTEXT UNICODE BASE-CHAR=CHARACTER PC386 UNIX) C Modules: (clisp i18n syscalls regexp readline) Installation directory: /usr/local/lib/clisp-2.41.1/ User language: ENGLISH Machine: I686 (I686) heimdal.yoa.dk [127.0.0.1] I ran clisp 2.39 before, so "GNU CLISP 2.41.1 (2007-10-12)" does not come from a previous installation. Did I get CLISP 2.42 despite the --version message? Cheers, Klaus |
From: Sam S. <sd...@gn...> - 2007-10-26 20:14:37
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Klaus Ebbe Grue wrote: > Hi, > > I just installed clisp 2.42. Then got this: > > [grue@heimdal build-dir]$ clisp --version > GNU CLISP 2.41.1 (2007-10-12) (built 3402416387) (memory 3402416546) > Software: GNU C 4.0.0 20050519 (Red Hat 4.0.0-8) > gcc -g -O2 -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type > -Wmissing-declarations -Wno-sign-compare -O2 -fexpensive-optimizations > -falign-functions=4 -DUNICODE -DDYNAMIC_FFI -I. -x none libcharset.a > libavcall.a libcallback.a /usr/local/lib/libreadline.so -Wl,-rpath > -Wl,/usr/local/lib -lncurses -ldl -L/usr/local/lib -lsigsegv -lc > -L/usr/X11R6/lib > SAFETY=0 HEAPCODES LINUX_NOEXEC_HEAPCODES GENERATIONAL_GC SPVW_BLOCKS > SPVW_MIXED TRIVIALMAP_MEMORY > libsigsegv 2.4 > libreadline 5.1 > Features: > (READLINE REGEXP SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL > COMMON-LISP > LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI > GETTEXT UNICODE BASE-CHAR=CHARACTER PC386 UNIX) > C Modules: (clisp i18n syscalls regexp readline) > Installation directory: /usr/local/lib/clisp-2.41.1/ > User language: ENGLISH > Machine: I686 (I686) heimdal.yoa.dk [127.0.0.1] > > I ran clisp 2.39 before, so "GNU CLISP 2.41.1 (2007-10-12)" does not come > from a previous installation. > > Did I get CLISP 2.42 despite the --version message? yes, you did. this is a distribution bug. too late to fix... -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHIkqTPp1Qsf2qnMcRAjbmAJ0dEXHJsy94OWUU4WC2Dt3gJ/29+ACgrCEE 5csLX1yJQSCiD7vWjnr5e/Q= =rj8O -----END PGP SIGNATURE----- |
From: Klaus E. G. <gr...@di...> - 2007-11-15 10:13:33
|
Hi, Is FAQ A.4.7: "How do I avoid stack overflow" up to date? It says: > If you really do need more Lisp stack, you can increase it by telling > CLISP to pre-allocate more memory. Under Linux, "clisp -m 100MB" works fine for me. Under Cygwin, it seems to have no effect. Then the FAQ says: > Platform Dependent: Win32 platform only. > modify SYSTEM.INI or ... But even when I add MinSPs=4 or MinSPs=40 or MinSPs=400 to the [386enh] section of C:\WINDOWS\system.ini of my Windows XP installation, the clisp program stack remains the same. I have used a compiled version of (defun f (x) (if (= x 0) 0 (+ 1 (f (- x 1))))) to test the stack size: [3]> (f 9175) 9175 [4]> (f 9176) *** - Program stack overflow. RESET I have include clisp version info below. Cheers, Klaus --- $ clisp --version GNU CLISP 2.41 (2006-10-13) (built on ATGRZWN502840.avl01.avlcorp.lan [127.0.0.1]) Software: GNU C 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) gcc -O2 -pipe -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -Wno-sign-compare -O2 -fexpensive-optimizations -falign-functions=4 -DUNICODE -DDYNAMIC_FFI -I. -Wl,--enable-auto-image-base -x none -lintl -liconv libcharset.a libavcall.a libcallback.a -lreadline -lncurses -lsigsegv SAFETY=0 HEAPCODES STANDARD_HEAPCODES SPVW_PAGES SPVW_MIXED libsigsegv 2.4 libiconv 1.11 libreadline 5.1 Features: (READLINE REGEXP SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL COMMON-LISP LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI GETTEXT UNICODE BASE-CHAR=CHARACTER PC386 UNIX CYGWIN) C Modules: (clisp i18n syscalls regexp readline) Installation directory: /usr/lib/clisp/ User language: ENGLISH Machine: I686 (I686) PC189-KGR.Rovsing.local [10.0.100.123] |
From: Sam S. <sd...@gn...> - 2007-11-16 14:10:39
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Klaus Ebbe Grue wrote: > *** - Program stack overflow. RESET this is program stack (C), not Lisp stack, so "-m" should not have any effect. ulimit is your friend (or its analogues under woe32). -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHPaTXPp1Qsf2qnMcRAulmAJ0U4FeUm2QsBBmlb8wiHk3nm9//PQCgjz83 vYLc9WWjrtj8n8wU2JTGCpc= =u8Kq -----END PGP SIGNATURE----- |
From: Klaus E. G. <gr...@di...> - 2007-11-16 14:56:03
|
Dear Sam, > Klaus Ebbe Grue wrote: >> *** - Program stack overflow. RESET > > this is program stack (C), not Lisp stack, so "-m" should not have any > effect. OK. > ulimit is your friend (or its analogues under woe32). Unfortunately, ulimit cannot set stack size under Cygwin: $ ulimit -s 2033 $ ulimit -s 2033 bash: ulimit: stack size: cannot modify limit: Invalid argument $ ulimit -s 2034 bash: ulimit: stack size: cannot modify limit: Invalid argument Actually, as far as I can see, there *is* no analogue of ulimit under Windows since, as far as I can see, stack sizes are compiled into the executables rather than being controlled by the environment. And the closest analogue, editbin, which can change the stacksize compiled into clisp.exe does not seem to have any effect. So, unfortunately, I still have no clue how to proceed. Cheers, Klaus |
From: Klaus E. G. <gr...@di...> - 2007-11-16 12:43:32
|
Hi clisp-list, Does anyone have a suggestion on how to increase the stack size under Cygwin? It seems that no combination of suggestions in the FAQ has any effect on the recursion level at which a compiled version of (defun f (x) (if (= x 0) 0 (+ 1 (f (- x 1))))) gives a stack overflow. As a follow up on my previous mail, FAQ A.4.7 says > Platform Dependent: Win32 platform only. > ... or set program stack using editbin ... Editbin does not seem to have any effect either. Neither editbin /STACK:6553600 \cygwin\bin\clisp.exe nor editbin /STACK:6553600,6553600 \cygwin\bin\clisp.exe changes the recursion depth at which stack overflow occurs. Using dumpbin I verified that editbin actually managed to change clisp.exe. Combining use of editbin with editing of \windows\system.ini and the clisp command line option "-m 100MB" to clisp still makes no difference. And ulimit -s cannot change stack size under Cygwin. Cheers, Klaus --- On Thu, 15 Nov 2007, Klaus Ebbe Grue wrote: > Hi, > > Is FAQ A.4.7: "How do I avoid stack overflow" up to date? > > It says: > >> If you really do need more Lisp stack, you can increase it by telling >> CLISP to pre-allocate more memory. > > Under Linux, "clisp -m 100MB" works fine for me. > > Under Cygwin, it seems to have no effect. > > Then the FAQ says: > >> Platform Dependent: Win32 platform only. >> modify SYSTEM.INI or ... > > But even when I add > MinSPs=4 > or > MinSPs=40 > or > MinSPs=400 > to the [386enh] section of C:\WINDOWS\system.ini of my Windows XP > installation, the clisp program stack remains the same. > > I have used a compiled version of > (defun f (x) (if (= x 0) 0 (+ 1 (f (- x 1))))) > to test the stack size: > [3]> (f 9175) > 9175 > [4]> (f 9176) > *** - Program stack overflow. RESET > > I have include clisp version info below. > > Cheers, > Klaus > > --- > > $ clisp --version > GNU CLISP 2.41 (2006-10-13) (built on ATGRZWN502840.avl01.avlcorp.lan > [127.0.0.1]) > Software: GNU C 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) > gcc -O2 -pipe -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type > -Wmissing-declarations -Wno-sign-compare -O2 -fexpensive-optimizations > -falign-functions=4 -DUNICODE -DDYNAMIC_FFI -I. -Wl,--enable-auto-image-base > -x none -lintl -liconv libcharset.a libavcall.a libcallback.a -lreadline > -lncurses -lsigsegv > SAFETY=0 HEAPCODES STANDARD_HEAPCODES SPVW_PAGES SPVW_MIXED > libsigsegv 2.4 > libiconv 1.11 > libreadline 5.1 > Features: > (READLINE REGEXP SYSCALLS I18N LOOP COMPILER CLOS MOP CLISP ANSI-CL > COMMON-LISP > LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI > GETTEXT UNICODE BASE-CHAR=CHARACTER PC386 UNIX CYGWIN) > C Modules: (clisp i18n syscalls regexp readline) > Installation directory: /usr/lib/clisp/ > User language: ENGLISH > Machine: I686 (I686) PC189-KGR.Rovsing.local [10.0.100.123] > > |
From: Sam S. <sd...@gn...> - 2007-11-16 15:23:48
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Klaus, Klaus Ebbe Grue wrote: >> ulimit is your friend (or its analogues under woe32). > Unfortunately, ulimit cannot set stack size under Cygwin: what I meant was that the issue appears not to be CLISP-specific and you should treat the problem just like you would a similar C problem (editbin et al). if it does not work for you, you might prefer to ask a woe32-specific mailing list. Good luck. Sam. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHPbX5Pp1Qsf2qnMcRAltHAJsG48Bqu8HwLnKmmICr7X/PNZMHoACfd3ck 95uZl7EZMHBJCXe18RkD4Ng= =ZBkj -----END PGP SIGNATURE----- |
From: Klaus E. G. <gr...@di...> - 2007-11-17 12:27:42
|
Hi Sam, >>> ulimit is your friend (or its analogues under woe32). >> Unfortunately, ulimit cannot set stack size under Cygwin: > > what I meant was that the issue appears not to be CLISP-specific ... > if it does not work for you, you might prefer to ask a woe32-specific > mailing list. OK, Thanks. If I find a solution, I will send a patch against FAQ A.4.7. In any case, I suggest an expert runs over FAQ A.4.7 to see if it is up to date. In particular, if editbin is useful in no situations, I suggest the reference is deleted (and if editbin is useful in some situations, then maybe one should drop a note saying that one can get editbin by downloading Visual C++ Express). > Good luck. Thanks, Klaus |
From: Jack U. <jd...@gm...> - 2007-11-17 23:23:39
|
On Nov 16, 2007 5:43 AM, Klaus Ebbe Grue <gr...@di...> wrote: > > Editbin does not seem to have any effect either. Neither > editbin /STACK:6553600 \cygwin\bin\clisp.exe > nor > editbin /STACK:6553600,6553600 \cygwin\bin\clisp.exe > changes the recursion depth at which stack overflow occurs. Klaus, You're editing the stack attributes of the wrong executable. Run editbin on the lisp.exe that is in the full and/or base subdirectories. If you only edit one or the other, then be sure to use the -K option. In my MinGW build for 2.42 with the default executable stack: [1]> (defun f (x) (if (= x 0) 0 (+ 1 (f (- x 1))))) F [2]> (compile 'f) F ; NIL ; NIL [3]> (f 10000) *** - Program stack overflow. RESET After increasing it to 6553600,6553600 as you mentioned above: [1]> (defun f (x) (if (= x 0) 0 (+ 1 (f (- x 1))))) F [2]> (compile 'f) F ; NIL ; NIL [3]> (f 10000) 10000 -- Jack Unrue |
From: Klaus E. G. <gr...@di...> - 2007-11-19 07:58:41
|
Dear Jack, > You're editing the stack attributes of the wrong executable. > Run editbin on the lisp.exe that is in the full and/or base > subdirectories. If you only edit one or the other, then be > sure to use the -K option. Everything works now. Thanks! I have included a proposed addendum to FAQ A.4.7 below. Cheers, Klaus --- Platform Dependent: Win32 platform only. To increase program stack under CYGWIN, issue e.g. "editbin /STACK:10000000 lisp.exe" in a dos prompt. Backup lisp.exe before playing with it. There is a lisp.exe in clisp/base and clisp/full which typically live in /usr/bin or /bin. The editbin program is included, among other, in Visual C++ Express. If editbin complains about a missing DLL, change %PATH%. To query the stack size use "dumpbin /headers lisp.exe". --- Comments clisp/base and full live in both /usr/bin and /bin seen from cygwin, but only in \cygwin\bin seen from the dos prompt. That is why /bin is included as a suggested location for clisp/base and full. Running clisp seems to lock out editbin from lisp.exe even after clisp quits. That is why it is suggested to backup lisp.exe before playing with it. Visual C++ Express is mentioned because it is Price=FREE software from Microsoft targeted at "students, enthusiasts and hobbyists". And because it includes editbin, of course. The current FAQ says: modify SYSTEM.INI or change the PIF that you use to invoke CLISP (Gmane/general/4656) or set program stack using editbin (SFmail/sa0ptz4o4e3.fsf%40glip.premonitia.com, Gmane/general/5523) (answered on <cli...@li...> (http://lists.sourceforge.net/lists/listinfo/clisp-list)) Modifying SYSTEM.INI was of no help to me and I found no PIF settings of any help. Unless some expert can tell that SYSTEM.INI or PIFs can help in some cases, I suggest they are not mentioned in the FAQ. |
From: Klaus G. <gr...@di...> - 2008-01-28 13:19:37
|
Hi, Some years ago I posted a suggestion/patch which in the mean time has been solved partly by the :script argument of the saveinitmem function (thanks for the :script argument, by the way). I hope you can help with the rest of my problem: Some years ago I tried (defun main () (prin1 *args*) (quit)) (saveinitmem "myprogram" :quiet t :norc t :init-function 'main :executable t) And then > ./myprogram abc gave an error message saying that no file named abc was found. That is solved by the :script argument. When I now do (defun main () (prin1 *args*) (quit)) (saveinitmem "myprogram" :quiet t :norc t :init-function 'main :executable t :script nil) and then > ./myprogram abc I get ("abc") as intended. But one problem remains (for me). If I write > ./myprogram -abc I get GNU CLISP: invalid argument: '-abc' rather than ("-abc") So CLISP dies before (main) has a chance to run. To me it is fine that CLISP handles any arguments CLISP knows about. But is there something I can do to make CLISP pass any arguments CLISP does not understand on to *args* rather than just dying. The impnotes, Section 31.1.2.1 say: CUSTOM:*INIT-HOOKS* are always run regardless of the command line options before even the banner is printed. so I suppose what I need is some sort of INIT-HOOK. Cheers, Klaus |
From: Sam S. <sd...@gn...> - 2008-01-29 18:25:36
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, Klaus Grue wrote: | | Some years ago I posted a suggestion/patch which in the mean time has been | solved partly by the :script argument of the saveinitmem function (thanks | for the :script argument, by the way). | | I hope you can help with the rest of my problem: | | (defun main () (prin1 *args*) (quit)) | (saveinitmem "myprogram" :quiet t :norc t :init-function 'main | :executable t :script nil) | | and then |> ./myprogram abc | I get | ("abc") | as intended. | | But one problem remains (for me). If I write |> ./myprogram -abc | I get | GNU CLISP: invalid argument: '-abc' | rather than | ("-abc") | | So CLISP dies before (main) has a chance to run. | | To me it is fine that CLISP handles any arguments CLISP knows about. | | But is there something I can do to make CLISP pass any arguments CLISP | does not understand on to *args* rather than just dying. this is not as easy as it seems because this error is signaled _before_ lisp is initialized, so it cannot be checked whether this is a :SCRIPT or not. OTOH, fixing this would make it possible to define user arguments to interactive images in a nice uniform way. please file an RFE on SF. Thanks. | The impnotes, Section 31.1.2.1 say: | | CUSTOM:*INIT-HOOKS* are always run regardless of the command line options | before even the banner is printed. | | so I suppose what I need is some sort of INIT-HOOK. I don't think init-hook can help you here. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFHn2+VPp1Qsf2qnMcRAnGgAJ9eiDPzUlw8v/jr6EaO1j10EVJN6QCgnEc7 ds2U+XG2X/40V/6hFydlP7c= =ceEO -----END PGP SIGNATURE----- |