discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] Bug in volk on armv6


From: Alexey Bazhin
Subject: Re: [Discuss-gnuradio] Bug in volk on armv6
Date: Thu, 4 Jul 2013 12:13:37 +0400

Confirming that this fix works.

But now volk test fails in another place.

(gdb) run
Starting program: /root/gnuradio-3.6.5.1/build/volk/lib/test_all 
[Thread debugging using libthread_db enabled]
Using host libthread_db library
"/lib/arm-linux-gnueabihf/libthread_db.so.1". Running 92 test cases...
Using Volk machine: generic_orc
RUN_VOLK_TESTS: volk_16ic_s32f_deinterleave_real_32f_a
no architectures to test
RUN_VOLK_TESTS: volk_16ic_deinterleave_real_8i_a
generic completed in 0s
orc completed in 0.01s
Best arch: generic
RUN_VOLK_TESTS: volk_16ic_deinterleave_16i_x2_a
generic completed in 0s
orc completed in 0s
Best arch: generic
RUN_VOLK_TESTS: volk_16ic_s32f_deinterleave_32f_x2_a
generic completed in 0.01s

Program received signal SIGSEGV, Segmentation fault.
0xb6f96428 in ?? () from /usr/lib/arm-linux-gnueabihf/libvolk.so.0.0.0
(gdb) bt
#0  0xb6f96428 in ?? ()
#from /usr/lib/arm-linux-gnueabihf/libvolk.so.0.0.0
Cannot access memory at address 0x0
#1  0xb6db3da0 in pthread_mutex_unlock ()
#from /lib/arm-linux-gnueabihf/libc.so.6 2  0x00000020 in ?? ()
#3  0x00000020 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt
stack?)

P.S. I'm trying to compile gnuradio on raspbian on Raspberry Pi board.
All other tests passed ok, so some broken volk function shouldn't be a
problem for me since I only want to use network sink on it.

On Wed, 3 Jul 2013 10:55:06 -0400
Tom Rondeau <address@hidden> wrote:

> On Mon, Jul 1, 2013 at 4:08 AM, Alexey Bazhin <address@hidden> wrote:
> > Hi!
> >
> > I would like to report a bug in volk on armv6.
> >
> > There is infinite "while" cycle in volk/tmpl/volk_cpu.tmpl.c
> > function "has_neon" (line 111).
> >
> > Code "while(!found_neon && auxvec_f) {" will loop infinitely if
> > there is no neon in platform. found_neon will never be true and file
> > descriptor auxvec_f will always be true.
> >
> > --
> > Alexey Bazhin <address@hidden>
> 
> Ok, I see your point. Looks like we should be testing the return value
> from fread, instead of auxvec_f. Can you confirm if this patch works?
> 
> diff --git a/volk/tmpl/volk_cpu.tmpl.c b/volk/tmpl/volk_cpu.tmpl.c
> index 81fc679..b1a0a4a 100644
> --- a/volk/tmpl/volk_cpu.tmpl.c
> +++ b/volk/tmpl/volk_cpu.tmpl.c
> @@ -116,10 +116,11 @@ static int has_neon(void){
>      auxvec_f = fopen("/proc/self/auxv", "rb");
>      if(!auxvec_f) return 0;
> 
> +    size_t r = 1;
>      //so auxv is basically 32b of ID and 32b of value
>      //so it goes like this
> -    while(!found_neon && auxvec_f) {
> -      fread(auxvec, sizeof(unsigned long), 2, auxvec_f);
> +    while(!found_neon && r) {
> +      r = fread(auxvec, sizeof(unsigned long), 2, auxvec_f);
>        if((auxvec[0] == AT_HWCAP) && (auxvec[1] & HWCAP_NEON))
>          found_neon = 1;
>      }
> 
> Or might be better to test 'if(r < 2)' after the fread line and break
> in case an error occurs and we only get 1 character out and not try to
> read from it again. Probably not a bit deal since we're only reading
> in two chars at a time.
> 
> Tom


-- 
Alexey Bazhin <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]