Hi All,
I have leveraged the blecent demo application to build a BLE gateway type
application. It works great most of the time but rarely I see a crash which
I could really use some help debugging.

Console logs:
18286:[ts=18286000ssb, mod=4 level=1] GATT procedure initiated: read;
att_handle=43
18293:[ts=18293000ssb, mod=4 level=1] GATT procedure initiated: write;
att_handle=44 len=2
18529:Unhandled interrupt (3), exception sp 0x10000760
18529: r0:0x100007a7  r1:0x20017d91  r2:0x20008534  r3:0x10010001
18529: r4:0x0000001c  r5:0xfffffffe  r6:0x00000001  r7:0x100007a7
18529: r8:0x00000000  r9:0x00000000 r10:0x10000000 r11:0x00000000
18529:r12:0x10000648  lr:0x08023753  pc:0x08025df6 psr:0x21000200
18529:ICSR:0x0440f803 HFSR:0x40000000 CFSR:0x00000400
18529:BFAR:0xe000ed38 MMFAR:0xe000ed34

(gdb) list *0x08025df6
0x8025df6 is in memcpy (memcpy.c:23).
18 size_t nq = n >> 3;
19 asm volatile ("cld ; rep ; movsq ; movl %3,%%ecx ; rep ; movsb":"+c"
20      (nq), "+S"(p), "+D"(q)
21      :"r"((uint32_t) (n & 7)));
22 #else
23 while (n--) {
24 *q++ = *p++;
25 }
26 #endif
27
(gdb) list *0x08023753
0x8023753 is in os_mbuf_copydata (os_mbuf.c:722).
717        m = SLIST_NEXT(m, om_next);
718    }
719    while (len > 0 && m != NULL) {
720        count = min(m->om_len - off, len);
721        memcpy(udst, m->om_data + off, count);
722        len -= count;
723        udst += count;
724        off = 0;
725        m = SLIST_NEXT(m, om_next);
726    }

Dumping more from the stack from the crash log:

(gdb) x/20wx 0x10000760
0x10000760 <ble_gateway_stack+1888>: 0x100007a7 0x20017d91 0x20008534
0x10010001
0x10000770 <ble_gateway_stack+1904>: 0x10000648 0x08023753 0x08025df6
0x21000200
0x10000780 <ble_gateway_stack+1920>: 0x08023738 0x20008514 0x00000002
0x20008514
0x10000790 <ble_gateway_stack+1936>: 0x00000001 0x00000000 0x00000000
0x0802c055
0x100007a0 <ble_gateway_stack+1952>: 0x00000000 0x0502bf6f 0x04000100
0x00501300
(gdb)
0x100007b0 <ble_gateway_stack+1968>: 0x00220000 0xe3df95b1 0x8210d712
0x65664608
0x100007c0 <ble_gateway_stack+1984>: 0x1950c6c9 0x5fb80fba 0x01021fd0
0x10020305
0x100007d0 <ble_gateway_stack+2000>: 0x000000f1 0x00000000 0x00000000
0x00000000
0x100007e0 <ble_gateway_stack+2016>: 0x00000000 0x00000000 0x3e04bc00
0x0001022b
0x100007f0 <ble_gateway_stack+2032>: 0xb8158700 0x1ff4f5d8 0x03060102
0x17fe9f03

It seems like the caller is:
(gdb) list *0x0802c055
0x802c055 is in ble_hs_log_mbuf (ble_hs_log.c:31).
26 ble_hs_log_mbuf(const struct os_mbuf *om)
27 {
28    uint8_t u8;
29    int i;
30
31    for (i = 0; i < OS_MBUF_PKTLEN(om); i++) {
32        os_mbuf_copydata(om, i, 1, &u8);
33        BLE_HS_LOG(DEBUG, "0x%02x ", u8);
34    }
35 }

But notice that I cannot trace back further to who called ble_hs_log_mbuf()
because it seems like
the stack has been trashed!!

Any help is appreciated.
Thanks,
Pritish

Reply via email to