int register_panel_id(int id_value)
{
int i;
dprintf(CRITICAL, "song 1 id_value %d \n",id_value);
panel_is_valid = 2;
for (i = 0; i < 4; i++) {
if (lcd_panel_id_table[i].driveric_register_id == 0) {
dprintf(CRITICAL, "No correct driver ic ID...\n");
panel_id = DEFAULT_PANEL_ID;
dprintf(CRITICAL, "song 2 panel_id %d \n",panel_id);
return 0;
}
else if (lcd_panel_id_table[i].driveric_register_id == id_value) {
panel_id = lcd_panel_id_table[i].lcd_panel_id;
dprintf(CRITICAL, "song 4 panel_id %d \n",panel_id);
break;
}
dprintf(CRITICAL, "i = %d, not find correct panel\n", i);
}
dprintf(CRITICAL, "song 5 panel_id %d \n",panel_id);
return 0;
}
反汇编如下:根本没有循环,不知道是不是编译器遇到数组越界产生的bug
8f6027f8 <register_panel_id>:
8f6027f8: e92d4070 push {r4, r5, r6, lr}
8f6027fc: e30d6d60 movw r6, #56672; 0xdd60
8f602800: e3486f72 movt r6, #36722; 0x8f72
8f602804: e24dd008 sub sp, sp, #8
8f602808: e1a05000 mov r5, r0
8f60280c: e30c0a1c movw r0, #51740; 0xca1c
8f602810: e5963000 ldr r3, [r6]
8f602814: e1a01005 mov r1, r5
8f602818: e3480f66 movt r0, #36710; 0x8f66
8f60281c: e58d3004 str r3, [sp, #4]
8f602820: eb00cd8a bl 8f635e50 <_dprintf> dprintf(CRITICAL, "song 1 id_value %d \n",id_value);
8f602824: e3073b74 movw r3, #31604; 0x7b74
8f602828: e3483f6c movt r3, #36716; 0x8f6c
8f60282c: e30c242c movw r2, #50220; 0xc42c
8f602830: e3482f71 movt r2, #36721; 0x8f71
8f602834: e5934000 ldr r4, [r3]
8f602838: e3a01002 mov r1, #2
8f60283c: e5821000 str r1, [r2]
8f602840: e3540000 cmp r4, #0 if (lcd_panel_id_table[i].driveric_register_id == 0)
8f602844: 0a000005 beq 8f602860 <register_panel_id+0x68>
8f602848: e1550004 cmp r5, r4
8f60284c: 0a000014 beq 8f6028a4 <register_panel_id+0xac> else if (lcd_panel_id_table[i].driveric_register_id == id_value) {
8f602850: e30c0a98 movw r0, #51864; 0xca98
8f602854: e3a01000 mov r1, #0
8f602858: e3480f66 movt r0, #36710; 0x8f66
8f60285c: eb00cd7b bl 8f635e50 <_dprintf> dprintf(CRITICAL, "i = %d, not find correct panel\n", i);
8f602860: e30c0a34 movw r0, #51764; 0xca34
8f602864: e3480f66 movt r0, #36710; 0x8f66
8f602868: eb00cd78 bl 8f635e50 <_dprintf> dprintf(CRITICAL, "No correct driver ic ID...\n");
8f60286c: e30c3428 movw r3, #50216; 0xc428
8f602870: e3483f71 movt r3, #36721; 0x8f71
8f602874: e30c0a50 movw r0, #51792; 0xca50
8f602878: e1a01004 mov r1, r4
8f60287c: e3480f66 movt r0, #36710; 0x8f66
8f602880: e5834000 str r4, [r3]
8f602884: eb00cd71 bl 8f635e50 <_dprintf> dprintf(CRITICAL, "song 2 panel_id %d \n",panel_id);
8f602888: e59d2004 ldr r2, [sp, #4]
8f60288c: e3a00000 mov r0, #0
8f602890: e5963000 ldr r3, [r6]
8f602894: e1520003 cmp r2, r3
8f602898: 1a00000e bne 8f6028d8 <register_panel_id+0xe0>
8f60289c: e28dd008 add sp, sp, #8
8f6028a0: e8bd8070 pop {r4, r5, r6, pc}
8f6028a4: e5933004 ldr r3, [r3, #4]
8f6028a8: e30c4428 movw r4, #50216; 0xc428
8f6028ac: e3484f71 movt r4, #36721; 0x8f71
8f6028b0: e30c0a68 movw r0, #51816; 0xca68
8f6028b4: e3480f66 movt r0, #36710; 0x8f66
8f6028b8: e1a01003 mov r1, r3
8f6028bc: e5843000 str r3, [r4]
8f6028c0: eb00cd62 bl 8f635e50 <_dprintf> dprintf(CRITICAL, "song 4 panel_id %d \n",panel_id);
8f6028c4: e5941000 ldr r1, [r4]
8f6028c8: e30c0a80 movw r0, #51840; 0xca80
8f6028cc: e3480f66 movt r0, #36710; 0x8f66
8f6028d0: eb00cd5e bl 8f635e50 <_dprintf> dprintf(CRITICAL, "song 5 panel_id %d \n",panel_id);
8f6028d4: eaffffeb b 8f602888 <register_panel_id+0x90>
8f6028d8: eb00cdcb bl 8f63600c <__stack_chk_fail>