C_SCHEME_UNDEFINED SIGSEGV added by scmc on Sun Mar 4 20:40:25 2018


  (define sizeof-ycl_ctx (foreign-value "sizeof(struct ycl_ctx)" size_t))
  (define-record ycl-ctx buffer)
  (define-foreign-type ycl-ctx scheme-pointer ycl-ctx-buffer)
  (define ycl-error (lambda (ctx)
    ((foreign-lambda (const c-string) "ycl_strerror" ycl-ctx) ctx)))
  ;; an ycl-ctx is allocated with: (make-ycl-ctx (make-blob sizeof-ycl_ctx))
  ;; later and passed around a bit until passed to ycl-error



#define C_SPECIAL_BITS            0x0000000e
#define C_SCHEME_UNDEFINED        ((C_word)(C_SPECIAL_BITS | 0x00000010))

stub35(C_SCHEME_UNDEFINED,t2);

    frame #0: ycl.so`stub35(C_buf=30, C_a0=140737488346112) at ycl.c:42
   39   C_regparm static C_word C_fcall stub35(C_word C_buf,C_word C_a0){
   40   C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;
   41   void * t0=(void * )C_data_pointer_or_null(C_a0);
-> 42   C_r=C_mpointer(&C_a,(void*)ycl_strerror(t0));
   43   return C_r;}

(lldb) p/x C_buf
(long) $3 = 0x000000000000001e
(lldb) p C_a
(long *) $1 = 0x000000000000001e

* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x1e)
    frame #0: 0x0000000800d05e61 libchicken.so.8`C_mpointer + 17
libchicken.so.8`C_mpointer:
->  0x800d05e61 <+17>: movq   %rcx, (%rax)
    0x800d05e64 <+20>: movq   %rsi, 0x8(%rax)
    0x800d05e68 <+24>: leaq   0x10(%rax), %rcx
    0x800d05e6c <+28>: movq   %rcx, (%rdi)

C_regparm C_word C_fcall C_mpointer(C_word **ptr, void *mp)                     
{                                                                               
  C_word                                                                        
    *p = *ptr,                                                                  
    *p0 = p;                                                                    
                                                                                
  *(p++) = C_POINTER_TYPE | 1;                                                  
  *((void **)p) = mp;                                                           
  *ptr = p + 1;                                                                 
  return (C_word)p0;                                                            
}