[Speex-dev] Speex crashing on ARM with assembler optimization enabled.

Alexander Chemeris Alexander.Chemeris at sipez.com
Wed Dec 12 15:04:55 PST 2007

On 12/13/07, Jean-Marc Valin <jean-marc.valin at usherbrooke.ca> wrote:
> Did you test what happens if you only enable arm4 assembly?
Sure. I tested with "--enable-arm4-asm" and there was no difference.

> Also, if you can do some investigation, it would be useful to check what bit
> of assembly is causing the crash. Can you disable one at a time and check?

ok. I'll try binary search, disabling optimizations.

Here is disasm of segfault point. Probably it may be helpful.

(gdb) bt
#0  0x40030334 in open_loop_nbest_pitch () from ./libspeex.so.1
#1  0x400313cc in pitch_search_3tap () from ./libspeex.so.1
#2  0x4002bec0 in nb_encode () from ./libspeex.so.1
#3  0x40036c84 in speex_encode_int () from ./libspeex.so.1
#4  0x00008d68 in main ()

(gdb) disassemble
Dump of assembler code for function open_loop_nbest_pitch:
... skipped...
0x40030300 <open_loop_nbest_pitch+620>: add     r0, r3, r8
0x40030304 <open_loop_nbest_pitch+624>: ldrsh   r3, [r0]
0x40030308 <open_loop_nbest_pitch+628>: mov     r3, r3, lsl #1
0x4003030c <open_loop_nbest_pitch+632>: strh    r3, [r0], #2
0x40030310 <open_loop_nbest_pitch+636>: add     r6, r6, #1      ; 0x1
0x40030314 <open_loop_nbest_pitch+640>: cmp     r6, r7
0x40030318 <open_loop_nbest_pitch+644>: bne     0x40030304
0x4003031c <open_loop_nbest_pitch+648>: ldr     r3, [r11, #-92]
0x40030320 <open_loop_nbest_pitch+652>: cmp     r9, r3
0x40030324 <open_loop_nbest_pitch+656>: blt     0x40030474
0x40030328 <open_loop_nbest_pitch+660>: mov     r6, r3
0x4003032c <open_loop_nbest_pitch+664>: mov     r7, #0  ; 0x0
0x40030330 <open_loop_nbest_pitch+668>: ldr     lr, [r11, #-84]
0x40030334 <open_loop_nbest_pitch+672>: ldrh    r3, [r7, lr]
0x40030338 <open_loop_nbest_pitch+676>: smulbb  r3, r3, r3
0x4003033c <open_loop_nbest_pitch+680>: mov     r3, r3, lsl #16
0x40030340 <open_loop_nbest_pitch+684>: mov     r12, r3, lsr #16
0x40030344 <open_loop_nbest_pitch+688>: ldr     r3, [r4, r10, lsl #2]
0x40030348 <open_loop_nbest_pitch+692>: smulbb  r1, r12, r3
0x4003034c <open_loop_nbest_pitch+696>: ldr     r2, [r11, #-80]
0x40030350 <open_loop_nbest_pitch+700>: ldrh    r0, [r7, r2]
0x40030354 <open_loop_nbest_pitch+704>: ldr     r2, [r5, r10, lsl #2]
0x40030358 <open_loop_nbest_pitch+708>: add     r3, r0, #1      ; 0x1
0x4003035c <open_loop_nbest_pitch+712>: smulbb  lr, r2, r3
0x40030360 <open_loop_nbest_pitch+716>: cmp     r1, lr
0x40030364 <open_loop_nbest_pitch+720>: ble     0x40030464

(gdb) info registers
r0             0x4554   17748
r1             0x0      0
r2             0x38a1   14497
r3             0x4555   17749
r4             0xbec831ec       3200791020
r5             0xbec831f4       3200791028
r6             0xae84beb2       2927935154
r7             0xc7c    3196
r8             0x38a1   14497
r9             0x50     80
r10            0x0      0
r11            0xbec83464       3200791652
r12            0x0      0
sp             0xbec831e4       0xbec831e4
lr             0xbec83384       3200791428
pc             0x40030334       0x40030334 <open_loop_nbest_pitch+672>
fps            0x0      0
cpsr           0x10     16

I'm not very familiar with gdb, so excuse me if I'm doing something wrong
with it. gdb is not very friendly to newcommers. :)

Alexander Chemeris.

SIP VoIP, IM and Presence Consulting
tel: +1 (617) 273-4000

More information about the Speex-dev mailing list