源代码编译后,编译器会启用优化,致使执行指令呈乱序。当发现有两个以上出口时,可以写成函数的形式。
402274: f9400773 ldr x19, [x27, #8] // x19=list
402278: b4002bb3 cbz x19, 4027ec <ferror@plt+0x90c> // list=null, b
40227c: aa1303f4 mov x20, x19 // x20=walk=list
402280: 14000003 b 40228c <ferror@plt+0x3ac> // walk!=null, b
402284: f9406294 ldr x20, [x20, #192] // x20=walk->next
402288: b4002b34 cbz x20, 4027ec <ferror@plt+0x90c>
40228c: b9405680 ldr w0, [x20, #84] // w0=walk->pid
402290: 7100041f cmp w0, #0x1 // w0 ?= 1
402294: 54ffff81 b.ne 402284 <ferror@plt+0x3a4> // b.any
402298: 140000d0 b 4025d8 <ferror@plt+0x6f8>*/
#if 0
static PROC *find_ac(pid_t pid)
{
PROC *walk;
for (walk = list; walk; walk = walk->next) {
// b.ne 402284
if (walk->pid == pid)
return walk; // b 4025d8
}
return NULL; // cbz 4027ec
}
#endif