Using libftdi.
For example if I try to use the ftdi-mpsse driver and a device exists, but permissions are insufficient, I get the following dump:
jtag> cable ftdi-mpsse 0d06:0382 ARM-USB-OCD
Initializing Olimex ARM-USB-OCD (FT2232) Cable on FTDI device 0d06:0382
Can't open ftdi device: inappropriate permissions on device!
Error: Cable initialization failed!
*** glibc detected *** jtag: double free or corruption (fasttop): 0x00000000006725c0 ***
======= Backtrace: =========
/lib/libc.so.6[0x2b77fffdeb0a]
/lib/libc.so.6(cfree+0x8c)[0x2b77fffe26fc]
/lib/libusb-0.1.so.4(usb_close+0x21)[0x2b77ffd668f1]
/usr/lib/libftdi.so.0(ftdi_usb_close+0x2c)[0x2b77ffb625cc]
jtag[0x40956d]
jtag[0x406049]
jtag[0x40ddbd]
jtag[0x40a966]
jtag[0x402b28]
jtag[0x402d8d]
/lib/libc.so.6(__libc_start_main+0xf4)[0x2b77fff8ab44]
jtag[0x402959]
A quick check whether it happens with the ftdi driver - yes:
jtag> cable ftdi 09fb:6001 UsbBlaster
Initializing Altera USB-Blaster Cable on FTDI device 09fb:6001
Segmentation fault (core dumped)
Logged In: YES
user_id=478715
Originator: YES
gdb backtrace:
#0 0x00002b70160aa765 in raise () from /lib/libc.so.6
#1 0x00002b70160ac1c0 in abort () from /lib/libc.so.6
#2 0x00002b70160e360b in ?? () from /lib/libc.so.6
#3 0x00002b70160ebdec in ?? () from /lib/libc.so.6
#4 0x00002b70160ece23 in malloc () from /lib/libc.so.6
#5 0x00002b7015e752ff in usb_os_find_devices () from /lib/libusb-0.1.so.4
#6 0x00002b7015e72c22 in usb_find_devices () from /lib/libusb-0.1.so.4
#7 0x00002b7015c6e7cb in ftdi_usb_open_desc () from /usr/lib/libftdi.so.0
#8 0x0000000000408ced in ftdi_generic_open (parport=<value optimized out>) at parport/ftdi.c:243
#9 0x0000000000409592 in ftdi_std_open (parport=0x1aff) at parport/ftdi.c:272
#10 0x0000000000407552 in usbblaster_init (cable=0x65b6c0) at cable/usbblaster.c:48
#11 0x000000000040dd26 in cmd_cable_run (params=0x65b580) at cable.c:68
#12 0x000000000040a966 in cmd_run (params=0x65b580) at cmd/cmd.c:42
#13 0x0000000000402b28 in jtag_parse_line (line=<value optimized out>) at jtag.c:177
#14 0x0000000000402d8d in main (argc=1, argv=<value optimized out>) at jtag.c:203
Logged In: YES
user_id=478715
Originator: YES
There actually seem to be TWO problems. The other backtrace was from a segfault. The following one is for the case that lack of permission is correctly detected, but then cleanup fails (that's the case for which I originally opened the bug):
jtag> cable ftdi 09fb:6001 UsbBlaster
Initializing Altera USB-Blaster Cable on FTDI device 09fb:6001
Can't open ftdi device: inappropriate permissions on device!
Error: Cable initialization failed!
*** glibc detected *** /home/kawk/work/urjtag/trunk/owjtag/src/jtag: double free or corruption (fasttop):
#0 0x00002b57978da765 in raise () from /lib/libc.so.6
#1 0x00002b57978dc1c0 in abort () from /lib/libc.so.6
#2 0x00002b579791360b in ?? () from /lib/libc.so.6
#3 0x00002b579791ab0a in ?? () from /lib/libc.so.6
#4 0x00002b579791e6fc in free () from /lib/libc.so.6
#5 0x00002b57976a28f1 in usb_close () from /lib/libusb-0.1.so.4
#6 0x00002b579749e5cc in ftdi_usb_close () from /usr/lib/libftdi.so.0
#7 0x000000000040958d in ftdi_close (parport=<value optimized out>) at parport/ftdi.c:435
#8 0x0000000000406049 in chain_disconnect (chain=0x645340) at chain.c:67
#9 0x000000000040dddd in cmd_cable_run (params=0x65b540) at cable.c:70
#10 0x000000000040a986 in cmd_run (params=0x65b540) at cmd/cmd.c:42
#11 0x0000000000402b28 in jtag_parse_line (line=<value optimized out>) at jtag.c:177
#12 0x0000000000402d8d in main (argc=1, argv=<value optimized out>) at jtag.c:203
Logged In: YES
user_id=478715
Originator: YES
A plain segfault occurs if the device isn't there at all:
jtag> cable ftdi 09fb:6001 UsbBlaster
Initializing Altera USB-Blaster Cable on FTDI device 09fb:6001
Can't open ftdi device: device not found
Error: Cable initialization failed!
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 47186968530848 (LWP 7877)]
0x00002aea91c184a7 in usb_control_msg () from /lib/libusb-0.1.so.4
(gdb) backtrace
#0 0x00002aea91c184a7 in usb_control_msg () from /lib/libusb-0.1.so.4
#1 0x00002aea91a119c1 in ftdi_disable_bitbang () from /usr/lib/libftdi.so.0
#2 0x0000000000409584 in ftdi_close (parport=<value optimized out>) at parport/ftdi.c:434
#3 0x0000000000406049 in chain_disconnect (chain=0x645340) at chain.c:67
#4 0x000000000040dddd in cmd_cable_run (params=0x65b610) at cable.c:70
#5 0x000000000040a986 in cmd_run (params=0x65b610) at cmd/cmd.c:42
#6 0x0000000000402b28 in jtag_parse_line (line=<value optimized out>) at jtag.c:177
#7 0x0000000000402d8d in main (argc=1, argv=<value optimized out>) at jtag.c:203
BTW, I used libusb-0.1.12 and libftdi 0.10 (Ubuntu 7.10 standard)
Logged In: YES
user_id=156321
Originator: NO
Problem addressed in revision 784. Please check whether this fixes the problem for you as well.
Device not present case:
jtag> cable ftdi 09fb:6001 UsbBlaster
Initializing Altera USB-Blaster Cable on FTDI device 09fb:6001
Can't open ftdi device: device not found
Error: Cable initialization failed!
jtag>
Present but no permissions case:
jtag> cable ftd2xx-mpsse 15ba:0003 ARM-USB-OCD
Initializing Olimex ARM-USB-OCD (FT2232) Cable on FTDI device 15ba:0003
Error: unable to open FTDI device: 3
Error: Cable initialization failed!
jtag>
Logged In: YES
user_id=478715
Originator: YES
Works for me too, thanks!