fukamachi / woo

A fast non-blocking HTTP server on top of libev
http://ultra.wikia.com/wiki/Woo_(kaiju)
MIT License
1.27k stars 96 forks source link

Woo won't start on Ubuntu Trusty, SBCL 1.5.6 and gcc 4.8.4-2ubuntu1~14.04.4 #87

Open svetlyak40wt opened 4 years ago

svetlyak40wt commented 4 years ago

When I start the Clack with Woo handler, it tries to compile a grovel file, output the following commands to stdout:

; gcc -o /root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo\
-20190913121619/src/syscall/types__grovel-tmp4TM0ME1F.o -c -g -Wall -Wundef -Wsign-compare -Wpointer-arith -O3 -D\
_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wunused-parameter -fno-omit-frame-pointer -momit-\
leaf-frame-pointer -fno-pie -fPIC -I/root/finances/.qlot/dists/quicklisp/software/cffi_0.20.1/ /root/.cache/commo\
n-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall\
/types__grovel.c
; gcc -o /root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo\
-20190913121619/src/syscall/types__grovel-tmpU2IL9N4 -g -Wl,--export-dynamic -no-pie /root/.cache/common-lisp/sbc\
l-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall/types__gr\
ovel.o

And raises a condition:

Subprocess #<UIOP/LAUNCH-PROGRAM::PROCESS-INFO {1002C79A13}>
 with command ("gcc" "-o"
               "/root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall/types__grovel-tmpU2IL9N4"
               "-g" "-Wl,--export-dynamic" "-no-pie"
               "/root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall/types__grovel.o")
 exited with error code 1
   [Condition of type CFFI-GROVEL:GROVEL-ERROR]

Restarts:
 0: [RETRY] Retry #<PROCESS-OP > on #<GROVEL-FILE "woo" "src" "syscall" "types">.
 1: [ACCEPT] Continue, treating #<PROCESS-OP > on #<GROVEL-FILE "woo" "src" "syscall" "types"> as having been successful.
 2: [RETRY] Retry ASDF operation.
 3: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
 4: [RETRY] Retry ASDF operation.
 5: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration.
 --more--

Backtrace:
 0: (CFFI-GROVEL:GROVEL-ERROR "~a" #<UIOP/RUN-PROGRAM:SUBPROCESS-ERROR {1002C7B193}>)
 1: ((FLET "THUNK" :IN CFFI-GROVEL:PROCESS-GROVEL-FILE))
 2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (FLET "THUNK" :IN CFFI-GROVEL:PROCESS-GROVEL-FILE) {7FA9D395C43B}>)
 3: (CFFI-GROVEL:PROCESS-GROVEL-FILE #P"/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall/types.lisp" #P"/root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.q..
 4: ((:METHOD ASDF/ACTION:PERFORM (CFFI-GROVEL::PROCESS-OP CFFI-GROVEL:GROVEL-FILE)) #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "woo" "src" "syscall" "types">) [fast-method]
 5: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "woo" "src" "syscall" "types">)
 6: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
 7: ((:METHOD ASDF/ACTION:PERFORM :AROUND (CFFI-GROVEL::PROCESS-OP CFFI-GROVEL::CC-FLAGS-MIXIN)) #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "woo" "src" "syscall" "types">) [fast-method]
 8: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<CFFI-GROVEL::PROCESS-OP > #<CFFI-GROVEL:GROVEL-FILE "woo" "src" "syscall" "types">) [fast-method]
 9: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1005D461B3}>) [fast-method]
10: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
11: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1005D461B3}>) [fast-method]
12: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "clack-handler-woo"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-meth..
13: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "clack-handler-woo"> :VERBOSE NIL)
14: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
15: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "clack-handler-woo"> :VERBOSE NIL) [fast-method]
16: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "clack-handler-woo" :VERBOSE NIL)
17: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
18: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "clack-handler-woo" :VERBOSE NIL) [fast-method]
19: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1005D36DCB}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T :OVERRIDE-FORCING NIL)
20: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
21: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1005D2C05B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
22: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "clack-handler-woo" :VERBOSE NIL) [fast-method]
23: (ASDF/OPERATE:LOAD-SYSTEM "clack-handler-woo" :VERBOSE NIL)
24: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {1005D2BFAB}>)
25: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "clack-handler-woo" :PROMPT NIL)
26: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unused argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1005D0B14B}>) [fast-method]
27: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {1003B96C53}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1005D0B14B}>) [fast-me..
28: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) "clack-handler-woo" :PROMPT NIL :SILENT T :VERBOSE NIL) [fast-method]
29: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {1005CFE7AB}>)
30: (LACK.UTIL::LOAD-WITH-QUICKLISP "clack-handler-woo")
31: (LACK.UTIL:FIND-PACKAGE-OR-LOAD "CLACK.HANDLER.WOO")
32: (CLACK.UTIL:FIND-HANDLER :WOO)
33: (CLACK:CLACKUP #<CLOSURE (LAMBDA (LACK.MIDDLEWARE.SESSION::ENV) :IN "/root/finances/.qlot/dists/ultralisp/software/fukamachi-lack-20190831205316/src/middleware/session.lisp") {1005CFCBEB}> :ADDRESS "l..
34: (WEBLOCKS/SERVER::START-SERVER #<SERVER port=8080 stopped> :DEBUG T)
35: ((LAMBDA (#:G0 &REST #:G1) :IN WEBLOCKS/SERVER:START) NIL)
36: (WEBLOCKS/SERVER:START :DEBUG T :PORT 8080 :INTERFACE "localhost" :SERVER-TYPE :WOO)
37: (FINANCES/SERVER:START :PORT 8080)
38: (SB-INT:SIMPLE-EVAL-IN-LEXENV (FINANCES/SERVER:START :PORT 8080) #<NULL-LEXENV>)
39: (EVAL (FINANCES/SERVER:START :PORT 8080))
40: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
41: (SLYNK::CALL-WITH-RETRY-RESTART "Retry SLY mREPL evaluation request." #<CLOSURE (LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1) {1005CF80CB}>)
42: ((LAMBDA NIL :IN SLYNK-MREPL::MREPL-EVAL-1))
43: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
44: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "COMMON-LISP-USER">) (*) (** . #1=#<SB-THREAD:THREAD "telegram-bot" RUNNING {10047BEE03}>) (***) (/ NIL) (// #1#) ...) #<CLOSURE (LAMBDA NIL :IN SLYN..
45: (SLYNK-MREPL::MREPL-EVAL-1 #<SLYNK-MREPL::MREPL mrepl-1-1> "(finances/server:start :port 8080 )")
46: (SLYNK-MREPL::MREPL-EVAL #<SLYNK-MREPL::MREPL mrepl-1-1> "(finances/server:start :port 8080 )")
47: (SLYNK::PROCESS-REQUESTS NIL)
48: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
49: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
50: (SLYNK-SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {1003CF00DB}>)
51: ((FLET SLYNK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/root/finances/.qlot/dists/ultralisp/software/joaotavora-sly-20190915232901/slynk/backend/sbcl.lisp") #<FUNCTION SLYNK:SLYNK-DEBUGGER-HOOK> #<CLOSURE ..
52: ((LAMBDA NIL :IN SLYNK::CALL-WITH-LISTENER))
53: (SLYNK::CALL-WITH-BINDINGS ((*PACKAGE* . #<PACKAGE "COMMON-LISP-USER">) (*) (** . #1=#<SB-THREAD:THREAD "telegram-bot" RUNNING {10047BEE03}>) (***) (/ NIL) (// #1#) ...) #<CLOSURE (LAMBDA NIL :IN SLYN..
54: ((LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD))
55: ((FLET SB-UNIX::BODY :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE))
56: ((FLET "WITHOUT-INTERRUPTS-BODY-4" :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE))
57: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE))
58: ((FLET "WITHOUT-INTERRUPTS-BODY-1" :IN SB-THREAD::CALL-WITH-MUTEX))
59: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE) {7FA9D395ED9B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD "sly..
60: (SB-THREAD::NEW-LISP-THREAD-TRAMPOLINE #<SB-THREAD:THREAD "sly-channel-1-mrepl-remote-1" RUNNING {1003CCB4F3}> NIL #<CLOSURE (LAMBDA NIL :IN SLYNK::SPAWN-CHANNEL-THREAD) {1003CCAADB}> NIL)
61: ("foreign function: call_into_lisp")
62: ("foreign function: new_thread_trampoline")

Seems that gcc does not like a -no-pie option. Because first command have -fno-pie and compiles without an error.

Moreover, when I tried to execute second command, gcc says:

# gcc -o /root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall/types__grovel-tmp6XOIRI3N -g -Wl,--export-dynamic -no-pie /root/.cache/common-lisp/sbcl-1.5.6-linux-x64/root/finances/.qlot/dists/ultralisp/software/fukamachi-woo-20190913121619/src/syscall/types__grovel.o
gcc: error: unrecognized command line option ‘-no-pie’

And replacing it with -fno-pie, makes this command pass.

Probably, this issue should be reported to the grovel's tracker?

svetlyak40wt commented 4 years ago

Here is gcc --verbose --version output:

COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.4' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c+$
,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable$
threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libst$
cxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --wi$
h-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exp$
rts/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-ar$h-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86$64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
COLLECT_GCC_OPTIONS='-v' '--version' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -quiet -v -imultiarch x86_64-linux-gnu help-dummy -quiet -dumpbase help-dummy -mtune=generic -march=x86-64 -auxbase help-dummy $version --version -fstack-protector -Wformat -Wformat-security -o /tmp/ccAMSFuW.s
GNU C (Ubuntu 4.8.4-2ubuntu1~14.04.4) version 4.8.4 (x86_64-linux-gnu)
        compiled by GNU C version 4.8.4, GMP version 5.1.3, MPFR version 3.1.2-p3, MPC version 1.0.1
GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62704
COLLECT_GCC_OPTIONS='-v' '--version' '-mtune=generic' '-march=x86-64'
 as -v --64 --version -o /tmp/cczBVKe1.o /tmp/ccAMSFuW.s
GNU assembler version 2.24 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.24
GNU assembler (GNU Binutils for Ubuntu) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `x86_64-linux-gnu'.
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_
64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/:/lib/x8
6_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '--version' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/collect2 --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.
2 -z relro --version /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc
/x86_64-linux-gnu/4.8/crtbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.8/
../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. /tmp/cczBVKe1.o -lgcc
--as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x
86_64-linux-gnu/crtn.o
collect2 version 4.8.4
/usr/bin/ld --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro --version /usr/lib/gc
c/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o
 -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib -L/lib/x86_64-li
nux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. /tmp/cczBVKe1.o -lgcc --as-needed -lgcc_s --no-as-need
ed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
GNU ld (GNU Binutils for Ubuntu) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
fukamachi commented 4 years ago

Thank you for reporting.

I observed that this issue is occurred since SBCL 1.5.3, not only in Woo but in other projects like lem.

I didn't look deeper into this, but this could be a bug of SBCL. Perhaps this commit fixes it?

https://github.com/sbcl/sbcl/commit/69e90d3fc7a20622be56faa0ef5240306f8ca5ac

svetlyak40wt commented 4 years ago

Looks like this commit may fix the problem.