[chuck-users] Anyone else running ChucK dual-core in 64-bit mode?

Ken Restivo ken at restivo.org
Fri Apr 27 14:09:50 EDT 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Fri, Apr 27, 2007 at 06:00:10PM +0200, Michel Koppelaar wrote:
> Hi,
> 
> I seem to be having the same problem. I've been trying to get ChucK to run on AMD64/Linux these last few days. Tried alsa, oss and jack build options: segfaults in each case. More details:
> 
> =================================================================================
> 1. platform
> distro: Ubuntu 7.04
> cpu: AMD Athlon 64 X2 Dual Core Processor 4200+
> 
> 2. chuck --version
> chuck version: 1.2.0.8 (dracula)
>    exe target: linux (alsa)
>    http://chuck.cs.princeton.edu/
> 
> 3. gdb output
> GNU gdb 6.6-debian
> Copyright (C) 2006 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "x86_64-linux-gnu"...
> Using host libthread_db library "/lib/libthread_db.so.1".
> (gdb) run -v5 ../examples/stk/bowed.ck
> Starting program: /home/michel/src/chuck-1.2.0.8/src/chuck -v5 ../examples/stk/bowed.ck
> [Thread debugging using libthread_db enabled]
> [New Thread 47062529307568 (LWP 12822)]
> [chuck]:(2:SYSTEM): setting log level to: 5 (INFORM)...
> [chuck]:(2:SYSTEM): initializing virtual machine...
> [chuck]:(2:SYSTEM):  | behavior: HALT
> [chuck]:(2:SYSTEM):  | allocating shreduler...
> [chuck]:(2:SYSTEM):  | allocating messaging buffers...
> [chuck]:(2:SYSTEM):  | real-time audio: YES
> [chuck]:(2:SYSTEM):  | mode: CALLBACK
> [chuck]:(2:SYSTEM):  | sample rate: 48000
> [chuck]:(2:SYSTEM):  | buffer size: 512
> [chuck]:(2:SYSTEM):  | num buffers: 8
> [chuck]:(2:SYSTEM):  | devices adc: 0 dac: 0 (default 0)
> [chuck]:(2:SYSTEM):  | channels in: 2 out: 2
> [chuck]:(2:SYSTEM): initializing compiler...
> [chuck]:(3:SEVERE):  | initializing type checker...
> [chuck]:(3:SEVERE):  |  | adding base classes...
> [chuck]:(3:SEVERE):  |  |  | class 'object'
> [chuck]:(3:SEVERE):  |  |  | class 'array'
> [chuck]:(3:SEVERE):  |  |  | class 'string'
> [chuck]:(3:SEVERE):  |  |  | class 'ugen'
> [chuck]:(3:SEVERE):  |  |  | class 'shred'
> [chuck]:(3:SEVERE):  |  |  | class 'event'
> [chuck]:(3:SEVERE):  |  |  | class 'class'
> [chuck]:(3:SEVERE):  | initializing emitter...
> [chuck]:(3:SEVERE):  | loading built-in modules...
> [chuck]:(3:SEVERE):  |  | module osc...
> [chuck]:(3:SEVERE):  |  | module xxx...
> [chuck]:(3:SEVERE):  |  | module filter...
> [chuck]:(3:SEVERE):  |  | module STK...
> [chuck]:(3:SEVERE):  |  | class 'machine'...
> [chuck]:(3:SEVERE):  |  | class 'std'...
> [chuck]:(5:INFORM):  |  | initializing KBHitManager...
> [New Thread 1082132800 (LWP 12825)]
> [chuck]:(3:SEVERE):  |  | class 'math'...
> [chuck]:(3:SEVERE):  |  | class 'opsc'...
> [chuck]:(2:SYSTEM): type dependency resolution: MANUAL
> [chuck]:(2:SYSTEM): initializing synthesis engine...
> [chuck]:(3:SEVERE):  | initializing 'dac'...
> [chuck]:(3:SEVERE):  | initializing 'adc'...
> [chuck]:(3:SEVERE):  | initializing 'blackhole'...
> [chuck]:(2:SYSTEM):  | initializing 'real-time' audio...
> [chuck]:(5:INFORM):  |  | initializing callback...
> [chuck]:(5:INFORM):  |  | starting kb loop...
> [New Thread 1090525504 (LWP 12826)]
> [chuck]:(3:SEVERE):  | allocating buffers for 512 x 2 samples...
> [chuck]:(3:SEVERE): starting compilation...
> [chuck]:(2:SYSTEM): starting listener on port: 8888...
> [New Thread 1098918208 (LWP 12827)]
> [chuck]:(2:SYSTEM): running virtual machine...
> [chuck]:(3:SEVERE):  | initializing audio buffers...
> [chuck]:(3:SEVERE):  | virtual machine running...
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 47062529307568 (LWP 12822)]
> 0x0000000000491420 in Instrmnt_ctor ()
> =================================================================================
> 
> Hopefully this can be sorted out. I'm really interested in trying out ChucK.
> 

Hmm, I dug around a bit, not really knowing what I'm doing, but I suspect that the culprit is probably an assumption about the size of UINTS...  a 32-bit vs 64-bit issue. My eye was drawn to that OBJ_MEMBER_UINT() macro, and I took a shimmering journey into the through-the-looking-glass world of defines on top of defines on top of defines:

	#define OBJ_MEMBER_UINT(obj,offset)     (*(t_CKUINT *)OBJ_MEMBER_DATA(obj,offset))
...
	#define t_CKUINT                    t_CKDWORD
...
	#define t_CKDWORD                   unsigned long

There's also this:
	#define OBJ_MEMBER_DATA(obj,offset)     (obj->data + offset)

So, if offset just happens to be a 32-bit value, that smells to me like a likely source of a segfault. Offset probably needs to be a long long, doesn't it? 

But, again, there is probably advanced casting mojo going on, and my knowlege of Intel assembler is near zero. It's also been over 4 years since I last wrote a line of C.

I hope there are devs reading this list. If I can do anything more to help, I will gladly do so.

- -ken
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQFGMjxue8HF+6xeOIcRAnvRAJ9+75gQtbxEDxX5i2lbz84b1TLDzwCg9YGD
rQdqQCWKuNGT3EpQgrh+k9A=
=3sxO
-----END PGP SIGNATURE-----


More information about the chuck-users mailing list