On Tue, Feb 04, 2003 at 11:52:39PM +0100, Jean-baptiste Couturier wrote:
Hello,
Firtly, you must know that i'm newbie with gcl. (& I wish it's the good
place to ask my question)
I try to make a platform dependant executable file using my lisp program
but i've compilation error. Using "gcl -compile myprog" i obtain
myprog.o (an elf32-i386 according to objdump) but i can't run it (bash:
./myprog.o: cannot execute binary file).
example:
test.lsp:
----------
(print 'hello)
(jb)prog >gcl -compile test
Compiling test.lsp.
End of Pass 1.
End of Pass 2.
OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3
Finished compiling test.
(jb)prog >chmod u+x test.o && ./test.o
bash: ./test.o: cannot execute binary file
(jb)prog >objdump -d test.o
test.o: format de fichier elf32-i386
Déassemblage de la section .text:
00000000 <init_code>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 08 sub $0x8,%esp
6: 83 c4 f4 add $0xfffffff4,%esp
9: 68 00 00 00 00 push $0x0
e: e8 fc ff ff ff call f <init_code+0xf>
13: c9 leave
14: c3 ret
15: 8d 76 00 lea 0x0(%esi),%esi
Any help appreciated.
Cheers!
Hi
GCL does not compile 'standalone' executables. Your program will need
the lisp environment to work. This means you could do the following:
;test.lsp
(progn 'compile (print 'hello) (si::quit))
; ^^^^^^^^
compile it:
gcl -compile test.lsp
and run it:
gcl -batch -load test.o
This works! :-)
In the form above, the symbol 'compile (marked) causes the compiler to
compile everything to machine code (otherwise normally GCL only
compiles defuns and defmacros to machine code to save space -- in the
disassembly output from your program, only the initialization code is
appearing. I guess the rest is in the 'data' section -- compare it to
mine which I attach). The '-batch ' argument on the command line
causes GCL to not print any startup message.
In the html/info documentation which is supplied with GCL, there is a
section entitled 'Operating system' which explains other ways to run
your program (eg as a shell-style script) and provides info on other
useful stuff like accessing command line args etc.
Hope this helps.
Regards,
Peter
------------------------------------------------------------------------
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <init_code>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 83 ec 08 sub $0x8,%esp
6: 83 c4 f4 add $0xfffffff4,%esp
9: 68 00 00 00 00 push $0x0
e: e8 fc ff ff ff call f <init_code+0xf>
13: 83 c4 10 add $0x10,%esp
16: 89 ec mov %ebp,%esp
18: 5d pop %ebp
19: c3 ret
1a: 89 f6 mov %esi,%esi
0000001c <LI1>:
1c: 55 push %ebp
1d: 89 e5 mov %esp,%ebp
1f: 83 ec 18 sub $0x18,%esp
22: eb 00 jmp 24 <LI1+0x8>
24: 83 c4 f8 add $0xfffffff8,%esp
27: 68 00 00 00 00 push $0x0
2c: a1 00 00 00 00 mov 0x0,%eax
31: 50 push %eax
32: e8 fc ff ff ff call 33 <LI1+0x17>
37: 83 c4 10 add $0x10,%esp
3a: c7 45 fc 00 00 00 00 movl $0x0,0xfffffffc(%ebp)
41: 8b 55 fc mov 0xfffffffc(%ebp),%edx
44: 89 d0 mov %edx,%eax
46: eb 08 jmp 50 <LI1+0x34>
48: b8 00 00 00 00 mov $0x0,%eax
4d: eb 01 jmp 50 <LI1+0x34>
4f: 90 nop
50: 89 ec mov %ebp,%esp
52: 5d pop %ebp
53: c3 ret
00000054 <LI2>:
54: 55 push %ebp
55: 89 e5 mov %esp,%ebp
57: 83 ec 0c sub $0xc,%esp
5a: 57 push %edi
5b: 56 push %esi
5c: 53 push %ebx
5d: 8b 1d 00 00 00 00 mov 0x0,%ebx
63: 8b 35 00 00 00 00 mov 0x0,%esi
69: 89 35 00 00 00 00 mov %esi,0x0
6f: eb 00 jmp 71 <LI2+0x1d>
71: a1 00 00 00 00 mov 0x0,%eax
76: a3 00 00 00 00 mov %eax,0x0
7b: 8b 3d 0c 00 00 00 mov 0xc,%edi
81: ff d7 call *%edi
83: 89 35 00 00 00 00 mov %esi,0x0
89: c7 45 fc 00 00 00 00 movl $0x0,0xfffffffc(%ebp)
90: 8b 55 fc mov 0xfffffffc(%ebp),%edx
93: 89 d0 mov %edx,%eax
95: eb 07 jmp 9e <LI2+0x4a>
97: b8 00 00 00 00 mov $0x0,%eax
9c: eb 00 jmp 9e <LI2+0x4a>
9e: 8d 65 e8 lea 0xffffffe8(%ebp),%esp
a1: 5b pop %ebx
a2: 5e pop %esi
a3: 5f pop %edi
a4: 89 ec mov %ebp,%esp
a6: 5d pop %ebp
a7: c3 ret
000000a8 <LnkT1>:
a8: 55 push %ebp
a9: 89 e5 mov %esp,%ebp
ab: 83 ec 08 sub $0x8,%esp
ae: 83 c4 f8 add $0xfffffff8,%esp
b1: 68 0c 00 00 00 push $0xc
b6: a1 04 00 00 00 mov 0x4,%eax
bb: 50 push %eax
bc: e8 fc ff ff ff call bd <LnkT1+0x15>
c1: 83 c4 10 add $0x10,%esp
c4: 89 ec mov %ebp,%esp
c6: 5d pop %ebp
c7: c3 ret