Camm, Another slight problem. Would appear compiler::sputc is not being inlined to glibc's putc (if I am reading cmpnew/gcl_cmpopt.lsp and the session below correctly).
==-- test.lisp ------- (defun doit (in out) (write-char (read-char in) out)) (defun test () (with-input-from-string (in "TEST") (with-open-file (out "test.txt" :if-exists :error :direction :output) (doit in out)))) ==-------------------- steve:tmp> gcl GCL (GNU Common Lisp) 2.7.0 ANSI Jul 16 2007 22:45:53 Source License: LGPL(gcl,gmp,pargcl), GPL(unexec,bfd,xgcl) Binary License: GPL due to GPL'ed components: (XGCL READLINE BFD UNEXEC) Modifications of this banner must retain notice of a compatible license Dedicated to the memory of W. Schelter Use (help) to get some basic information on how to use GCL. Temporary directory for compiler files set to /tmp/ >(si:use-fast-links nil) NIL >(load (compile-file "test.lisp")) ;; Compiling test.lisp. ;; End of Pass 1. ;; End of Pass 2. ;; OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3, (Debug quality ignored) ;; Finished compiling test.o. ;; Loading /home/steve/tmp/test.o ;; start address -T 0xa63c80 ;; Finished loading /home/steve/tmp/test.o 1352 >(test) Error: Signalled by DOIT. Condition in DOIT [or a callee]: INTERNAL-SIMPLE-TYPE-ERROR: COMPILER::SPUTC is not of type FUNCTION: Broken at DOIT. Type :H for Help. 1 (Continue) Return to top level. >>:bt #0 DOIT {loc0=#<string-input stream from "TEST">,loc1=#<output stream "test.txt">,loc2=...} [ihs=4] #1 TEST {loc0=#<string-input stream from "TEST">,loc1=#<output stream "test.txt">,loc2=...} [ihs=3] #2 EVAL {loc0=nil,loc1=nil,loc2=nil,loc3=#<compiled-function test>} [ihs=2] >>(disassemble 'doit) ;; Compiling /tmp/gazonk_11505_0.lsp. ;; End of Pass 1. ;; End of Pass 2. ;; OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3, (Debug quality ignored) ;; Finished compiling /tmp/gazonk_11505_0.o. #include "gazonk_11505_0.h" void init_code(){do_init((void *)VV);} /* local entry for function DOIT */ static object LI1__DOIT___gazonk_11505_0(V3,V4) object V3;object V4; { VMB1 VMS1 VMV1 goto TTL; TTL:; {object V5; base[0]= (V3); vs_top=(vs_base=base+0)+1; Lread_char(); vs_top=sup; V5= ({register object _z=vs_base[0];_z;}); if(!((type_of((V4))==t_stream? (((V4))->sm.sm_fp)!=0: 0 ))){ goto T5;} (void)((VFUN_NARGS=2,(/* SPUTC */(*LnkLI0)((fixnum)0,(V5),(V4))))); goto T3; goto T5; T5:; base[0]= (V5); base[1]= (V4); vs_top=(vs_base=base+0)+2; Lwrite_char(); vs_top=sup; goto T3; T3:; {object V6 = (V5);VMR1 (V6);}} base[0]=base[0]; return Cnil; } static object LnkTLI0(object first,...){object V1;va_list ap;va_start(ap,first);V1=(object )call_vproc_new(((object)VV[0]),0,32,(void **)(void *)&LnkLI0,first,ap);va_end(ap);return V1;} /* SPUTC */ #(#(SPUTC (%INIT . #((LET ((*DISABLE-RECOMPILE* T)) (MFSFUN 'DOIT 0 2 0) (ADD-HASH 'DOIT '((T T) T) '((SPUTC (*) *) (FP-OKP (*) *) (READ-CHAR (*) T) (WRITE-CHAR (T *) T)) COMMON-LISP-USER LISPLAMBD! IN! OU,DECLA,OPTIMIZ,SAFETY ,BLOCK DOIT ,WRITE-CHAR ,READ-CHAR-. '/tmp/gazonk_11505_0.lsp)) (DO-RECOMPILE))))) static object LI1__DOIT___gazonk_11505_0(); #define VMB1 register object *base=vs_top; #define VMS1 register object *sup=vs_top+2;vs_top=sup; #define VMV1 vs_check; #define VMR1(VMT1) vs_top=base ; return(VMT1); #define VM1 2 static void * VVi[2]={ #define Cdata VV[1] (void *)(LI1__DOIT___gazonk_11505_0) }; #define VV (VVi) static object LnkTLI0(object,...); static object (*LnkLI0)() = (object (*)()) LnkTLI0; /tmp/gazonk_11505_0.o: file format elf32-i386 Disassembly of section .text: 00000000 <init_code>: 0: 68 00 00 00 00 push $0x0 5: e8 fc ff ff ff call 6 <init_code+0x6> a: 58 pop %eax b: c3 ret 0000000c <LI1__DOIT___gazonk_11505_0>: c: 55 push %ebp d: 57 push %edi e: 56 push %esi f: 53 push %ebx 10: 8b 1d 00 00 00 00 mov 0x0,%ebx 16: 8d 7b 08 lea 0x8(%ebx),%edi 19: 3b 3d 00 00 00 00 cmp 0x0,%edi 1f: 8b 74 24 18 mov 0x18(%esp),%esi 23: 89 3d 00 00 00 00 mov %edi,0x0 29: 72 05 jb 30 <LI1__DOIT___gazonk_11505_0+0x24> 2b: e8 fc ff ff ff call 2c <LI1__DOIT___gazonk_11505_0+0x20> 30: 8b 44 24 14 mov 0x14(%esp),%eax 34: 89 03 mov %eax,(%ebx) 36: 8d 43 04 lea 0x4(%ebx),%eax 39: a3 00 00 00 00 mov %eax,0x0 3e: 89 1d 00 00 00 00 mov %ebx,0x0 44: e8 fc ff ff ff call 45 <LI1__DOIT___gazonk_11505_0+0x39> 49: a1 00 00 00 00 mov 0x0,%eax 4e: 81 fe 00 00 00 00 cmp $0x0,%esi 54: 89 3d 00 00 00 00 mov %edi,0x0 5a: 8b 28 mov (%eax),%ebp 5c: 74 39 je 97 <LI1__DOIT___gazonk_11505_0+0x8b> 5e: 81 fe ff ff ff bf cmp $0xbfffffff,%esi 64: 77 31 ja 97 <LI1__DOIT___gazonk_11505_0+0x8b> 66: f6 06 01 testb $0x1,(%esi) 69: 74 2c je 97 <LI1__DOIT___gazonk_11505_0+0x8b> 6b: 81 3e ff ff ff bf cmpl $0xbfffffff,(%esi) 71: 77 24 ja 97 <LI1__DOIT___gazonk_11505_0+0x8b> 73: 80 7e 01 11 cmpb $0x11,0x1(%esi) 77: 75 1e jne 97 <LI1__DOIT___gazonk_11505_0+0x8b> 79: 83 7e 04 00 cmpl $0x0,0x4(%esi) 7d: 74 18 je 97 <LI1__DOIT___gazonk_11505_0+0x8b> 7f: 56 push %esi 80: 55 push %ebp 81: 6a 00 push $0x0 83: 66 c7 05 04 00 00 00 movw $0x2,0x4 8a: 02 00 8c: ff 15 08 00 00 00 call *0x8 92: 83 c4 0c add $0xc,%esp 95: eb 1e jmp b5 <LI1__DOIT___gazonk_11505_0+0xa9> 97: 8d 43 08 lea 0x8(%ebx),%eax 9a: 89 2b mov %ebp,(%ebx) 9c: 89 73 04 mov %esi,0x4(%ebx) 9f: 89 1d 00 00 00 00 mov %ebx,0x0 a5: a3 00 00 00 00 mov %eax,0x0 aa: e8 fc ff ff ff call ab <LI1__DOIT___gazonk_11505_0+0x9f> af: 89 3d 00 00 00 00 mov %edi,0x0 b5: 89 1d 00 00 00 00 mov %ebx,0x0 bb: 5b pop %ebx bc: 5e pop %esi bd: 5f pop %edi be: 89 e8 mov %ebp,%eax c0: 5d pop %ebp c1: c3 ret 000000c2 <LnkTLI0>: c2: 8d 44 24 08 lea 0x8(%esp),%eax c6: 50 push %eax c7: ff 74 24 08 pushl 0x8(%esp) cb: 68 08 00 00 00 push $0x8 d0: 6a 20 push $0x20 d2: 6a 00 push $0x0 d4: ff 35 00 00 00 00 pushl 0x0 da: e8 fc ff ff ff call db <LnkTLI0+0x19> df: 83 c4 18 add $0x18,%esp e2: c3 ret NIL Sincerely, Stevev _______________________________________________ Gcl-devel mailing list Gcl-devel@gnu.org http://lists.gnu.org/mailman/listinfo/gcl-devel