Robert Diemer wrote:

Hello,
thank you for your answer, Steve. Unfortunatly your version from liHIL don't work, too. There is the same error. If I make a "strace gdbproxy msp430" (libHIL in 32bit version) I get the following output:
...
open("/dev/parport0", O_RDWR)           = 3
ioctl(3, PPCLAIM, 0xffffcf28)           = 0
ioctl(3, PPDATADIR, 0xffffce34)         = -1 EINVAL (Invalid argument)
dup(2)                                  = 4
fcntl64(4, F_GETFL)                     = 0x8002 (flags O_RDWR|O_LARGEFILE)
brk(0)                                  = 0x8103000
brk(0x8124000)                          = 0x8124000
fstat64(0x4, 0xffffcc6c)                = 0
...

On a 32bit computer the syscall "ioctl(3, PPDATADIR, 0xffffce34)" works, the result is 0 and not -1.


And if I use a short test-program with libHIL, both in 64bit mode, it works too.
Therefore I think the problem is the syscall.

Now, I don't know how to isolate the problem. I thought that the problem was the conversion of the pointer in the ioctl-syscall to unsigned long.

Has anybody an idea? Steve, can you tell me please which library you use with gdbproxy?
My ldd-output is
linux-gate.so.1 =>  (0xffffe000)
libHIL.so => /usr/local/msp430//lib32/libHIL.so (0x5556d000)
libc.so.6 => /lib32/libc.so.6 (0x55591000)
/lib/ld-linux.so.2 (0x55555000)
These are all 32bit libraries.

I guess the conversion of the unsigned long is the source of the problem. However, it works out OK on other x86_64 machines. If it didn't, 32 bit compatibility wouldn't work. ioctl calls are used by most programs, though the ones to ppdev may be rare. My machine is running Linux 2.6.13, but note that the Fedora versions of the kernels always contain various patches. I used to run 2.6.12 on the same machine, without problems.

My ldd output is:
       linux-gate.so.1 =>  (0xffffe000)
       libHIL.so => /usr/lib/libHIL.so (0xf7fc6000)
       libc.so.6 => /lib/libc.so.6 (0x00a33000)
       /lib/ld-linux.so.2 (0x00a15000)

Regards,
Steve


Reply via email to