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 <[email protected]> wrote: > On Mon, Jul 1, 2013 at 4:08 AM, Alexey Bazhin <[email protected]> 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 <[email protected]> > > 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 <[email protected]> _______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
