From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <4B4F649D.6040401@domain.hid> Date: Thu, 14 Jan 2010 19:38:21 +0100 From: Simon Boulay MIME-Version: 1.0 References: <4B4E00B3.5090607@domain.hid> <4B4F2DA5.4000606@domain.hid> <4B4F4F65.9090006@domain.hid> In-Reply-To: <4B4F4F65.9090006@domain.hid> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Xenomai-help] problem with libanalogy List-Id: Help regarding installation and common use of Xenomai List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xenomai@xenomai.org On 01/14/2010 06:07 PM, Alessio Margan @ IIT wrote: > Simon Boulay wrote: >> Hi, >> >> On 01/13/2010 06:19 PM, Alessio Margan @ IIT wrote: >> >>> Hi, >>> >>> I've got "Segmentation fault" from libanalogy.so.1 >>> Here is part of code ... >>> >>> int s526Analogy::Open() >>> { >>> int ret = 0; >>> boardIsOpen = false; >>> >>> ret = a4l_open(&dsc, dev_name); >>> if (ret< 0) { >>> fprintf(stderr, "s526Analogy::Open : a4l_open %s failed (ret=%d)\n", >>> dev_name, ret); >>> return boardIsOpen; >>> } >>> >>> fprintf(stderr, "s526Analogy::Open : name : %s\nsubd %d\nrd subd %d\nwr >>> subd %d\nfd %d\nmagic %x\nsize %d\n", >>> dsc.board_name, >>> dsc.nb_subd, >>> dsc.idx_read_subd, >>> dsc.idx_write_subd, >>> dsc.fd, >>> dsc.magic, >>> dsc.sbsize); >>> >>> dsc.sbdata = malloc(dsc.sbsize); >>> if (dsc.sbdata == NULL) { >>> ret = -ENOMEM; >>> fprintf(stderr, "s526Analogy::Open : info buffer allocation failed\n"); >>> return boardIsOpen; >>> } >>> ret = a4l_fill_desc(&dsc); >>> if (ret< 0) { >>> fprintf(stderr, "s526Analogy::Open : a4l_fill_desc failed (ret=%d)\n", ret); >>> return boardIsOpen; >>> } >>> >>> boardIsOpen = true; >>> printf("Open %s\n", dev_name); >>> >>> return boardIsOpen; >>> } >>> >>> and here is the back trace from gdb .... >>> >>> s526Analogy::Open : name : analogy_s526 >>> subd 4 >>> rd subd 1 >>> wr subd 2 >>> fd 0 >>> magic 1234abcd >>> size 1560 >>> >>> Program received signal SIGSEGV, Segmentation fault. >>> [Switching to Thread 0xb7151990 (LWP 6138)] >>> 0xb773a64a in a4l_sys_desc () from /usr/xenomai/lib/libanalogy.so.1 >>> Current language: auto; currently asm >>> (gdb) bt >>> #0 0xb773a64a in a4l_sys_desc () from /usr/xenomai/lib/libanalogy.so.1 >>> #1 0xb773a748 in a4l_fill_desc () from /usr/xenomai/lib/libanalogy.so.1 >>> #2 0x0804ebb2 in s526Analogy::Open (this=0x805e560) at s526Analogy.cpp:55 >>> #3 0x0804f8c6 in configure_board () at s526Main.cpp:95 >>> #4 0x0804f96a in main () at s526Main.cpp:115 >>> (gdb) >>> >>> dmesg give me ... >>> >>> app[6454]: segfault at 40 ip b772964a sp bfd372d0 error 4 in >>> libanalogy.so.1.0.0[b7728000+3000] >>> >>> >>> Yesterday I pull xenomai-head to get last commits, before I've run the >>> application without this segfault. >>> >> I can't reproduce your problem. >> Does the same thing happen with the following command: >> insn_read -v -d analogy0? >> >> Simon. >> >> > >> >>> TIA >>> >>> Alessio >>> >>> >>> > Thanks, > > insn_read and insn_write works fine, seems that reset the buffer wiht > zeroes works ... > > dsc.sbdata = malloc(dsc.sbsize); > bzero(dsc.sbdata, dsc.sbsize); > or > dsc.sbdata = calloc(dsc.sbsize,1); > > without I got segfaults. > > Any idea ? It seems more likely that the problem comes from the application this time but I can't confirm without repoducing the problem. You can send me more code if you will. I don't see the scope of the dsc variable for example. For my tests, I simply replaced S526Analogy::Open() by a main function and add this at the begining: const char *dev_name = "analogy0"; bool boardIsOpen = false; a4l_desc_t dsc = { .sbdata = NULL }; Does this work for you? Simon.