j3pic / lisp-binary

A library to easily read and write complex binary formats.
GNU General Public License v3.0
91 stars 15 forks source link

Doesn't build on Raspberry Pi #28

Closed j3pic closed 4 years ago

j3pic commented 5 years ago

Error message:

failed AVER: (TYPEP OFFSET '(UNSIGNED-BYTE 12))
This is probably a bug in SBCL itself. (Alternatively, SBCL
might have been corrupted by bad user code, e.g. by an undefined
Lisp operation like (FMAKUNBOUND 'COMPILE), or by stray pointers
from alien code or from unsafe Lisp code; or there might be a
bug in the OS or hardware that SBCL is running on.) If it seems
to be a bug in SBCL itself, the maintainers would like to know
about it. Bug reports are welcome on the SBCL mailing lists,
which you can find at <http://sbcl.sourceforge.net/>.
   [Condition of type SB-INT:BUG]

Backtrace:
  0: (SB-INT:BUG "~@<failed AVER: ~2I~_~A~:>" (TYPEP SB-VM::OFFSET (QUOTE (UNSIGNED-BYTE 12))))
  1: (SB-IMPL::%FAILED-AVER (TYPEP SB-VM::OFFSET (QUOTE (UNSIGNED-BYTE 12))))
  2: (SB-VM::EMIT-LOAD/STORE-INSTRUCTION #<SB-ASSEM:SEGMENT :TYPE :REGULAR> :AL :STORE :WORD #<SB-C:TN t1[R0]> #S(SB-VM::MEMORY-OPERAND :BASE #<SB-C:TN t2[CFP]> :OFFSET 4896 :DIRECTION :UP :MODE :OFFSET))
  3: (SB-VM::STR-INST-EMITTER #<SB-ASSEM:SEGMENT :TYPE :REGULAR> #<SB-C::VOP :INFO SB-C:MOVE :ARGS #<SB-C:TN-REF :TN #<SB-C:TN t3[R0]> :WRITE-P NIL :VOP SB-C:MOVE> :RESULTS #<SB-C:TN-REF :TN #<SB-C:TN t4[C..
  4: (SB-VM::STORE-STACK #<SB-C::VOP :INFO SB-C:MOVE :ARGS #<SB-C:TN-REF :TN #<SB-C:TN t3[R0]> :WRITE-P NIL :VOP SB-C:MOVE> :RESULTS #<SB-C:TN-REF :TN #<SB-C:TN t4[CS1224]> :WRITE-P T :VOP SB-C:MOVE>> #<SB..
  5: (SB-C::GENERATE-CODE #<SB-C:COMPONENT :NAME (SB-C::ESCAPE-FUN #:EXIT-BLOCK-0) {51C4AC19}>)
  6: (SB-C::%COMPILE-COMPONENT #<SB-C:COMPONENT :NAME (SB-C::ESCAPE-FUN #:EXIT-BLOCK-0) {51C4AC19}>)
  7: (SB-C::COMPILE-COMPONENT #<SB-C:COMPONENT :NAME (SB-C::ESCAPE-FUN #:EXIT-BLOCK-0) {51C4AC19}>)
  8: (SB-C::%COMPILE (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::TYPE-INFO) (DECLARE (TYPE LISP-BINARY::DEFBINARY-TYPE LISP-BINARY::TYPE-INFO) (OPTI..
  9: (SB-C::FOPCOMPILE-FUNCTION (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::TYPE-INFO) (DECLARE (TYPE LISP-BINARY::DEFBINARY-TYPE LISP-BINARY::TYPE-..
 10: (SB-C::FOPCOMPILE (SB-IMPL::%DEFUN (QUOTE LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD) (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::TYPE-INFO) (DEC..
 11: (SB-C::CONVERT-AND-MAYBE-COMPILE (SB-IMPL::%DEFUN (QUOTE LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD) (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::..
 12: ((FLET SB-C::DEFAULT-PROCESSOR :IN SB-C::PROCESS-TOPLEVEL-FORM) (SB-IMPL::%DEFUN (QUOTE LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD) (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BI..
 13: (SB-C::PROCESS-TOPLEVEL-FORM (SB-IMPL::%DEFUN (QUOTE LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD) (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::TYPE..
 14: (SB-C::PROCESS-TOPLEVEL-PROGN ((EVAL-WHEN (:COMPILE-TOPLEVEL) (SB-C:%COMPILER-DEFUN # # T)) (SB-IMPL::%DEFUN (QUOTE LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD) (SB-INT:NAMED-LAMBDA LISP-BINARY::EXPAND-D..
 15: (SB-C::PROCESS-TOPLEVEL-FORM (PROGN (EVAL-WHEN (:COMPILE-TOPLEVEL) (SB-C:%COMPILER-DEFUN # # T)) (SB-IMPL::%DEFUN (QUOTE LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD) (SB-INT:NAMED-LAMBDA LISP-BINARY::EXP..
 16: ((FLET SB-C::DEFAULT-PROCESSOR :IN SB-C::PROCESS-TOPLEVEL-FORM) (DEFUN LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::TYPE-INFO) "Expands the :TYPE field of a DEFBINAR..
 17: (SB-C::PROCESS-TOPLEVEL-FORM (DEFUN LISP-BINARY::EXPAND-DEFBINARY-TYPE-FIELD (LISP-BINARY::STRUCT-NAME LISP-BINARY::TYPE-INFO) "Expands the :TYPE field of a DEFBINARY form. Returns three values: ..)
 18: (SB-C::SUB-SUB-COMPILE-FILE #<SB-C::SOURCE-INFO >)
 19: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN SB-C::SUB-COMPILE-FILE))
 20: ((LAMBDA NIL :IN SB-C::SUB-COMPILE-FILE))
 21: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
 22: (SB-C::SUB-COMPILE-FILE #<SB-C::SOURCE-INFO >)
 23: (COMPILE-FILE #P"/home/pi/quicklisp/local-projects/lisp-binary/binary-2.lisp" :OUTPUT-FILE #P"/home/pi/.cache/common-lisp/sbcl-1.2.4.debian-linux-arm/home/pi/quicklisp/local-projects/lisp-binary/binar..
 24: (UIOP/UTILITY:CALL-WITH-MUFFLED-CONDITIONS #<CLOSURE (LAMBDA NIL :IN UIOP/LISP-BUILD:COMPILE-FILE*) {51C4A53D}> NIL)
 25: (UIOP/PATHNAME:CALL-WITH-ENOUGH-PATHNAME #P"/home/pi/quicklisp/local-projects/lisp-binary/binary-2.lisp" NIL #<CLOSURE (LAMBDA (UIOP/LISP-BUILD::INPUT-FILE) :IN UIOP/LISP-BUILD:COMPILE-FILE*) {51C4A51..
 26: (UIOP/LISP-BUILD:COMPILE-FILE* #P"/home/pi/quicklisp/local-projects/lisp-binary/binary-2.lisp" :OUTPUT-FILE #P"/home/pi/.cache/common-lisp/sbcl-1.2.4.debian-linux-arm/home/pi/quicklisp/local-projects/..
 27: (ASDF/LISP-ACTION:PERFORM-LISP-COMPILATION #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "lisp-binary" "binary-2">)
 28: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unavailable argument> #<unavailable argument> #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "lisp-binary" "binary-2">)
 29: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "lisp-binary" "binary-2">) [fast-method]
 30: ((:METHOD ASDF/PLAN:PERFORM-PLAN (LIST)) ((#1=#<ASDF/LISP-ACTION:COMPILE-OP > . #2=#<ASDF/LISP-ACTION:CL-SOURCE-FILE #3="lisp-binary" "binary-2">) (#4=#<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> . #2#) (..
 31: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
 32: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) ((#1=#<ASDF/LISP-ACTION:COMPILE-OP > . #2=#<ASDF/LISP-ACTION:CL-SOURCE-FILE #3="lisp-binary" "binary-2">) (#4=#<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> . #..
 33: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
 34: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {51C4A329}> :VERBOSE NIL) [fast-method]
 35: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "lisp-binary"> :VERBOSE NIL) [fast-method]
 36: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "lisp-binary"> :VERBOSE NIL)
 37: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
 38: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP :VERBOSE NIL> #<ASDF/SYSTEM:SYSTEM "lisp-binary"> :VERBOSE NIL) [fast-method]
 39: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "lisp-binary" :VERBOSE NIL)
 40: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
 41: (ASDF/CACHE:CALL-WITH-ASDF-CACHE #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {51C4A265}> :OVERRIDE NIL :KEY NIL)
 42: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lisp-binary" :VERBOSE NIL) [fast-method]
 43: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "lisp-binary" :VERBOSE NIL) [fast-method]
 44: (ASDF/OPERATE:LOAD-SYSTEM "lisp-binary" :VERBOSE NIL)
 45: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {51C4A1BD}>)
 46: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "lisp-binary" :PROMPT NIL)
 47: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unavailable argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {51C4A125}>) [fast-method]
 48: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {51D3B7F9}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {51C4A125}>) [fast-method..
 49: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) #<unavailable argument> :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method]
 50: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {51C4A0FD}>)
 51: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD :LISP-BINARY) #<NULL-LEXENV>)
 52: (EVAL (QUICKLISP-CLIENT:QUICKLOAD :LISP-BINARY))
 53: (SWANK::EVAL-REGION "(ql:quickload :lisp-binary) ..)
 54: ((LAMBDA NIL :IN SWANK-REPL::REPL-EVAL))
 55: (SWANK-REPL::TRACK-PACKAGE #<CLOSURE (LAMBDA NIL :IN SWANK-REPL::REPL-EVAL) {51C4A05D}>)
 56: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation request." #<CLOSURE (LAMBDA NIL :IN SWANK-REPL::REPL-EVAL) {51C4A04D}>)
 57: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA NIL :IN SWANK-REPL::REPL-EVAL) {51C4A03D}>)
 58: (SWANK-REPL::REPL-EVAL "(ql:quickload :lisp-binary) ..)
 59: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK-REPL:LISTENER-EVAL "(ql:quickload :lisp-binary) ..)
 60: (EVAL (SWANK-REPL:LISTENER-EVAL "(ql:quickload :lisp-binary) ..)
      Locals:
        SB-DEBUG::ARG-0 = (SWANK-REPL:LISTENER-EVAL "(ql:quickload :lisp-binary)\n")
 61: (SWANK:EVAL-FOR-EMACS (SWANK-REPL:LISTENER-EVAL "(ql:quickload :lisp-binary) ..)
 62: (SWANK::PROCESS-REQUESTS T)
 63: ((LAMBDA NIL :IN SWANK::HANDLE-REQUESTS))
 64: ((LAMBDA NIL :IN SWANK::HANDLE-REQUESTS))
 65: (SWANK/SBCL::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SWANK::HANDLE-REQUESTS) {51A3CF95}>)
 66: ((FLET SWANK/BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/usr/share/common-lisp/source/slime/swank/sbcl.lisp") #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA NIL :IN SWANK::HANDLE-REQUESTS) {51A3CF9..
 67: (SWANK::CALL-WITH-BINDINGS ((*STANDARD-OUTPUT* . #1=#<SWANK/GRAY::SLIME-OUTPUT-STREAM {51A9D7F9}>) (*STANDARD-INPUT* . #2=#<SWANK/GRAY::SLIME-INPUT-STREAM {51AA47E9}>) (*TRACE-OUTPUT* . #1#) (*ERROR-O..
 68: (SWANK::HANDLE-REQUESTS #<SWANK::SINGLETHREADED-CONNECTION {51A99A51}> T)
 69: ((LABELS SWANK/SBCL::RUN :IN SWANK/BACKEND:ADD-FD-HANDLER) 6)
 70: (SB-IMPL::SUB-SUB-SERVE-EVENT NIL NIL)
 71: (SB-IMPL::SUB-SERVE-EVENT NIL NIL NIL)
 72: (SB-SYS:WAIT-UNTIL-FD-USABLE 0 :INPUT NIL T)
 73: (SB-IMPL::REFILL-INPUT-BUFFER #<SB-SYS:FD-STREAM for "standard input" {51A99299}>)
 74: (SB-IMPL::INPUT-CHAR/UTF-8 #<SB-SYS:FD-STREAM for "standard input" {51A99299}> NIL 0)
 75: ((LAMBDA (&REST REST) :IN SB-IMPL::GET-EXTERNAL-FORMAT) #<SB-SYS:FD-STREAM for "standard input" {51A99299}> NIL 0)
 76: (READ-CHAR #<SB-SYS:FD-STREAM for "standard input" {51A99299}> NIL 0 #<unused argument>)
 77: (READ-CHAR #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {4F0645F9}> NIL 0 #<unused argument>)
 78: (SB-IMPL::%READ-PRESERVING-WHITESPACE #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {4F0645F9}> NIL (NIL) T)
 79: (SB-IMPL::%READ-PRESERVING-WHITESPACE #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {4F0645F9}> NIL (NIL) NIL)
 80: (READ #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {4F0645F9}> NIL (NIL) NIL)
 81: (SB-IMPL::REPL-READ-FORM-FUN #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {4F0645F9}> #<unavailable argument>)
 82: (SB-IMPL::REPL-FUN NIL)
 83: ((LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL))
 84: (SB-IMPL::%WITH-REBOUND-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-IMPL::TOPLEVEL-REPL) {51A991ED}>)
 85: (SB-IMPL::TOPLEVEL-REPL NIL)
 86: (SB-IMPL::TOPLEVEL-INIT)
 87: ((FLET #:WITHOUT-INTERRUPTS-BODY-75 :IN SAVE-LISP-AND-DIE))
 88: ((LABELS SB-IMPL::RESTART-LISP :IN SAVE-LISP-AND-DIE))

SBCL version:

$ sbcl --version
SBCL 1.3.7.debian
j3pic commented 5 years ago

It is failing while trying to compile the function EXPAND-DEFBINARY-TYPE-FIELD.

Sod-Almighty commented 4 years ago

I am also getting this error. Why hasn't this been fixed yet?

j3pic commented 4 years ago

I suspect fixing this requires a pretty substantial refactor of the EXPAND-DEFBINARY-TYPE-FIELD function. I haven't had the time to do it.

Sod-Almighty commented 4 years ago

As I understand it, to "refactor" is to take poorly-written - yet working - code and tidy it up. Can it really be called "refactoring" if it involves fixing a bug so severe that it corrupts lisp's program stack?

j3pic commented 4 years ago

I believe the code would compile if each of the branches of the destructuring-case were broken out into its own function. This code works fine when compiled on x86. The problem is that SBCL on ARM can't handle it, probably because of the function's excessive size.

Sod-Almighty commented 4 years ago

Over 600 lines. Yeah, that is pretty long. I can try to break them out into separate functions to test the theory.

j3pic commented 4 years ago

Lisp-Binary now compiles and passes its test suite under SBCL 1.3.7 on a Raspberry Pi 3.