[*] Binary protection state of ext4.ko
No RELRO No Canary found NX disabled REL No RPATH No RUNPATH Symbols
[*] Function printf tear down of ext4.ko
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x801cd74 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_bmap () | void ext4_bmap (int32_t arg1) {
| int32_t var_0h;
| r0 = arg1;
0x0801cd74 push {r4, r5, r6, r7, r8, lr} |
0x0801cd78 mov r4, r0 | r4 = r0;
0x0801cd7c mov r7, r2 | r7 = r2;
0x0801cd80 ldr r5, [r0] | r5 = *(r0);
0x0801cd84 sub sp, sp, 8 |
0x0801cd88 mov r6, r3 | r6 = r3;
0x0801cd8c ldr r1, [r5, -0x6c] | r1 = *((r5 - 0x6c));
0x0801cd90 tst r1, 0x10000000 |
| if ((r1 & 0x10000000) != 0) {
0x0801cd94 beq 0x801cdb8 |
0x0801cd98 movw r3, 0x1be | r3 = 0x1be;
0x0801cd9c ldrh r3, [r5, r3] | r3 = *((r5 + r3));
0x0801cda0 cmp r3, 0 |
| if (r3 == 0) {
0x0801cda4 beq 0x801cdb8 | goto label_3;
| }
| label_2:
0x0801cda8 mov r0, 0 | r0 = 0;
0x0801cdac mov r1, r0 | r1 = r0;
0x0801cdb0 add sp, sp, 8 |
0x0801cdb4 pop {r4, r5, r6, r7, r8, pc} |
| }
| label_3:
0x0801cdb8 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0801cdbc ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0801cdc0 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x0801cdc4 tst r2, 0x800000 |
0x0801cdc8 bne 0x801ce04 |
| while ((r2 & loc.imp.fs_overflowgid) == 0) {
| label_0:
0x0801cdcc ldr r3, [r3, 0x118] | r3 = *((r3 + 0x118));
0x0801cdd0 cmp r3, 0 |
| if (r3 != 0) {
0x0801cdd4 beq 0x801cde4 |
0x0801cdd8 ldr r3, [r5, -0x70] | r3 = *((r5 - 0x70));
0x0801cddc tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0801cde0 bne 0x801ce38 | goto label_4;
| }
| }
| label_1:
0x0801cde4 ldr r1, [pc, 0x98] | r1 = *(0x801ce80);
0x0801cde8 mov r2, r7 | r2 = r7;
0x0801cdec mov r3, r6 | r3 = r6;
0x0801cdf0 mov r0, r4 | r0 = r4;
0x0801cdf4 str r1, [sp] | *(sp) = r1;
0x0801cdf8 stmdaeq r8, {r0, r1, r2, r3, r5, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, r7, sb, sl, fp, ip, pc}");
0x0801cdfc add sp, sp, 8 |
0x0801ce00 pop {r4, r5, r6, r7, r8, pc} |
0x0801ce04 ldr r2, [r3, 0x4c] | r2 = *((r3 + 0x4c));
0x0801ce08 tst r2, 0x8000000 |
0x0801ce0c beq 0x801cdcc |
| }
0x0801ce10 mvn r2, 0 | r2 = ~0;
0x0801ce14 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x0801ce18 mov r0, r4 | r0 = r4;
0x0801ce1c strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x0801ce20 mov r3, 0 | r3 = 0;
0x0801ce24 mov r2, 0 | r2 = 0;
0x0801ce28 stmdaeq r8, {r0, r1, r5, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r6, r8, sl, fp, ip, pc}");
0x0801ce2c ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0801ce30 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x0801ce34 b 0x801cdcc | goto label_0;
| label_4:
0x0801ce38 mrs r2, apsr | r2 = apsr;
0x0801ce3c cpsid i | __asm ("cpsid i");
0x0801ce40 ldr r3, [r5, -0x70] | r3 = *((r5 - 0x70));
0x0801ce44 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0801ce48 str r3, [r5, -0x70] | *((r5 - 0x70)) = r3;
0x0801ce4c msr cpsr_c, r2 | cpsr_c = r2;
0x0801ce50 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0801ce54 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x0801ce58 ldr r8, [r3, 0x118] | r8 = *((r3 + 0x118));
0x0801ce5c mov r0, r8 | r0 = r8;
0x0801ce60 stmdaeq r8, {r0, r1, r4, r5, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r5, r7, sb, sl, fp, ip, pc}");
0x0801ce64 mov r0, r8 | r0 = r8;
0x0801ce68 stmdaeq r8, {r0, r1, r2, r4, r5, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r7, sb, sl, fp, ip, pc}");
0x0801ce6c mov r5, r0 | r5 = r0;
0x0801ce70 mov r0, r8 | r0 = r8;
0x0801ce74 stmdaeq r8, {r0, r1, r3, r4, r5, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r5, r7, sb, sl, fp, ip, pc}");
0x0801ce78 cmp r5, 0 |
| if (r5 == 0) {
0x0801ce7c beq 0x801cde4 | goto label_1;
| }
0x0801ce80 b 0x801cda8 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x800f3bc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_es_insert_extent () | void ext4_es_insert_extent (int32_t arg_78h, int32_t arg_7ch, int32_t arg_80h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x0800f3bc push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0800f3c0 mov r4, r0 | r4 = r0;
0x0800f3c4 ldr r0, [r0, 0x1c] | r0 = *(arg_78hx1c);
0x0800f3c8 sub sp, sp, 0x54 |
0x0800f3cc ldr sb, [r0, 0x1f8] | sb = *(arg_78hx1f8);
0x0800f3d0 ldr sl, [sp, 0x78] | sl = *(arg_78h);
0x0800f3d4 ldr r8, [sp, 0x7c] | r8 = *(arg_7ch);
0x0800f3d8 ldrh r5, [sb, 0x78] | r5 = *((sb + 0x78));
0x0800f3dc ubfx r5, r5, 5, 1 | r5 = (r5 >> 5) & ((1 << 1) - 1);
0x0800f3e0 cmp r2, 0 |
| if (r2 != 0) {
0x0800f3e4 orreq r5, r5, 1 | r5 |= 1;
| }
0x0800f3e8 cmp r5, 0 |
| if (r5 == 0) {
0x0800f3ec movne r5, 0 | r5 = 0;
| }
| if (r5 != 0) {
0x0800f3f0 beq 0x800f400 |
| label_0:
0x0800f3f4 mov r0, r5 | r0 = r5;
0x0800f3f8 add sp, sp, 0x54 |
0x0800f3fc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0800f400 add r3, r1, r2 | r3 = r1 + r2;
0x0800f404 mov r7, r1 | r7 = r1;
0x0800f408 sub fp, r3, 1 |
0x0800f40c mov r6, r2 | r6 = r2;
0x0800f410 cmp r1, fp |
0x0800f414 str r3, [sp, 0xc] | var_ch = r3;
| if (r1 > fp) {
0x0800f418 bhi 0x800f664 | goto label_10;
| }
0x0800f41c ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x0800f420 and r3, r3, 5 | r3 &= 5;
0x0800f424 cmp r3, 5 |
| if (r3 == 5) {
0x0800f428 beq 0x800f528 | goto label_11;
| }
| label_2:
0x0800f42c ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x0800f430 bic r8, r8, 0xf8000000 | r8 = BIT_MASK (r8, 0xf8000000);
0x0800f434 str r6, [sp, 0x20] | var_20h = r6;
0x0800f438 str sl, [sp, 0x28] | var_28h = sl;
0x0800f43c orr r8, r8, r3, lsl 27 | r8 |= (r3 << 27);
0x0800f440 mov r3, sp | r3 = sp;
0x0800f444 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800f448 str r7, [sp, 0x1c] | var_1ch = r7;
0x0800f44c bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800f450 str r8, [sp, 0x2c] | var_2ch = r8;
0x0800f454 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800f458 add r2, r2, 1 | r2++;
0x0800f45c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800f460 mov r3, 0 | r3 = 0;
0x0800f464 mov r2, fp | r2 = fp;
0x0800f468 mov r1, r7 | r1 = r7;
0x0800f46c mov r0, r4 | r0 = r4;
0x0800f470 bl 0x800eb14 | r0 = es_remove_extent ();
0x0800f474 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x0800f478 bne 0x800f4e4 | goto label_3;
| }
0x0800f47c sub r6, r4, 0xc0 | r6 = r4 - 0xc0;
0x0800f480 b 0x800f4a0 |
| while (r0 == 0xc) {
0x0800f484 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0800f488 mov r2, r6 | r2 = r6;
0x0800f48c mov r1, 0x80 | r1 = 0x80;
0x0800f490 ldr r0, [r3, 0x1f8] | r0 = *((r3 + 0x1f8));
0x0800f494 bl 0x800e448 | r0 = es_shrink ();
0x0800f498 cmp r0, 0 |
| if (r0 == 0) {
0x0800f49c beq 0x800f518 | goto label_12;
| }
0x0800f4a0 add r1, sp, 0x10 | r1 += var_10h;
0x0800f4a4 mov r0, r4 | r0 = r4;
0x0800f4a8 bl 0x800e738 | r0 = es_insert_extent ();
0x0800f4ac mov r5, r0 | r5 = r0;
0x0800f4b0 cmn r0, 0xc |
0x0800f4b4 beq 0x800f484 |
| }
| label_1:
0x0800f4b8 ldr r3, [sb, 0x2c] | r3 = *((sb + 0x2c));
0x0800f4bc cmp r3, 1 |
| if (r3 >= 1) {
0x0800f4c0 bls 0x800f4e4 |
0x0800f4c4 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0800f4c8 ldr r6, [r3, 0x1f8] | r6 = *((r3 + 0x1f8));
0x0800f4cc ldr r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x0800f4d0 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x0800f4d4 beq 0x800f4e4 | goto label_3;
| }
0x0800f4d8 ldr r3, [sp, 0x80] | r3 = *(arg_80h);
0x0800f4dc tst r3, 3 |
| if ((r3 & 3) != 0) {
0x0800f4e0 bne 0x800f560 | goto label_13;
| }
| }
| label_3:
0x0800f4e4 mov r3, sp | r3 = sp;
0x0800f4e8 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x0800f4ec bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0800f4f0 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0800f4f4 sub r2, r2, 1 | r2--;
0x0800f4f8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0800f4fc cmp r2, 0 |
| if (r2 != 0) {
0x0800f500 bne 0x800f3f4 | goto label_0;
| }
0x0800f504 ldr r3, [r3] | r3 = *(r3);
0x0800f508 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x0800f50c beq 0x800f3f4 | goto label_0;
| }
0x0800f510 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x0800f514 b 0x800f3f4 | goto label_0;
| label_12:
0x0800f518 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0800f51c tst r3, 0x20000000 |
| if ((r3 & 0x20000000) != 0) {
0x0800f520 moveq r5, 0 | r5 = 0;
| }
0x0800f524 b 0x800f4b8 | goto label_1;
| label_11:
0x0800f528 str r2, [sp, 4] | var_4h = r2;
0x0800f52c stmdaeq r5, {r2, r3, r5, r7, r8, sb, sl, fp, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r7, r8, sb, sl, fp, sp, pc}");
0x0800f530 stmdaeq r5, {r2, r3, r5, r7, r8, sb, sl, fp, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r7, r8, sb, sl, fp, sp, pc}");
0x0800f534 str r1, [sp] | *(sp) = r1;
0x0800f538 movw r2, 0x345 | r2 = 0x345;
0x0800f53c ldr r1, [pc, 0x240] | r1 = *(0x800f780);
0x0800f540 stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc} | __asm ("stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc}");
0x0800f544 mov r3, r5 | r3 = r5;
0x0800f548 stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, sp, pc}");
0x0800f54c stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r8, sb, sl, fp, sp, pc}");
0x0800f550 mov r2, 9 | r2 = 9;
0x0800f554 mov r1, 0x348 | r1 = 0x348;
0x0800f558 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x0800f55c b 0x800f42c | goto label_2;
| label_13:
0x0800f560 ldr r0, [r6, 0x30] | r0 = *((r6 + 0x30));
0x0800f564 ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0800f568 lsr ip, fp, r0 |
0x0800f56c rsb r3, r2, 0 | r3 = r2 - ;
0x0800f570 sub r1, r2, 1 | r1 = r2 - 1;
0x0800f574 cmp ip, r7, lsr r0 |
0x0800f578 and r1, r1, r7 | r1 &= r7;
0x0800f57c and r8, r7, r3 | r8 = r7 & r3;
| if (ip == r7) {
0x0800f580 beq 0x800f668 | goto label_14;
| }
0x0800f584 cmp r1, 0 |
| if (r1 != 0) {
0x0800f588 beq 0x800f5dc |
0x0800f58c sub r7, r7, 1 | r7--;
0x0800f590 add r3, sp, 0x30 | r3 += var_30h;
0x0800f594 mov r2, r8 | r2 = r8;
0x0800f598 str r3, [sp] | *(sp) = r3;
0x0800f59c mov r0, r4 | r0 = r4;
0x0800f5a0 mov r3, r7 | r3 = r7;
0x0800f5a4 stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f5a8 stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f5ac bl 0x800ddf8 | es_find_extent_range ();
0x0800f5b0 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0800f5b4 cmp r2, 0 |
| if (r2 == 0) {
0x0800f5b8 beq 0x800f5dc | goto label_7;
| }
0x0800f5bc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0800f5c0 cmp r3, r8 |
| if (r3 > r8) {
0x0800f5c4 bhi 0x800f754 | goto label_15;
| }
0x0800f5c8 add r2, r2, r3 | r2 += r3;
0x0800f5cc cmp r2, r8 |
| if (r2 > r8) {
0x0800f5d0 bhi 0x800f75c | goto label_16;
| }
0x0800f5d4 cmp r3, r8 |
| if (r3 == r8) {
0x0800f5d8 beq 0x800f754 | goto label_15;
| }
| }
| label_7:
0x0800f5dc mov r1, r8 | r1 = r8;
0x0800f5e0 mov r0, r4 | r0 = r4;
0x0800f5e4 bl 0x800db28 | remove_pending ();
| label_8:
0x0800f5e8 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0800f5ec ldr r7, [sp, 0xc] | r7 = var_ch;
0x0800f5f0 rsb r2, r3, 0 | r2 = r3 - ;
0x0800f5f4 and r2, r2, fp | r2 &= fp;
0x0800f5f8 add r2, r2, r3 | r2 += r3;
0x0800f5fc sub r6, r2, 1 | r6 = r2 - 1;
0x0800f600 cmp r7, r2 |
| if (r7 == r2) {
0x0800f604 beq 0x800f654 | goto label_4;
| }
0x0800f608 add r3, sp, 0x30 | r3 += var_30h;
0x0800f60c mov r2, r7 | r2 = r7;
0x0800f610 str r3, [sp] | *(sp) = r3;
0x0800f614 mov r0, r4 | r0 = r4;
0x0800f618 mov r3, r6 | r3 = r6;
0x0800f61c stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f620 stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f624 bl 0x800ddf8 | es_find_extent_range ();
0x0800f628 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0800f62c cmp r3, 0 |
| if (r3 == 0) {
0x0800f630 beq 0x800f654 | goto label_4;
| }
0x0800f634 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0800f638 cmp r7, r2 |
| if (r7 <= r2) {
0x0800f63c blo 0x800f6ec | goto label_17;
| }
0x0800f640 add r3, r3, r2 | r3 += r2;
0x0800f644 cmp r7, r3 |
| if (r7 <= r3) {
0x0800f648 blo 0x800f6dc | goto label_5;
| }
0x0800f64c cmp r7, r2 |
| if (r7 == r2) {
0x0800f650 beq 0x800f6ec | goto label_17;
| }
| do {
| label_4:
0x0800f654 mov r1, r6 | r1 = r6;
0x0800f658 mov r0, r4 | r0 = r4;
0x0800f65c bl 0x800db28 | remove_pending ();
0x0800f660 b 0x800f4e4 | goto label_3;
| label_10:
0x0800f664 udf 0x12 | __asm ("udf 0x12");
| label_14:
0x0800f668 cmp r1, 0 |
| if (r1 != 0) {
0x0800f66c bne 0x800f6f8 | goto label_18;
| }
| label_6:
0x0800f670 ldr r7, [sp, 0xc] | r7 = var_ch;
0x0800f674 and r3, r3, fp | r3 &= fp;
0x0800f678 add r2, r3, r2 | r2 = r3 + r2;
0x0800f67c sub r6, r2, 1 | r6 = r2 - 1;
0x0800f680 cmp r7, r2 |
0x0800f684 beq 0x800f654 |
| } while (r7 == r2);
0x0800f688 add r3, sp, 0x30 | r3 += var_30h;
0x0800f68c mov r2, r7 | r2 = r7;
0x0800f690 str r3, [sp] | *(sp) = r3;
0x0800f694 mov r0, r4 | r0 = r4;
0x0800f698 mov r3, r6 | r3 = r6;
0x0800f69c stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f6a0 stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f6a4 bl 0x800ddf8 | es_find_extent_range ();
0x0800f6a8 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0800f6ac cmp r2, 0 |
| if (r2 == 0) {
0x0800f6b0 beq 0x800f654 | goto label_4;
| }
0x0800f6b4 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0800f6b8 cmp r7, r3 |
| if (r7 <= r3) {
0x0800f6bc blo 0x800f6d4 | goto label_19;
| }
0x0800f6c0 add r2, r2, r3 | r2 += r3;
0x0800f6c4 cmp r7, r2 |
| if (r7 <= r2) {
0x0800f6c8 blo 0x800f6dc | goto label_5;
| }
0x0800f6cc cmp r7, r3 |
| if (r7 != r3) {
0x0800f6d0 bne 0x800f654 | goto label_4;
| }
| label_19:
0x0800f6d4 cmp r6, r3 |
| if (r6 <= r3) {
0x0800f6d8 blo 0x800f654 | goto label_4;
| }
| label_5:
0x0800f6dc mov r1, r6 | r1 = r6;
0x0800f6e0 mov r0, r4 | r0 = r4;
0x0800f6e4 bl 0x800dc74 | insert_pending ();
0x0800f6e8 b 0x800f4e4 | goto label_3;
| label_17:
0x0800f6ec cmp r6, r2 |
| if (r6 <= r2) {
0x0800f6f0 blo 0x800f654 | goto label_4;
| }
0x0800f6f4 b 0x800f6dc | goto label_5;
| label_18:
0x0800f6f8 sub r7, r7, 1 | r7--;
0x0800f6fc add r3, sp, 0x30 | r3 += var_30h;
0x0800f700 mov r2, r8 | r2 = r8;
0x0800f704 str r3, [sp] | *(sp) = r3;
0x0800f708 mov r0, r4 | r0 = r4;
0x0800f70c mov r3, r7 | r3 = r7;
0x0800f710 stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f714 stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc} | __asm ("stmdaeq r0, {r3, r8, sb, fp, ip, lr, pc}");
0x0800f718 bl 0x800ddf8 | es_find_extent_range ();
0x0800f71c ldr r1, [sp, 0x40] | r1 = var_40h;
0x0800f720 cmp r1, 0 |
| if (r1 != 0) {
0x0800f724 beq 0x800f748 |
0x0800f728 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0800f72c cmp r2, r8 |
| if (r2 > r8) {
0x0800f730 bhi 0x800f76c | goto label_20;
| }
0x0800f734 add r1, r1, r2 | r1 += r2;
0x0800f738 cmp r1, r8 |
| if (r1 > r8) {
0x0800f73c bhi 0x800f774 | goto label_21;
| }
0x0800f740 cmp r2, r8 |
| if (r2 == r8) {
0x0800f744 beq 0x800f76c | goto label_20;
| }
| }
| label_9:
0x0800f748 ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0800f74c rsb r3, r2, 0 | r3 = r2 - ;
0x0800f750 b 0x800f670 | goto label_6;
| label_15:
0x0800f754 cmp r7, r3 |
| if (r7 <= r3) {
0x0800f758 blo 0x800f5dc | goto label_7;
| }
| label_16:
0x0800f75c mov r1, r8 | r1 = r8;
0x0800f760 mov r0, r4 | r0 = r4;
0x0800f764 bl 0x800dc74 | insert_pending ();
0x0800f768 b 0x800f5e8 | goto label_8;
| label_20:
0x0800f76c cmp r7, r2 |
| if (r7 <= r2) {
0x0800f770 blo 0x800f748 | goto label_9;
| }
| label_21:
0x0800f774 mov r1, r8 | r1 = r8;
0x0800f778 mov r0, r4 | r0 = r4;
0x0800f77c bl 0x800dc74 | insert_pending ();
0x0800f780 b 0x800f4e4 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x804aea4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_fill_super () | void ext4_fill_super (int32_t arg_0h, int32_t arg_18h, int32_t arg_1ch, int32_t arg_20h, int32_t arg_28h, int32_t arg_38h, int32_t arg_48h, int32_t arg_4ch, int32_t arg_50h, int32_t arg_52h, int32_t arg_54h, int32_t arg_58h, int32_t arg_68h, int32_t arg_feh, int32_t arg_100h, int32_t arg_15ch, int32_t arg_175h, int32_t arg_176h, int32_t arg_180h, int32_t arg_270h, int32_t arg_3fch, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_28h;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_5ch;
| int32_t var_60h;
| int32_t var_68h;
| int32_t var_6ch;
| int32_t var_78h;
| int32_t var_80h;
| int32_t var_8ch;
| r0 = arg1;
| r1 = arg2;
0x0804aea4 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0804aea8 stmdaeq r8, {r0, r1, r2, r3, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, r7, sl, fp, ip, pc}");
0x0804aeac stmdaeq r8, {r0, r1, r2, r3, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, r7, sl, fp, ip, pc}");
0x0804aeb0 sub sp, sp, 0x8c |
0x0804aeb4 mov r4, r1 | r4 = r1;
0x0804aeb8 mov r6, r0 | r6 = r0;
0x0804aebc mov r1, 0xcc0 | r1 = 0xcc0;
0x0804aec0 mov r0, r4 | r0 = r4;
0x0804aec4 str r2, [sp, 0x20] | var_20h = r2;
0x0804aec8 stmdaeq r8, {r0, r1, r3, r4, r5, r6, r7, r8, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r5, r6, r7, r8, sp, pc}");
0x0804aecc mov r1, 0xdc0 | r1 = 0xdc0;
0x0804aed0 mov sb, r0 | sb = r0;
0x0804aed4 ldr r0, [r7, 0x28] | r0 = *((r7 + 0x28));
0x0804aed8 stmdaeq r8, {r0, r1, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r7, sl, fp, ip, pc}");
0x0804aedc cmp r4, 0 |
0x0804aee0 str r0, [sp, 0x18] | var_18h = r0;
| if (r4 == 0) {
0x0804aee4 beq 0x804b84c | goto label_38;
| }
0x0804aee8 ldrb r3, [r4] | r3 = *(r4);
0x0804aeec cmp r3, 0x73 |
| if (r3 == 0x73) {
0x0804aef0 beq 0x804b70c | goto label_39;
| }
| label_0:
0x0804aef4 mov sl, 0 | sl = 0;
0x0804aef8 movw r3, 0x4003 | r3 = 0x4003;
0x0804aefc str r4, [sp, 0x1c] | var_1ch = r4;
0x0804af00 mov r8, 1 | r8 = 1;
0x0804af04 str sl, [sp, 0x5c] | var_5ch = sl;
0x0804af08 str r3, [sp, 0x60] | var_60h = r3;
| label_1:
0x0804af0c cmp sb, 0 |
| if (sb == 0) {
0x0804af10 beq 0x804c598 | goto label_40;
| }
| label_7:
0x0804af14 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804af18 cmp r3, 0 |
| if (r3 == 0) {
0x0804af1c beq 0x804b788 | goto label_41;
| }
| label_2:
0x0804af20 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0804af24 mov r2, 0 | r2 = 0;
0x0804af28 ldr r3, [r6, 0x78] | r3 = *((r6 + 0x78));
0x0804af2c add r0, r6, 0x218 | r0 = r6 + 0x218;
0x0804af30 str r1, [r6, 0x1f8] | *((r6 + 0x1f8)) = r1;
0x0804af34 str r2, [r1, 0x318] | *((r1 + 0x318)) = r2;
0x0804af38 mov r2, 0x10 | r2 = 0x10;
0x0804af3c str r6, [r1, 0x110] | *((r1 + 0x110)) = r6;
0x0804af40 str r2, [r1, 0xd8] | *((r1 + 0xd8)) = r2;
0x0804af44 mov r2, 0x20 | r2 = 0x20;
0x0804af48 str r8, [r1, 0x60] | *((r1 + 0x60)) = r8;
0x0804af4c str r2, [r1, 0x8c] | *((r1 + 0x8c)) = r2;
0x0804af50 mov r2, 0x21 | r2 = 0x21;
0x0804af54 str sl, [r1, 0x64] | *((r1 + 0x64)) = sl;
0x0804af58 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x0804af5c cmp r3, 0 |
| if (r3 == 0) {
0x0804af60 ldrne r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r3 == 0) {
0x0804af64 ldrne r3, [r3, 0x24] | r3 = *((r3 + 0x24));
| }
| if (r3 == 0) {
0x0804af68 strne r3, [r1, 0x1dc] | *((r1 + 0x1dc)) = r3;
| }
0x0804af6c mov r1, 0x2f | r1 = 0x2f;
0x0804af70 stmdaeq r8, {r0, r1, r2, r3, sb, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, sb, sp, pc}");
0x0804af74 mov r1, 0x400 | r1 = 0x400;
0x0804af78 mov r0, r6 | r0 = r6;
0x0804af7c stmdaeq r8, {r0, r1, r4, sb, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r4, sb, sp, pc}");
0x0804af80 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 == r0) {
0x0804af84 beq 0x804b868 | goto label_42;
| }
0x0804af88 cmp r1, 0x400 |
| if (r1 == 0x400) {
0x0804af8c beq 0x804b7c8 | goto label_43;
| }
0x0804af90 lsr sl, r8, 0x16 | sl = r8 >> 0x16;
0x0804af94 lsl r0, r8, 0xa | r0 = r8 << 0xa;
0x0804af98 orrs r3, sl, 0 | r3 = sl;
0x0804af9c str sl, [sp, 0x6c] | var_6ch = sl;
| if (r3 != sl) {
0x0804afa0 bne 0x804bb88 | goto label_44;
| }
0x0804afa4 stmdaeq r8, {r0, r1, r3, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, sl, fp, ip, pc}");
0x0804afa8 mov r3, sl | r3 = sl;
0x0804afac mov r2, r0 | r2 = r0;
0x0804afb0 mov fp, r1 |
0x0804afb4 str r0, [sp, 0x68] | var_68h = r0;
| label_5:
0x0804afb8 mov r1, 0 | r1 = 0;
0x0804afbc mov r0, r6 | r0 = r6;
0x0804afc0 str r1, [sp, 4] | var_4h = r1;
0x0804afc4 str r1, [sp] | *(sp) = r1;
0x0804afc8 bl 0x804670c | r0 = ext4_sb_bread_gfp ();
0x0804afcc mov sl, r0 | sl = r0;
0x0804afd0 cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x0804afd4 bhi 0x804b898 | goto label_45;
| }
0x0804afd8 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0804afdc movw r2, 0xef53 | r2 = 0xef53;
0x0804afe0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0804afe4 add fp, r3, fp |
0x0804afe8 str fp, [r1, 0x44] | *((r1 + 0x44)) = fp;
0x0804afec ldrh r3, [fp, 0x38] | r3 = *(arg_38h);
0x0804aff0 str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x0804aff4 cmp r3, r2 |
| if (r3 != r2) {
0x0804aff8 bne 0x804b7a0 | goto label_25;
| }
0x0804affc add r3, fp, 0x180 | r3 += arg_180h;
0x0804b000 add r0, r1, 0x1e0 | r0 = r1 + 0x1e0;
0x0804b004 ldr r1, [r6, 0x1f8] | r1 = *((r6 + 0x1f8));
0x0804b008 ldrd r2, r3, [r3, -8] | __asm ("ldrd r2, r3, [r3, -8]");
0x0804b00c strd r2, r3, [r0] | __asm ("strd r2, r3, [r0]");
0x0804b010 ldr r3, [r1, 0x44] | r3 = *((r1 + 0x44));
0x0804b014 ldr r3, [r3, 0x64] | r3 = *((r3 + 0x64));
0x0804b018 and r2, r3, 0x410 | r2 = r3 & 0x410;
0x0804b01c cmp r2, 0x410 |
| if (r2 == 0x410) {
0x0804b020 beq 0x804ba54 | goto label_46;
| }
| label_13:
0x0804b024 tst r3, 0x400 |
| if ((r3 & 0x400) != 0) {
0x0804b028 beq 0x804b038 |
0x0804b02c ldrb r3, [fp, 0x175] | r3 = *(arg_175h);
0x0804b030 cmp r3, 1 |
| if (r3 != 1) {
0x0804b034 bne 0x804b9c8 | goto label_47;
| }
| }
0x0804b038 mov r2, 0 | r2 = 0;
0x0804b03c stmdaeq r5, {r2, r3, r6, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r8, sb, sl, fp, sp, lr, pc}");
0x0804b040 stmdaeq r5, {r2, r3, r6, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r8, sb, sl, fp, sp, lr, pc}");
0x0804b044 mov r1, r2 | r1 = r2;
0x0804b048 stmdaeq r8, {r0, r1, r2, r4, sb, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, sb, sp, pc}");
0x0804b04c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b050 cmn r0, 0x1000 |
0x0804b054 str r0, [r3, 0x220] | *((r3 + 0x220)) = r0;
| if (r0 > 0x1000) {
0x0804b058 bhi 0x804bb40 | goto label_48;
| }
0x0804b05c ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804b060 mov r3, r4 | r3 = r4;
0x0804b064 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804b068 ldr r1, [r2, 0x64] | r1 = *((r2 + 0x64));
0x0804b06c tst r1, 0x400 |
| if ((r1 & 0x400) != 0) {
0x0804b070 bne 0x804b7e0 | goto label_49;
| }
| label_26:
0x0804b074 ldr r2, [r2, 0x60] | r2 = *((r2 + 0x60));
0x0804b078 tst r2, 0x2000 |
| if ((r2 & 0x2000) == 0) {
0x0804b07c beq 0x804bae4 | goto label_50;
| }
| label_10:
0x0804b080 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0804b084 ldr r2, [fp, 0x270] | r2 = *(arg_270h);
0x0804b088 str r2, [r1, 0x224] | *((r1 + 0x224)) = r2;
| label_11:
0x0804b08c ldr r5, [fp, 0x100] | r5 = *(arg_100h);
0x0804b090 ldr r2, [r3, 0x4c] | r2 = *((r3 + 0x4c));
0x0804b094 tst r5, 1 |
0x0804b098 orr r2, r2, 0x80000000 | r2 |= 0x80000000;
0x0804b09c str r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
| if ((r5 & 1) == 0) {
0x0804b0a0 ldrne r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if ((r5 & 1) == 0) {
0x0804b0a4 ldrne r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if ((r5 & 1) == 0) {
0x0804b0a8 orrne r3, r3, 8 | r3 |= 8;
| }
| if ((r5 & 1) == 0) {
0x0804b0ac strne r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
0x0804b0b0 tst r5, 2 |
| if ((r5 & 2) == 0) {
0x0804b0b4 ldrne r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if ((r5 & 2) == 0) {
0x0804b0b8 ldrne r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if ((r5 & 2) == 0) {
0x0804b0bc orrne r3, r3, 4 | r3 |= 4;
| }
| if ((r5 & 2) == 0) {
0x0804b0c0 strne r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
0x0804b0c4 tst r5, 0x10 |
| if ((r5 & 0x10) == 0) {
0x0804b0c8 ldrne r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if ((r5 & 0x10) == 0) {
0x0804b0cc ldrne r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if ((r5 & 0x10) == 0) {
0x0804b0d0 orrne r3, r3, 0x2000 | r3 |= 0x2000;
| }
| if ((r5 & 0x10) == 0) {
0x0804b0d4 strne r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
0x0804b0d8 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804b0dc ldr r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
0x0804b0e0 orr r3, r3, 0x4000 | r3 |= 0x4000;
0x0804b0e4 str r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
0x0804b0e8 ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804b0ec mov r3, r4 | r3 = r4;
0x0804b0f0 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804b0f4 ldr r1, [r2, 0x5c] | r1 = *((r2 + 0x5c));
0x0804b0f8 tst r1, 0x400 |
| if ((r1 & 0x400) != 0) {
0x0804b0fc beq 0x804b118 |
0x0804b100 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0804b104 orr r3, r3, 0x10 | r3 |= 0x10;
0x0804b108 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x0804b10c ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804b110 mov r3, r4 | r3 = r4;
0x0804b114 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
| }
0x0804b118 ldr r2, [r2, 0x64] | r2 = *((r2 + 0x64));
0x0804b11c tst r2, 0x400 |
| if ((r2 & 0x400) != 0) {
0x0804b120 beq 0x804b140 |
0x0804b124 ldr r3, [r4, 0x220] | r3 = *((r4 + 0x220));
0x0804b128 cmp r3, 0 |
| if (r3 == 0) {
0x0804b12c beq 0x804bb6c | goto label_51;
| }
| label_30:
0x0804b130 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0804b134 orr r3, r3, 0x800000 | r3 |= 0x800000;
0x0804b138 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x0804b13c ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
| }
| label_18:
0x0804b140 and r1, r5, 0x60 | r1 = r5 & 0x60;
0x0804b144 ldr r2, [r3, 0x4c] | r2 = *((r3 + 0x4c));
0x0804b148 cmp r1, 0x20 |
| if (r1 == 0x20) {
0x0804b14c beq 0x804b8b8 | goto label_52;
| }
0x0804b150 cmp r1, 0x40 |
| if (r1 == 0x40) {
0x0804b154 beq 0x804baf4 | goto label_53;
| }
0x0804b158 cmp r1, 0x60 |
| if (r1 != 0x60) {
0x0804b15c orreq r2, r2, 0xc00 | r2 |= 0xc00;
| }
| if (r1 != 0x60) {
0x0804b160 streq r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
| }
| if (r1 != 0x60) {
0x0804b164 ldreq r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
| }
| label_9:
0x0804b168 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0804b16c ldr r2, [r2, 0x44] | r2 = *((r2 + 0x44));
0x0804b170 ldrh r1, [r2, 0x3c] | r1 = *((r2 + 0x3c));
0x0804b174 ldr r2, [r3, 0x4c] | r2 = *((r3 + 0x4c));
0x0804b178 cmp r1, 3 |
| if (r1 != 3) {
0x0804b17c orreq r2, r2, 0x40 | r2 |= 0x40;
| }
| if (r1 != 3) {
0x0804b180 beq 0x804b190 |
0x0804b184 cmp r1, 1 |
| if (r1 != 1) {
0x0804b188 orreq r2, r2, 0x10 | r2 |= 0x10;
| }
| if (r1 != 1) {
0x0804b18c orrne r2, r2, 0x20 | r2 |= 0x20;
| goto label_54;
| }
| }
| label_54:
0x0804b190 str r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x0804b194 tst r5, 0x400 |
0x0804b198 stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc}");
0x0804b19c stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc}");
0x0804b1a0 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804b1a4 ldr r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
0x0804b1a8 orr r3, r3, 0x20000000 | r3 |= 0x20000000;
0x0804b1ac str r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| if ((r5 & 0x400) == 0) {
0x0804b1b0 ldrne r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if ((r5 & 0x400) == 0) {
0x0804b1b4 ldrne r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if ((r5 & 0x400) == 0) {
0x0804b1b8 orrne r3, r3, 0x40000000 | r3 |= 0x40000000;
| }
| if ((r5 & 0x400) == 0) {
0x0804b1bc strne r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
0x0804b1c0 ldrh r1, [fp, 0x50] | r1 = *(arg_50h);
0x0804b1c4 stmdaeq r8, {r0, r1, r3, r5, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r5, sb, sl, fp, ip, pc}");
0x0804b1c8 ldr r4, [sp, 0x18] | r4 = var_18h;
0x0804b1cc str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x0804b1d0 stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc}");
0x0804b1d4 stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r5, sb, sl, fp, ip, pc}");
0x0804b1d8 ldrh r1, [fp, 0x52] | r1 = *(arg_52h);
0x0804b1dc stmdaeq r8, {r0, r1, r2, r3, r5, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, sb, sl, fp, ip, pc}");
0x0804b1e0 tst r5, 0x100 |
0x0804b1e4 mov r2, r4 | r2 = r4;
0x0804b1e8 str r0, [r4, 0x74] | *((r4 + 0x74)) = r0;
0x0804b1ec mov r3, 0 | r3 = 0;
0x0804b1f0 str r3, [r4, 0x13c] | *((r4 + 0x13c)) = r3;
| if ((r5 & 0x100) != 0) {
0x0804b1f4 ldreq r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
0x0804b1f8 mov r3, 0x1f4 | r3 = 0x1f4;
0x0804b1fc str r3, [r4, 0x134] | *((r4 + 0x134)) = r3;
0x0804b200 movw r3, 0x3a98 |
0x0804b204 str r3, [r4, 0x138] | *((r4 + 0x138)) = r3;
0x0804b208 stmdaeq r6, {r3, r5, r8, sb, sl, fp} | __asm ("stmdaeq r6, {r3, r5, r8, sb, sl, fp}");
0x0804b20c stmdaeq r6, {r3, r5, r8, sb, sl, fp} | __asm ("stmdaeq r6, {r3, r5, r8, sb, sl, fp}");
| if ((r5 & 0x100) != 0) {
0x0804b210 ldreq r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if ((r5 & 0x100) != 0) {
0x0804b214 orreq r3, r3, 0x20000 | r3 |= 0x20000;
| }
| if ((r5 & 0x100) != 0) {
0x0804b218 streq r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
0x0804b21c ldr r3, [r6, 0x78] | r3 = *((r6 + 0x78));
0x0804b220 ldr r3, [r3, 0x20] | r3 = *(0x3ab8);
0x0804b224 cmp r3, r4 |
| if (r3 != r4) {
0x0804b228 beq 0x804b240 |
0x0804b22c tst r5, 0x800 |
| if ((r5 & 0x800) != 0) {
0x0804b230 ldreq r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if ((r5 & 0x800) != 0) {
0x0804b234 ldreq r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if ((r5 & 0x800) != 0) {
0x0804b238 orreq r3, r3, 0x8000000 | r3 |= 0x8000000;
| }
| if ((r5 & 0x800) == 0) {
0x0804b23c streq r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| goto label_55;
| }
| }
| label_55:
0x0804b240 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0804b244 mov r3, 0xa | r3 = 0xa;
0x0804b248 str r3, [r2, 0x214] | *((r2 + 0x214)) = r3;
0x0804b24c ldr r3, [fp, 0x18] | r3 = *(arg_18h);
0x0804b250 str r3, [sp, 0x28] | var_28h = r3;
0x0804b254 cmp r3, 6 |
| if (r3 > 6) {
0x0804b258 bhi 0x804bb04 | goto label_56;
| }
0x0804b25c ldr r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x0804b260 cmp r3, 0x14 |
| if (r3 > 0x14) {
0x0804b264 bhi 0x804bb24 | goto label_57;
| }
0x0804b268 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0804b26c mov r3, 0x400 | r3 = 0x400;
0x0804b270 cmp r2, 2 |
0x0804b274 lsl r3, r3, r2 | r3 <<= r2;
0x0804b278 str r3, [sp, 0x30] | var_30h = r3;
| if (r2 != 2) {
0x0804b27c ldreq r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if (r2 != 2) {
0x0804b280 ldreq r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
| if (r2 != 2) {
0x0804b284 orreq r3, r3, 0x400000 | r3 |= 0x400000;
| }
| if (r2 != 2) {
0x0804b288 streq r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
0x0804b28c ldr r3, [fp, 0x4c] | r3 = *(arg_4ch);
0x0804b290 cmp r3, 0 |
| if (r3 != 0) {
0x0804b294 bne 0x804b8c8 | goto label_58;
| }
0x0804b298 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0804b29c mov r3, 0x80 | r3 = 0x80;
0x0804b2a0 str r3, [r2, 0x84] | *((r2 + 0x84)) = r3;
0x0804b2a4 mov r3, 0xb | r3 = 0xb;
0x0804b2a8 str r3, [r2, 0x88] | *((r2 + 0x88)) = r3;
| label_19:
0x0804b2ac ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b2b0 ldr r0, [r3, 0x44] | r0 = *((r3 + 0x44));
0x0804b2b4 ldrb r3, [r0, 0x200] | r3 = *((r0 + 0x200));
0x0804b2b8 cmp r3, 0 |
| if (r3 != 0) {
0x0804b2bc bne 0x804b9e4 | goto label_59;
| }
0x0804b2c0 add r5, sp, 0x5c | r5 += var_5ch;
0x0804b2c4 add r3, sp, 0x60 | r3 += var_60h;
0x0804b2c8 str r3, [sp, 0x34] | var_34h = r3;
| label_12:
0x0804b2cc ldr ip, [sp, 0x18] | ip = var_18h;
0x0804b2d0 mov r2, r5 | r2 = r5;
0x0804b2d4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0804b2d8 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0804b2dc ldr r1, [ip, 0x4c] | r1 = *((ip + 0x4c));
0x0804b2e0 str r1, [ip, 0x58] | *((ip + 0x58)) = r1;
0x0804b2e4 mov ip, 0 |
0x0804b2e8 mov r1, r6 | r1 = r6;
0x0804b2ec str ip, [sp] | *(sp) = ip;
0x0804b2f0 bl 0x8047eac | r0 = parse_options ();
0x0804b2f4 cmp r0, 0 |
| if (r0 == 0) {
0x0804b2f8 beq 0x804b668 | goto label_4;
| }
0x0804b2fc ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804b300 ldr r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
0x0804b304 and r1, r3, 0xc00 | r1 = r3 & 0xc00;
0x0804b308 cmp r1, 0x400 |
| if (r1 == 0x400) {
0x0804b30c beq 0x804bcc4 | goto label_60;
| }
0x0804b310 ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x0804b314 orr r3, r3, 1 | r3 |= 1;
0x0804b318 str r3, [r6, 0x38] | *((r6 + 0x38)) = r3;
0x0804b31c ldr r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| label_22:
0x0804b320 ubfx r1, r3, 0xf, 1 | r1 = (r3 >> 0xf) & ((1 << 1) - 1);
0x0804b324 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x0804b328 bic r3, r3, 0x10000 | r3 = BIT_MASK (r3, 0x10000);
0x0804b32c orr r3, r3, r1, lsl 16 | r3 |= (r1 << 16);
0x0804b330 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x0804b334 ldr r3, [fp, 0x4c] | r3 = *(arg_4ch);
0x0804b338 cmp r3, 0 |
| if (r3 == 0) {
0x0804b33c bne 0x804b380 |
0x0804b340 ldr r3, [r2, 0x44] | r3 = *((r2 + 0x44));
0x0804b344 ldr r2, [r3, 0x5c] | r2 = *((r3 + 0x5c));
0x0804b348 cmp r2, 0 |
| if (r2 == 0) {
0x0804b34c bne 0x804b368 |
0x0804b350 ldr r2, [r3, 0x64] | r2 = *((r3 + 0x64));
0x0804b354 cmp r2, 0 |
| if (r2 != 0) {
0x0804b358 bne 0x804b368 | goto label_61;
| }
0x0804b35c ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x0804b360 cmp r3, 0 |
| if (r3 == 0) {
0x0804b364 beq 0x804b380 | goto label_62;
| }
| }
| label_61:
0x0804b368 stmdaeq r5, {r3, r5, r6, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r5, r6, r8, ip, sp, lr, pc}");
0x0804b36c stmdaeq r5, {r3, r5, r6, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r5, r6, r8, ip, sp, lr, pc}");
0x0804b370 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x0804b374 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x0804b378 mov r0, r6 | r0 = r6;
0x0804b37c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
| }
| label_62:
0x0804b380 ldr r3, [fp, 0x48] | r3 = *(arg_48h);
0x0804b384 cmp r3, 1 |
| if (r3 == 1) {
0x0804b388 beq 0x804bd2c | goto label_63;
| }
| label_23:
0x0804b38c ldr r3, [r6, 0x78] | r3 = *((r6 + 0x78));
0x0804b390 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0804b394 cmp r3, r4 |
| if (r3 == r4) {
0x0804b398 beq 0x804bc70 | goto label_64;
| }
| label_21:
0x0804b39c ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x0804b3a0 mov r0, r6 | r0 = r6;
0x0804b3a4 and r1, r1, 1 | r1 &= 1;
0x0804b3a8 bl 0x804898c | r0 = ext4_feature_set_ok ();
0x0804b3ac cmp r0, 0 |
| if (r0 == 0) {
0x0804b3b0 beq 0x804b668 | goto label_4;
| }
0x0804b3b4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b3b8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0804b3bc ldr r3, [r3, 0x44] | r3 = *((r3 + 0x44));
0x0804b3c0 ldrh r3, [r3, 0xce] | r3 = *((r3 + 0xce));
0x0804b3c4 cmp r3, r2, asr 2 |
| if (r3 > r2) {
0x0804b3c8 bgt 0x804c3f8 | goto label_65;
| }
0x0804b3cc ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804b3d0 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804b3d4 ldr r3, [r2, 0x60] | r3 = *((r2 + 0x60));
0x0804b3d8 tst r3, 0x10000 |
| if ((r3 & 0x10000) != 0) {
0x0804b3dc beq 0x804b3ec |
0x0804b3e0 ldrb r3, [fp, 0x176] | r3 = *(arg_176h);
0x0804b3e4 cmp r3, 0 |
| if (r3 != 0) {
0x0804b3e8 bne 0x804c50c | goto label_66;
| }
| }
0x0804b3ec ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0804b3f0 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0804b3f4 cmp r3, r1 |
| if (r3 == r1) {
0x0804b3f8 beq 0x804b49c | goto label_67;
| }
0x0804b3fc cmp sl, 0 |
| if (sl != 0) {
0x0804b400 beq 0x804b40c |
0x0804b404 mov r0, sl | r0 = sl;
0x0804b408 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc}");
| }
0x0804b40c ldr r1, [sp, 0x30] | r1 = var_30h;
0x0804b410 mov r0, r6 | r0 = r6;
0x0804b414 stmdaeq r8, {r0, r1, r3, r4, sb, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, sb, sp, pc}");
0x0804b418 cmp r0, 0 |
| if (r0 == 0) {
0x0804b41c beq 0x804c48c | goto label_68;
| }
0x0804b420 lsr r4, r8, 0x16 | r4 = r8 >> 0x16;
0x0804b424 lsl r0, r8, 0xa | r0 = r8 << 0xa;
0x0804b428 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0804b42c orrs r3, r4, 0 | r3 = r4;
0x0804b430 str r0, [sp, 0x68] | var_68h = r0;
0x0804b434 str r4, [sp, 0x6c] | var_6ch = r4;
| if (r3 != r4) {
0x0804b438 bne 0x804c65c | goto label_69;
| }
0x0804b43c sub r3, r1, 1 | r3 = r1 - 1;
0x0804b440 and r5, r3, r0 | r5 = r3 & r0;
0x0804b444 stmdaeq r8, {r0, r1, r2, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sl, fp, ip, pc}");
0x0804b448 mov r3, r4 | r3 = r4;
0x0804b44c mov r2, r0 | r2 = r0;
0x0804b450 str r0, [sp, 0x68] | var_68h = r0;
| label_35:
0x0804b454 mov r4, 0 | r4 = 0;
0x0804b458 mov r0, r6 | r0 = r6;
0x0804b45c str r4, [sp, 4] | var_4h = r4;
0x0804b460 str r4, [sp] | *(sp) = r4;
0x0804b464 bl 0x804670c | r0 = ext4_sb_bread_gfp ();
0x0804b468 mov sl, r0 | sl = r0;
0x0804b46c cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x0804b470 bhi 0x804c578 | void (*0x804c578)() ();
| }
| label_67:
0x0804b49c ldr r3, [r2, 0x64] | r3 = *((r2 + 0x64));
0x0804b4a0 ldrb r8, [r6, 0xc] | r8 = *((r6 + 0xc));
0x0804b4a4 ands r5, r3, 8 | r5 = r3 & 8;
| if (r5 != r3) {
0x0804b4a8 streq r5, [sp, 0x3c] | var_3ch = r5;
| }
| if (r5 != r3) {
0x0804b4ac subeq r3, r8, 9 | r3 = r8 - 9;
| }
0x0804b4b0 str r5, [sp, 0x1c] | var_1ch = r5;
| if (r5 != r3) {
0x0804b4b4 mvneq r2, 0 | r2 = ~0;
| }
| if (r5 == r3) {
0x0804b4b8 mvnne r0, 0 | r0 = ~0;
| }
0x0804b4bc movwne r1, 0xffff | __asm ("movwne r1, 0xffff");
0x0804b4c0 strdne r0, r1, [sp, 0x38] | __asm ("strdne r0, r1, [var_38h]");
0x0804b4c4 mvn r1, 5 | r1 = ~5;
0x0804b4c8 mov r0, 3 | r0 = 3;
| if (r5 != r3) {
0x0804b4cc lsreq r3, r2, r3 | r3 = r2 >> r3;
| }
0x0804b4d0 sub r2, r8, 2 | r2 = r8 - 2;
| if (r5 != r3) {
0x0804b4d4 streq r3, [sp, 0x38] | var_38h = r3;
| }
0x0804b4d8 smlabb r0, r0, r8, r1 | __asm ("smlabb r0, r0, r8, r1");
0x0804b4dc mov r3, 1 | r3 = 1;
0x0804b4e0 str r0, [sp, 0x34] | var_34h = r0;
0x0804b4e4 lsl r0, r2, r3 | r0 = r2 << r3;
0x0804b4e8 ldr r5, [sp, 0x38] | r5 = var_38h;
0x0804b4ec lsl r2, r3, r2 | r2 = r3 << r2;
0x0804b4f0 sub r1, r8, 0x22 | r1 = r8 - 0x22;
0x0804b4f4 lsl ip, r3, r0 |
0x0804b4f8 add lr, ip, r2, lsl r3 | lr = ip + (r2 << r3);
0x0804b4fc add lr, lr, 3 | lr += 3;
0x0804b500 lsl r1, r3, r1 | r1 = r3 << r1;
0x0804b504 subs r5, r5, lr | r5 -= lr;
0x0804b508 str r5, [sp, 0x38] | var_38h = r5;
0x0804b50c ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x0804b510 sbc lr, r5, lr, asr 31 | __asm ("sbc lr, r5, lr, asr 31");
0x0804b514 str lr, [sp, 0x3c] | var_3ch = lr;
0x0804b518 rsb lr, r8, 0x22 | lr = 0x22 - r8;
0x0804b51c adds r2, r2, 0xc | r2 += 0xc;
0x0804b520 orr r1, r1, r3, lsr lr | r1 |= (r3 >> lr);
0x0804b524 ldr lr, [sp, 0x34] | lr = var_34h;
0x0804b528 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0804b52c adds r2, ip, r2 | r2 = ip + r2;
0x0804b530 sub ip, r0, 0x20 |
0x0804b534 rsb r0, r0, 0x20 | r0 = 0x20 - r0;
0x0804b538 lsl ip, r3, ip |
0x0804b53c orr ip, ip, r3, lsr r0 |
0x0804b540 rsb r0, lr, 0x20 | r0 = 0x20 - lr;
0x0804b544 adc ip, ip, r1 | __asm ("adc ip, ip, r1");
0x0804b548 sub r1, lr, 0x20 | r1 = lr - 0x20;
0x0804b54c lsl r1, r3, r1 | r1 = r3 << r1;
0x0804b550 orr r1, r1, r3, lsr r0 | r1 |= (r3 >> r0);
0x0804b554 movw r0, 0xfff | r0 = 0xfff;
0x0804b558 lsl r3, r3, lr | r3 <<= lr;
0x0804b55c sub lr, r8, 0x20 | lr = r8 - 0x20;
0x0804b560 adds r3, r3, r2 | r3 += r2;
0x0804b564 adc ip, ip, r1 | __asm ("adc ip, ip, r1");
0x0804b568 mov r1, 0xf000 |
0x0804b56c movt r1, 0xffff | r1 = 0x-1000;
0x0804b570 lsl r2, ip, r8 | r2 = ip << r8;
0x0804b574 rsb ip, r8, 0x20 |
0x0804b578 orr r2, r2, r3, lsl lr | r2 |= (r3 << lr);
0x0804b57c orr r2, r2, r3, lsr ip | r2 |= (r3 >> ip);
0x0804b580 lsl r3, r3, r8 | r3 <<= r8;
0x0804b584 cmp r1, r3 |
0x0804b588 sbcs r5, r0, r2 | __asm ("sbcs r5, r0, r2");
| if (r1 >= r3) {
0x0804b58c movlt r3, r1 | r3 = r1;
| }
0x0804b590 ldr r1, [sp, 0x3c] | r1 = var_3ch;
| if (r1 >= r3) {
0x0804b594 movlt r2, r0 | r2 = r0;
| }
0x0804b598 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0804b59c lsl r1, r1, r8 | r1 <<= r8;
0x0804b5a0 orr r1, r1, r0, lsl lr | r1 |= (r0 << lr);
0x0804b5a4 orr r1, r1, r0, lsr ip | r1 |= (r0 >> ip);
0x0804b5a8 lsl r0, r0, r8 | r0 <<= r8;
0x0804b5ac cmp r0, r3 |
0x0804b5b0 sbcs r5, r1, r2 | __asm ("sbcs r5, r1, r2");
| if (r0 >= r3) {
0x0804b5b4 movlt r2, r1 | r2 = r1;
| }
0x0804b5b8 ldr r1, [sp, 0x1c] | r1 = var_1ch;
| if (r0 >= r3) {
0x0804b5bc movlt r3, r0 | r3 = r0;
| }
0x0804b5c0 cmp r1, 0 |
0x0804b5c4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0804b5c8 str r3, [r1, 0x38] | *((r1 + 0x38)) = r3;
| if (r1 != 0) {
0x0804b5cc subeq r3, r8, 9 | r3 = r8 - 9;
| }
0x0804b5d0 str r2, [r1, 0x3c] | *((r1 + 0x3c)) = r2;
| if (r1 != 0) {
0x0804b5d4 mvneq r2, 0 | r2 = ~0;
| }
| if (r1 != 0) {
0x0804b5d8 lsreq r2, r2, r3 | r2 >>= r3;
| }
0x0804b5dc mvn r3, 0 | r3 = ~0;
0x0804b5e0 lsl r0, r3, lr | r0 = r3 << lr;
| if (r1 == 0) {
0x0804b5e4 movne r2, 0xf000 | r2 = 0xf000;
| }
| if (r1 != 0) {
0x0804b5e8 lsleq r1, r2, lr | r1 = r2 << lr;
| }
0x0804b5ec movtne r2, 0xffff | __asm ("movtne r2, 0xffff");
| if (r1 != 0) {
0x0804b5f0 orreq r1, r1, r2, lsr ip | r1 |= (r2 >> ip);
| }
0x0804b5f4 movwne r1, 0xfff | __asm ("movwne r1, 0xfff");
0x0804b5f8 orr r0, r0, r3, lsr ip | r0 |= (r3 >> ip);
| if (r1 != 0) {
0x0804b5fc lsleq r2, r2, r8 | r2 <<= r8;
| }
0x0804b600 lsl r3, r3, r8 | r3 <<= r8;
0x0804b604 cmp r2, r3 |
0x0804b608 sbcs ip, r1, r0 | __asm ("sbcs ip, r1, r0");
| if (r2 >= r3) {
0x0804b60c movlt r3, r2 | r3 = r2;
| }
| if (r2 >= r3) {
0x0804b610 movlt r0, r1 | r0 = r1;
| }
0x0804b614 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x0804b618 str r0, [r6, 0x1c] | *((r6 + 0x1c)) = r0;
0x0804b61c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0804b620 ldrh r3, [fp, 0xfe] | r3 = *(arg_feh);
0x0804b624 str r3, [r2] | *(r2) = r3;
0x0804b628 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804b62c ldr r2, [r2, 0x60] | r2 = *((r2 + 0x60));
0x0804b630 tst r2, 0x80 |
| if ((r2 & 0x80) == 0) {
0x0804b634 beq 0x804bdd4 | goto label_70;
| }
0x0804b638 sub r2, r3, 0x40 | r2 = r3 - 0x40;
0x0804b63c cmp r2, 0x3c0 |
| if (r2 <= 0x3c0) {
0x0804b640 bhi 0x804b650 |
0x0804b644 sub r2, r3, 1 | r2 = r3 - 1;
0x0804b648 tst r2, r3 |
| if ((r2 & r3) == 0) {
0x0804b64c beq 0x804bde0 | goto label_71;
| }
| }
0x0804b650 stmdaeq r5, {r2, r4, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, sb, ip, sp, lr, pc}");
0x0804b654 stmdaeq r5, {r2, r4, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, sb, ip, sp, lr, pc}");
0x0804b658 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b65c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b660 mov r0, r6 | r0 = r6;
0x0804b664 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
| label_4:
0x0804b668 mov r4, 0 | r4 = 0;
0x0804b66c mvn r7, 0x15 | r7 = ~0x15;
| label_6:
0x0804b670 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b674 ldr r8, [r3, 0x220] | r8 = *((r3 + 0x220));
0x0804b678 cmp r8, 0 |
| if (r8 != 0) {
0x0804b67c beq 0x804b68c |
| label_32:
0x0804b680 add r1, r8, 0x40 | r1 = r8 + 0x40;
0x0804b684 mov r0, r8 | r0 = r8;
0x0804b688 stmdaeq r8, {r0, r1, r3, r4, r5, r7, r8, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r5, r7, r8, sp, pc}");
| }
| label_17:
0x0804b68c ldr r5, [sp, 0x18] | r5 = var_18h;
0x0804b690 ldr r0, [r5, 0x2e8] | r0 = *((r5 + 0x2e8));
0x0804b694 stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804b698 mov r3, 0 | r3 = 0;
0x0804b69c cmp sl, 0 |
0x0804b6a0 str r3, [r5, 0x2e8] | *((r5 + 0x2e8)) = r3;
| if (sl != 0) {
0x0804b6a4 beq 0x804b6b0 |
0x0804b6a8 mov r0, sl | r0 = sl;
0x0804b6ac stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc}");
| }
0x0804b6b0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b6b4 ldr r0, [r3, 0x140] | r0 = *((r3 + 0x140));
0x0804b6b8 cmp r0, 0 |
| if (r0 != 0) {
0x0804b6bc beq 0x804b6d4 |
| label_33:
0x0804b6c0 mov r1, 0x83 | r1 = 0x83;
0x0804b6c4 stmdaeq r8, {r0, r1, r2, r3, r5, r7, r8, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, r7, r8, sp, pc}");
0x0804b6c8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0804b6cc mov r3, 0 | r3 = 0;
0x0804b6d0 str r3, [r2, 0x140] | *((r2 + 0x140)) = r3;
| }
0x0804b6d4 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0804b6d8 cmp r4, 0 |
| if (r4 != 0) {
0x0804b6dc moveq r4, r7 | r4 = r7;
| }
0x0804b6e0 mov r3, 0 | r3 = 0;
0x0804b6e4 str r3, [r6, 0x1f8] | *((r6 + 0x1f8)) = r3;
0x0804b6e8 ldr r0, [r5, 0xd8] | r0 = *((r5 + 0xd8));
| label_8:
0x0804b6ec stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804b6f0 mov r0, r5 | r0 = r5;
0x0804b6f4 stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804b6f8 mov r0, sb | r0 = sb;
0x0804b6fc stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
| label_3:
0x0804b700 mov r0, r4 | r0 = r4;
0x0804b704 add sp, sp, 0x8c |
0x0804b708 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_39:
0x0804b70c ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0804b710 cmp r3, 0x62 |
| if (r3 != 0x62) {
0x0804b714 bne 0x804aef4 | goto label_0;
| }
0x0804b718 ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x0804b71c subs r2, r2, 0x3d | r2 -= 0x3d;
| if (r2 != r2) {
0x0804b720 bne 0x804aef4 | goto label_0;
| }
0x0804b724 add r0, r4, 3 | r0 = r4 + 3;
0x0804b728 add r1, sp, 0x78 | r1 += var_78h;
0x0804b72c mov sl, r2 | sl = r2;
0x0804b730 str r0, [sp, 0x78] | var_78h = r0;
0x0804b734 stmdaeq r8, {r0, r1, r2, r3, r4, sb, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, sb, sp, pc}");
0x0804b738 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0804b73c str r3, [sp, 0x1c] | var_1ch = r3;
0x0804b740 mov r8, r0 | r8 = r0;
0x0804b744 ldrb r3, [r3] | r3 = *(r3);
0x0804b748 cmp r3, 0 |
0x0804b74c cmpne r3, 0x2c | __asm ("cmpne r3, 0x2c");
| if (r3 != 0) {
0x0804b750 bne 0x804dfdc | goto label_72;
| }
0x0804b754 cmp r3, 0x2c |
0x0804b758 mov r0, 0 | r0 = 0;
0x0804b75c movw r1, 0x4003 | r1 = 0x4003;
0x0804b760 strd r0, r1, [sp, 0x5c] | __asm ("strd r0, r1, [var_5ch]");
| if (r3 != 0x2c) {
0x0804b764 ldreq r3, [sp, 0x1c] | r3 = var_1ch;
| }
| if (r3 != 0x2c) {
0x0804b768 addeq r3, r3, 1 | r3++;
| }
| if (r3 != 0x2c) {
0x0804b76c streq r3, [sp, 0x1c] | var_1ch = r3;
| }
0x0804b770 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0804b774 cmp r3, 0 |
| if (r3 != 0) {
0x0804b778 bne 0x804af0c | goto label_1;
| }
0x0804b77c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b780 cmp r3, 0 |
| if (r3 != 0) {
0x0804b784 bne 0x804af20 | goto label_2;
| }
| label_41:
0x0804b788 mov r0, r3 | r0 = r3;
0x0804b78c stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804b790 mov r0, sb | r0 = sb;
0x0804b794 stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
| label_34:
0x0804b798 mvn r4, 0xb | r4 = ~0xb;
0x0804b79c b 0x804b700 | goto label_3;
| label_25:
0x0804b7a0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0804b7a4 cmp r3, 0 |
| if (r3 != 0) {
0x0804b7a8 bne 0x804b668 | goto label_4;
| }
0x0804b7ac mov r0, r6 | r0 = r6;
0x0804b7b0 stmdaeq r5, {r7, r8, sl, fp, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r7, r8, sl, fp, ip, sp, lr, pc}");
0x0804b7b4 stmdaeq r5, {r7, r8, sl, fp, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r7, r8, sl, fp, ip, sp, lr, pc}");
0x0804b7b8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b7bc stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b7c0 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804b7c4 b 0x804b668 | goto label_4;
| label_43:
0x0804b7c8 mov r3, 0 | r3 = 0;
0x0804b7cc mov r2, r8 | r2 = r8;
0x0804b7d0 mov fp, r3 |
0x0804b7d4 str sl, [sp, 0x6c] | var_6ch = sl;
0x0804b7d8 str r8, [sp, 0x68] | var_68h = r8;
0x0804b7dc b 0x804afb8 | goto label_5;
| label_49:
0x0804b7e0 ldr r3, [r4, 0x220] | r3 = *((r4 + 0x220));
0x0804b7e4 cmp r3, 0 |
| if (r3 == 0) {
0x0804b7e8 beq 0x804ba7c | goto label_73;
| }
| label_27:
0x0804b7ec ldr r2, [r3] | r2 = *(r3);
0x0804b7f0 ldr r5, [fp, 0x3fc] | r5 = *(arg_3fch);
0x0804b7f4 cmp r2, 4 |
| if (r2 != 4) {
0x0804b7f8 bne 0x804bb20 | goto label_74;
| }
0x0804b7fc mov r1, fp | r1 = fp;
0x0804b800 add r0, sp, 0x78 | r0 += var_78h;
0x0804b804 mov r2, 0x3fc | r2 = 0x3fc;
0x0804b808 str r3, [sp, 0x78] | var_78h = r3;
0x0804b80c mvn r3, 0 | r3 = ~0;
0x0804b810 str r3, [sp, 0x80] | var_80h = r3;
0x0804b814 stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, sl, fp, ip, pc}");
0x0804b818 subs r4, r0, 0 | r4 -= var_78h;
| if (r4 != var_78h) {
0x0804b81c bne 0x804bb20 | goto label_74;
| }
0x0804b820 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0804b824 cmp r5, r3 |
| if (r5 == r3) {
0x0804b828 beq 0x804b93c | goto label_75;
| }
0x0804b82c mov r0, r6 | r0 = r6;
0x0804b830 stmdaeq r5, {r4, r5, r6, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r5, r6, r8, sb, sl, fp, sp, lr, pc}");
0x0804b834 stmdaeq r5, {r4, r5, r6, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r5, r6, r8, sb, sl, fp, sp, lr, pc}");
0x0804b838 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b83c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b840 mvn r7, 0x49 | r7 = ~0x49;
0x0804b844 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804b848 b 0x804b670 | goto label_6;
| label_38:
0x0804b84c movw r3, 0x4003 | r3 = 0x4003;
0x0804b850 mov sl, r4 | sl = r4;
0x0804b854 str r4, [sp, 0x5c] | var_5ch = r4;
0x0804b858 mov r8, 1 | r8 = 1;
0x0804b85c str r4, [sp, 0x1c] | var_1ch = r4;
0x0804b860 str r3, [sp, 0x60] | var_60h = r3;
0x0804b864 b 0x804af14 | goto label_7;
| label_42:
0x0804b868 mvn r4, 0x15 | r4 = ~0x15;
0x0804b86c mov r0, r6 | r0 = r6;
0x0804b870 stmdaeq r5, {r3, r4, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r7, sb, sl, fp, sp, lr, pc}");
0x0804b874 stmdaeq r5, {r3, r4, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r7, sb, sl, fp, sp, lr, pc}");
0x0804b878 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b87c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b880 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
| do {
0x0804b884 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0804b888 mov r3, 0 | r3 = 0;
0x0804b88c str r3, [r6, 0x1f8] | *((r6 + 0x1f8)) = r3;
0x0804b890 ldr r0, [r5, 0xd8] | r0 = *((r5 + 0xd8));
0x0804b894 b 0x804b6ec | goto label_8;
| label_45:
0x0804b898 mov r4, r0 | r4 = r0;
0x0804b89c stmdaeq r5, {r4, r5, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, sl, fp, sp, lr, pc}");
0x0804b8a0 stmdaeq r5, {r4, r5, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, sl, fp, sp, lr, pc}");
0x0804b8a4 mov r0, r6 | r0 = r6;
0x0804b8a8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b8ac stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b8b0 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804b8b4 b 0x804b884 |
| } while (1);
| label_52:
0x0804b8b8 orr r2, r2, 0x400 | r2 |= 0x400;
0x0804b8bc str r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x0804b8c0 ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
0x0804b8c4 b 0x804b168 | goto label_9;
| label_58:
0x0804b8c8 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0804b8cc ldrh r3, [fp, 0x58] | r3 = *(arg_58h);
0x0804b8d0 str r3, [r1, 0x84] | *((r1 + 0x84)) = r3;
0x0804b8d4 ldr r2, [fp, 0x54] | r2 = *(arg_54h);
0x0804b8d8 str r2, [r1, 0x88] | *((r1 + 0x88)) = r2;
0x0804b8dc cmp r2, 0xa |
| if (r2 <= 0xa) {
0x0804b8e0 ble 0x804ba34 | goto label_76;
| }
0x0804b8e4 cmp r3, 0x7f |
| if (r3 > 0x7f) {
0x0804b8e8 ble 0x804b904 |
0x0804b8ec ldr r1, [sp, 0x30] | r1 = var_30h;
0x0804b8f0 sub r2, r3, 1 | r2 = r3 - 1;
0x0804b8f4 and r2, r2, r3 | r2 &= r3;
0x0804b8f8 cmp r3, r1 |
0x0804b8fc cmple r2, 0 | __asm ("cmple r2, 0");
| if (r3 == r1) {
0x0804b900 beq 0x804bba0 | goto label_77;
| }
| }
0x0804b904 mov r0, r6 | r0 = r6;
0x0804b908 stmdaeq r5, {r4, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r4, ip, sp, lr, pc}");
0x0804b90c stmdaeq r5, {r4, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r4, ip, sp, lr, pc}");
0x0804b910 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b914 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b918 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804b91c mov r0, r6 | r0 = r6;
0x0804b920 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0804b924 stmdaeq r5, {r2, r3, r5, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, ip, sp, lr, pc}");
0x0804b928 stmdaeq r5, {r2, r3, r5, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, ip, sp, lr, pc}");
0x0804b92c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b930 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b934 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804b938 b 0x804b668 | goto label_4;
| label_75:
0x0804b93c ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804b940 mov r3, r4 | r3 = r4;
0x0804b944 ldr r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x0804b948 ldr r2, [r1, 0x60] | r2 = *((r1 + 0x60));
0x0804b94c tst r2, 0x2000 |
| if ((r2 & 0x2000) != 0) {
0x0804b950 bne 0x804b080 | goto label_10;
| }
0x0804b954 ldr r3, [r1, 0x64] | r3 = *((r1 + 0x64));
0x0804b958 tst r3, 0x400 |
| if ((r3 & 0x400) == 0) {
0x0804b95c beq 0x804bae4 | goto label_50;
| }
0x0804b960 ldr r3, [r4, 0x220] | r3 = *((r4 + 0x220));
0x0804b964 cmp r3, 0 |
| if (r3 == 0) {
0x0804b968 beq 0x804dfa0 | goto label_78;
| }
| label_14:
0x0804b96c ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
| label_15:
0x0804b970 ldr r3, [r4, 0x220] | r3 = *((r4 + 0x220));
0x0804b974 cmp r3, 0 |
| if (r3 == 0) {
0x0804b978 beq 0x804bae0 | goto label_79;
| }
| label_16:
0x0804b97c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804b980 add r1, fp, 0x68 | r1 += arg_68h;
0x0804b984 ldr r3, [r3, 0x220] | r3 = *((r3 + 0x220));
0x0804b988 ldr r2, [r3] | r2 = *(r3);
0x0804b98c cmp r2, 4 |
| if (r2 != 4) {
0x0804b990 bne 0x804bb20 | goto label_74;
| }
0x0804b994 add r0, sp, 0x78 | r0 += var_78h;
0x0804b998 mov r2, 0x10 | r2 = 0x10;
0x0804b99c str r3, [sp, 0x78] | var_78h = r3;
0x0804b9a0 mvn r3, 0 | r3 = ~0;
0x0804b9a4 str r3, [sp, 0x80] | var_80h = r3;
0x0804b9a8 stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, sl, fp, ip, pc}");
0x0804b9ac cmp r0, 0 |
| if (r0 != 0) {
0x0804b9b0 bne 0x804bb20 | goto label_74;
| }
0x0804b9b4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0804b9b8 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0804b9bc ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
0x0804b9c0 str r2, [r1, 0x224] | *((r1 + 0x224)) = r2;
0x0804b9c4 b 0x804b08c | goto label_11;
| label_47:
0x0804b9c8 mov r0, r6 | r0 = r6;
0x0804b9cc stmdaeq r5, {r4, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r8, sb, sl, fp, sp, lr, pc}");
0x0804b9d0 stmdaeq r5, {r4, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r8, sb, sl, fp, sp, lr, pc}");
0x0804b9d4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b9d8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804b9dc stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804b9e0 b 0x804b668 | goto label_4;
| label_59:
0x0804b9e4 add r0, r0, 0x200 | r0 += 0x200;
0x0804b9e8 mov r2, 0xcc0 | r2 = 0xcc0;
0x0804b9ec mov r1, 0x40 | r1 = 0x40;
0x0804b9f0 stmdaeq r8, {r0, r1, r5, sb, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r5, sb, sp, pc}");
0x0804b9f4 subs r3, r0, 0 | r3 = r0 - 0;
0x0804b9f8 str r3, [sp, 0x38] | var_38h = r3;
| if (r3 == r0) {
0x0804b9fc beq 0x804b668 | goto label_4;
| }
0x0804ba00 add r5, sp, 0x5c | r5 += var_5ch;
0x0804ba04 add r3, sp, 0x60 | r3 += var_60h;
0x0804ba08 mov ip, 0 |
0x0804ba0c mov r2, r5 | r2 = r5;
0x0804ba10 mov r1, r6 | r1 = r6;
0x0804ba14 str ip, [sp] | *(sp) = ip;
0x0804ba18 str r3, [sp, 0x34] | var_34h = r3;
0x0804ba1c bl 0x8047eac | r0 = parse_options ();
0x0804ba20 cmp r0, 0 |
| if (r0 == 0) {
0x0804ba24 beq 0x804bdb4 | goto label_80;
| }
| label_24:
0x0804ba28 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0804ba2c stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804ba30 b 0x804b2cc | goto label_12;
| label_76:
0x0804ba34 mov r3, r2 | r3 = r2;
0x0804ba38 mov r0, r6 | r0 = r6;
0x0804ba3c stmdaeq r5, {r3, r4, r5, r6, r7, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, sb, sl, fp, sp, lr, pc}");
0x0804ba40 stmdaeq r5, {r3, r4, r5, r6, r7, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, sb, sl, fp, sp, lr, pc}");
0x0804ba44 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804ba48 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804ba4c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804ba50 b 0x804b668 | goto label_4;
| label_46:
0x0804ba54 ldr r1, [pc, 0xd70] | r1 = .bss;
0x0804ba58 mov r0, r6 | r0 = r6;
0x0804ba5c stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, sp, lr, pc}");
0x0804ba60 stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, sp, lr, pc}");
0x0804ba64 movw r2, 0x1001 | r2 = 0x1001;
0x0804ba68 stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc} | __asm ("stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc}");
0x0804ba6c ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
0x0804ba70 ldr r3, [r3, 0x44] | r3 = *((r3 + 0x44));
0x0804ba74 ldr r3, [r3, 0x64] | r3 = *((r3 + 0x64));
0x0804ba78 b 0x804b024 | goto label_13;
| label_73:
0x0804ba7c stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804ba80 stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804ba84 ldrb r2, [r5] | r2 = *(r5);
0x0804ba88 cmp r2, 0 |
| if (r2 == 0) {
0x0804ba8c beq 0x804c318 | goto label_81;
| }
| label_28:
0x0804ba90 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0804ba94 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x0804ba98 tst r3, 0x2000 |
0x0804ba9c mov r3, r4 | r3 = r4;
| if ((r3 & 0x2000) != 0) {
0x0804baa0 bne 0x804b080 | goto label_10;
| }
| label_36:
0x0804baa4 ldrb r3, [r5] | r3 = *(r5);
0x0804baa8 cmp r3, 0 |
| if (r3 != 0) {
0x0804baac bne 0x804b96c | goto label_14;
| }
0x0804bab0 mov r2, 9 | r2 = 9;
0x0804bab4 movw r1, 0xc34 | r1 = 0xc34;
0x0804bab8 stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc}");
0x0804babc stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc}");
0x0804bac0 mov ip, 1 |
0x0804bac4 strb ip, [r5] | *(r5) = ip;
0x0804bac8 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x0804bacc ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804bad0 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804bad4 ldr r3, [r2, 0x64] | r3 = *((r2 + 0x64));
0x0804bad8 tst r3, 0x400 |
| if ((r3 & 0x400) != 0) {
0x0804badc bne 0x804b970 | goto label_15;
| }
| label_79:
0x0804bae0 ldr r2, [r2, 0x60] | r2 = *((r2 + 0x60));
| label_50:
0x0804bae4 tst r2, 0x400 |
| if ((r2 & 0x400) == 0) {
0x0804bae8 moveq r3, r4 | r3 = r4;
| goto label_82;
| }
| if ((r2 & 0x400) == 0) {
| label_82:
0x0804baec beq 0x804b08c | goto label_11;
| }
0x0804baf0 b 0x804b97c | goto label_16;
| label_53:
0x0804baf4 orr r2, r2, 0x800 | r2 |= 0x800;
0x0804baf8 str r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x0804bafc ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
0x0804bb00 b 0x804b168 | goto label_9;
| label_56:
0x0804bb04 mov r0, r6 | r0 = r6;
0x0804bb08 stmdaeq r5, {r2, r3, r4, r5, r7, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r7, r8, sb, sl, fp, sp, lr, pc}");
0x0804bb0c stmdaeq r5, {r2, r3, r4, r5, r7, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, r7, r8, sb, sl, fp, sp, lr, pc}");
0x0804bb10 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bb14 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bb18 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bb1c b 0x804b668 | goto label_4;
| label_74:
0x0804bb20 udf 0x12 | __asm ("udf 0x12");
| label_57:
0x0804bb24 mov r0, r6 | r0 = r6;
0x0804bb28 stmdaeq r5, {r3, r4, r6, r7, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, r7, r8, sb, sl, fp, sp, lr, pc}");
0x0804bb2c stmdaeq r5, {r3, r4, r6, r7, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, r7, r8, sb, sl, fp, sp, lr, pc}");
0x0804bb30 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bb34 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bb38 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bb3c b 0x804b668 | goto label_4;
| label_48:
0x0804bb40 mov r0, r6 | r0 = r6;
0x0804bb44 stmdaeq r5, {r2, r4, r6, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r6, r8, sb, sl, fp, sp, lr, pc}");
0x0804bb48 stmdaeq r5, {r2, r4, r6, r8, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r6, r8, sb, sl, fp, sp, lr, pc}");
0x0804bb4c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bb50 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bb54 mov r4, 0 | r4 = 0;
0x0804bb58 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bb5c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804bb60 ldr r7, [r3, 0x220] | r7 = *((r3 + 0x220));
0x0804bb64 str r4, [r3, 0x220] | *((r3 + 0x220)) = r4;
0x0804bb68 b 0x804b68c | goto label_17;
| label_51:
0x0804bb6c stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804bb70 stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804bb74 ldrb r3, [ip] | r3 = *(ip);
0x0804bb78 cmp r3, 0 |
| if (r3 == 0) {
0x0804bb7c beq 0x804c3b4 | goto label_83;
| }
| label_31:
0x0804bb80 mov r3, r4 | r3 = r4;
0x0804bb84 b 0x804b140 | goto label_18;
| label_44:
0x0804bb88 mov r4, r1 | r4 = r1;
0x0804bb8c mov r1, sl | r1 = sl;
0x0804bb90 stmdaeq r8, {r0, r1, r2, r3, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r6, sl, fp, ip, pc}");
0x0804bb94 mov fp, r1 |
0x0804bb98 strd r2, r3, [sp, 0x68] | __asm ("strd r2, r3, [var_6ch]");
0x0804bb9c b 0x804afb8 | goto label_5;
| label_77:
0x0804bba0 cmp r3, 0x8f |
| if (r3 < 0x8f) {
0x0804bba4 bls 0x804bc38 | goto label_84;
| }
0x0804bba8 add ip, r6, 0x210 |
0x0804bbac add r2, r6, 0x200 | r2 = r6 + 0x200;
0x0804bbb0 mvn r0, 0x80000000 | r0 = ~0x80000000;
0x0804bbb4 mov r1, 3 | r1 = 3;
0x0804bbb8 mov lr, 1 | lr = 1;
0x0804bbbc strd r0, r1, [ip, -8] | __asm ("strd r0, r1, [ip, -8]");
0x0804bbc0 mov r0, 0x80000000 | r0 = 0x80000000;
0x0804bbc4 str lr, [r6, 0x1fc] |
0x0804bbc8 mvn r1, 0 | r1 = ~0;
0x0804bbcc strd r0, r1, [r2] | __asm ("strd r0, r1, [r2]");
| label_20:
0x0804bbd0 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0804bbd4 mov r1, 0x20 | r1 = 0x20;
0x0804bbd8 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804bbdc str r1, [r0, 0x144] | *((r0 + 0x144)) = r1;
0x0804bbe0 ldr r2, [r2, 0x44] | r2 = *((r2 + 0x44));
0x0804bbe4 ldr r2, [r2, 0x64] | r2 = *((r2 + 0x64));
0x0804bbe8 tst r2, 0x40 |
| if ((r2 & 0x40) == 0) {
0x0804bbec beq 0x804b2ac | goto label_19;
| }
0x0804bbf0 sub r2, r3, 0x80 | r2 = r3 - 0x80;
0x0804bbf4 movw r3, 0x15e | r3 = 0x15e;
0x0804bbf8 ldrh r3, [fp, r3] | r3 = *((fp + r3));
0x0804bbfc cmp r2, r3 |
| if (r2 <= r3) {
0x0804bc00 blo 0x804c35c | goto label_85;
| }
0x0804bc04 cmp r3, 0x20 |
| if (r3 < 0x20) {
0x0804bc08 movhs r1, r3 | r1 = r3;
| }
0x0804bc0c ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 >= 0x20) {
0x0804bc10 movlo r1, 0x20 | r1 = 0x20;
| }
0x0804bc14 str r1, [r3, 0x144] | *((r3 + 0x144)) = r1;
0x0804bc18 add r3, fp, 0x15c | r3 += arg_15ch;
0x0804bc1c ldrh r3, [r3] | r3 = *(r3);
0x0804bc20 cmp r2, r3 |
| if (r2 <= r3) {
0x0804bc24 blo 0x804c398 | goto label_86;
| }
0x0804bc28 cmp r3, r1 |
| if (r3 <= r1) {
0x0804bc2c ldrhi r2, [sp, 0x18] | r2 = var_18h;
| }
| if (r3 <= r1) {
0x0804bc30 strhi r3, [r2, 0x144] | *((r2 + 0x144)) = r3;
| }
0x0804bc34 b 0x804b2ac | goto label_19;
| label_84:
0x0804bc38 add ip, r6, 0x210 |
0x0804bc3c add r2, r6, 0x200 | r2 = r6 + 0x200;
0x0804bc40 mvn r0, 0x80000000 | r0 = ~0x80000000;
0x0804bc44 mov r1, 0 | r1 = 0;
0x0804bc48 mov lr, 0xca00 |
0x0804bc4c movt lr, 0x3b9a | lr = 0x3b9aca00;
0x0804bc50 strd r0, r1, [ip, -8] | __asm ("strd r0, r1, [ip, -8]");
0x0804bc54 cmp r3, 0x80 |
0x0804bc58 str lr, [r6, 0x1fc] |
0x0804bc5c mov r0, 0x80000000 | r0 = 0x80000000;
0x0804bc60 mvn r1, 0 | r1 = ~0;
0x0804bc64 strd r0, r1, [r2] | __asm ("strd r0, r1, [r2]");
| if (r3 != 0x80) {
0x0804bc68 bne 0x804bbd0 | goto label_20;
| }
0x0804bc6c b 0x804b2ac | goto label_19;
| label_64:
0x0804bc70 ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
0x0804bc74 ldr r3, [r3, 0x44] | r3 = *((r3 + 0x44));
0x0804bc78 ldr r2, [r3, 0x60] | r2 = *((r3 + 0x60));
0x0804bc7c bics r2, r2, 0x16 | __asm ("bics r2, r2, 0x16");
| if (r3 != 0x80) {
0x0804bc80 bne 0x804bd74 | goto label_87;
| }
0x0804bc84 ldr r2, [r3, 0x5c] | r2 = *((r3 + 0x5c));
0x0804bc88 tst r2, 4 |
| if ((r2 & 4) == 0) {
0x0804bc8c beq 0x804bd74 | goto label_87;
| }
0x0804bc90 ldr r2, [r6, 0x34] | r2 = *((r6 + 0x34));
0x0804bc94 tst r2, 1 |
| if ((r2 & 1) == 0) {
0x0804bc98 bne 0x804bca8 |
0x0804bc9c ldr r3, [r3, 0x64] | r3 = *((r3 + 0x64));
0x0804bca0 cmp r3, 7 |
| if (r3 > 7) {
0x0804bca4 bhi 0x804bd74 | goto label_87;
| }
| }
0x0804bca8 mov r0, r6 | r0 = r6;
0x0804bcac stmdaeq r5, {sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {sb, ip, sp, lr, pc}");
0x0804bcb0 stmdaeq r5, {sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {sb, ip, sp, lr, pc}");
0x0804bcb4 stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc}");
0x0804bcb8 stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc}");
0x0804bcbc stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bcc0 b 0x804b39c | goto label_21;
| label_60:
0x0804bcc4 stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804bcc8 stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804bccc ldrb r0, [r1, 3] | r0 = *((r1 + 3));
0x0804bcd0 cmp r0, 0 |
| if (r0 == 0) {
0x0804bcd4 beq 0x804dfac | goto label_88;
| }
| label_37:
0x0804bcd8 bic r3, r3, 0x400000 | r3 = BIT_MASK (r3, 0x400000);
0x0804bcdc str r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
0x0804bce0 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804bce4 ldr r3, [r2, 0x50] | r3 = *((r2 + 0x50));
0x0804bce8 bic r3, r3, 0x10 | r3 = BIT_MASK (r3, 0x10);
0x0804bcec str r3, [r2, 0x50] | *((r2 + 0x50)) = r3;
0x0804bcf0 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804bcf4 ldr r3, [r2, 0x50] | r3 = *((r2 + 0x50));
0x0804bcf8 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0804bcfc bne 0x804c414 | goto label_89;
| }
0x0804bd00 ldr r3, [r2, 0x44] | r3 = *((r2 + 0x44));
0x0804bd04 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x0804bd08 tst r3, 0x10000 |
| if ((r3 & 0x10000) != 0) {
0x0804bd0c bne 0x804c378 | goto label_90;
| }
| label_29:
0x0804bd10 ldr r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
0x0804bd14 tst r3, 0x8000000 |
0x0804bd18 bicne r3, r3, 0x8000000 | __asm ("bicne r3, r3, 0x8000000");
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x0804bd1c strne r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
| }
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x0804bd20 ldrne r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
| }
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x0804bd24 ldrne r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
| }
0x0804bd28 b 0x804b320 | goto label_22;
| label_63:
0x0804bd2c ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804bd30 ldr r3, [r2, 0x50] | r3 = *((r2 + 0x50));
0x0804bd34 orr r3, r3, 4 | r3 |= 4;
0x0804bd38 str r3, [r2, 0x50] | *((r2 + 0x50)) = r3;
0x0804bd3c ldr r3, [r6, 0x1f8] | r3 = *((r6 + 0x1f8));
0x0804bd40 ldr r3, [r3, 0x44] | r3 = *((r3 + 0x44));
0x0804bd44 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x0804bd48 tst r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x0804bd4c bne 0x804c430 | goto label_91;
| }
0x0804bd50 tst r3, 0x400 |
| if ((r3 & 0x400) == 0) {
0x0804bd54 beq 0x804b38c | goto label_23;
| }
0x0804bd58 mov r0, r6 | r0 = r6;
0x0804bd5c stmdaeq r5, {r2, r4, r6, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r6, r7, r8, ip, sp, lr, pc}");
0x0804bd60 stmdaeq r5, {r2, r4, r6, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r6, r7, r8, ip, sp, lr, pc}");
0x0804bd64 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bd68 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bd6c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bd70 b 0x804b668 | goto label_4;
| label_87:
0x0804bd74 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0804bd78 cmp r3, 0 |
| if (r3 == 0) {
0x0804bd7c beq 0x804bd98 | goto label_92;
| }
0x0804bd80 ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x0804bd84 mov r0, r6 | r0 = r6;
0x0804bd88 and r1, r1, 1 | r1 &= 1;
0x0804bd8c bl 0x804898c | r0 = ext4_feature_set_ok ();
0x0804bd90 cmp r0, 0 |
| if (r0 != 0) {
0x0804bd94 bne 0x804b668 | goto label_4;
| }
| label_92:
0x0804bd98 mov r0, r6 | r0 = r6;
0x0804bd9c stmdaeq r5, {r2, r4, r5, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, sb, ip, sp, lr, pc}");
0x0804bda0 stmdaeq r5, {r2, r4, r5, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, sb, ip, sp, lr, pc}");
0x0804bda4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bda8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804bdac stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bdb0 b 0x804b668 | goto label_4;
| label_80:
0x0804bdb4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0804bdb8 mov r0, r6 | r0 = r6;
0x0804bdbc stmdaeq r5, {r2, r4, r5, r6, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, r6, ip, sp, lr, pc}");
0x0804bdc0 stmdaeq r5, {r2, r4, r5, r6, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, r6, ip, sp, lr, pc}");
0x0804bdc4 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x0804bdc8 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x0804bdcc stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804bdd0 b 0x804ba28 | goto label_24;
| label_70:
0x0804bdd4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0804bdd8 mov r3, 0x20 | r3 = 0x20;
0x0804bddc str r3, [r2] | *(r2) = r3;
| label_71:
0x0804bde0 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0804bde4 ldr r3, [fp, 0x20] | r3 = *(arg_20h);
0x0804bde8 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0804bdec str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0804bdf0 ldr r8, [fp, 0x28] | r8 = *(arg_28h);
0x0804bdf4 str r8, [r5, 0x10] | *((r5 + 0x10)) = r8;
0x0804bdf8 ldr r1, [r4, 0x84] | r1 = *((r4 + 0x84));
0x0804bdfc stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, r7, sl, fp, ip, pc}");
0x0804be00 cmp r0, 0 |
0x0804be04 str r0, [r5, 4] | *((r5 + 4)) = r0;
| if (r0 == 0) {
0x0804be08 beq 0x804b7a0 | goto label_25;
| }
0x0804be0c cmp r8, r0 |
| if (r8 <= r0) {
0x0804be10 blo 0x804c46c | goto label_93;
| }
0x0804be14 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0804be18 lsl r3, r3, 3 | r3 <<= 3;
0x0804be1c str r3, [sp, 0x34] | var_34h = r3;
0x0804be20 cmp r8, r3 |
| if (r8 > r3) {
0x0804be24 bhi 0x804c46c | goto label_93;
| }
| label_81:
0x0804c318 mov r2, 9 | r2 = 9;
0x0804c31c movw r1, 0xc34 | r1 = 0xc34;
0x0804c320 stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc}");
0x0804c324 stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc}");
0x0804c328 mov ip, 1 |
0x0804c32c strb ip, [r5] | *(r5) = ip;
0x0804c330 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x0804c334 ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804c338 mov r3, r4 | r3 = r4;
0x0804c33c ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804c340 ldr r1, [r2, 0x64] | r1 = *((r2 + 0x64));
0x0804c344 tst r1, 0x400 |
| if ((r1 & 0x400) == 0) {
0x0804c348 beq 0x804b074 | goto label_26;
| }
0x0804c34c ldr r3, [r4, 0x220] | r3 = *((r4 + 0x220));
0x0804c350 cmp r3, 0 |
| if (r3 != 0) {
0x0804c354 bne 0x804b7ec | goto label_27;
| }
0x0804c358 b 0x804ba90 | goto label_28;
| label_85:
0x0804c35c mov r0, r6 | r0 = r6;
0x0804c360 stmdaeq r5, {r2, r3, r4, r5, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, ip, sp, lr, pc}");
0x0804c364 stmdaeq r5, {r2, r3, r4, r5, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, ip, sp, lr, pc}");
0x0804c368 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c36c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c370 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c374 b 0x804b668 | goto label_4;
| label_90:
0x0804c378 mov r0, r6 | r0 = r6;
0x0804c37c stmdaeq r5, {r5, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r5, r8, ip, sp, lr, pc}");
0x0804c380 stmdaeq r5, {r5, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r5, r8, ip, sp, lr, pc}");
0x0804c384 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x0804c388 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x0804c38c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c390 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804c394 b 0x804bd10 | goto label_29;
| label_86:
0x0804c398 mov r0, r6 | r0 = r6;
0x0804c39c stmdaeq r5, {r3, r4, r6, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, ip, sp, lr, pc}");
0x0804c3a0 stmdaeq r5, {r3, r4, r6, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, ip, sp, lr, pc}");
0x0804c3a4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c3a8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c3ac stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c3b0 b 0x804b668 | goto label_4;
| label_83:
0x0804c3b4 mov r2, 9 | r2 = 9;
0x0804c3b8 movw r1, 0xc34 | r1 = 0xc34;
0x0804c3bc stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc}");
0x0804c3c0 stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r8, fp, ip, lr, pc}");
0x0804c3c4 mov lr, 1 | lr = 1;
0x0804c3c8 strb lr, [ip] |
0x0804c3cc stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x0804c3d0 ldr r4, [r6, 0x1f8] | r4 = *((r6 + 0x1f8));
0x0804c3d4 mov r3, r4 | r3 = r4;
0x0804c3d8 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0804c3dc ldr r2, [r2, 0x64] | r2 = *((r2 + 0x64));
0x0804c3e0 tst r2, 0x400 |
| if ((r2 & 0x400) == 0) {
0x0804c3e4 beq 0x804b140 | goto label_18;
| }
0x0804c3e8 ldr r3, [r4, 0x220] | r3 = *((r4 + 0x220));
0x0804c3ec cmp r3, 0 |
| if (r3 != 0) {
0x0804c3f0 bne 0x804b130 | goto label_30;
| }
0x0804c3f4 b 0x804bb80 | goto label_31;
| label_65:
0x0804c3f8 mov r0, r6 | r0 = r6;
0x0804c3fc stmdaeq r5, {r2, r3, r5, r6, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, ip, sp, lr, pc}");
0x0804c400 stmdaeq r5, {r2, r3, r5, r6, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, ip, sp, lr, pc}");
0x0804c404 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c408 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c40c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c410 b 0x804b668 | goto label_4;
| label_89:
0x0804c414 mov r0, r6 | r0 = r6;
0x0804c418 stmdaeq r5, {r2, r3, r4, r5, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, sl, fp, sp, lr, pc}");
0x0804c41c stmdaeq r5, {r2, r3, r4, r5, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r5, sl, fp, sp, lr, pc}");
0x0804c420 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c424 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c428 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c42c b 0x804b668 | goto label_4;
| label_91:
0x0804c430 mov r0, r6 | r0 = r6;
0x0804c434 stmdaeq r5, {r3, r5, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r5, r7, r8, ip, sp, lr, pc}");
0x0804c438 stmdaeq r5, {r3, r5, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r5, r7, r8, ip, sp, lr, pc}");
0x0804c43c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c440 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c444 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c448 b 0x804b668 | goto label_4;
| label_93:
0x0804c46c mov r3, r8 | r3 = r8;
0x0804c470 mov r0, r6 | r0 = r6;
0x0804c474 stmdaeq r5, {r2, r4, r5, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, r8, sb, ip, sp, lr, pc}");
0x0804c478 stmdaeq r5, {r2, r4, r5, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, r8, sb, ip, sp, lr, pc}");
0x0804c47c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c480 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c484 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c488 b 0x804b668 | goto label_4;
| label_68:
0x0804c48c mvn r7, 0x15 | r7 = ~0x15;
0x0804c490 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0804c494 mov r0, r6 | r0 = r6;
0x0804c498 stmdaeq r5, {r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r6, r7, sb, ip, sp, lr, pc}");
0x0804c49c stmdaeq r5, {r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r6, r7, sb, ip, sp, lr, pc}");
0x0804c4a0 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c4a4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c4a8 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c4ac ldr r3, [sp, 0x18] | r3 = var_18h;
0x0804c4b0 ldr r8, [r3, 0x220] | r8 = *((r3 + 0x220));
0x0804c4b4 cmp r8, 0 |
| if (r8 == 0) {
0x0804c4b8 movne r4, 0 | r4 = 0;
| }
| if (r8 != 0) {
0x0804c4bc movne sl, r4 | sl = r4;
| goto label_94;
| }
| if (r8 != 0) {
| label_94:
0x0804c4c0 bne 0x804b680 | goto label_32;
| }
0x0804c4c4 ldr r4, [sp, 0x18] | r4 = var_18h;
0x0804c4c8 ldr r0, [r4, 0x2e8] | r0 = *((r4 + 0x2e8));
0x0804c4cc stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804c4d0 ldr r0, [r4, 0x140] | r0 = *((r4 + 0x140));
0x0804c4d4 str r8, [r4, 0x2e8] | *((r4 + 0x2e8)) = r8;
0x0804c4d8 cmp r0, 0 |
| if (r0 != 0) {
0x0804c4dc movne r4, r8 | r4 = r8;
| goto label_95;
| }
| if (r0 != 0) {
| label_95:
0x0804c4e0 bne 0x804b6c0 | goto label_33;
| }
| label_66:
0x0804c50c mov r0, r6 | r0 = r6;
0x0804c510 stmdaeq r5, {r5, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r5, r7, sb, ip, sp, lr, pc}");
0x0804c514 stmdaeq r5, {r5, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r5, r7, sb, ip, sp, lr, pc}");
0x0804c518 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c51c stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804c520 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804c524 b 0x804b668 | goto label_4;
| label_40:
0x0804c598 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0804c59c stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804c5a0 mov r0, sb | r0 = sb;
0x0804c5a4 stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r7, sl, fp, ip, pc}");
0x0804c5a8 b 0x804b798 | goto label_34;
| label_69:
0x0804c65c add r0, sp, 0x68 | r0 += var_68h;
0x0804c660 bl 0x8044a68 | r0 = div64_32 ();
0x0804c664 mov r5, r0 | r5 = r0;
0x0804c668 ldrd r2, r3, [sp, 0x68] | __asm ("ldrd r2, r3, [var_6ch]");
0x0804c66c b 0x804b454 | goto label_35;
| label_78:
0x0804dfa0 stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804dfa4 stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip} | __asm ("stmdaeq r6, {r1, r2, r4, r5, r6, sl, ip}");
0x0804dfa8 b 0x804baa4 | goto label_36;
| label_88:
0x0804dfac stmdaeq r5, {r5, r7, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r5, r7, ip, sp, lr, pc}");
0x0804dfb0 stmdaeq r5, {r5, r7, ip, sp, lr, pc} | __asm ("stmdaeq r5, {r5, r7, ip, sp, lr, pc}");
0x0804dfb4 mov r3, 1 | r3 = 1;
0x0804dfb8 strb r3, [r1, 3] | *((r1 + 3)) = r3;
0x0804dfbc stmdaeq r8, {r0, r1, r2, r4, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r7, sl, fp, ip, pc}");
0x0804dfc0 ldr r2, [r6, 0x1f8] | r2 = *((r6 + 0x1f8));
0x0804dfc4 ldr r3, [r2, 0x4c] | r3 = *((r2 + 0x4c));
0x0804dfc8 b 0x804bcd8 | goto label_37;
| label_72:
0x0804dfdc mov r1, r4 | r1 = r4;
0x0804dfe0 stmdaeq r5, {r2, r3, r5, r6, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, sl, fp, sp, lr, pc}");
0x0804dfe4 stmdaeq r5, {r2, r3, r5, r6, sb, sl, fp, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, sb, sl, fp, sp, lr, pc}");
0x0804dfe8 stmdaeq r8, {r0, r1, r2, r4, r5, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r7, sl, fp, ip, pc}");
0x0804dfec b 0x804aef4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x8034f70 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_ind_migrate () | void ext4_ind_migrate (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
0x08034f70 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x08034f74 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x08034f78 sub sp, sp, 8 |
0x08034f7c ldr r5, [r3, 0x1f8] | r5 = *((r3 + 0x1f8));
0x08034f80 ldr sb, [r5, 0x44] | sb = *((r5 + 0x44));
0x08034f84 ldr r3, [sb, 0x60] | r3 = *((sb + 0x60));
0x08034f88 tst r3, 0x40 |
| if ((r3 & 0x40) == 0) {
0x08034f8c beq 0x8035134 | goto label_5;
| }
0x08034f90 ldr r3, [r0, -0x6c] | r3 = *((r0 - 0x6c));
0x08034f94 mov r4, r0 | r4 = r0;
0x08034f98 tst r3, 0x80000 |
| if ((r3 & 0x80000) == 0) {
0x08034f9c beq 0x8035134 | goto label_5;
| }
0x08034fa0 ldr r6, [sb, 0x64] | r6 = *((sb + 0x64));
0x08034fa4 ands r6, r6, 0x200 | r6 &= 0x200;
| if (r6 != r6) {
0x08034fa8 bne 0x803513c | goto label_6;
| }
0x08034fac ldr r3, [r5, 0x4c] | r3 = *((r5 + 0x4c));
0x08034fb0 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x08034fb4 bne 0x8035120 | goto label_7;
| }
| label_2:
0x08034fb8 add r5, r5, 0x2ec | r5 += 0x2ec;
0x08034fbc mov r0, r5 | r0 = r5;
0x08034fc0 stmdaeq r8, {r0, r1, r2, r4, r5, r6, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, r8, sb, sl, fp, ip, pc}");
0x08034fc4 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x08034fc8 mov r1, 0 | r1 = 0;
0x08034fcc mov r3, 1 | r3 = 1;
0x08034fd0 ldr r2, [r0, 0x1f8] | r2 = *((r0 + 0x1f8));
0x08034fd4 ldr r2, [r2, 0x2c] | r2 = *((r2 + 0x2c));
0x08034fd8 str r1, [sp] | *(sp) = r1;
0x08034fdc movw r1, 0x271 | r1 = 0x271;
0x08034fe0 lsl r2, r2, 3 | r2 <<= 3;
0x08034fe4 str r2, [sp, 4] | var_4h = r2;
0x08034fe8 mov r2, 8 | r2 = 8;
0x08034fec stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x08034ff0 cmn r0, 0x1000 |
0x08034ff4 mov r8, r0 | r8 = r0;
| if (r0 <= 0x1000) {
0x08034ff8 movhi r7, r0 | r7 = r0;
| }
| if (r0 > 0x1000) {
0x08034ffc bhi 0x80350ec | goto label_8;
| }
0x08035000 sub sl, r4, 0x20 | sl = r4 - 0x20;
0x08035004 mov r0, sl | r0 = sl;
0x08035008 stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc}");
0x0803500c mov r0, r4 | r0 = r4;
0x08035010 stmdaeq r0, {r2, r3, r5, r6, sl, fp, ip, lr} | __asm ("stmdaeq r0, {r2, r3, r5, r6, sl, fp, ip, lr}");
0x08035014 subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 != r0) {
0x08035018 bne 0x80350d4 | goto label_1;
| }
0x0803501c ldr r3, [sb, 0x60] | r3 = *((sb + 0x60));
0x08035020 tst r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x08035024 bne 0x8035100 | goto label_9;
| }
| label_0:
0x08035028 ldrh r3, [r4, -0xba] | r3 = *((r4 - 0xba));
0x0803502c cmp r3, 0 |
| if (r3 != 0) {
0x08035030 bne 0x8035118 | goto label_10;
| }
0x08035034 ldrh r2, [r4, -0xbe] | r2 = *((r4 - 0xbe));
0x08035038 cmp r2, 1 |
| if (r2 > 1) {
0x0803503c bhi 0x8035118 | goto label_10;
| }
0x08035040 cmp r2, 0 |
| if (r2 == 0) {
0x08035044 beq 0x8035128 | goto label_11;
| }
0x08035048 ldr r6, [r4, -0xb4] | r6 = *((r4 - 0xb4));
0x0803504c ldrh r3, [r4, -0xb0] | r3 = *((r4 - 0xb0));
0x08035050 sub r2, r6, 1 | r2 = r6 - 1;
0x08035054 add sb, r2, r3 | sb = r2 + r3;
0x08035058 cmp sb, 0xb |
| if (sb > 0xb) {
0x0803505c bhi 0x8035118 | goto label_10;
| }
0x08035060 ldr r7, [r4, -0xac] | r7 = *((r4 - 0xac));
| label_3:
0x08035064 mrs r2, apsr | r2 = apsr;
0x08035068 cpsid i | __asm ("cpsid i");
0x0803506c ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x08035070 bic r3, r3, 0x80000 | r3 = BIT_MASK (r3, 0x80000);
0x08035074 str r3, [r4, -0x6c] | *((r4 - 0x6c)) = r3;
0x08035078 msr cpsr_c, r2 | cpsr_c = r2;
0x0803507c mov r2, 0x3c | r2 = 0x3c;
0x08035080 sub r0, r4, 0xc0 | r0 = r4 - 0xc0;
0x08035084 mov r1, 0 | r1 = 0;
0x08035088 stmdaeq r8, {r0, r1, r3, r4, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r6, sl, fp, ip, pc}");
0x0803508c cmp r6, sb |
| if (r6 > sb) {
0x08035090 bhi 0x80350bc | goto label_12;
| }
0x08035094 add r2, sb, 1 | r2 = sb + 1;
0x08035098 mov r3, r7 | r3 = r7;
0x0803509c add r2, r2, r7 | r2 += r7;
0x080350a0 sub r2, r2, r6 | r2 -= r6;
0x080350a4 sub r6, r6, 0x80000031 | r6 -= 0x80000031;
0x080350a8 add r6, r4, r6, lsl 2 | r6 = r4 + (r6 << 2);
| do {
0x080350ac str r3, [r6, 4]! | *((r6 += 4)) = r3;
0x080350b0 add r3, r3, 1 | r3++;
0x080350b4 cmp r3, r2 |
0x080350b8 bne 0x80350ac |
| } while (r3 != r2);
| label_12:
0x080350bc ldr r2, [pc, 0x80] | r2 = *(0x8035140);
0x080350c0 mov r1, r4 | r1 = r4;
0x080350c4 mov r0, r8 | r0 = r8;
0x080350c8 mov r3, 0x294 | r3 = 0x294;
0x080350cc stmdaeq r2, {r2, r3, r6, r7, r8, sb, sl, sp} | __asm ("stmdaeq r2, {r2, r3, r6, r7, r8, sb, sl, sp}");
0x080350d0 mov r7, r0 | r7 = r0;
| label_1:
0x080350d4 ldr r0, [pc, 0x68] | r0 = *(0x8035140);
0x080350d8 mov r2, r8 | r2 = r8;
0x080350dc mov r1, 0x298 | r1 = 0x298;
0x080350e0 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x080350e4 mov r0, sl | r0 = sl;
0x080350e8 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
| label_8:
0x080350ec mov r0, r5 | r0 = r5;
0x080350f0 stmdaeq r8, {r0, r1, r3, r4, r5, r6, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r5, r6, r8, sb, sl, fp, ip, pc}");
| label_4:
0x080350f4 mov r0, r7 | r0 = r7;
0x080350f8 add sp, sp, 8 |
0x080350fc pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_9:
0x08035100 ldr r2, [sb, 4] | r2 = *((sb + 4));
0x08035104 mvn r1, 0 | r1 = ~0;
0x08035108 ldr r3, [sb, 0x150] | r3 = *((sb + 0x150));
0x0803510c cmp r1, r2 |
0x08035110 sbcs r3, r7, r3 | __asm ("sbcs r3, r7, r3");
| if (r1 >= r2) {
0x08035114 bhs 0x8035028 | goto label_0;
| }
| label_10:
0x08035118 mvn r7, 0x5e | r7 = ~0x5e;
0x0803511c b 0x80350d4 | goto label_1;
| label_7:
0x08035120 stmdaeq r2, {r5, r7, r8, sb} | __asm ("stmdaeq r2, {r5, r7, r8, sb}");
0x08035124 b 0x8034fb8 | goto label_2;
| label_11:
0x08035128 mov sb, r2 | sb = r2;
0x0803512c mov r7, r2 | r7 = r2;
0x08035130 b 0x8035064 | goto label_3;
| label_5:
0x08035134 mvn r7, 0x15 | r7 = ~0x15;
0x08035138 b 0x80350f4 | goto label_4;
| label_6:
0x0803513c mvn r7, 0x5e | r7 = ~0x5e;
0x08035140 b 0x80350f4 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x80038f8 */
| #include <stdint.h>
|
; (fcn) sym.ext4_inode_journal_mode () | uint32_t ext4_inode_journal_mode (int32_t arg1) {
| r0 = arg1;
0x080038f8 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x080038fc ldr r2, [r3, 0x1f8] | r2 = *((r3 + 0x1f8));
0x08003900 ldr r3, [r2, 0x118] | r3 = *((r2 + 0x118));
0x08003904 cmp r3, 0 |
| if (r3 != 0) {
0x08003908 beq 0x8003964 |
0x0800390c ldrh r3, [r0] | r3 = *(r0);
0x08003910 and r3, r3, 0xf000 | r3 &= 0xf000;
0x08003914 cmp r3, 0x8000 |
| if (r3 != 0x8000) {
0x08003918 beq 0x8003924 |
0x0800391c mov r0, 1 | r0 = 1;
0x08003920 bx lr | return r0;
| }
0x08003924 ldr r3, [r0, -0x6c] | r3 = *((r0 - 0x6c));
0x08003928 tst r3, 0x200000 |
| if ((r3 & 0x200000) != 0) {
0x0800392c bne 0x800396c | goto label_0;
| }
0x08003930 ldr r2, [r2, 0x4c] | r2 = *((r2 + 0x4c));
0x08003934 and r3, r2, 0xc00 | r3 = r2 & 0xc00;
0x08003938 cmp r3, 0x400 |
| if (r3 == 0x400) {
0x0800393c beq 0x800396c | goto label_0;
| }
0x08003940 ldr r1, [r0, -0x6c] | r1 = *((r0 - 0x6c));
0x08003944 tst r1, 0x4000 |
| if ((r1 & 0x4000) != 0) {
0x08003948 beq 0x8003954 |
0x0800394c tst r2, 0x8000000 |
| if ((r2 & loc.imp.fs_overflowgid) == 0) {
0x08003950 beq 0x800396c | goto label_0;
| }
| }
0x08003954 cmp r3, 0x800 |
| if (r3 == 0x800) {
0x08003958 beq 0x8003980 | goto label_1;
| }
0x0800395c cmp r3, 0xc00 |
| if (r3 != 0xc00) {
0x08003960 bne 0x8003988 | goto label_2;
| }
| }
0x08003964 mov r0, 4 | r0 = 4;
0x08003968 bx lr | return r0;
| label_0:
0x0800396c ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x08003970 tst r3, 0x4000 |
| if ((r3 & 0x4000) != 0) {
0x08003974 moveq r0, 1 | r0 = 1;
| }
| if ((r3 & 0x4000) == 0) {
0x08003978 movne r0, 2 | r0 = 2;
| }
0x0800397c bx lr | return r0;
| label_1:
0x08003980 mov r0, 2 | r0 = 2;
0x08003984 bx lr | return r0;
| label_2:
0x08003988 udf 0x12 | __asm ("udf 0x12");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x801ebe0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_map_blocks () | void ext4_map_blocks (int32_t arg_20h, int32_t arg1, int32_t arg2) {
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_0h_2;
| int32_t var_4h_2;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x0801ebe0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0801ebe4 mov r4, r2 | r4 = r2;
0x0801ebe8 mov r7, r3 | r7 = r3;
0x0801ebec mov r2, 0 | r2 = 0;
0x0801ebf0 mov r5, r1 | r5 = r1;
0x0801ebf4 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0801ebf8 sub sp, sp, 0x3c |
0x0801ebfc ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0801ec00 mov r8, r0 | r8 = r0;
0x0801ec04 cmp r3, r2 |
0x0801ec08 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
| if (r3 >= r2) {
0x0801ec0c mvnlt r3, 0x80000000 | r3 = ~0x80000000;
| }
| if (r3 >= r2) {
0x0801ec10 strlt r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| }
0x0801ec14 cmn r1, 1 |
| if (r1 == 1) {
0x0801ec18 beq 0x801f080 | goto label_18;
| }
0x0801ec1c ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0801ec20 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x0801ec24 ldrh r2, [r3, 0x78] | r2 = *((r3 + 0x78));
0x0801ec28 ands r2, r2, 0x20 | r2 &= 0x20;
| if (r2 == r2) {
0x0801ec2c bne 0x801eca0 |
0x0801ec30 add r3, sp, 0x18 | r3 += var_18h;
0x0801ec34 mov r0, r5 | r0 = r5;
0x0801ec38 stmdaeq r0, {r2, r5, r6, fp, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r5, r6, fp, ip, sp, lr, pc}");
0x0801ec3c cmp r0, 0 |
| if (r0 == 0) {
0x0801ec40 beq 0x801eca0 | goto label_19;
| }
0x0801ec44 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0801ec48 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0801ec4c tst r3, 0x8000000 |
0x0801ec50 lsr r2, r3, 0x1b | r2 = r3 >> 0x1b;
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x0801ec54 bne 0x801efb0 | goto label_20;
| }
0x0801ec58 tst r2, 2 |
| if ((r2 & 2) != 0) {
0x0801ec5c bne 0x801f0a4 | goto label_21;
| }
0x0801ec60 tst r2, 0xc |
| if ((r2 & 0xc) == 0) {
0x0801ec64 beq 0x801f1e4 | goto label_22;
| }
0x0801ec68 ldrd r2, r3, [sp, 0x24] | __asm ("ldrd r2, r3, [var_24h]");
0x0801ec6c add r3, r3, r2 | r3 += r2;
0x0801ec70 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0801ec74 sub r3, r3, r2 | r3 -= r2;
0x0801ec78 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801ec7c cmp r2, r3 |
| if (r2 < r3) {
0x0801ec80 movhs r2, r3 | r2 = r3;
| }
0x0801ec84 mov r3, 0 | r3 = 0;
0x0801ec88 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0801ec8c ands r6, r7, 1 | r6 = r7 & 1;
0x0801ec90 mov r2, 0 | r2 = 0;
0x0801ec94 strd r2, r3, [r4] | __asm ("strd r2, r3, [r4]");
| if (r6 != r7) {
0x0801ec98 bne 0x801eda8 | goto label_23;
| }
0x0801ec9c b 0x801ed78 | goto label_0;
| }
| label_19:
0x0801eca0 sub sb, r5, 0x20 | sb = r5 - 0x20;
0x0801eca4 mov r0, sb | r0 = sb;
0x0801eca8 stmdaeq r8, {r0, r1, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r6, r7, sl, fp, ip, pc}");
0x0801ecac ldr r3, [r5, -0x6c] | r3 = *((r5 - 0x6c));
0x0801ecb0 mov r2, r4 | r2 = r4;
0x0801ecb4 mov r1, r5 | r1 = r5;
0x0801ecb8 mov r0, r8 | r0 = r8;
0x0801ecbc ubfx r3, r3, 0x13, 1 | r3 = (r3 >> 0x13) & ((1 << 1) - 1);
0x0801ecc0 cmp r3, 0 |
| if (r3 != 0) {
0x0801ecc4 bne 0x801ed84 | goto label_24;
| }
0x0801ecc8 stmdaeq r1, {r2, r4, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r4, r7, r8, sb, ip, sp, lr}");
0x0801eccc mov r6, r0 | r6 = r0;
0x0801ecd0 cmp r6, 0 |
| if (r6 <= 0) {
0x0801ecd4 ble 0x801ed98 | goto label_25;
| }
| do {
0x0801ecd8 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0801ecdc mov r2, r6 | r2 = r6;
0x0801ece0 cmp r3, r6 |
| if (r3 != r6) {
0x0801ece4 bne 0x801f11c | goto label_26;
| }
| label_13:
0x0801ece8 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801ecec tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x0801ecf0 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x800) != 0) {
0x0801ecf4 bne 0x801ef2c | goto label_27;
| }
| label_3:
0x0801ecf8 str r3, [sp, 8] | var_8h = r3;
0x0801ecfc mov r0, r5 | r0 = r5;
0x0801ed00 ldrd sl, fp, [r4] | __asm ("ldrd sl, fp, [r4]");
0x0801ed04 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0801ed08 strd sl, fp, [sp] | __asm ("strd sl, fp, [sp]");
0x0801ed0c stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, ip, sp, lr, pc}");
0x0801ed10 subs sl, r0, 0 | sl = r0 - 0;
0x0801ed14 mov r0, sb | r0 = sb;
| if (sl < r0) {
0x0801ed18 blt 0x801f074 | goto label_28;
| }
0x0801ed1c stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
0x0801ed20 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801ed24 tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x0801ed28 bne 0x801f00c | goto label_29;
| }
| label_6:
0x0801ed2c tst r7, 1 |
| if ((r7 & 1) != 0) {
0x0801ed30 beq 0x801ed78 |
| label_1:
0x0801ed34 sub sb, r5, 0x20 | sb = r5 - 0x20;
0x0801ed38 bic r3, r3, 0xa30 | r3 = BIT_MASK (r3, 0xa30);
0x0801ed3c mov r0, sb | r0 = sb;
0x0801ed40 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0801ed44 stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc}");
0x0801ed48 ldr r3, [r5, -0x6c] | r3 = *((r5 - 0x6c));
0x0801ed4c mov r2, r4 | r2 = r4;
0x0801ed50 mov r1, r5 | r1 = r5;
0x0801ed54 tst r3, 0x80000 |
0x0801ed58 mov r0, r8 | r0 = r8;
0x0801ed5c mov r3, r7 | r3 = r7;
| if ((r3 & 0x80000) == 0) {
0x0801ed60 beq 0x801edb0 | goto label_30;
| }
0x0801ed64 stmdaeq r0, {r7, fp, ip, pc} | __asm ("stmdaeq r0, {r7, fp, ip, pc}");
0x0801ed68 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 > r0) {
0x0801ed6c bgt 0x801edd0 | goto label_10;
| }
| label_2:
0x0801ed70 mov r0, sb | r0 = sb;
0x0801ed74 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
| }
| label_0:
0x0801ed78 mov r0, r6 | r0 = r6;
0x0801ed7c add sp, sp, 0x3c |
0x0801ed80 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x0801ed84 mov r3, 0 | r3 = 0;
0x0801ed88 stmdaeq r0, {r7, fp, ip, pc} | __asm ("stmdaeq r0, {r7, fp, ip, pc}");
0x0801ed8c mov r6, r0 | r6 = r0;
0x0801ed90 cmp r6, 0 |
0x0801ed94 bgt 0x801ecd8 |
| } while (r6 > 0);
| label_25:
0x0801ed98 mov r0, sb | r0 = sb;
0x0801ed9c stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
| label_5:
0x0801eda0 tst r7, 1 |
| if ((r7 & 1) == 0) {
0x0801eda4 beq 0x801ed78 | goto label_0;
| }
| label_23:
0x0801eda8 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801edac b 0x801ed34 | goto label_1;
| label_30:
0x0801edb0 stmdaeq r1, {r2, r4, r7, r8, sb, ip, sp, lr} | __asm ("stmdaeq r1, {r2, r4, r7, r8, sb, ip, sp, lr}");
0x0801edb4 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 <= r0) {
0x0801edb8 ble 0x801ed70 | goto label_2;
| }
0x0801edbc ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801edc0 tst r3, 0x20 |
| if ((r3 & 0x20) != 0) {
0x0801edc4 bne 0x801f100 | goto label_31;
| }
| label_12:
0x0801edc8 tst r7, 4 |
| if ((r7 & 4) != 0) {
0x0801edcc bne 0x801f0c8 | goto label_32;
| }
| label_10:
0x0801edd0 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801edd4 cmp r2, r6 |
| if (r2 != r6) {
0x0801edd8 bne 0x801f164 | goto label_33;
| }
| label_14:
0x0801eddc ands r3, r7, 0x200 | r3 = r7 & 0x200;
0x0801ede0 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0801ede4 str r3, [sp, 0x14] | var_14h = r3;
| if (r3 != r7) {
0x0801ede8 beq 0x801edfc |
0x0801edec ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801edf0 and r3, r3, 0x30 | r3 &= 0x30;
0x0801edf4 cmp r3, 0x30 |
| if (r3 == 0x30) {
0x0801edf8 beq 0x801f0dc | goto label_34;
| }
| }
| label_11:
0x0801edfc tst r7, 8 |
| if ((r7 & 8) != 0) {
0x0801ee00 bne 0x801f044 | goto label_35;
| }
| label_8:
0x0801ee04 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801ee08 tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x0801ee0c bne 0x801ef6c | goto label_36;
| }
0x0801ee10 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801ee14 mov r3, 1 | r3 = 1;
| label_4:
0x0801ee18 str r3, [sp, 8] | var_8h = r3;
0x0801ee1c mov r0, r5 | r0 = r5;
0x0801ee20 ldrd sl, fp, [r4] | __asm ("ldrd sl, fp, [r4]");
0x0801ee24 strd sl, fp, [sp] | __asm ("strd sl, fp, [sp]");
0x0801ee28 stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r3, r4, r5, r7, r8, sb, ip, sp, lr, pc}");
0x0801ee2c subs r3, r0, 0 | r3 = r0 - 0;
0x0801ee30 mov r0, sb | r0 = sb;
| if (r3 < r0) {
0x0801ee34 blt 0x801f098 | goto label_37;
| }
| label_7:
0x0801ee38 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
| label_15:
0x0801ee3c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801ee40 tst r3, 0x10 |
| if ((r3 & 0x10) == 0) {
0x0801ee44 beq 0x801ed78 | goto label_0;
| }
0x0801ee48 mov r2, r4 | r2 = r4;
0x0801ee4c mov r0, r5 | r0 = r5;
0x0801ee50 movw r1, 0x2cd | r1 = 0x2cd;
0x0801ee54 bl 0x801cc54 | r0 = check_block_validity_constprop_0 ();
0x0801ee58 cmp r0, 0 |
| if (r0 != 0) {
0x0801ee5c bne 0x801f090 | goto label_38;
| }
0x0801ee60 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801ee64 and r3, r3, 0x820 | r3 &= 0x820;
0x0801ee68 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x0801ee6c bne 0x801ef08 | goto label_39;
| }
0x0801ee70 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0801ee74 cmp r3, 0 |
| if (r3 != 0) {
0x0801ee78 bne 0x801ef08 | goto label_39;
| }
0x0801ee7c ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0801ee80 tst r3, 0x20 |
| if ((r3 & 0x20) != 0) {
0x0801ee84 beq 0x801ee94 |
0x0801ee88 ldr r3, [r5, -0x6c] | r3 = *((r5 - 0x6c));
0x0801ee8c tst r3, 0x200000 |
| if ((r3 & 0x200000) == 0) {
0x0801ee90 beq 0x801ef08 | goto label_39;
| }
| }
0x0801ee94 mov r0, r5 | r0 = r5;
0x0801ee98 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x0801ee9c tst r0, 2 |
| if ((r0 & 2) == 0) {
0x0801eea0 beq 0x801ef08 | goto label_39;
| }
0x0801eea4 ldrb ip, [r5, 0x72] | ip = *((r5 + 0x72));
0x0801eea8 tst r7, 0x400 |
0x0801eeac ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0801eeb0 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801eeb4 sub r0, ip, 0x20 | r0 = ip - 0x20;
0x0801eeb8 rsb lr, ip, 0x20 | lr = 0x20 - ip;
0x0801eebc lsl r3, r1, r0 | r3 = r1 << r0;
0x0801eec0 lsl r0, r2, r0 | r0 = r2 << r0;
0x0801eec4 orr r3, r3, r1, lsr lr | r3 |= (r1 >> lr);
0x0801eec8 orr r0, r0, r2, lsr lr | r0 |= (r2 >> lr);
0x0801eecc lsl lr, r1, ip | lr = r1 << ip;
0x0801eed0 lsl ip, r2, ip |
| if ((r7 & 0x400) == 0) {
0x0801eed4 beq 0x801f1bc | goto label_40;
| }
0x0801eed8 cmp r8, 0x1000 |
| if (r8 <= 0x1000) {
0x0801eedc blo 0x801ef10 | goto label_16;
| }
0x0801eee0 str r0, [sp, 4] | var_4h_2 = r0;
0x0801eee4 mov r2, lr | r2 = lr;
0x0801eee8 str ip, [sp] | *(sp) = ip;
0x0801eeec mov r0, r8 | r0 = r8;
0x0801eef0 ldr r1, [r5, 0x170] | r1 = *((r5 + 0x170));
0x0801eef4 stmdaeq r8, {r0, r1, r2, r5, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, r7, sb, sl, fp, ip, pc}");
0x0801eef8 mov r3, r0 | r3 = r0;
| label_17:
0x0801eefc cmp r3, 0 |
| if (r3 != 0) {
0x0801ef00 movne r6, r3 | r6 = r3;
| goto label_41;
| }
| if (r3 != 0) {
| label_41:
0x0801ef04 bne 0x801ed78 | goto label_0;
| }
| label_39:
0x0801ef08 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801ef0c ldr r1, [r4, 8] | r1 = *((r4 + 8));
| label_16:
0x0801ef10 add r3, r1, r2 | r3 = r1 + r2;
0x0801ef14 mov r0, r8 | r0 = r8;
0x0801ef18 mov r2, r1 | r2 = r1;
0x0801ef1c sub r3, r3, 1 | r3--;
0x0801ef20 mov r1, r5 | r1 = r5;
0x0801ef24 stmdaeq r5, {r2, r3, r4, r7, r8, fp, sp, lr} | __asm ("stmdaeq r5, {r2, r3, r4, r7, r8, fp, sp, lr}");
0x0801ef28 b 0x801ed78 | goto label_0;
| label_27:
0x0801ef2c tst r7, 4 |
| if ((r7 & 4) != 0) {
0x0801ef30 bne 0x801ef64 | goto label_42;
| }
0x0801ef34 ldr ip, [r4, 8] | ip = *((r4 + 8));
0x0801ef38 mov r0, r5 | r0 = r5;
0x0801ef3c stmdaeq r1, {r3, r4, r7, sl, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r7, sl, lr, pc}");
0x0801ef40 stmdaeq r1, {r3, r4, r7, sl, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r7, sl, lr, pc}");
0x0801ef44 sub r3, ip, 1 | r3 = ip - 1;
0x0801ef48 add r3, r3, r2 | r3 += r2;
0x0801ef4c mov r2, ip | r2 = ip;
0x0801ef50 stmdaeq r0, {r3, r4, r5, r6, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, r8, ip, sp, lr, pc}");
0x0801ef54 cmp r0, 0 |
0x0801ef58 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
| if (r0 != 0) {
0x0801ef5c movne r3, 6 | r3 = 6;
| goto label_43;
| }
| if (r0 != 0) {
| label_43:
0x0801ef60 bne 0x801ecf8 | goto label_3;
| }
| label_42:
0x0801ef64 mov r3, 2 | r3 = 2;
0x0801ef68 b 0x801ecf8 | goto label_3;
| label_36:
0x0801ef6c ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801ef70 tst r7, 4 |
| if ((r7 & 4) != 0) {
0x0801ef74 bne 0x801efa8 | goto label_44;
| }
0x0801ef78 add r3, r2, r1 | r3 = r2 + r1;
0x0801ef7c mov r0, r5 | r0 = r5;
0x0801ef80 mov r2, r1 | r2 = r1;
0x0801ef84 sub r3, r3, 1 | r3--;
0x0801ef88 stmdaeq r1, {r3, r4, r7, sl, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r7, sl, lr, pc}");
0x0801ef8c stmdaeq r1, {r3, r4, r7, sl, lr, pc} | __asm ("stmdaeq r1, {r3, r4, r7, sl, lr, pc}");
0x0801ef90 stmdaeq r0, {r3, r4, r5, r6, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, r8, ip, sp, lr, pc}");
0x0801ef94 cmp r0, 0 |
0x0801ef98 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801ef9c ldr r1, [r4, 8] | r1 = *((r4 + 8));
| if (r0 != 0) {
0x0801efa0 movne r3, 6 | r3 = 6;
| goto label_45;
| }
| if (r0 != 0) {
| label_45:
0x0801efa4 bne 0x801ee18 | goto label_4;
| }
| label_44:
0x0801efa8 mov r3, 2 | r3 = 2;
0x0801efac b 0x801ee18 | goto label_4;
| label_20:
0x0801efb0 ldr r6, [sp, 0x24] | r6 = var_24h;
0x0801efb4 bic r2, r3, 0xf8000000 | r2 = BIT_MASK (r3, 0xf8000000);
0x0801efb8 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0801efbc mov r3, 0x10 | r3 = 0x10;
0x0801efc0 subs r1, r1, r6 | r1 -= r6;
0x0801efc4 sbc r2, r2, 0 | __asm ("sbc r2, r2, 0");
0x0801efc8 adds r1, r1, r0 | r1 += r0;
0x0801efcc adc r2, r2, 0 | __asm ("adc r2, r2, 0");
| label_9:
0x0801efd0 stm r4, {r1, r2} | *(r4) = r1;
| *((r4 + 4)) = r2;
0x0801efd4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0801efd8 add r6, r6, r2 | r6 += r2;
0x0801efdc ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801efe0 sub r6, r6, r0 | r6 -= r0;
0x0801efe4 cmp r6, r2 |
| if (r6 < r2) {
0x0801efe8 movhs r6, r2 | r6 = r2;
| }
0x0801efec ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0801eff0 cmp r6, 0 |
0x0801eff4 str r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
0x0801eff8 orr r3, r3, r2 | r3 |= r2;
0x0801effc str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| if (r6 <= 0) {
0x0801f000 ble 0x801eda0 | goto label_5;
| }
0x0801f004 tst r3, 0x10 |
| if ((r3 & 0x10) == 0) {
0x0801f008 beq 0x801ed2c | goto label_6;
| }
| label_29:
0x0801f00c mov r2, r4 | r2 = r4;
0x0801f010 mov r0, r5 | r0 = r5;
0x0801f014 movw r1, 0x251 | r1 = 0x251;
0x0801f018 bl 0x801cc54 | r0 = check_block_validity_constprop_0 ();
0x0801f01c cmp r0, 0 |
| if (r0 != 0) {
0x0801f020 bne 0x801f090 | goto label_38;
| }
0x0801f024 tst r7, 1 |
| if ((r7 & 1) == 0) {
0x0801f028 beq 0x801ed78 | goto label_0;
| }
0x0801f02c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0801f030 tst r3, 0x10 |
| if ((r3 & 0x10) == 0) {
0x0801f034 beq 0x801ed34 | goto label_1;
| }
0x0801f038 tst r7, 0x100 |
| if ((r7 & 0x100) != 0) {
0x0801f03c bne 0x801ed34 | goto label_1;
| }
0x0801f040 b 0x801ed78 | goto label_0;
| label_35:
0x0801f044 add r3, sp, 0x18 | r3 += var_18h;
0x0801f048 mov r0, r5 | r0 = r5;
0x0801f04c mov r2, 0 | r2 = 0;
0x0801f050 stmdaeq r0, {r2, r5, r6, fp, ip, sp, lr, pc} | __asm ("stmdaeq r0, {r2, r5, r6, fp, ip, sp, lr, pc}");
0x0801f054 cmp r0, 0 |
| if (r0 == 0) {
0x0801f058 beq 0x801f06c | goto label_46;
| }
0x0801f05c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0801f060 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x0801f064 movne r0, sb | r0 = sb;
| goto label_47;
| }
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
| label_47:
0x0801f068 bne 0x801ee38 | goto label_7;
| }
| label_46:
0x0801f06c ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0801f070 b 0x801ee04 | goto label_8;
| label_28:
0x0801f074 mov r6, sl | r6 = sl;
0x0801f078 stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
0x0801f07c b 0x801eda0 | goto label_5;
| label_18:
0x0801f080 mvn r6, 0x74 | r6 = ~0x74;
0x0801f084 mov r0, r6 | r0 = r6;
0x0801f088 add sp, sp, 0x3c |
0x0801f08c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_38:
0x0801f090 mov r6, r0 | r6 = r0;
0x0801f094 b 0x801ed78 | goto label_0;
| label_37:
0x0801f098 mov r6, r3 | r6 = r3;
0x0801f09c stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
0x0801f0a0 b 0x801ed78 | goto label_0;
| label_21:
0x0801f0a4 ldr r6, [sp, 0x24] | r6 = var_24h;
0x0801f0a8 bic r2, r3, 0xf8000000 | r2 = BIT_MASK (r3, 0xf8000000);
0x0801f0ac ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0801f0b0 mov r3, 0x800 | r3 = 0x800;
0x0801f0b4 subs r1, r1, r6 | r1 -= r6;
0x0801f0b8 sbc r2, r2, 0 | __asm ("sbc r2, r2, 0");
0x0801f0bc adds r1, r1, r0 | r1 += r0;
0x0801f0c0 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x0801f0c4 b 0x801efd0 | goto label_9;
| label_32:
0x0801f0c8 mov r1, r6 | r1 = r6;
0x0801f0cc mov r0, r5 | r0 = r5;
0x0801f0d0 mov r2, 1 | r2 = 1;
0x0801f0d4 stmdaeq r1, {r3, r5, r7, r8, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r7, r8, fp, sp, lr, pc}");
0x0801f0d8 b 0x801edd0 | goto label_10;
| label_34:
0x0801f0dc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0801f0e0 mov r0, r5 | r0 = r5;
0x0801f0e4 str r3, [sp] | *(sp) = r3;
0x0801f0e8 ldrd r2, r3, [r4] | __asm ("ldrd r2, r3, [r4]");
0x0801f0ec stmdaeq r1, {r3, r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r6, r8, sb, fp, sp, lr, pc}");
0x0801f0f0 subs fp, r0, 0 |
| if (fp == r0) {
0x0801f0f4 bne 0x801f1a8 |
0x0801f0f8 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0801f0fc b 0x801edfc | goto label_11;
| label_31:
0x0801f100 mrs r2, apsr | r2 = apsr;
0x0801f104 cpsid i | __asm ("cpsid i");
0x0801f108 ldr r3, [r5, -0x70] | r3 = *((r5 - 0x70));
0x0801f10c bic r3, r3, 0x20 | r3 = BIT_MASK (r3, 0x20);
0x0801f110 str r3, [r5, -0x70] | *((r5 - 0x70)) = r3;
0x0801f114 msr cpsr_c, r2 | cpsr_c = r2;
0x0801f118 b 0x801edc8 | goto label_12;
| label_26:
0x0801f11c str r3, [sp, 8] | var_8h = r3;
0x0801f120 movw r2, 0x23a | r2 = 0x23a;
0x0801f124 str r6, [sp, 4] | var_4h_2 = r6;
0x0801f128 ldr r1, [pc, 0xb8] | r1 = $d;
0x0801f12c ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0801f130 str r3, [sp] | *(sp) = r3;
0x0801f134 stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc}");
0x0801f138 stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc}");
0x0801f13c ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x0801f140 stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc} | __asm ("stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc}");
0x0801f144 mov r2, 9 | r2 = 9;
0x0801f148 mov r3, 0 | r3 = 0;
0x0801f14c movw r1, 0x23e | r1 = 0x23e;
0x0801f150 stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc}");
0x0801f154 stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc}");
0x0801f158 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x0801f15c ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0801f160 b 0x801ece8 | goto label_13;
| label_33:
0x0801f164 str r2, [sp, 8] | var_8h = r2;
0x0801f168 movw r2, 0x299 | r2 = 0x299;
0x0801f16c str r6, [sp, 4] | var_4h_2 = r6;
0x0801f170 ldr r1, [pc, 0x70] | r1 = $d;
0x0801f174 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0801f178 str r3, [sp] | *(sp) = r3;
0x0801f17c stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc}");
0x0801f180 stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r8, sb, sl, ip, sp, pc}");
0x0801f184 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x0801f188 stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc} | __asm ("stmdaeq r4, {r2, r3, r7, r8, sl, fp, pc}");
0x0801f18c stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc}");
0x0801f190 stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, sl, ip, sp, pc}");
0x0801f194 mov r3, 0 | r3 = 0;
0x0801f198 mov r2, 9 | r2 = 9;
0x0801f19c movw r1, 0x29d | r1 = 0x29d;
0x0801f1a0 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x0801f1a4 b 0x801eddc | goto label_14;
| }
0x0801f1a8 mov r0, sb | r0 = sb;
0x0801f1ac stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
0x0801f1b0 subs r6, fp, 0 | r6 -= arg_20h;
| if (r6 > arg_20h) {
0x0801f1b4 bgt 0x801ee3c | goto label_15;
| }
0x0801f1b8 b 0x801ed78 | goto label_0;
| label_40:
0x0801f1bc cmp r8, 0x1000 |
| if (r8 <= 0x1000) {
0x0801f1c0 blo 0x801ef10 | goto label_16;
| }
0x0801f1c4 str r0, [sp, 4] | var_4h_2 = r0;
0x0801f1c8 mov r2, lr | r2 = lr;
0x0801f1cc str ip, [sp] | *(sp) = ip;
0x0801f1d0 mov r0, r8 | r0 = r8;
0x0801f1d4 ldr r1, [r5, 0x170] | r1 = *((r5 + 0x170));
0x0801f1d8 stmdaeq r8, {r0, r1, r3, r5, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r5, r6, r7, sb, sl, fp, ip, pc}");
0x0801f1dc mov r3, r0 | r3 = r0;
0x0801f1e0 b 0x801eefc | goto label_17;
| label_22:
0x0801f1e4 udf 0x12 | __asm ("udf 0x12");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x80271a0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_page_mkwrite () | void ext4_page_mkwrite (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_1ch;
| int32_t var_24h;
| r0 = arg1;
0x080271a0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080271a4 ldr sb, [r0] | sb = *(r0);
0x080271a8 sub sp, sp, 0x24 |
0x080271ac ldr r7, [r0, 0x24] | r7 = *((r0 + 0x24));
0x080271b0 ldr r3, [sb, 0x50] | r3 = *((sb + 0x50));
0x080271b4 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x080271b8 mov r3, 0 | r3 = 0;
0x080271bc str r3, [sp, 0x1c] | var_1ch = r3;
0x080271c0 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x080271c4 ldr fp, [r4, 0x20] | fp = *((r4 + 0x20));
0x080271c8 ands r1, r1, 8 | r1 &= 8;
| if (r1 != r1) {
0x080271cc bne 0x8027824 | goto label_23;
| }
0x080271d0 mov r3, sp | r3 = sp;
0x080271d4 mov r8, r0 | r8 = r0;
0x080271d8 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080271dc ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x080271e0 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080271e4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080271e8 add r2, r2, 1 | r2++;
0x080271ec str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080271f0 ldr r3, [r0, 0x1a0] | r3 = *((r0 + 0x1a0));
0x080271f4 cmp r3, 0 |
| if (r3 != 0) {
0x080271f8 bne 0x8027834 | goto label_24;
| }
0x080271fc mrs r1, apsr | r1 = apsr;
0x08027200 cpsid i | __asm ("cpsid i");
0x08027204 ldr r2, [r0, 0x1b8] | r2 = *((r0 + 0x1b8));
0x08027208 ldr r3, [r2] | r3 = *(r2);
0x0802720c add r3, r3, 1 | r3++;
0x08027210 str r3, [r2] | *(r2) = r3;
0x08027214 msr cpsr_c, r1 | cpsr_c = r1;
| label_16:
0x08027218 mov r3, sp | r3 = sp;
0x0802721c bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08027220 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08027224 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08027228 sub r2, r2, 1 | r2--;
0x0802722c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08027230 cmp r2, 0 |
| if (r2 == 0) {
0x08027234 beq 0x8027534 | goto label_25;
| }
| label_3:
0x08027238 ldr r0, [sb, 0x50] | r0 = *((sb + 0x50));
0x0802723c stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r5, r6, r8, sb, sl, fp, ip, pc}");
0x08027240 sub r3, r4, 0x10 | r3 = r4 - 0x10;
0x08027244 mov r0, r3 | r0 = r3;
0x08027248 str r3, [sp, 0xc] | var_ch = r3;
0x0802724c stmdaeq r8, {r0, r1, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r6, r7, sl, fp, ip, pc}");
0x08027250 mov r0, r4 | r0 = r4;
0x08027254 stmdaeq r1, {r2, r3, r4, r5, r8, sb, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r4, r5, r8, sb, lr, pc}");
0x08027258 cmp r0, 0 |
| if (r0 != 0) {
0x0802725c beq 0x80272e8 |
| label_20:
0x08027260 add r0, r0, 0xe | r0 += 0xe;
| label_22:
0x08027264 cmp r0, 0xe |
| if (r0 < 0xe) {
0x08027268 bls 0x8027880 | goto label_26;
| }
| label_1:
0x0802726c mov r6, 2 | r6 = 2;
| label_6:
0x08027270 ldr r0, [sp, 0xc] | r0 = var_ch;
0x08027274 stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
0x08027278 mov r3, sp | r3 = sp;
0x0802727c bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08027280 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x08027284 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08027288 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0802728c add r2, r2, 1 | r2++;
0x08027290 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08027294 ldr r3, [r0, 0x1a0] | r3 = *((r0 + 0x1a0));
0x08027298 cmp r3, 0 |
| if (r3 != 0) {
0x0802729c bne 0x8027840 | goto label_27;
| }
0x080272a0 mrs r1, apsr | r1 = apsr;
0x080272a4 cpsid i | __asm ("cpsid i");
0x080272a8 ldr r2, [r0, 0x1b8] | r2 = *((r0 + 0x1b8));
0x080272ac ldr r3, [r2] | r3 = *(r2);
0x080272b0 sub r3, r3, 1 | r3--;
0x080272b4 str r3, [r2] | *(r2) = r3;
0x080272b8 msr cpsr_c, r1 | cpsr_c = r1;
| label_17:
0x080272bc mov r3, sp | r3 = sp;
0x080272c0 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080272c4 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080272c8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080272cc sub r2, r2, 1 | r2--;
0x080272d0 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080272d4 cmp r2, 0 |
| if (r2 == 0) {
0x080272d8 beq 0x8027548 | goto label_28;
| }
| label_4:
0x080272dc mov r0, r6 | r0 = r6;
0x080272e0 add sp, sp, 0x24 |
0x080272e4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x080272e8 mov r0, r4 | r0 = r4;
0x080272ec stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x080272f0 tst r0, 1 |
| if ((r0 & 1) != 0) {
0x080272f4 bne 0x8027490 | goto label_10;
| }
0x080272f8 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x080272fc ldr r3, [r0, 0x1f8] | r3 = *((r0 + 0x1f8));
0x08027300 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x08027304 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x08027308 beq 0x8027318 |
0x0802730c bl 0x801c9f8 | r0 = ext4_nonda_switch ();
0x08027310 cmp r0, 0 |
| if (r0 == 0) {
0x08027314 beq 0x8027894 | goto label_29;
| }
| }
0x08027318 ldr r3, [r7, 4] | r3 = *((r7 + 4));
| if (r0 != 0) {
0x0802731c andeq r0, r0, r1 | r0 &= r1;
| }
| if (r0 != 0) {
0x08027320 andeq sp, r0, r0, lsl 28 |
| }
| if (r0 != 0) {
0x08027324 andeq r0, r0, r0 | r0 &= r0;
| }
| if (r0 != 0) {
0x08027328 andeq r0, r0, r0 | r0 &= r0;
| }
0x0802732c invalid |
| if (r0 != 0) {
0x08027330 andeq r0, r0, r8 | r0 &= r8;
| }
| if (r0 == 0) {
| label_9:
0x08027334 strne r0, [r0, r0] | *((r0 + r0)) = r0;
| }
| if (r0 > 0) {
0x08027338 ldrls pc, [r1, -0x800]! | pc = *((r1 -= 0x800));
| }
| label_8:
0x0802733c rsbseq r1, r6, 0xe5 | __asm ("rsbseq r1, r6, 0xe5");
0x08027340 bic r3, r3, 8, 26 | r3 = BIT_MASK (r3, 8);
0x08027344 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08027348 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0802734c add r2, r2, 1 | r2++;
0x08027350 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08027354 ldr r6, [r4, 0x38] | r6 = *((r4 + 0x38));
0x08027358 ldr r5, [r4, 0x3c] | r5 = *((r4 + 0x3c));
0x0802735c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08027360 sub r2, r2, 1 | r2--;
0x08027364 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08027368 cmp r2, 0 |
| if (r2 == 0) {
0x0802736c beq 0x8027868 | goto label_30;
| }
| label_18:
0x08027370 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x08027374 cmp r3, fp |
| if (r3 != fp) {
0x08027378 bne 0x8027730 | goto label_31;
| }
0x0802737c ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x08027380 mov r1, 0 | r1 = 0;
0x08027384 lsl r2, r3, 0xc | r2 = r3 << 0xc;
0x08027388 cmp r6, r2 |
0x0802738c lsr r2, r3, 0x14 | r2 = r3 >> 0x14;
0x08027390 sbcs r2, r5, r2 | __asm ("sbcs r2, r5, r2");
| if (r6 < r2) {
0x08027394 blt 0x8027730 | goto label_31;
| }
0x08027398 lsr r2, r6, 0xc | r2 = r6 >> 0xc;
0x0802739c orr r2, r2, r5, lsl 20 | r2 |= (r5 << 20);
0x080273a0 asr r5, r5, 0xc | r5 >>= 0xc;
0x080273a4 cmp r5, r1 |
0x080273a8 cmpeq r2, r3 | __asm ("cmpeq r2, r3");
0x080273ac ldr r3, [r7] | r3 = *(r7);
0x080273b0 ubfxeq r0, r6, 0, 0xc | __asm ("ubfxeq r0, r6, 0, 0xc");
| if (r5 == r1) {
0x080273b4 movne r0, 0x1000 | r0 = 0x1000;
| }
0x080273b8 tst r3, 0x2000 |
| if ((r3 & 0x2000) == 0) {
0x080273bc beq 0x8027428 | goto label_32;
| }
0x080273c0 ldr r2, [r7] | r2 = *(r7);
0x080273c4 mvn r2, r2, lsr 13 | r2 = ~r2;
0x080273c8 ands r2, r2, 1 | r2 &= 1;
| if (r2 != r2) {
0x080273cc bne 0x802787c | goto label_33;
| }
0x080273d0 ldr r5, [r7, 0x14] | r5 = *((r7 + 0x14));
0x080273d4 mov r1, r5 | r1 = r5;
0x080273d8 ldr ip, [r5, 0x18] | ip = *((r5 + 0x18));
0x080273dc b 0x80273f0 |
| while (lr != 0) {
| label_0:
0x080273e0 cmp r5, r1 |
| if (r5 == r1) {
0x080273e4 orrne r3, r3, 1 | r3 |= 1;
| }
0x080273e8 cmp r3, 0 |
| if (r3 == 0) {
0x080273ec beq 0x80278d8 | goto label_34;
| }
0x080273f0 mov r6, r2 | r6 = r2;
0x080273f4 adds r2, r2, ip | r2 += ip;
| if (r2 != r2) {
0x080273f8 moveq r3, 1 | r3 = 1;
| }
| if (r2 == r2) {
0x080273fc movne r3, 0 | r3 = 0;
| }
0x08027400 cmp r0, r6 |
| if (r0 <= r6) {
0x08027404 movhi lr, r3 | lr = r3;
| }
| if (r0 > r6) {
0x08027408 orrls lr, r3, 1 | lr = r3 | 1;
| }
0x0802740c cmp lr, 0 |
0x08027410 mov lr, r1 | lr = r1;
0x08027414 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x08027418 bne 0x80273e0 |
| }
0x0802741c ldr lr, [lr] |
0x08027420 tst lr, 0x10 |
| if ((lr & 0x10) != 0) {
0x08027424 bne 0x80273e0 | goto label_0;
| }
| label_32:
0x08027428 mov r0, r7 | r0 = r7;
0x0802742c stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x08027430 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08027434 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08027438 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x0802743c tst r3, 0x400000 |
| if ((r3 & 0x400000) == 0) {
0x08027440 beq 0x8027700 | goto label_35;
| }
0x08027444 ldrh r3, [r4] | r3 = *(r4);
0x08027448 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0802744c cmp r3, 0x8000 |
| if (r3 != 0x8000) {
0x08027450 bne 0x8027700 | goto label_35;
| }
0x08027454 ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x08027458 tst r3, 0x80000 |
| if ((r3 & 0x80000) == 0) {
0x0802745c beq 0x8027700 | goto label_35;
| }
0x08027460 mov r0, r4 | r0 = r4;
0x08027464 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08027468 tst r0, 1 |
| if ((r0 & 1) != 0) {
0x0802746c bne 0x8027700 | goto label_35;
| }
0x08027470 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08027474 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08027478 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x0802747c tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x08027480 beq 0x8027700 | goto label_35;
| }
0x08027484 stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc}");
0x08027488 stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc}");
0x0802748c str r3, [sp, 0x14] | var_14h = r3;
| label_10:
0x08027490 mov r3, sp | r3 = sp;
0x08027494 str r8, [sp, 0x10] | var_10h = r8;
0x08027498 bic sl, r3, 0x1fc0 | sl = BIT_MASK (r3, 0x1fc0);
0x0802749c bic sl, sl, 0x3f | sl = BIT_MASK (sl, 0x3f);
| label_2:
0x080274a0 mov r0, r4 | r0 = r4;
0x080274a4 stmdaeq r2, {r2, r4, r6, sb, fp, ip} | __asm ("stmdaeq r2, {r2, r4, r6, sb, fp, ip}");
0x080274a8 mov r3, r0 | r3 = r0;
0x080274ac ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x080274b0 mov ip, 0 |
0x080274b4 mov r2, 2 | r2 = 2;
0x080274b8 ldr r1, [r0, 0x1f8] | r1 = *((r0 + 0x1f8));
0x080274bc ldr r1, [r1, 0x2c] | r1 = *((r1 + 0x2c));
0x080274c0 str ip, [sp] | *(sp) = ip;
0x080274c4 lsl r1, r1, 3 | r1 <<= 3;
0x080274c8 str r1, [sp, 4] | var_4h = r1;
0x080274cc movw r1, 0x17fa | r1 = 0x17fa;
0x080274d0 stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x080274d4 mov r5, r0 | r5 = r0;
0x080274d8 cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x080274dc bhi 0x802726c | goto label_1;
| }
0x080274e0 mov r0, r4 | r0 = r4;
0x080274e4 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x080274e8 tst r0, 1 |
| if ((r0 & 1) != 0) {
0x080274ec bne 0x8027564 | goto label_36;
| }
0x080274f0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x080274f4 mov r0, sb | r0 = sb;
0x080274f8 ldr r1, [sp, 0x10] | r1 = var_10h;
0x080274fc stmdaeq r8, {r0, r1, r7, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r7, r8, sb, sl, fp, ip, pc}");
0x08027500 mov r8, r0 | r8 = r0;
| label_12:
0x08027504 ldr r0, [pc, 0x3e4] | r0 = *(0x80278ec);
0x08027508 mov r2, r5 | r2 = r5;
0x0802750c movw r1, 0x1826 | r1 = 0x1826;
0x08027510 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x08027514 cmn r8, 0x1c |
| if (r8 != 0x1c) {
0x08027518 bne 0x80278e8 | goto label_37;
| }
0x0802751c ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x08027520 add r1, sp, 0x1c | r1 += var_1ch;
0x08027524 stmdaeq r0, {r2, r3, r6, fp} | __asm ("stmdaeq r0, {r2, r3, r6, fp}");
0x08027528 cmp r0, 0 |
| if (r0 != 0) {
0x0802752c bne 0x80274a0 | goto label_2;
| }
0x08027530 b 0x802726c | goto label_1;
| label_25:
0x08027534 ldr r3, [r3] | r3 = *(r3);
0x08027538 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x0802753c beq 0x8027238 | goto label_3;
| }
0x08027540 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x08027544 b 0x8027238 | goto label_3;
| label_28:
0x08027548 ldr r3, [r3] | r3 = *(r3);
0x0802754c tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08027550 beq 0x80272dc | goto label_4;
| }
0x08027554 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x08027558 mov r0, r6 | r0 = r6;
0x0802755c add sp, sp, 0x24 |
0x08027560 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_36:
0x08027564 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x08027568 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x0802756c subne r3, r3, 1 | r3--;
| }
| if ((r3 & 1) != 0) {
0x08027570 moveq r3, r7 | r3 = r7;
| }
0x08027574 ldr r2, [r3] | r2 = *(r3);
0x08027578 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x0802757c bne 0x80276d0 | goto label_38;
| }
0x08027580 pld [r3] | __asm ("pld [r3]");
| do {
0x08027584 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08027588 orr r1, r2, 1 | r1 = r2 | 1;
0x0802758c strex r0, r1, [r3] | __asm ("strex r0, r1, [r3]");
0x08027590 teq r0, 0 | __asm ("teq r0, 0");
0x08027594 bne 0x8027584 |
| } while ((r2 & 1) != 0);
0x08027598 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x0802759c bne 0x80276d0 | goto label_38;
| }
| label_7:
0x080275a0 ldr r3, [sl, 4] | r3 = *((sl + 4));
0x080275a4 add r3, r3, 1 | r3++;
0x080275a8 str r3, [sl, 4] | *((sl + 4)) = r3;
0x080275ac ldr r6, [r4, 0x38] | r6 = *((r4 + 0x38));
0x080275b0 ldr r8, [r4, 0x3c] | r8 = *((r4 + 0x3c));
0x080275b4 ldr r2, [sl, 4] | r2 = *((sl + 4));
0x080275b8 sub r2, r2, 1 | r2--;
0x080275bc str r2, [sl, 4] | *((sl + 4)) = r2;
0x080275c0 cmp r2, 0 |
| if (r2 == 0) {
0x080275c4 beq 0x8027710 | goto label_39;
| }
| label_11:
0x080275c8 ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x080275cc cmp r2, fp |
| if (r2 != fp) {
0x080275d0 bne 0x80278d0 | goto label_40;
| }
0x080275d4 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x080275d8 mov ip, 0 |
0x080275dc lsl r0, r2, 0xc | r0 = r2 << 0xc;
0x080275e0 cmp r6, r0 |
0x080275e4 lsr r0, r2, 0x14 | r0 = r2 >> 0x14;
0x080275e8 sbcs r0, r8, r0 | __asm ("sbcs r0, r8, r0");
| if (r6 < r0) {
0x080275ec blt 0x80278d0 | goto label_40;
| }
0x080275f0 lsr r0, r6, 0xc | r0 = r6 >> 0xc;
0x080275f4 asr r3, r8, 0xc | r3 = r8 >> 0xc;
0x080275f8 orr r0, r0, r8, lsl 20 | r0 |= (r8 << 20);
0x080275fc cmp r3, ip |
0x08027600 cmpeq r0, r2 | __asm ("cmpeq r0, r2");
0x08027604 mov r0, r7 | r0 = r7;
0x08027608 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x0802760c stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x08027610 ubfxeq r6, r6, 0, 0xc | __asm ("ubfxeq r6, r6, 0, 0xc");
| if (r3 == ip) {
0x08027614 movne r6, 0x1000 | r6 = 0x1000;
| }
0x08027618 str r3, [sp, 4] | var_4h = r3;
0x0802761c mov r2, 0 | r2 = 0;
0x08027620 str r6, [sp] | *(sp) = r6;
0x08027624 mov r3, 0 | r3 = 0;
0x08027628 stmdaeq r8, {r0, r1, r2, r3, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, r6, sb, sl, fp, ip, pc}");
0x0802762c subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 != r0) {
0x08027630 bne 0x8027724 | goto label_41;
| }
0x08027634 ldr sb, [r7] | sb = *(r7);
0x08027638 mvn sb, sb, lsr 13 | sb = ~sb;
0x0802763c ands sb, sb, 1 | sb &= 1;
| if (sb != sb) {
0x08027640 bne 0x802787c | goto label_33;
| }
0x08027644 ldr sl, [r7, 0x14] | sl = *((r7 + 0x14));
0x08027648 str r4, [sp, 0x10] | var_10h = r4;
0x0802764c mov fp, sl |
0x08027650 mov r4, sl | r4 = sl;
0x08027654 ldr r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x08027658 mov sl, r3 | sl = r3;
0x0802765c b 0x8027670 |
| while (r2 != 0) {
| label_5:
0x08027660 cmp fp, r4 |
| if (fp == r4) {
0x08027664 orrne r8, r8, 1 | r8 |= 1;
| }
0x08027668 cmp r8, 0 |
| if (r8 == 0) {
0x0802766c beq 0x8027740 | goto label_42;
| }
0x08027670 mov r0, sb | r0 = sb;
0x08027674 adds sb, sb, sl | sb += sl;
0x08027678 mov r1, r4 | r1 = r4;
0x0802767c ldr r4, [r4, 4] | r4 = *((r4 + 4));
| if (sb != sb) {
0x08027680 moveq r8, 1 | r8 = 1;
| }
| if (sb == sb) {
0x08027684 movne r8, 0 | r8 = 0;
| }
0x08027688 cmp r6, r0 |
| if (r6 <= r0) {
0x0802768c movhi r2, r8 | r2 = r8;
| }
| if (r6 > r0) {
0x08027690 orrls r2, r8, 1 | r2 = r8 | 1;
| }
0x08027694 cmp r2, 0 |
0x08027698 bne 0x8027660 |
| }
0x0802769c mov r0, r5 | r0 = r5;
0x080276a0 stmdaeq r2, {r3, r6, r7, r8} | __asm ("stmdaeq r2, {r3, r6, r7, r8}");
0x080276a4 cmp r0, 0 |
| if (r0 == 0) {
0x080276a8 beq 0x8027660 | goto label_5;
| }
| label_14:
0x080276ac ldr r4, [sp, 0x10] | r4 = var_10h;
| label_15:
0x080276b0 mov r6, 2 | r6 = 2;
| label_21:
0x080276b4 mov r0, r7 | r0 = r7;
0x080276b8 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x080276bc mov r2, r5 | r2 = r5;
0x080276c0 movw r1, 0x1831 | r1 = 0x1831;
0x080276c4 ldr r0, [pc, 0x224] | r0 = *(0x80278ec);
0x080276c8 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x080276cc b 0x8027270 | goto label_6;
| label_38:
0x080276d0 mov r0, r7 | r0 = r7;
0x080276d4 stmdaeq r8, {r0, r1, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r6, r7, sb, sl, fp, ip, pc}");
0x080276d8 b 0x80275a0 | goto label_7;
0x080276dc pld [r3] | __asm ("pld [r3]");
| do {
0x080276e0 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x080276e4 orr r1, r2, 1 | r1 = r2 | 1;
0x080276e8 strex r0, r1, [r3] | __asm ("strex r0, r1, [r3]");
0x080276ec teq r0, 0 | __asm ("teq r0, 0");
0x080276f0 bne 0x80276e0 |
| } while (r0 != 0);
0x080276f4 tst r2, 1 |
| if ((r2 & 1) == 0) {
0x080276f8 beq 0x802733c | goto label_8;
| }
0x080276fc b 0x8027334 | goto label_9;
| label_35:
0x08027700 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x08027704 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x08027708 str r3, [sp, 0x14] | var_14h = r3;
0x0802770c b 0x8027490 | goto label_10;
| label_39:
0x08027710 ldr r2, [sl] | r2 = *(sl);
0x08027714 tst r2, 2 |
| if ((r2 & 2) == 0) {
0x08027718 beq 0x80275c8 | goto label_11;
| }
0x0802771c stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x08027720 b 0x80275c8 | goto label_11;
| label_41:
0x08027724 mov r0, r7 | r0 = r7;
0x08027728 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x0802772c b 0x8027504 | goto label_12;
| label_31:
0x08027730 mov r0, r7 | r0 = r7;
0x08027734 mov r6, 0x100 | r6 = 0x100;
0x08027738 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x0802773c b 0x8027270 | goto label_6;
| label_42:
0x08027740 ldr r3, [r7] | r3 = *(r7);
0x08027744 ldr r4, [sp, 0x10] | r4 = var_10h;
0x08027748 mvn r3, r3, lsr 13 | r3 = ~r3;
0x0802774c ands fp, r3, 1 |
| if (fp != r3) {
0x08027750 bne 0x802787c | goto label_33;
| }
0x08027754 ldr ip, [r7, 0x14] | ip = *((r7 + 0x14));
0x08027758 str r4, [sp, 0x10] | var_10h = r4;
0x0802775c mov sb, ip | sb = ip;
0x08027760 mov r4, ip | r4 = ip;
0x08027764 ldr sl, [ip, 0x18] | sl = *((ip + 0x18));
0x08027768 b 0x802777c |
| while (r2 != 0) {
| label_13:
0x0802776c cmp sb, r4 |
| if (sb == r4) {
0x08027770 orrne r8, r8, 1 | r8 |= 1;
| }
0x08027774 cmp r8, 0 |
| if (r8 == 0) {
0x08027778 beq 0x80277bc | goto label_43;
| }
0x0802777c mov r0, fp | r0 = fp;
0x08027780 adds fp, fp, sl |
0x08027784 mov r1, r4 | r1 = r4;
0x08027788 ldr r4, [r4, 4] | r4 = *((r4 + 4));
| if (fp != fp) {
0x0802778c moveq r8, 1 | r8 = 1;
| }
| if (fp == fp) {
0x08027790 movne r8, 0 | r8 = 0;
| }
0x08027794 cmp r6, r0 |
| if (r6 <= r0) {
0x08027798 movhi r2, r8 | r2 = r8;
| }
| if (r6 > r0) {
0x0802779c orrls r2, r8, 1 | r2 = r8 | 1;
| }
0x080277a0 cmp r2, 0 |
0x080277a4 bne 0x802776c |
| }
0x080277a8 mov r0, r5 | r0 = r5;
0x080277ac bl 0x801cba4 | r0 = write_end_fn ();
0x080277b0 cmp r0, 0 |
| if (r0 == 0) {
0x080277b4 beq 0x802776c | goto label_13;
| }
0x080277b8 b 0x80276ac | goto label_14;
| label_43:
0x080277bc ldr r4, [sp, 0x10] | r4 = var_10h;
0x080277c0 mov r2, r8 | r2 = r8;
0x080277c4 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x080277c8 cmp r5, 0x1000 |
| if (r5 <= 0x1000) {
0x080277cc blo 0x80277f4 | goto label_44;
| }
0x080277d0 ldr r1, [r4, 0x170] | r1 = *((r4 + 0x170));
0x080277d4 mov r0, r5 | r0 = r5;
0x080277d8 str r2, [sp, 4] | var_4h = r2;
0x080277dc lsl r2, r3, 0xc | r2 = r3 << 0xc;
0x080277e0 str r6, [sp] | *(sp) = r6;
0x080277e4 lsr r3, r3, 0x14 | r3 >>= 0x14;
0x080277e8 stmdaeq r8, {r0, r1, r3, r5, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r5, r6, r7, sb, sl, fp, ip, pc}");
0x080277ec cmp r0, 0 |
| if (r0 != 0) {
0x080277f0 bne 0x80276b0 | goto label_15;
| }
| label_44:
0x080277f4 mrs r2, apsr | r2 = apsr;
0x080277f8 cpsid i | __asm ("cpsid i");
0x080277fc ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x08027800 orr r3, r3, 1 | r3 |= 1;
0x08027804 str r3, [r4, -0x70] | *((r4 - 0x70)) = r3;
0x08027808 msr cpsr_c, r2 | cpsr_c = r2;
0x0802780c ldr r0, [pc, 0xdc] | r0 = *(0x80278ec);
0x08027810 mov r2, r5 | r2 = r5;
0x08027814 movw r1, 0x1826 | r1 = 0x1826;
0x08027818 mov r6, 0x200 | r6 = 0x200;
0x0802781c stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x08027820 b 0x8027270 | goto label_6;
| label_23:
0x08027824 mov r6, 2 | r6 = 2;
0x08027828 mov r0, r6 | r0 = r6;
0x0802782c add sp, sp, 0x24 |
0x08027830 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x08027834 add r0, r0, 0x1a0 | r0 += 0x1a0;
0x08027838 stmdaeq r8, {r0, r1, r4, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r6, r7, r8, sl, fp, ip, pc}");
0x0802783c b 0x8027218 | goto label_16;
| label_27:
0x08027840 mrs r1, apsr | r1 = apsr;
0x08027844 cpsid i | __asm ("cpsid i");
0x08027848 ldr r2, [r0, 0x1b8] | r2 = *((r0 + 0x1b8));
0x0802784c ldr r3, [r2] | r3 = *(r2);
0x08027850 sub r3, r3, 1 | r3--;
0x08027854 str r3, [r2] | *(r2) = r3;
0x08027858 msr cpsr_c, r1 | cpsr_c = r1;
0x0802785c add r0, r0, 0x1bc | r0 += 0x1bc;
0x08027860 stmdaeq r8, {r0, r1, r2, r4, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, r8, sl, fp, ip, pc}");
0x08027864 b 0x80272bc | goto label_17;
| label_30:
0x08027868 ldr r3, [r3] | r3 = *(r3);
0x0802786c tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08027870 beq 0x8027370 | goto label_18;
| }
0x08027874 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x08027878 b 0x8027370 | goto label_18;
| label_33:
0x0802787c udf 0x12 | __asm ("udf 0x12");
| label_26:
0x08027880 stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, pc}");
0x08027884 stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r7, r8, sb, sl, pc}");
0x08027888 add r3, r3, r0, lsl 2 | r3 += (r0 << 2);
0x0802788c ldr r6, [r3, 0x3fc] | r6 = *((r3 + 0x3fc));
0x08027890 b 0x8027270 | goto label_6;
| label_29:
0x08027894 stmdaeq r1, {r3, r7, sb, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r7, sb, sl, fp, lr, pc}");
0x08027898 stmdaeq r1, {r3, r7, sb, sl, fp, lr, pc} | __asm ("stmdaeq r1, {r3, r7, sb, sl, fp, lr, pc}");
0x0802789c b 0x80278b4 | goto label_45;
| label_19:
0x080278a0 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x080278a4 add r1, sp, 0x1c | r1 += var_1ch;
0x080278a8 stmdaeq r0, {r2, r3, r6, fp} | __asm ("stmdaeq r0, {r2, r3, r6, fp}");
0x080278ac cmp r0, 0 |
| if (r0 == 0) {
0x080278b0 beq 0x802726c | goto label_1;
| }
| label_45:
0x080278b4 mov r2, r5 | r2 = r5;
0x080278b8 mov r1, r8 | r1 = r8;
0x080278bc mov r0, sb | r0 = sb;
0x080278c0 stmdaeq r8, {r0, r1, r7, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r7, r8, sb, sl, fp, ip, pc}");
0x080278c4 cmn r0, 0x1c |
| if (r0 == 0x1c) {
0x080278c8 beq 0x80278a0 | goto label_19;
| }
0x080278cc b 0x8027260 | goto label_20;
| label_40:
0x080278d0 mov r6, 0x100 | r6 = 0x100;
0x080278d4 b 0x80276b4 | goto label_21;
| label_34:
0x080278d8 mov r0, r7 | r0 = r7;
0x080278dc mov r6, 0x200 | r6 = 0x200;
0x080278e0 stmdaeq r8, {r0, r1, r2, r6, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sb, sl, fp, ip, pc}");
0x080278e4 b 0x8027270 | goto label_6;
| label_37:
0x080278e8 add r0, r8, 0xe | r0 = r8 + 0xe;
0x080278ec b 0x8027264 | goto label_22;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x80203b8 */
| #include <stdint.h>
|
; (fcn) sym.ext4_set_aops () | void ext4_set_aops (uint32_t arg1) {
| r0 = arg1;
0x080203b8 push {r4, lr} |
0x080203bc mov r4, r0 | r4 = r0;
0x080203c0 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x080203c4 sub r3, r0, 2 | r3 = r0 - 2;
0x080203c8 bics r3, r3, 2 | __asm ("bics r3, r3, 2");
| if (? != ?) {
0x080203cc beq 0x80203e8 |
0x080203d0 cmp r0, 1 |
| if (r0 != 1) {
0x080203d4 bne 0x802040c | goto label_0;
| }
0x080203d8 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x080203dc ldr r2, [pc, 0x2c] | r2 = $d;
0x080203e0 str r2, [r3, 0x38] | *((r3 + 0x38)) = r2;
0x080203e4 pop {r4, pc} |
| }
0x080203e8 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x080203ec ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x080203f0 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x080203f4 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x080203f8 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x080203fc ldrne r3, [pc, 0x10] | r3 = loc..LANCHOR0;
| }
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x08020400 ldreq r3, [pc, 0x10] | r3 = loc..LANCHOR0;
| }
0x08020404 str r3, [r2, 0x38] | *((r2 + 0x38)) = r3;
0x08020408 pop {r4, pc} |
| label_0:
0x0802040c udf 0x12 | __asm ("udf 0x12");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x8019df8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_try_to_write_inline_data () | void ext4_try_to_write_inline_data (int32_t arg_60h, int32_t arg_64h, int32_t arg_68h, int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_2ch;
| int32_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x08019df8 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08019dfc mov r6, r0 | r6 = r0;
0x08019e00 mov r0, r1 | r0 = r1;
0x08019e04 sub sp, sp, 0x3c |
0x08019e08 mov r4, r1 | r4 = r1;
0x08019e0c ldr r7, [sp, 0x60] | r7 = *(arg_60h);
0x08019e10 adds r7, r7, r2 | r7 += r2;
0x08019e14 adc r5, r3, 0 | __asm ("adc r5, r3, 0");
0x08019e18 stmdaeq r1, {r2, r6, r7, r8, fp, ip, pc} | __asm ("stmdaeq r1, {r2, r6, r7, r8, fp, ip, pc}");
0x08019e1c cmp r0, r7 |
0x08019e20 asr r0, r0, 0x1f | r0 >>= 0x1f;
0x08019e24 sbcs r0, r0, r5 | __asm ("sbcs r0, r0, r5");
| if (r0 >= r7) {
0x08019e28 bge 0x801a0a8 | goto label_20;
| }
| label_4:
0x08019e2c ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x08019e30 mov r2, 0 | r2 = 0;
0x08019e34 str r2, [sp, 0x1c] | var_1ch = r2;
0x08019e38 tst r3, 0x10000000 |
0x08019e3c bne 0x8019e68 |
| while (r3 == r2) {
0x08019e40 mrs r2, apsr | r2 = apsr;
0x08019e44 cpsid i | __asm ("cpsid i");
0x08019e48 ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x08019e4c bic r3, r3, 0x80 | r3 = BIT_MASK (r3, 0x80);
0x08019e50 str r3, [r4, -0x70] | *((r4 - 0x70)) = r3;
0x08019e54 msr cpsr_c, r2 | cpsr_c = r2;
0x08019e58 mov r5, 0 | r5 = 0;
| label_0:
0x08019e5c mov r0, r5 | r0 = r5;
0x08019e60 add sp, sp, 0x3c |
0x08019e64 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x08019e68 movw r3, 0x1be | r3 = 0x1be;
0x08019e6c ldrh r3, [r4, r3] | r3 = *((r4 + r3));
0x08019e70 cmp r3, r2 |
0x08019e74 beq 0x8019e40 |
| }
0x08019e78 mov r0, r4 | r0 = r4;
0x08019e7c stmdaeq r2, {r2, r4, r6, sb, fp, ip} | __asm ("stmdaeq r2, {r2, r4, r6, sb, fp, ip}");
0x08019e80 mov sb, r0 | sb = r0;
0x08019e84 add r1, sp, 0x2c | r1 += var_2ch;
0x08019e88 mov r0, r4 | r0 = r4;
0x08019e8c stmdaeq r2, {r4, r5, r6, r8, sb, sl} | __asm ("stmdaeq r2, {r4, r5, r6, r8, sb, sl}");
0x08019e90 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x08019e94 moveq fp, r5 | goto label_21;
| }
| if (r5 != r0) {
| label_21:
0x08019e98 bne 0x8019e5c | goto label_0;
| }
| label_7:
0x08019e9c ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x08019ea0 mov r3, sb | r3 = sb;
0x08019ea4 mov r2, 2 | r2 = 2;
0x08019ea8 mov r1, 0x228 | r1 = 0x228;
0x08019eac ldr ip, [r0, 0x1f8] | ip = *((r0 + 0x1f8));
0x08019eb0 ldr ip, [ip, 0x2c] | ip = *((ip + 0x2c));
0x08019eb4 str fp, [sp] | *(sp) = fp;
0x08019eb8 lsl ip, ip, 3 |
0x08019ebc str ip, [sp, 4] | var_4h = ip;
0x08019ec0 stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x08019ec4 mov r8, r0 | r8 = r0;
0x08019ec8 cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x08019ecc bhi 0x801a3ac | goto label_22;
| }
0x08019ed0 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x08019ed4 mov r0, r6 | r0 = r6;
0x08019ed8 mov r1, 0 | r1 = 0;
0x08019edc orr r3, r3, 2 | r3 |= 2;
0x08019ee0 str r3, [sp, 0x64] | *(arg_64h) = r3;
0x08019ee4 mov r2, r3 | r2 = r3;
0x08019ee8 stmdaeq r8, {r0, r1, r3, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r5, r6, sb, sl, fp, ip, pc}");
0x08019eec subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 == r0) {
0x08019ef0 beq 0x801a434 | goto label_23;
| }
0x08019ef4 sub sl, r4, 0x68 | sl = r4 - 0x68;
0x08019ef8 mov r0, sl | r0 = sl;
0x08019efc stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc}");
0x08019f00 ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x08019f04 ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x08019f08 str r3, [sp, 0xc] | var_ch = r3;
0x08019f0c mrs r2, apsr | r2 = apsr;
0x08019f10 cpsid i | __asm ("cpsid i");
0x08019f14 ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x08019f18 orr r3, r3, 8 | r3 |= 8;
0x08019f1c str r3, [r4, -0x70] | *((r4 - 0x70)) = r3;
0x08019f20 msr cpsr_c, r2 | cpsr_c = r2;
0x08019f24 ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x08019f28 tst r3, 0x10000000 |
| if ((r3 & 0x10000000) != 0) {
0x08019f2c beq 0x801a028 |
0x08019f30 movw r3, 0x1be | r3 = 0x1be;
0x08019f34 ldrh r3, [r4, r3] | r3 = *((r4 + r3));
0x08019f38 cmp r3, 0 |
| if (r3 == 0) {
0x08019f3c beq 0x801a028 | goto label_11;
| }
0x08019f40 add r3, r4, 0x1c0 | r3 = r4 + 0x1c0;
0x08019f44 ldrh r3, [r3] | r3 = *(r3);
0x08019f48 str r3, [sp, 0x14] | var_14h = r3;
0x08019f4c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x08019f50 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08019f54 subne r3, r3, 1 | r3--;
| }
| if ((r3 & 1) != 0) {
0x08019f58 moveq r3, r7 | r3 = r7;
| }
0x08019f5c ldr r3, [r3] | r3 = *(r3);
0x08019f60 tst r3, 4 |
| if ((r3 & 4) == 0) {
0x08019f64 beq 0x801a390 | goto label_24;
| }
| label_10:
0x08019f68 mov r1, r4 | r1 = r4;
0x08019f6c mov r0, r8 | r0 = r8;
0x08019f70 bl 0x8018ebc | r0 = ext4_destroy_inline_data_nolock ();
0x08019f74 cmp r0, 0 |
| if (r0 != 0) {
0x08019f78 bne 0x801a3a4 | goto label_25;
| }
0x08019f7c ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08019f80 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08019f84 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x08019f88 tst r3, 0x400000 |
| if ((r3 & 0x400000) == 0) {
0x08019f8c beq 0x801a264 | goto label_26;
| }
0x08019f90 ldrh r3, [r4] | r3 = *(r4);
0x08019f94 and r3, r3, 0xf000 | r3 &= 0xf000;
0x08019f98 cmp r3, 0x8000 |
| if (r3 != 0x8000) {
0x08019f9c bne 0x801a264 | goto label_26;
| }
0x08019fa0 ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x08019fa4 tst r3, 0x80000 |
| if ((r3 & 0x80000) == 0) {
0x08019fa8 beq 0x801a264 | goto label_26;
| }
0x08019fac mov r0, r4 | r0 = r4;
0x08019fb0 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08019fb4 tst r0, 1 |
| if ((r0 & 1) != 0) {
0x08019fb8 bne 0x801a264 | goto label_26;
| }
0x08019fbc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08019fc0 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08019fc4 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x08019fc8 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x08019fcc beq 0x801a264 | goto label_26;
| }
0x08019fd0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x08019fd4 mov r0, r7 | r0 = r7;
0x08019fd8 str r3, [sp] | *(sp) = r3;
0x08019fdc stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc}");
0x08019fe0 stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc}");
| label_5:
0x08019fe4 str r3, [sp, 4] | var_4h = r3;
0x08019fe8 mov r2, 0 | r2 = 0;
0x08019fec mov r3, 0 | r3 = 0;
0x08019ff0 stmdaeq r8, {r0, r1, r2, r3, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r5, r6, sb, sl, fp, ip, pc}");
0x08019ff4 str r0, [sp, 0x10] | var_10h = r0;
0x08019ff8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x08019ffc cmp r3, 0 |
| if (r3 != 0) {
0x0801a000 bne 0x801a2bc | goto label_27;
| }
0x0801a004 mov r0, r4 | r0 = r4;
0x0801a008 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x0801a00c tst r0, 1 |
| if ((r0 & 1) != 0) {
0x0801a010 bne 0x801a27c | goto label_28;
| }
| label_6:
0x0801a014 mov r5, 0 | r5 = 0;
0x0801a018 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0801a01c mov r0, r7 | r0 = r7;
0x0801a020 mov r1, 0 | r1 = 0;
0x0801a024 stmdaeq r8, {r0, r1, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r5, r6, sb, sl, fp, ip, pc}");
| }
| label_11:
0x0801a028 mov r0, r7 | r0 = r7;
0x0801a02c stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x0801a030 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0801a034 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x0801a038 subne r7, r3, 1 | r7 = r3 - 1;
| }
0x0801a03c add r3, r7, 0x1c | r3 = r7 + 0x1c;
0x0801a040 pld [r3] | __asm ("pld [r3]");
| do {
0x0801a044 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0801a048 sub r2, r2, 1 | r2--;
0x0801a04c strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0801a050 teq r1, 0 | __asm ("teq r1, 0");
0x0801a054 bne 0x801a044 |
| } while ((r3 & 1) != 0);
0x0801a058 cmp r2, 0 |
| if (r2 == 0) {
0x0801a05c beq 0x801a384 | goto label_29;
| }
| label_9:
0x0801a060 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0801a064 cmp r3, 0 |
| if (r3 == 0) {
0x0801a068 beq 0x801a3b4 | goto label_30;
| }
| label_12:
0x0801a06c mov r0, sl | r0 = sl;
0x0801a070 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
| label_19:
0x0801a074 cmp r8, 0 |
| if (r8 != 0) {
0x0801a078 beq 0x801a08c |
0x0801a07c ldr r0, [pc, 0x3bc] | r0 = $d;
0x0801a080 mov r2, r8 | r2 = r8;
0x0801a084 movw r1, 0x27a | r1 = 0x27a;
0x0801a088 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
| }
| label_8:
0x0801a08c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0801a090 cmp r0, 0 |
| if (r0 == 0) {
0x0801a094 beq 0x8019e5c | goto label_0;
| }
0x0801a098 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc}");
| label_1:
0x0801a09c mov r0, r5 | r0 = r5;
0x0801a0a0 add sp, sp, 0x3c |
0x0801a0a4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x0801a0a8 add r1, sp, 0x20 | r1 += var_20h;
0x0801a0ac mov r0, r4 | r0 = r4;
0x0801a0b0 stmdaeq r2, {r4, r5, r6, r8, sb, sl} | __asm ("stmdaeq r2, {r4, r5, r6, r8, sb, sl}");
0x0801a0b4 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x0801a0b8 bne 0x8019e5c | goto label_0;
| }
0x0801a0bc ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0801a0c0 mov r3, 1 | r3 = 1;
0x0801a0c4 movw r1, 0x29b | r1 = 0x29b;
0x0801a0c8 mov r2, r3 | r2 = r3;
0x0801a0cc ldr ip, [r0, 0x1f8] | ip = *((r0 + 0x1f8));
0x0801a0d0 ldr ip, [ip, 0x2c] | ip = *((ip + 0x2c));
0x0801a0d4 str r5, [sp] | *(sp) = r5;
0x0801a0d8 lsl ip, ip, 3 |
0x0801a0dc str ip, [sp, 4] | var_4h = ip;
0x0801a0e0 stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x0801a0e4 cmn r0, 0x1000 |
0x0801a0e8 mov r8, r0 | r8 = r0;
| if (r0 <= 0x1000) {
0x0801a0ec movhi r5, r0 | r5 = r0;
| }
| if (r0 <= 0x1000) {
0x0801a0f0 bhi 0x801a1a8 |
0x0801a0f4 mov r2, r7 | r2 = r7;
0x0801a0f8 mov r1, r4 | r1 = r4;
0x0801a0fc bl 0x8019a84 | r0 = ext4_prepare_inline_data ();
0x0801a100 mov r5, r0 | r5 = r0;
0x0801a104 cmp r0, 0 |
0x0801a108 cmnne r0, 0x1c | __asm ("cmnne r0, 0x1c");
| if (r0 != 0) {
0x0801a10c bne 0x801a1bc | goto label_31;
| }
0x0801a110 cmn r0, 0x1c |
| if (r0 == 0x1c) {
0x0801a114 beq 0x801a1f8 | goto label_32;
| }
0x0801a118 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0801a11c mov r2, r8 | r2 = r8;
0x0801a120 ldr r0, [pc, 0x31c] | r0 = "ext4_validate_block_bitmap";
0x0801a124 movw r1, 0x2ad | r1 = 0x2ad;
0x0801a128 stmdaeq r0, {r8, sl, fp, ip, sp} | __asm ("stmdaeq r0, {r8, sl, fp, ip, sp}");
0x0801a12c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x0801a130 bne 0x801a1bc | goto label_31;
| }
0x0801a134 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0801a138 mov r0, r6 | r0 = r6;
0x0801a13c mov r1, r5 | r1 = r5;
0x0801a140 orr r2, r3, 2 | r2 = r3 | 2;
0x0801a144 stmdaeq r8, {r0, r1, r3, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r5, r6, sb, sl, fp, ip, pc}");
0x0801a148 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x0801a14c beq 0x801a1ec | goto label_33;
| }
0x0801a150 ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x0801a154 sub r7, r4, 0x68 | r7 = r4 - 0x68;
0x0801a158 mov r0, r7 | r0 = r7;
0x0801a15c str r6, [r3] | *(r3) = r6;
0x0801a160 stmdaeq r8, {r0, r1, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r6, r7, sl, fp, ip, pc}");
0x0801a164 ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x0801a168 tst r3, 0x10000000 |
| if ((r3 & 0x10000000) == 0) {
0x0801a16c beq 0x801a21c | goto label_17;
| }
0x0801a170 movw r3, 0x1be | r3 = 0x1be;
0x0801a174 ldrh r3, [r4, r3] | r3 = *((r4 + r3));
0x0801a178 cmp r3, 0 |
| if (r3 == 0) {
0x0801a17c beq 0x801a21c | goto label_17;
| }
0x0801a180 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0801a184 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x0801a188 subne r3, r3, 1 | r3--;
| }
| if ((r3 & 1) != 0) {
0x0801a18c moveq r3, r6 | r3 = r6;
| }
0x0801a190 ldr r3, [r3] | r3 = *(r3);
0x0801a194 tst r3, 4 |
| if ((r3 & 4) == 0) {
0x0801a198 beq 0x801a414 | goto label_34;
| }
0x0801a19c mov r0, r7 | r0 = r7;
0x0801a1a0 stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
| label_18:
0x0801a1a4 mov r5, 1 | r5 = 1;
| }
| label_2:
0x0801a1a8 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0801a1ac cmp r0, 0 |
| if (r0 == 0) {
0x0801a1b0 beq 0x8019e5c | goto label_0;
| }
0x0801a1b4 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc}");
0x0801a1b8 b 0x801a09c | goto label_1;
| label_31:
0x0801a1bc subs r3, r5, 1 | r3 = r5 - 1;
| if (r3 == r5) {
0x0801a1c0 movne r3, 1 | r3 = 1;
| }
| label_3:
0x0801a1c4 cmp r8, 0 |
| if (r8 != 0) {
0x0801a1c8 moveq r3, 0 | r3 = 0;
| }
| if (r8 == 0) {
0x0801a1cc andne r3, r3, 1 | r3 &= 1;
| }
0x0801a1d0 cmp r3, 0 |
| if (r3 == 0) {
0x0801a1d4 beq 0x801a1a8 | goto label_2;
| }
0x0801a1d8 mov r2, r8 | r2 = r8;
0x0801a1dc movw r1, 0x2d1 | r1 = 0x2d1;
0x0801a1e0 ldr r0, [pc, 0x25c] | r0 = "ext4_validate_block_bitmap";
0x0801a1e4 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x0801a1e8 b 0x801a1a8 | goto label_2;
| label_33:
0x0801a1ec mov r3, 1 | r3 = 1;
0x0801a1f0 mvn r5, 0xb | r5 = ~0xb;
0x0801a1f4 b 0x801a1c4 | goto label_3;
| label_32:
0x0801a1f8 ldr r0, [pc, 0x244] | r0 = "ext4_validate_block_bitmap";
0x0801a1fc mov r2, r8 | r2 = r8;
0x0801a200 mov r1, 0x2a8 | r1 = 0x2a8;
0x0801a204 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x0801a208 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0801a20c cmp r0, 0 |
| if (r0 == 0) {
0x0801a210 beq 0x8019e2c | goto label_4;
| }
0x0801a214 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sl, fp, ip, pc}");
0x0801a218 b 0x8019e2c | goto label_4;
| label_17:
0x0801a21c mov r0, r6 | r0 = r6;
0x0801a220 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x0801a224 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0801a228 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x0801a22c subne r6, r3, 1 | r6 = r3 - 1;
| }
0x0801a230 add r3, r6, 0x1c | r3 = r6 + 0x1c;
0x0801a234 pld [r3] | __asm ("pld [r3]");
| do {
0x0801a238 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0801a23c sub r2, r2, 1 | r2--;
0x0801a240 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0801a244 teq r1, 0 | __asm ("teq r1, 0");
0x0801a248 bne 0x801a238 |
| } while ((r3 & 1) != 0);
0x0801a24c cmp r2, 0 |
| if (r2 == 0) {
0x0801a250 beq 0x801a3d0 | goto label_35;
| }
| label_13:
0x0801a254 mov r0, r7 | r0 = r7;
0x0801a258 stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
0x0801a25c mov r3, 1 | r3 = 1;
0x0801a260 b 0x801a1c4 | goto label_3;
| label_26:
0x0801a264 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0801a268 mov r0, r7 | r0 = r7;
0x0801a26c str r3, [sp] | *(sp) = r3;
0x0801a270 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x0801a274 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x0801a278 b 0x8019fe4 | goto label_5;
| label_28:
0x0801a27c ldr r3, [r7] | r3 = *(r7);
0x0801a280 tst r3, 0x2000 |
| if ((r3 & 0x2000) == 0) {
0x0801a284 beq 0x801a43c | goto label_36;
| }
0x0801a288 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0801a28c mov r0, r8 | r0 = r8;
0x0801a290 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0801a294 stmdaeq r2, {r3, r6, r7, r8} | __asm ("stmdaeq r2, {r3, r6, r7, r8}");
0x0801a298 stmdaeq r2, {r3, r6, r7, r8} | __asm ("stmdaeq r2, {r3, r6, r7, r8}");
0x0801a29c mov r2, r3 | r2 = r3;
0x0801a2a0 str r3, [sp] | *(sp) = r3;
0x0801a2a4 str ip, [sp, 4] | var_4h = ip;
0x0801a2a8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0801a2ac stmdaeq r2, {r2, r3, r4, r5, r8} | __asm ("stmdaeq r2, {r2, r3, r4, r5, r8}");
0x0801a2b0 subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 == r0) {
0x0801a2b4 beq 0x801a014 | goto label_6;
| }
0x0801a2b8 str r3, [sp, 0x10] | var_10h = r3;
| label_27:
0x0801a2bc mov r0, r7 | r0 = r7;
0x0801a2c0 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x0801a2c4 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0801a2c8 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x0801a2cc subne r7, r3, 1 | r7 = r3 - 1;
| }
0x0801a2d0 add r3, r7, 0x1c | r3 = r7 + 0x1c;
0x0801a2d4 pld [r3] | __asm ("pld [r3]");
| do {
0x0801a2d8 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x0801a2dc sub r2, r2, 1 | r2--;
0x0801a2e0 strex r1, r2, [r3] | __asm ("strex r1, r2, [r3]");
0x0801a2e4 teq r1, 0 | __asm ("teq r1, 0");
0x0801a2e8 bne 0x801a2d8 |
| } while ((r3 & 1) != 0);
0x0801a2ec cmp r2, 0 |
| if (r2 == 0) {
0x0801a2f0 beq 0x801a3dc | goto label_37;
| }
| label_14:
0x0801a2f4 mov r1, r4 | r1 = r4;
0x0801a2f8 mov r0, r8 | r0 = r8;
0x0801a2fc stmdaeq r3, {r3, r4, r7, sl, lr, pc} | __asm ("stmdaeq r3, {r3, r4, r7, sl, lr, pc}");
0x0801a300 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0801a304 cmp r3, 0 |
| if (r3 == 0) {
0x0801a308 beq 0x801a3f8 | goto label_38;
| }
| label_16:
0x0801a30c mov r0, sl | r0 = sl;
0x0801a310 sub r7, r4, 0x10 | r7 = r4 - 0x10;
0x0801a314 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
0x0801a318 mov r1, 0x260 | r1 = 0x260;
0x0801a31c mov r2, r8 | r2 = r8;
0x0801a320 ldr r0, [pc, 0x118] | r0 = $d;
0x0801a324 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x0801a328 mov r0, r7 | r0 = r7;
0x0801a32c stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc}");
0x0801a330 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0801a334 ldrd r2, r3, [r4, 0x38] | __asm ("ldrd r2, r3, [r4, 0x38]");
0x0801a338 stmdaeq r8, {r0, r1, r5, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r6, r7, r8, sl, fp, ip, pc}");
0x0801a33c mov r0, r4 | r0 = r4;
0x0801a340 stmdaeq r2, {r7, sb, sl, lr} | __asm ("stmdaeq r2, {r7, sb, sl, lr}");
0x0801a344 mov r0, r7 | r0 = r7;
0x0801a348 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
0x0801a34c ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0801a350 cmp r3, 0 |
| if (r3 != 0) {
0x0801a354 bne 0x801a3e8 | goto label_39;
| }
| label_15:
0x0801a358 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0801a35c cmn r3, 0x1c |
| if (r3 != 0x1c) {
0x0801a360 bne 0x801a378 | goto label_40;
| }
0x0801a364 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0801a368 add r1, sp, 0x1c | r1 += var_1ch;
0x0801a36c stmdaeq r0, {r2, r3, r6, fp} | __asm ("stmdaeq r0, {r2, r3, r6, fp}");
0x0801a370 cmp r0, 0 |
| if (r0 != 0) {
0x0801a374 bne 0x8019e9c | goto label_7;
| }
| label_40:
0x0801a378 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0801a37c mov r5, r2 | r5 = r2;
0x0801a380 b 0x801a08c | goto label_8;
| label_29:
0x0801a384 mov r0, r7 | r0 = r7;
0x0801a388 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc}");
0x0801a38c b 0x801a060 | goto label_9;
| label_24:
0x0801a390 mov r1, r7 | r1 = r7;
0x0801a394 mov r0, r4 | r0 = r4;
0x0801a398 bl 0x80190a0 | r0 = ext4_read_inline_page ();
0x0801a39c cmp r0, 0 |
| if (r0 >= 0) {
0x0801a3a0 bge 0x8019f68 | goto label_10;
| }
| label_25:
0x0801a3a4 mov r5, r0 | r5 = r0;
0x0801a3a8 b 0x801a028 | goto label_11;
| label_22:
0x0801a3ac mov r5, r0 | r5 = r0;
0x0801a3b0 b 0x801a08c | goto label_8;
| label_30:
0x0801a3b4 mrs r2, apsr | r2 = apsr;
0x0801a3b8 cpsid i | __asm ("cpsid i");
0x0801a3bc ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x0801a3c0 bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x0801a3c4 str r3, [r4, -0x70] | *((r4 - 0x70)) = r3;
0x0801a3c8 msr cpsr_c, r2 | cpsr_c = r2;
0x0801a3cc b 0x801a06c | goto label_12;
| label_35:
0x0801a3d0 mov r0, r6 | r0 = r6;
0x0801a3d4 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc}");
0x0801a3d8 b 0x801a254 | goto label_13;
| label_37:
0x0801a3dc mov r0, r7 | r0 = r7;
0x0801a3e0 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc}");
0x0801a3e4 b 0x801a2f4 | goto label_14;
| label_39:
0x0801a3e8 mov r1, r4 | r1 = r4;
0x0801a3ec mov r0, 0 | r0 = 0;
0x0801a3f0 stmdaeq r3, {r2, r3, r5, r6, r7, sl, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r2, r3, r5, r6, r7, sl, fp, ip, lr, pc}");
0x0801a3f4 b 0x801a358 | goto label_15;
| label_38:
0x0801a3f8 mrs r2, apsr | r2 = apsr;
0x0801a3fc cpsid i | __asm ("cpsid i");
0x0801a400 ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x0801a404 bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x0801a408 str r3, [r4, -0x70] | *((r4 - 0x70)) = r3;
0x0801a40c msr cpsr_c, r2 | cpsr_c = r2;
0x0801a410 b 0x801a30c | goto label_16;
| label_34:
0x0801a414 mov r1, r6 | r1 = r6;
0x0801a418 mov r0, r4 | r0 = r4;
0x0801a41c bl 0x80190a0 | r0 = ext4_read_inline_page ();
0x0801a420 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x0801a424 blt 0x801a21c | goto label_17;
| }
0x0801a428 mov r0, r7 | r0 = r7;
0x0801a42c stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, sl, fp, ip, pc}");
0x0801a430 b 0x801a1a4 | goto label_18;
| label_23:
0x0801a434 mvn r5, 0xb | r5 = ~0xb;
0x0801a438 b 0x801a074 | goto label_19;
| label_36:
0x0801a43c udf 0x12 | __asm ("udf 0x12");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x8024a74 */
| #include <stdint.h>
|
; (fcn) sym.ext4_write_begin () | void ext4_write_begin (int32_t arg_70h, int32_t arg_74h, int32_t arg_78h, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_44h;
| int32_t var_4ch;
| r1 = arg2;
0x08024a74 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08024a78 mov sb, r3 | sb = r3;
0x08024a7c mov r3, 0 | r3 = 0;
0x08024a80 sub sp, sp, 0x4c |
0x08024a84 ldr r4, [r1] | r4 = *(r1);
0x08024a88 str r3, [sp, 0x44] | var_44h = r3;
0x08024a8c ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08024a90 ldr r7, [sp, 0x70] | r7 = *(arg_70h);
0x08024a94 str r1, [sp, 0x14] | var_14h = r1;
0x08024a98 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08024a9c ldr r3, [r3, 0x130] | r3 = *((r3 + 0x130));
0x08024aa0 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x08024aa4 bne 0x8024ed8 | goto label_12;
| }
0x08024aa8 mov r0, r4 | r0 = r4;
0x08024aac mov r8, r2 | r8 = r2;
0x08024ab0 stmdaeq r2, {r2, r4, r6, sb, fp, ip} | __asm ("stmdaeq r2, {r2, r4, r6, sb, fp, ip}");
0x08024ab4 add r3, r0, 1 | r3 = r0 + 1;
0x08024ab8 str r3, [sp, 0x18] | var_18h = r3;
0x08024abc ldr r3, [r4, -0x70] | r3 = *((r4 - 0x70));
0x08024ac0 tst r3, 0x80 |
0x08024ac4 lsr r3, r8, 0xc | r3 = r8 >> 0xc;
0x08024ac8 orr r5, r3, sb, lsl 20 | r5 = r3 | (sb << 20);
0x08024acc ubfx r3, r8, 0, 0xc | r3 = (r8 >> 0) & ((1 << 0xc) - 1);
0x08024ad0 str r3, [sp, 0x28] | var_28h = r3;
0x08024ad4 add r3, r7, r3 | r3 = r7 + r3;
0x08024ad8 str r3, [sp, 0x2c] | var_2ch = r3;
| if ((r3 & 0x80) != 0) {
0x08024adc bne 0x8024e90 | goto label_13;
| }
| label_8:
0x08024ae0 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x08024ae4 stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r3, r5, r6, r7, sb, ip, sp, lr, pc}");
0x08024ae8 stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc}");
0x08024aec stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r5, r7, sb, sl, ip, sp, lr, pc}");
0x08024af0 str r3, [sp, 0x20] | var_20h = r3;
0x08024af4 mov r3, 0xf000 |
0x08024af8 movt r3, 0xffff | r3 = 0x-1000;
0x08024afc str r2, [sp, 0x24] | var_24h = r2;
0x08024b00 str r3, [sp, 0x1c] | var_1ch = r3;
| label_11:
0x08024b04 ldr r2, [sp, 0x74] | r2 = *(arg_74h);
0x08024b08 mov r1, r5 | r1 = r5;
0x08024b0c ldr r0, [sp, 0x14] | r0 = var_14h;
0x08024b10 stmdaeq r8, {r0, r1, r3, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r5, r6, sb, sl, fp, ip, pc}");
0x08024b14 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x08024b18 beq 0x8024f48 | goto label_14;
| }
0x08024b1c stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x08024b20 str r5, [sp, 0x3c] | var_3ch = r5;
| label_0:
0x08024b24 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x08024b28 mov ip, 0 |
0x08024b2c ldr r3, [sp, 0x18] | r3 = var_18h;
0x08024b30 mov r2, 2 | r2 = 2;
0x08024b34 ldr r1, [r0, 0x1f8] | r1 = *((r0 + 0x1f8));
0x08024b38 ldr r1, [r1, 0x2c] | r1 = *((r1 + 0x2c));
0x08024b3c str ip, [sp] | *(sp) = ip;
0x08024b40 lsl r1, r1, 3 | r1 <<= 3;
0x08024b44 str r1, [sp, 4] | var_4h = r1;
0x08024b48 movw r1, 0x49c | r1 = 0x49c;
0x08024b4c stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x08024b50 mov fp, r0 |
0x08024b54 cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x08024b58 bhi 0x8024e3c | goto label_15;
| }
0x08024b5c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x08024b60 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08024b64 subne r3, r3, 1 | r3--;
| }
| if ((r3 & 1) != 0) {
0x08024b68 moveq r3, r6 | r3 = r6;
| }
0x08024b6c ldr r2, [r3] | r2 = *(r3);
0x08024b70 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x08024b74 bne 0x8024d30 | goto label_16;
| }
0x08024b78 pld [r3] | __asm ("pld [r3]");
| do {
0x08024b7c ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08024b80 orr r1, r2, 1 | r1 = r2 | 1;
0x08024b84 strex r0, r1, [r3] | __asm ("strex r0, r1, [r3]");
0x08024b88 teq r0, 0 | __asm ("teq r0, 0");
0x08024b8c bne 0x8024b7c |
| } while ((r2 & 1) != 0);
0x08024b90 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x08024b94 bne 0x8024d30 | goto label_16;
| }
| label_2:
0x08024b98 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x08024b9c ldr r2, [sp, 0x14] | r2 = var_14h;
0x08024ba0 cmp r3, r2 |
| if (r3 != r2) {
0x08024ba4 bne 0x8024eec | goto label_17;
| }
0x08024ba8 mov r0, r6 | r0 = r6;
0x08024bac stmdaeq r8, {r0, r1, r2, r6, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sb, sl, fp, ip, pc}");
0x08024bb0 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08024bb4 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08024bb8 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x08024bbc tst r3, 0x400000 |
| if ((r3 & 0x400000) != 0) {
0x08024bc0 beq 0x8024c0c |
0x08024bc4 ldrh r3, [r4] | r3 = *(r4);
0x08024bc8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08024bcc and r3, r3, r2 | r3 &= r2;
0x08024bd0 cmp r3, 0x8000 |
| if (r3 != 0x8000) {
0x08024bd4 bne 0x8024c0c | goto label_18;
| }
0x08024bd8 ldr r3, [r4, -0x6c] | r3 = *((r4 - 0x6c));
0x08024bdc tst r3, 0x80000 |
| if ((r3 & 0x80000) == 0) {
0x08024be0 beq 0x8024c0c | goto label_18;
| }
0x08024be4 mov r0, r4 | r0 = r4;
0x08024be8 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08024bec tst r0, 1 |
| if ((r0 & 1) != 0) {
0x08024bf0 bne 0x8024c0c | goto label_18;
| }
0x08024bf4 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x08024bf8 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08024bfc ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x08024c00 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x08024c04 ldrne r3, [sp, 0x24] | r3 = var_24h;
| }
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x08024c08 bne 0x8024c10 | goto label_19;
| }
| }
| label_18:
0x08024c0c ldr r3, [sp, 0x20] | r3 = var_20h;
| label_19:
0x08024c10 str r3, [sp, 4] | var_4h = r3;
0x08024c14 mov r2, r8 | r2 = r8;
0x08024c18 mov r3, sb | r3 = sb;
0x08024c1c mov r0, r6 | r0 = r6;
0x08024c20 str r7, [sp] | *(sp) = r7;
0x08024c24 bl 0x801d38c | r0 = ext4_block_write_begin ();
0x08024c28 mov sl, r0 | sl = r0;
0x08024c2c cmp r0, 0 |
| if (r0 == 0) {
0x08024c30 beq 0x8024d3c | goto label_20;
| }
| label_4:
0x08024c34 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x08024c38 adds r1, r7, r8 | r1 = r7 + r8;
0x08024c3c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x08024c40 adc r2, sb, 0 | __asm ("adc r2, sb, 0");
0x08024c44 cmp r0, r1 |
0x08024c48 mov r0, r6 | r0 = r6;
0x08024c4c sbcs r3, r3, r2 | __asm ("sbcs r3, r3, r2");
| if (r0 >= r1) {
0x08024c50 bge 0x8024d18 | goto label_21;
| }
0x08024c54 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x08024c58 ldrh r3, [r4] | r3 = *(r4);
0x08024c5c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08024c60 and r3, r3, r2 | r3 &= r2;
0x08024c64 sub r2, r3, 0x4000 | r2 = r3 - 0x4000;
0x08024c68 tst r2, 0xb000 |
| if ((r2 & 0xb000) == 0) {
0x08024c6c beq 0x8024e1c | goto label_22;
| }
0x08024c70 cmp r3, 0xa000 |
| if (r3 == 0xa000) {
0x08024c74 beq 0x8024e0c | goto label_23;
| }
| label_5:
0x08024c78 ldr r0, [pc, 0x2d0] | r0 = *(0x8024f4c);
0x08024c7c mov r2, fp | r2 = fp;
0x08024c80 movw r1, 0x4d1 | r1 = 0x4d1;
0x08024c84 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
| label_6:
0x08024c88 sub r5, r4, 0x10 | r5 = r4 - 0x10;
0x08024c8c mov r0, r5 | r0 = r5;
0x08024c90 stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc}");
0x08024c94 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x08024c98 ldrd r2, r3, [r4, 0x38] | __asm ("ldrd r2, r3, [r4, 0x38]");
0x08024c9c stmdaeq r8, {r0, r1, r5, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r5, r6, r7, r8, sl, fp, ip, pc}");
0x08024ca0 mov r0, r4 | r0 = r4;
0x08024ca4 stmdaeq r2, {r7, sb, sl, lr} | __asm ("stmdaeq r2, {r7, sb, sl, lr}");
0x08024ca8 mov r0, r5 | r0 = r5;
0x08024cac stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
0x08024cb0 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x08024cb4 cmp r3, 0 |
| if (r3 != 0) {
0x08024cb8 bne 0x8024e80 | goto label_24;
| }
| label_1:
0x08024cbc cmn sl, 0x1c |
| if (sl != 0x1c) {
0x08024cc0 bne 0x8024cd8 | goto label_25;
| }
0x08024cc4 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x08024cc8 add r1, sp, 0x44 | r1 += var_44h;
0x08024ccc stmdaeq r0, {r2, r3, r6, fp} | __asm ("stmdaeq r0, {r2, r3, r6, fp}");
0x08024cd0 cmp r0, 0 |
| if (r0 != 0) {
0x08024cd4 bne 0x8024b24 | goto label_0;
| }
| label_25:
0x08024cd8 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x08024cdc mov fp, sl |
0x08024ce0 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08024ce4 subne r6, r3, 1 | r6 = r3 - 1;
| }
0x08024ce8 add r3, r6, 0x1c | r3 = r6 + 0x1c;
0x08024cec pld [r3] | __asm ("pld [r3]");
| do {
0x08024cf0 ldrex r2, [r3] | __asm ("ldrex r2, [r3]");
0x08024cf4 sub r2, r2, 1 | r2--;
0x08024cf8 strex r0, r2, [r3] | __asm ("strex r0, r2, [r3]");
0x08024cfc teq r0, 0 | __asm ("teq r0, 0");
0x08024d00 bne 0x8024cf0 |
| } while ((r3 & 1) != 0);
0x08024d04 cmp r2, 0 |
| if (r2 != 0) {
0x08024d08 bne 0x8024e00 | goto label_7;
| }
0x08024d0c mov r0, r6 | r0 = r6;
0x08024d10 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc}");
0x08024d14 b 0x8024e00 | goto label_7;
| label_21:
0x08024d18 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x08024d1c mov r2, fp | r2 = fp;
0x08024d20 movw r1, 0x4d1 | r1 = 0x4d1;
0x08024d24 ldr r0, [pc, 0x224] | r0 = *(0x8024f4c);
0x08024d28 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x08024d2c b 0x8024cbc | goto label_1;
| label_16:
0x08024d30 mov r0, r6 | r0 = r6;
0x08024d34 stmdaeq r8, {r0, r1, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r6, r7, sb, sl, fp, ip, pc}");
0x08024d38 b 0x8024b98 | goto label_2;
| label_20:
0x08024d3c mov r0, r4 | r0 = r4;
0x08024d40 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08024d44 tst r0, 1 |
| if ((r0 & 1) == 0) {
0x08024d48 beq 0x8024df4 | goto label_26;
| }
0x08024d4c ldr r3, [r6] | r3 = *(r6);
0x08024d50 mvn r3, r3, lsr 13 | r3 = ~r3;
0x08024d54 ands r3, r3, 1 | r3 &= 1;
| if (r3 != r3) {
0x08024d58 bne 0x8024ee8 | goto label_27;
| }
0x08024d5c ldr ip, [r6, 0x14] | ip = *((r6 + 0x14));
0x08024d60 str r4, [sp, 0x30] | var_30h = r4;
0x08024d64 str r7, [sp, 0x70] | *(arg_70h) = r7;
0x08024d68 mov r5, ip | r5 = ip;
0x08024d6c str r8, [sp, 0x34] | var_34h = r8;
0x08024d70 mov r8, ip | r8 = ip;
0x08024d74 str sb, [sp, 0x38] | var_38h = sb;
0x08024d78 mov sb, r3 | sb = r3;
0x08024d7c ldr sl, [ip, 0x18] | sl = *((ip + 0x18));
0x08024d80 ldr r4, [sp, 0x28] | r4 = var_28h;
0x08024d84 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x08024d88 b 0x8024da4 |
| while (r1 != 0) {
| label_3:
0x08024d8c clz r1, sb | r1 &= sb;
0x08024d90 lsr r1, r1, 5 | r1 >>= 5;
0x08024d94 cmp r5, r8 |
| if (r5 == r8) {
0x08024d98 orrne r1, r1, 1 | r1 |= 1;
| }
0x08024d9c cmp r1, 0 |
| if (r1 == 0) {
0x08024da0 beq 0x8024df4 | goto label_26;
| }
0x08024da4 mov r1, sb | r1 = sb;
0x08024da8 add sb, sb, sl | sb += sl;
0x08024dac cmp r7, r1 |
| if (r7 <= r1) {
0x08024db0 movhi r1, 0 | r1 = 0;
| }
| if (r7 > r1) {
0x08024db4 movls r1, 1 | r1 = 1;
| }
0x08024db8 cmp r4, sb |
| if (r4 < sb) {
0x08024dbc orrhs r1, r1, 1 | r1 |= 1;
| }
0x08024dc0 cmp r1, 0 |
0x08024dc4 mov r1, r8 | r1 = r8;
0x08024dc8 ldr r8, [r8, 4] | r8 = *((r8 + 4));
0x08024dcc bne 0x8024d8c |
| }
0x08024dd0 mov r0, fp | r0 = fp;
0x08024dd4 stmdaeq r2, {r3, r6, r7, r8} | __asm ("stmdaeq r2, {r3, r6, r7, r8}");
0x08024dd8 cmp r0, 0 |
| if (r0 == 0) {
0x08024ddc beq 0x8024d8c | goto label_3;
| }
0x08024de0 ldr r4, [sp, 0x30] | r4 = var_30h;
0x08024de4 mov sl, r0 | sl = r0;
0x08024de8 ldr r7, [sp, 0x70] | r7 = *(arg_70h);
0x08024dec ldrd r8, sb, [sp, 0x34] | __asm ("ldrd r8, sb, [var_34h]");
0x08024df0 b 0x8024c34 | goto label_4;
| label_26:
0x08024df4 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x08024df8 str r6, [r3] | *(r3) = r6;
| label_9:
0x08024dfc mov fp, 0 |
| label_7:
0x08024e00 mov r0, fp | r0 = fp;
0x08024e04 add sp, sp, 0x4c |
0x08024e08 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x08024e0c mov r0, r4 | r0 = r4;
0x08024e10 stmdaeq r1, {r2, r3, r5, r6, r7, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r2, r3, r5, r6, r7, fp, sp, lr, pc}");
0x08024e14 cmp r0, 0 |
| if (r0 != 0) {
0x08024e18 bne 0x8024c78 | goto label_5;
| }
| label_22:
0x08024e1c mov r1, r4 | r1 = r4;
0x08024e20 mov r0, fp | r0 = fp;
0x08024e24 stmdaeq r3, {r3, r4, r7, sl, lr, pc} | __asm ("stmdaeq r3, {r3, r4, r7, sl, lr, pc}");
0x08024e28 mov r2, fp | r2 = fp;
0x08024e2c movw r1, 0x4d1 | r1 = 0x4d1;
0x08024e30 ldr r0, [pc, 0x118] | r0 = *(0x8024f4c);
0x08024e34 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x08024e38 b 0x8024c88 | goto label_6;
| label_15:
0x08024e3c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x08024e40 mov sl, r0 | sl = r0;
0x08024e44 tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08024e48 subne r6, r3, 1 | r6 = r3 - 1;
| }
0x08024e4c add r3, r6, 0x1c | r3 = r6 + 0x1c;
0x08024e50 pld [r3] | __asm ("pld [r3]");
| do {
0x08024e54 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x08024e58 sub r1, r1, 1 | r1--;
0x08024e5c strex r0, r1, [r3] | __asm ("strex r0, r1, [r3]");
0x08024e60 teq r0, 0 | __asm ("teq r0, 0");
0x08024e64 bne 0x8024e54 |
| } while ((r3 & 1) != 0);
0x08024e68 cmp r1, 0 |
| if (r1 == 0) {
0x08024e6c beq 0x8024ecc | goto label_28;
| }
| label_10:
0x08024e70 mov fp, sl |
0x08024e74 mov r0, fp | r0 = fp;
0x08024e78 add sp, sp, 0x4c |
0x08024e7c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x08024e80 mov r1, r4 | r1 = r4;
0x08024e84 mov r0, 0 | r0 = 0;
0x08024e88 stmdaeq r3, {r2, r3, r5, r6, r7, sl, fp, ip, lr, pc} | __asm ("stmdaeq r3, {r2, r3, r5, r6, r7, sl, fp, ip, lr, pc}");
0x08024e8c b 0x8024cbc | goto label_1;
| label_13:
0x08024e90 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x08024e94 mov r2, r8 | r2 = r8;
0x08024e98 str r3, [sp, 8] | var_8h = r3;
0x08024e9c mov r1, r4 | r1 = r4;
0x08024ea0 ldr r3, [sp, 0x74] | r3 = *(arg_74h);
0x08024ea4 str r3, [sp, 4] | var_4h = r3;
0x08024ea8 mov r3, sb | r3 = sb;
0x08024eac ldr r0, [sp, 0x14] | r0 = var_14h;
0x08024eb0 str r7, [sp] | *(sp) = r7;
0x08024eb4 stmdaeq r1, {r3, r4, r5, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r1, {r3, r4, r5, r6, r7, r8, sl, fp, ip, pc}");
0x08024eb8 subs fp, r0, 0 |
| if (fp < r0) {
0x08024ebc blt 0x8024e00 | goto label_7;
| }
0x08024ec0 cmp fp, 1 |
| if (fp != 1) {
0x08024ec4 bne 0x8024ae0 | goto label_8;
| }
0x08024ec8 b 0x8024dfc | goto label_9;
| label_28:
0x08024ecc mov r0, r6 | r0 = r6;
0x08024ed0 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc}");
0x08024ed4 b 0x8024e70 | goto label_10;
| label_12:
0x08024ed8 mvn fp, 4 |
0x08024edc mov r0, fp | r0 = fp;
0x08024ee0 add sp, sp, 0x4c |
0x08024ee4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x08024ee8 udf 0x12 | __asm ("udf 0x12");
| label_17:
0x08024eec mov r0, r6 | r0 = r6;
0x08024ef0 ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x08024ef4 stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r5, r6, sb, sl, fp, ip, pc}");
0x08024ef8 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x08024efc tst r3, 1 |
| if ((r3 & 1) == 0) {
0x08024f00 subne r6, r3, 1 | r6 = r3 - 1;
| }
0x08024f04 add r3, r6, 0x1c | r3 = r6 + 0x1c;
0x08024f08 pld [r3] | __asm ("pld [r3]");
| do {
0x08024f0c ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x08024f10 sub r1, r1, 1 | r1--;
0x08024f14 strex r0, r1, [r3] | __asm ("strex r0, r1, [r3]");
0x08024f18 teq r0, 0 | __asm ("teq r0, 0");
0x08024f1c bne 0x8024f0c |
| } while ((r3 & 1) != 0);
0x08024f20 cmp r1, 0 |
0x08024f24 beq 0x8024f3c |
| while (1) {
0x08024f28 mov r2, fp | r2 = fp;
0x08024f2c movw r1, 0x4a7 | r1 = 0x4a7;
0x08024f30 ldr r0, [pc, 0x18] | r0 = *(0x8024f4c);
0x08024f34 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x08024f38 b 0x8024b04 | goto label_11;
0x08024f3c mov r0, r6 | r0 = r6;
0x08024f40 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sb, sl, fp, ip, pc}");
0x08024f44 b 0x8024f28 |
| }
| label_14:
0x08024f48 mvn fp, 0xb |
0x08024f4c b 0x8024e00 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x80230cc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.ext4_writepages () | void ext4_writepages (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_2bh;
| int32_t var_2ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_50h;
| int32_t var_64h;
| int32_t var_70h;
| int32_t var_78h;
| int32_t var_88h;
| int32_t var_94h;
| r0 = arg1;
| r1 = arg2;
0x080230cc push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x080230d0 mov r3, 0 | r3 = 0;
0x080230d4 mov r6, r1 | r6 = r1;
0x080230d8 ldr r5, [r0] | r5 = *(r0);
0x080230dc sub sp, sp, 0x94 |
0x080230e0 strb r3, [sp, 0x2b] | var_2bh = r3;
0x080230e4 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x080230e8 ldr sl, [r3, 0x1f8] | sl = *((r3 + 0x1f8));
0x080230ec ldr r1, [sl, 0x130] | r1 = *((sl + 0x130));
0x080230f0 ubfx r1, r1, 1, 1 | r1 = (r1 >> 1) & ((1 << 1) - 1);
0x080230f4 cmp r1, 0 |
| if (r1 != 0) {
0x080230f8 bne 0x80236b0 | goto label_16;
| }
0x080230fc mov r3, sp | r3 = sp;
0x08023100 mov r8, r0 | r8 = r0;
0x08023104 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08023108 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0802310c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08023110 add r2, r2, 1 | r2++;
0x08023114 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08023118 ldr r3, [sl, 0x2ec] | r3 = *((sl + 0x2ec));
0x0802311c cmp r3, 0 |
| if (r3 != 0) {
0x08023120 bne 0x80236c0 | goto label_17;
| }
0x08023124 mrs r1, apsr | r1 = apsr;
0x08023128 cpsid i | __asm ("cpsid i");
0x0802312c ldr r2, [sl, 0x304] | r2 = *((sl + 0x304));
0x08023130 ldr r3, [r2] | r3 = *(r2);
0x08023134 add r3, r3, 1 | r3++;
0x08023138 str r3, [r2] | *(r2) = r3;
0x0802313c msr cpsr_c, r1 | cpsr_c = r1;
| label_9:
0x08023140 mov r3, sp | r3 = sp;
0x08023144 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08023148 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x0802314c ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08023150 sub r2, r2, 1 | r2--;
0x08023154 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08023158 cmp r2, 0 |
| if (r2 == 0) {
0x0802315c beq 0x8023558 | goto label_18;
| }
| label_1:
0x08023160 ldr r4, [r8, 0x2c] | r4 = *((r8 + 0x2c));
0x08023164 cmp r4, 0 |
| if (r4 == 0) {
0x08023168 beq 0x8023178 | goto label_4;
| }
0x0802316c ldr r4, [r8, 4] | r4 = *((r8 + 4));
0x08023170 ands r4, r4, 0x800000 | r4 &= 0x800000;
0x08023174 bne 0x80231e4 |
| while (r0 > 0x1000) {
| label_4:
0x08023178 mov r3, sp | r3 = sp;
0x0802317c bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08023180 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08023184 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08023188 add r2, r2, 1 | r2++;
0x0802318c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08023190 ldr r3, [sl, 0x2ec] | r3 = *((sl + 0x2ec));
0x08023194 cmp r3, 0 |
| if (r3 != 0) {
0x08023198 bne 0x80236f4 | goto label_19;
| }
0x0802319c mrs r1, apsr | r1 = apsr;
0x080231a0 cpsid i | __asm ("cpsid i");
0x080231a4 ldr r2, [sl, 0x304] | r2 = *((sl + 0x304));
0x080231a8 ldr r3, [r2] | r3 = *(r2);
0x080231ac sub r3, r3, 1 | r3--;
0x080231b0 str r3, [r2] | *(r2) = r3;
0x080231b4 msr cpsr_c, r1 | cpsr_c = r1;
| label_11:
0x080231b8 mov r3, sp | r3 = sp;
0x080231bc bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x080231c0 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x080231c4 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x080231c8 sub r2, r2, 1 | r2--;
0x080231cc str r2, [r3, 4] | *((r3 + 4)) = r2;
0x080231d0 cmp r2, 0 |
| if (r2 == 0) {
0x080231d4 beq 0x802356c | goto label_20;
| }
| label_2:
0x080231d8 mov r0, r4 | r0 = r4;
0x080231dc add sp, sp, 0x94 |
0x080231e0 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x080231e4 mov r0, r5 | r0 = r5;
0x080231e8 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x080231ec ands r3, r0, 1 | r3 = r0 & 1;
0x080231f0 str r3, [sp, 0x20] | var_20h = r3;
| if (r3 != r0) {
0x080231f4 bne 0x802371c | goto label_21;
| }
0x080231f8 ldr r3, [r8] | r3 = *(r8);
0x080231fc ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x08023200 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08023204 ldr r3, [r3, 0x130] | r3 = *((r3 + 0x130));
0x08023208 tst r3, 2 |
| if ((r3 & 2) != 0) {
0x0802320c bne 0x8023778 | goto label_22;
| }
0x08023210 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x08023214 ldr r3, [r0, 0x1f8] | r3 = *((r0 + 0x1f8));
0x08023218 ldr fp, [r3, 0x54] | fp = *((r3 + 0x54));
0x0802321c ubfx fp, fp, 1, 1 | fp = (fp >> 1) & ((1 << 1) - 1);
0x08023220 cmp fp, 0 |
| if (fp != 0) {
0x08023224 bne 0x8023778 | goto label_22;
| }
0x08023228 ldr r2, [r5, -0x6c] | r2 = *((r5 - 0x6c));
0x0802322c tst r2, 0x10000000 |
| if ((r2 & 0x10000000) == 0) {
0x08023230 beq 0x802329c | goto label_23;
| }
0x08023234 movw r2, 0x1be | r2 = 0x1be;
0x08023238 ldrh r2, [r5, r2] | r2 = *((r5 + r2));
0x0802323c cmp r2, 0 |
| if (r2 == 0) {
0x08023240 beq 0x802329c | goto label_23;
| }
0x08023244 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x08023248 movw r1, 0xa8c | r1 = 0xa8c;
0x0802324c str fp, [sp] | *(sp) = fp;
0x08023250 lsl r3, r3, 3 | r3 <<= 3;
0x08023254 str r3, [sp, 4] | var_4h = r3;
0x08023258 mov r3, 1 | r3 = 1;
0x0802325c mov r2, r3 | r2 = r3;
0x08023260 stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x08023264 mov r4, r0 | r4 = r0;
0x08023268 cmn r0, 0x1000 |
0x0802326c bhi 0x8023178 |
| }
0x08023270 ldr r3, [r5, -0x70] | r3 = *((r5 - 0x70));
0x08023274 tst r3, 0x80 |
| if ((r3 & 0x80) != 0) {
0x08023278 bne 0x8023650 | goto label_24;
| }
0x0802327c mov r1, r5 | r1 = r5;
0x08023280 stmdaeq r1, {r2, r6, r7, r8, sl, fp, ip, sp, pc} | __asm ("stmdaeq r1, {r2, r6, r7, r8, sl, fp, ip, sp, pc}");
0x08023284 ldr r0, [pc, 0x528] | r0 = *(0x80237b0);
0x08023288 mov r2, r4 | r2 = r4;
0x0802328c movw r1, 0xa94 | r1 = 0xa94;
0x08023290 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x08023294 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08023298 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
| label_23:
0x0802329c ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x080232a0 tst r3, 0x400000 |
| if ((r3 & 0x400000) != 0) {
0x080232a4 beq 0x80232c4 |
0x080232a8 ldrh r3, [r5] | r3 = *(r5);
0x080232ac and r3, r3, 0xf000 | r3 &= 0xf000;
0x080232b0 cmp r3, 0x8000 |
| if (r3 != 0x8000) {
0x080232b4 bne 0x80232c4 | goto label_12;
| }
0x080232b8 ldr r3, [r5, -0x6c] | r3 = *((r5 - 0x6c));
0x080232bc tst r3, 0x80000 |
| if ((r3 & 0x80000) != 0) {
0x080232c0 bne 0x8023730 | goto label_25;
| }
| }
| label_12:
0x080232c4 mov r3, 0 | r3 = 0;
0x080232c8 str r3, [sp, 0x14] | var_14h = r3;
| label_13:
0x080232cc ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x080232d0 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x080232d4 orrs r1, r3, r2 | r1 = r3 | r2;
| if (r1 == r3) {
0x080232d8 bne 0x80232f4 |
0x080232dc ldrd r0, r1, [r6, 0x10] | __asm ("ldrd r0, r1, [r6, 0x10]");
0x080232e0 cmn r1, 0x80000001 |
0x080232e4 cmneq r0, 1 | __asm ("cmneq r0, 1");
| if (r1 != 0x80000001) {
0x080232e8 moveq r1, 1 | r1 = 1;
| }
| if (r1 == 0x80000001) {
0x080232ec movne r1, 0 | r1 = 0;
| }
0x080232f0 str r1, [sp, 0x20] | var_20h = r1;
| }
0x080232f4 ldrb r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x080232f8 tst r1, 0x10 |
| if ((r1 & 0x10) == 0) {
0x080232fc beq 0x80236cc | goto label_26;
| }
0x08023300 ldr fp, [r8, 0x34] | fp = *((r8 + 0x34));
0x08023304 mvn r3, 0 | r3 = ~0;
0x08023308 str fp, [sp, 0x48] | var_48h = fp;
0x0802330c clz r2, fp | r2 &= fp;
0x08023310 lsr r2, r2, 5 | r2 >>= 5;
0x08023314 str r2, [sp, 0x18] | var_18h = r2;
| label_10:
0x08023318 mov r4, fp | r4 = fp;
0x0802331c mov r1, r6 | r1 = r6;
0x08023320 add r0, sp, 0x70 | r0 += var_70h;
0x08023324 str r3, [sp, 0x50] | var_50h = r3;
0x08023328 str r5, [sp, 0x40] | var_40h = r5;
0x0802332c str r6, [sp, 0x44] | var_44h = r6;
0x08023330 stmdaeq r3, {r2, r3, r5, r7, r8, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r2, r3, r5, r7, r8, ip, sp, lr, pc}");
| label_0:
0x08023334 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x08023338 cmp r3, 1 |
| if (r3 != 1) {
0x0802333c beq 0x802334c |
0x08023340 ldrb r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x08023344 tst r3, 4 |
| if ((r3 & 4) == 0) {
0x08023348 beq 0x802335c | goto label_27;
| }
| }
0x0802334c ldr r2, [sp, 0x50] | r2 = var_50h;
0x08023350 mov r0, r8 | r0 = r8;
0x08023354 ldr r1, [sp, 0x48] | r1 = var_48h;
0x08023358 stmdaeq r8, {r0, r1, r3, r4, r5, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r5, r8, sb, sl, fp, ip, pc}");
| label_27:
0x0802335c add r0, sp, 0x2c | r0 += var_2ch;
0x08023360 stmdaeq r8, {r0, r1, r3, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r4, r6, r7, sb, sl, fp, ip, pc}");
0x08023364 ldrb r3, [sp, 0x88] | r3 = var_88h;
0x08023368 mov r0, r5 | r0 = r5;
0x0802336c mov r1, 0xcc0 | r1 = 0xcc0;
0x08023370 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x08023374 strb r3, [sp, 0x88] | var_88h = r3;
0x08023378 stmdaeq r3, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc}");
0x0802337c cmp r0, 0 |
0x08023380 str r0, [sp, 0x78] | var_78h = r0;
| if (r0 == 0) {
0x08023384 beq 0x8023628 | goto label_28;
| }
0x08023388 add r0, sp, 0x40 | r0 += var_40h;
0x0802338c bl 0x801db78 | mpage_prepare_extent_to_map ();
0x08023390 mov r1, 0 | r1 = 0;
0x08023394 mov fp, r0 |
0x08023398 add r0, sp, 0x40 | r0 += var_40h;
0x0802339c bl 0x801c830 | mpage_release_unused_pages ();
0x080233a0 add r0, sp, 0x70 | r0 += var_70h;
0x080233a4 stmdaeq r3, {r4, r6, r8, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r4, r6, r8, ip, sp, lr, pc}");
0x080233a8 ldr r0, [sp, 0x78] | r0 = var_78h;
0x080233ac stmdaeq r3, {r6, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r6, r8, sl, fp, sp, lr, pc}");
0x080233b0 mov r2, 0 | r2 = 0;
0x080233b4 cmp fp, 0 |
0x080233b8 str r2, [sp, 0x78] | var_78h = r2;
| if (fp < 0) {
0x080233bc blt 0x802360c | goto label_29;
| }
0x080233c0 ldrb lr, [sp, 0x88] | lr = var_88h;
0x080233c4 ands lr, lr, 2 | lr &= 2;
| if (lr != lr) {
0x080233c8 streq r4, [sp, 0x24] | var_24h = r4;
| }
| if (lr != lr) {
0x080233cc streq r8, [sp, 0x1c] | var_1ch = r8;
| }
| if (lr != lr) {
0x080233d0 moveq r4, lr | r4 = lr;
| }
| if (lr != lr) {
0x080233d4 bne 0x8023788 | goto label_30;
| }
| do {
0x080233d8 ldr r3, [r6] | r3 = *(r6);
0x080233dc cmp r3, 0 |
| if (r3 <= 0) {
0x080233e0 ble 0x8023780 | goto label_31;
| }
0x080233e4 mov r0, r5 | r0 = r5;
0x080233e8 mov r1, 0xcc0 | r1 = 0xcc0;
0x080233ec stmdaeq r3, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r3, r4, r5, r6, r7, sl, fp, sp, lr, pc}");
0x080233f0 cmp r0, 0 |
0x080233f4 str r0, [sp, 0x78] | var_78h = r0;
| if (r0 == 0) {
0x080233f8 beq 0x80237a0 | goto label_32;
| }
0x080233fc mov r0, r5 | r0 = r5;
0x08023400 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08023404 ands fp, r0, 1 |
| if (fp != r0) {
0x08023408 bne 0x8023650 | goto label_24;
| }
0x0802340c ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08023410 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08023414 ldr r3, [r3, 0x118] | r3 = *((r3 + 0x118));
0x08023418 cmp r3, 0 |
| if (r3 != 0) {
0x0802341c moveq r2, fp | r2 = fp;
| }
0x08023420 movweq r1, 0x7ff | __asm ("movweq r1, 0x7ff");
| if (r3 != 0) {
0x08023424 beq 0x802343c |
0x08023428 mov r0, r5 | r0 = r5;
0x0802342c stmdaeq r8, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r8, sb, sl, fp, ip, pc}");
0x08023430 add r1, r0, 0x7f0 | r1 = r0 + 0x7f0;
0x08023434 mov r2, r0 | r2 = r0;
0x08023438 add r1, r1, 0xf | r1 += 0xf;
| }
0x0802343c mov r0, r5 | r0 = r5;
0x08023440 bl 0x801c7cc | r0 = ext4_meta_trans_blocks ();
0x08023444 mov r3, r0 | r3 = r0;
0x08023448 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x0802344c mov r2, 2 | r2 = 2;
0x08023450 ldr lr, [sp, 0x14] | lr = var_14h;
0x08023454 mov r1, 0xae0 | r1 = 0xae0;
0x08023458 ldr ip, [r0, 0x1f8] | ip = *((r0 + 0x1f8));
0x0802345c ldr ip, [ip, 0x2c] | ip = *((ip + 0x2c));
0x08023460 str lr, [sp] |
0x08023464 lsl ip, ip, 3 |
0x08023468 str ip, [sp, 4] | var_4h = ip;
0x0802346c stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp} | __asm ("stmdaeq r0, {r2, r3, r7, r8, fp, ip, sp}");
0x08023470 mov r7, r0 | r7 = r0;
0x08023474 cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x08023478 bhi 0x802365c | goto label_33;
| }
0x0802347c ldrb r3, [sp, 0x88] | r3 = var_88h;
0x08023480 add r0, sp, 0x40 | r0 += var_40h;
0x08023484 orr r3, r3, 1 | r3 |= 1;
0x08023488 strb r3, [sp, 0x88] | var_88h = r3;
0x0802348c bl 0x801db78 | mpage_prepare_extent_to_map ();
0x08023490 subs sb, r0, 0 | sb -= var_40h;
| if (sb == var_40h) {
0x08023494 bne 0x80234a4 |
0x08023498 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0802349c cmp r3, 0 |
| if (r3 != 0) {
0x080234a0 bne 0x8023638 | goto label_34;
| }
| }
| label_7:
0x080234a4 ldrb r8, [sp, 0x2b] | r8 = var_2bh;
0x080234a8 cmp r7, 0x1000 |
| if (r7 > 0x1000) {
0x080234ac blo 0x80234bc |
0x080234b0 ldrb r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x080234b4 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x080234b8 bne 0x8023588 | goto label_35;
| }
| }
0x080234bc mov r2, r7 | r2 = r7;
0x080234c0 movw r1, 0xafe | r1 = 0xafe;
0x080234c4 ldr r0, [pc, 0x2e8] | r0 = *(0x80237b0);
0x080234c8 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x080234cc ldrb r3, [sp, 0x88] | r3 = var_88h;
0x080234d0 mov r1, r8 | r1 = r8;
0x080234d4 add r0, sp, 0x40 | r0 += var_40h;
0x080234d8 bfc r3, 0, 1 | value_0 = BIT_MASK (1, );
| value_0 = ~value_0;
| r3 &= value_0;
0x080234dc strb r3, [sp, 0x88] | var_88h = r3;
0x080234e0 bl 0x801c830 | mpage_release_unused_pages ();
0x080234e4 add r0, sp, 0x70 | r0 += var_70h;
0x080234e8 stmdaeq r3, {r4, r6, r8, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r4, r6, r8, ip, sp, lr, pc}");
0x080234ec ldr r0, [sp, 0x78] | r0 = var_78h;
0x080234f0 stmdaeq r3, {r2, r4, r6, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r2, r4, r6, ip, sp, lr, pc}");
0x080234f4 cmn sb, 0x1c |
0x080234f8 str r4, [sp, 0x78] | var_78h = r4;
| if (sb == 0x1c) {
0x080234fc beq 0x80235c0 | goto label_36;
| }
| label_3:
0x08023500 cmp sb, 0 |
| if (sb != 0) {
0x08023504 bne 0x80235cc | goto label_37;
| }
| label_8:
0x08023508 ldrb r3, [sp, 0x88] | r3 = var_88h;
0x0802350c tst r3, 2 |
0x08023510 beq 0x80233d8 |
| } while ((r3 & 2) == 0);
0x08023514 ldr r4, [sp, 0x24] | r4 = var_24h;
0x08023518 mov r7, 0 | r7 = 0;
0x0802351c ldr r8, [sp, 0x1c] | r8 = var_1ch;
0x08023520 ldr fp, [sp, 0x18] | fp = var_18h;
| label_14:
0x08023524 add r0, sp, 0x2c | r0 += var_2ch;
0x08023528 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc}");
0x0802352c cmp fp, 0 |
| if (fp != 0) {
0x08023530 bne 0x80237ac | goto label_38;
| }
0x08023534 ldr r2, [r6] | r2 = *(r6);
0x08023538 cmp r2, 0 |
| if (r2 <= 0) {
0x0802353c ble 0x8023798 | goto label_39;
| }
0x08023540 sub r3, r4, 1 | r3 = r4 - 1;
0x08023544 str fp, [sp, 0x48] | var_48h = fp;
0x08023548 str r3, [sp, 0x50] | var_50h = r3;
0x0802354c mov r3, 1 | r3 = 1;
0x08023550 str r3, [sp, 0x18] | var_18h = r3;
0x08023554 b 0x8023334 | goto label_0;
| label_18:
0x08023558 ldr r3, [r3] | r3 = *(r3);
0x0802355c tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08023560 beq 0x8023160 | goto label_1;
| }
0x08023564 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x08023568 b 0x8023160 | goto label_1;
| label_20:
0x0802356c ldr r3, [r3] | r3 = *(r3);
0x08023570 tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08023574 beq 0x80231d8 | goto label_2;
| }
0x08023578 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x0802357c mov r0, r4 | r0 = r4;
0x08023580 add sp, sp, 0x94 |
0x08023584 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_35:
0x08023588 mov r1, r8 | r1 = r8;
0x0802358c add r0, sp, 0x40 | r0 += var_40h;
0x08023590 bl 0x801c830 | mpage_release_unused_pages ();
0x08023594 add r0, sp, 0x70 | r0 += var_70h;
0x08023598 stmdaeq r3, {r4, r6, r8, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r4, r6, r8, ip, sp, lr, pc}");
0x0802359c ldr r0, [sp, 0x78] | r0 = var_78h;
0x080235a0 stmdaeq r3, {r6, r8, sl, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r6, r8, sl, fp, sp, lr, pc}");
0x080235a4 ldr r0, [pc, 0x208] | r0 = *(0x80237b0);
0x080235a8 mov r2, r7 | r2 = r7;
0x080235ac mov r1, 0xb10 | r1 = 0xb10;
0x080235b0 stmdaeq r0, {r5, r7, sb, fp, ip, sp} | __asm ("stmdaeq r0, {r5, r7, sb, fp, ip, sp}");
0x080235b4 cmn sb, 0x1c |
0x080235b8 str r4, [sp, 0x78] | var_78h = r4;
| if (sb != 0x1c) {
0x080235bc bne 0x8023500 | goto label_3;
| }
| label_36:
0x080235c0 ldr r0, [sl, 0x118] | r0 = *((sl + 0x118));
0x080235c4 cmp r0, 0 |
| if (r0 != 0) {
0x080235c8 bne 0x8023654 | goto label_40;
| }
| label_37:
0x080235cc ldr r8, [sp, 0x1c] | r8 = var_1ch;
| label_15:
0x080235d0 mov r4, sb | r4 = sb;
0x080235d4 add r0, sp, 0x2c | r0 += var_2ch;
0x080235d8 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc}");
| label_6:
0x080235dc ldrb r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x080235e0 tst r3, 0x10 |
| if ((r3 & 0x10) != 0) {
0x080235e4 bne 0x8023600 | goto label_41;
| }
| label_5:
0x080235e8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x080235ec cmp r3, 0 |
| if (r3 == 0) {
0x080235f0 beq 0x8023178 | goto label_4;
| }
0x080235f4 ldr r3, [r6] | r3 = *(r6);
0x080235f8 cmp r3, 0 |
| if (r3 <= 0) {
0x080235fc ble 0x8023178 | goto label_4;
| }
| do {
| label_41:
0x08023600 ldr r3, [sp, 0x48] | r3 = var_48h;
0x08023604 str r3, [r8, 0x34] | *((r8 + 0x34)) = r3;
0x08023608 b 0x8023178 | goto label_4;
| label_29:
0x0802360c add r0, sp, 0x2c | r0 += var_2ch;
0x08023610 mov r4, fp | r4 = fp;
0x08023614 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc}");
0x08023618 ldrb r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0802361c tst r3, 0x10 |
0x08023620 bne 0x8023600 |
| } while ((r3 & 0x10) != 0);
0x08023624 b 0x80235e8 | goto label_5;
| label_28:
0x08023628 add r0, sp, 0x2c | r0 += var_2ch;
0x0802362c mvn r4, 0xb | r4 = ~0xb;
0x08023630 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc}");
0x08023634 b 0x80235dc | goto label_6;
| label_34:
0x08023638 add r2, sp, 0x2b | r2 += var_2bh;
0x0802363c add r1, sp, 0x40 | r1 += var_40h;
0x08023640 mov r0, r7 | r0 = r7;
0x08023644 bl 0x802294c | r0 = mpage_map_and_submit_extent ();
0x08023648 mov sb, r0 | sb = r0;
0x0802364c b 0x80234a4 | goto label_7;
| label_24:
0x08023650 udf 0x12 | __asm ("udf 0x12");
| label_40:
0x08023654 stmdaeq r8, {r0, r1, r2, r4, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, sl, fp, ip, pc}");
0x08023658 b 0x8023508 | goto label_8;
| label_33:
0x0802365c mov r4, r0 | r4 = r0;
0x08023660 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x08023664 str r7, [sp, 8] | var_8h = r7;
0x08023668 stmdaeq r5, {r2, r3, r5, r8, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r8, sb, fp, ip, sp, pc}");
0x0802366c stmdaeq r5, {r2, r3, r5, r8, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r8, sb, fp, ip, sp, pc}");
0x08023670 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08023674 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08023678 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0802367c str r3, [sp, 4] | var_4h = r3;
0x08023680 ldr r8, [sp, 0x1c] | r8 = var_1ch;
0x08023684 ldr r3, [r6] | r3 = *(r6);
0x08023688 str r3, [sp] | *(sp) = r3;
0x0802368c ldr r3, [pc, 0x120] | r3 = *(0x80237b0);
0x08023690 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08023694 ldr r0, [sp, 0x78] | r0 = var_78h;
0x08023698 stmdaeq r3, {r2, r4, r6, ip, sp, lr, pc} | __asm ("stmdaeq r3, {r2, r4, r6, ip, sp, lr, pc}");
0x0802369c add r0, sp, 0x2c | r0 += var_2ch;
0x080236a0 mov r3, 0 | r3 = 0;
0x080236a4 str r3, [sp, 0x78] | var_78h = r3;
0x080236a8 stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r6, r7, sb, sl, fp, ip, pc}");
0x080236ac b 0x80235dc | goto label_6;
| label_16:
0x080236b0 mvn r4, 4 | r4 = ~4;
0x080236b4 mov r0, r4 | r0 = r4;
0x080236b8 add sp, sp, 0x94 |
0x080236bc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x080236c0 add r0, sl, 0x2ec | r0 = sl + 0x2ec;
0x080236c4 stmdaeq r8, {r0, r1, r4, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r6, r7, r8, sl, fp, ip, pc}");
0x080236c8 b 0x8023140 | goto label_9;
| label_26:
0x080236cc lsr r3, r3, 0xc | r3 >>= 0xc;
0x080236d0 orr r3, r3, r2, lsl 20 | r3 |= (r2 << 20);
0x080236d4 str r3, [sp, 0x48] | var_48h = r3;
0x080236d8 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x080236dc ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x080236e0 lsr r3, r3, 0xc | r3 >>= 0xc;
0x080236e4 orr r3, r3, r2, lsl 20 | r3 |= (r2 << 20);
0x080236e8 mov r2, 1 | r2 = 1;
0x080236ec str r2, [sp, 0x18] | var_18h = r2;
0x080236f0 b 0x8023318 | goto label_10;
| label_19:
0x080236f4 mrs r1, apsr | r1 = apsr;
0x080236f8 cpsid i | __asm ("cpsid i");
0x080236fc ldr r2, [sl, 0x304] | r2 = *((sl + 0x304));
0x08023700 ldr r3, [r2] | r3 = *(r2);
0x08023704 sub r3, r3, 1 | r3--;
0x08023708 str r3, [r2] | *(r2) = r3;
0x0802370c msr cpsr_c, r1 | cpsr_c = r1;
0x08023710 add r0, sl, 0x308 | r0 = sl + 0x308;
0x08023714 stmdaeq r8, {r0, r1, r2, r4, r6, r7, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r6, r7, r8, sl, fp, ip, pc}");
0x08023718 b 0x80231b8 | goto label_11;
| label_21:
0x0802371c mov r1, r6 | r1 = r6;
0x08023720 mov r0, r8 | r0 = r8;
0x08023724 stmdaeq r8, {r0, r1, r2, r3, r4, r5, r8, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r5, r8, sb, sl, fp, ip, pc}");
0x08023728 mov r4, r0 | r4 = r0;
0x0802372c b 0x8023178 | goto label_4;
| label_25:
0x08023730 mov r0, r5 | r0 = r5;
0x08023734 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08023738 tst r0, 1 |
| if ((r0 & 1) != 0) {
0x0802373c bne 0x80232c4 | goto label_12;
| }
0x08023740 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x08023744 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08023748 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x0802374c tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x08023750 beq 0x80232c4 | goto label_12;
| }
0x08023754 ldrb r3, [r5, 0x72] | r3 = *((r5 + 0x72));
0x08023758 mov r1, 0x1000 | r1 = 0x1000;
0x0802375c mov r0, r5 | r0 = r5;
0x08023760 mov r2, 1 | r2 = 1;
0x08023764 lsr r1, r1, r3 | r1 >>= r3;
0x08023768 bl 0x801c7cc | r0 = ext4_meta_trans_blocks ();
0x0802376c add r3, r0, 1 | r3 = r0 + 1;
0x08023770 str r3, [sp, 0x14] | var_14h = r3;
0x08023774 b 0x80232cc | goto label_13;
| label_22:
0x08023778 mvn r4, 0x1d | r4 = ~0x1d;
0x0802377c b 0x8023178 | goto label_4;
| label_31:
0x08023780 ldr r4, [sp, 0x24] | r4 = var_24h;
0x08023784 ldr r8, [sp, 0x1c] | r8 = var_1ch;
| label_30:
0x08023788 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0802378c mov r7, fp | r7 = fp;
0x08023790 orr fp, r3, fp |
0x08023794 b 0x8023524 | goto label_14;
| label_39:
0x08023798 mov r4, fp | r4 = fp;
0x0802379c b 0x80235dc | goto label_6;
| label_32:
0x080237a0 ldr r8, [sp, 0x1c] | r8 = var_1ch;
0x080237a4 mvn sb, 0xb | sb = ~0xb;
0x080237a8 b 0x80235d0 | goto label_15;
| label_38:
0x080237ac mov r4, r7 | r4 = r7;
0x080237b0 b 0x80235dc | goto label_6;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x802294c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.mpage_map_and_submit_extent () | void mpage_map_and_submit_extent (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_sp_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_4h_2;
| int32_t var_84h;
| r0 = arg1;
| r1 = arg2;
0x0802294c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08022950 mov r8, r0 | r8 = r0;
0x08022954 mov sl, r1 | sl = r1;
0x08022958 ldr r0, [r1, 0x38] | r0 = *((r1 + 0x38));
0x0802295c sub sp, sp, 0x84 |
0x08022960 ldr r5, [r1] | r5 = *(r1);
0x08022964 mov r7, r2 | r7 = r2;
0x08022968 stmdaeq r3, {r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r8, sb, fp, sp, lr, pc}");
0x0802296c cmn r0, 0x1000 |
| if (r0 <= 0x1000) {
0x08022970 movhi fp, r0 |
| }
| if (r0 > 0x1000) {
0x08022974 bhi 0x8022d5c | goto label_10;
| }
0x08022978 ldrb r1, [r5, 0x72] | r1 = *((r5 + 0x72));
0x0802297c add r2, sl, 0x18 | r2 = sl + 0x18;
0x08022980 ldr r3, [sl, 0x20] | r3 = *((sl + 0x20));
0x08022984 mov r6, 0 | r6 = 0;
0x08022988 str r2, [sp, 0x28] | var_28h = r2;
0x0802298c sub r2, r1, 0x20 | r2 = r1 - 0x20;
0x08022990 rsb ip, r1, 0x20 |
0x08022994 str r8, [sp, 0x24] | var_24h = r8;
0x08022998 lsl r2, r3, r2 | r2 = r3 << r2;
0x0802299c mov r8, sl | r8 = sl;
0x080229a0 orr r2, r2, r3, lsr ip | r2 |= (r3 >> ip);
0x080229a4 str r5, [sp, 0x2c] | var_2ch = r5;
0x080229a8 lsl r3, r3, r1 | r3 <<= r1;
0x080229ac str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x080229b0 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x080229b4 str r7, [sp, 0x34] | var_34h = r7;
| label_2:
0x080229b8 ldr r7, [r8] | r7 = *(r8);
0x080229bc ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x080229c0 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x080229c4 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x080229c8 tst r3, 0x400000 |
| if ((r3 & 0x400000) != 0) {
0x080229cc beq 0x80229e0 |
0x080229d0 ldrh r3, [r7] | r3 = *(r7);
0x080229d4 and r3, r3, 0xf000 | r3 &= 0xf000;
0x080229d8 cmp r3, 0x8000 |
| if (r3 == 0x8000) {
0x080229dc beq 0x8022d68 | goto label_16;
| }
| }
| label_6:
0x080229e0 mov r4, 0 | r4 = 0;
0x080229e4 movw r3, 0x421 | r3 = 0x421;
| label_7:
0x080229e8 ldr r2, [r8, 0x28] | r2 = *((r8 + 0x28));
0x080229ec mov r1, r7 | r1 = r7;
0x080229f0 ldr r0, [sp, 0x24] | r0 = var_24h;
0x080229f4 tst r2, 0x100 |
0x080229f8 ldr r2, [sp, 0x28] | r2 = var_28h;
| if ((r2 & 0x100) == 0) {
0x080229fc orrne r3, r3, 4 | r3 |= 4;
| }
0x08022a00 stmdaeq r1, {r5, r6, r7, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r1, {r5, r6, r7, r8, sb, fp, sp, lr, pc}");
0x08022a04 cmp r0, 0 |
| if (r0 < 0) {
0x08022a08 blt 0x8022de8 | goto label_17;
| }
0x08022a0c cmp r4, 0 |
| if (r4 != 0) {
0x08022a10 beq 0x8022a20 |
0x08022a14 ldr r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x08022a18 tst r3, 0x800 |
| if ((r3 & 0x800) != 0) {
0x08022a1c bne 0x8022da4 | goto label_18;
| }
| }
| label_8:
0x08022a20 ldr r2, [r8, 0x24] | r2 = *((r8 + 0x24));
0x08022a24 cmp r2, 0 |
| if (r2 == 0) {
0x08022a28 beq 0x8022c20 | goto label_19;
| }
0x08022a2c ldr r7, [r8] | r7 = *(r8);
0x08022a30 ldr r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x08022a34 ldr r6, [r8, 0x18] | r6 = *((r8 + 0x18));
0x08022a38 mov r5, r7 | r5 = r7;
0x08022a3c ldrb r4, [r7, 0x72] | r4 = *((r7 + 0x72));
0x08022a40 add r2, r2, r3 | r2 += r3;
0x08022a44 sub r2, r2, 1 | r2--;
0x08022a48 ldr sl, [r8, 0x1c] | sl = *((r8 + 0x1c));
0x08022a4c rsb r4, r4, 0xc | r4 = 0xc - r4;
0x08022a50 lsr r3, r3, r4 | r3 >>= r4;
0x08022a54 str r3, [sp, 0x3c] | var_3ch = r3;
0x08022a58 lsr r2, r2, r4 | r2 >>= r4;
0x08022a5c str r2, [sp, 0x20] | var_20h = r2;
0x08022a60 lsl r4, r3, r4 | r4 = r3 << r4;
0x08022a64 mov r2, 0 | r2 = 0;
0x08022a68 strh r2, [sp, 0x40] | var_40h = r2;
| label_1:
0x08022a6c ldr r2, [sp, 0x20] | r2 = var_20h;
0x08022a70 cmp r3, r2 |
| if (r3 > r2) {
0x08022a74 bhi 0x8022e74 | goto label_20;
| }
0x08022a78 ldr r3, [sp, 0x20] | r3 = var_20h;
0x08022a7c add r2, sp, 0x3c | r2 += var_3ch;
0x08022a80 ldr r1, [r5, 0x20] | r1 = *((r5 + 0x20));
0x08022a84 add r0, sp, 0x40 | r0 += var_40h;
0x08022a88 stmdaeq r8, {r0, r1, r4, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r4, r7, sb, sl, fp, ip, pc}");
0x08022a8c subs r3, r0, 0 | r3 -= var_40h;
0x08022a90 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r3 == var_40h) {
0x08022a94 beq 0x8022e74 | goto label_20;
| }
| if (r3 <= var_40h) {
0x08022a98 ble 0x8022b9c | goto label_21;
| }
0x08022a9c add fp, sp, 0x40 |
0x08022aa0 mov sb, 0 | sb = 0;
0x08022aa4 mov r7, fp | r7 = fp;
0x08022aa8 str r5, [sp, 0x30] | var_30h = r5;
| label_0:
0x08022aac ldr r3, [r8] | r3 = *(r8);
0x08022ab0 ldr r5, [r7, 4]! | r5 = var_4h_2;
0x08022ab4 ldr r0, [r8, 0x38] | r0 = *((r8 + 0x38));
0x08022ab8 ldrb r3, [r3, 0x72] | r3 = *((r3 + 0x72));
0x08022abc str r0, [sp, 0x18] | var_18h = r0;
0x08022ac0 str r3, [sp, 0x14] | var_14h = r3;
0x08022ac4 stmdaeq r3, {r6, r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r6, r8, sb, fp, sp, lr, pc}");
0x08022ac8 ldr lr, [r5] |
0x08022acc mvn lr, lr, lsr 13 | lr = ~lr;
0x08022ad0 ands lr, lr, 1 | lr &= 1;
| if (lr != lr) {
0x08022ad4 bne 0x8022c20 | goto label_19;
| }
0x08022ad8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x08022adc mov r3, 1 | r3 = 1;
0x08022ae0 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x08022ae4 lsl fp, r3, r2 |
0x08022ae8 mov r2, r1 | r2 = r1;
| do {
0x08022aec ldr r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x08022af0 cmp r3, r4 |
| if (r3 <= r4) {
0x08022af4 bhi 0x8022b58 |
0x08022af8 ldr ip, [r8, 0x24] | ip = *((r8 + 0x24));
0x08022afc add r3, r3, ip | r3 += ip;
0x08022b00 cmp r4, r3 |
| if (r4 >= r3) {
0x08022b04 bhs 0x8022bb0 | goto label_22;
| }
0x08022b08 ldr r3, [r2] | r3 = *(r2);
0x08022b0c tst r3, 0x100 |
| if ((r3 & 0x100) != 0) {
0x08022b10 beq 0x8022b3c |
0x08022b14 mrs ip, apsr | ip = apsr;
0x08022b18 cpsid i | __asm ("cpsid i");
0x08022b1c ldr r3, [r2] | r3 = *(r2);
0x08022b20 bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x08022b24 str r3, [r2] | *(r2) = r3;
0x08022b28 msr cpsr_c, ip | cpsr_c = ip;
0x08022b2c str r6, [r2, 0x10] | *((r2 + 0x10)) = r6;
0x08022b30 adds r6, r6, 1 | r6++;
0x08022b34 str sl, [r2, 0x14] | *((r2 + 0x14)) = sl;
0x08022b38 adc sl, sl, 0 | __asm ("adc sl, sl, 0");
| }
0x08022b3c mrs ip, apsr | ip = apsr;
0x08022b40 cpsid i | __asm ("cpsid i");
0x08022b44 ldr r3, [r2] | r3 = *(r2);
0x08022b48 bic r3, r3, 0x800 | r3 = BIT_MASK (r3, 0x800);
0x08022b4c str r3, [r2] | *(r2) = r3;
0x08022b50 msr cpsr_c, ip | cpsr_c = ip;
0x08022b54 add lr, lr, fp | lr += fp;
| }
0x08022b58 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x08022b5c add r4, r4, 1 | r4++;
0x08022b60 cmp r1, r2 |
0x08022b64 bne 0x8022aec |
| } while (r1 != r2);
0x08022b68 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x08022b6c add r3, r3, lr | r3 += lr;
0x08022b70 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| label_5:
0x08022b74 mov r1, r5 | r1 = r5;
0x08022b78 mov r0, r8 | r0 = r8;
0x08022b7c bl 0x801d8e0 | r0 = mpage_submit_page ();
0x08022b80 cmp r0, 0 |
| if (r0 < 0) {
0x08022b84 blt 0x8022c88 | goto label_23;
| }
0x08022b88 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x08022b8c add sb, sb, 1 | sb++;
0x08022b90 cmp r3, sb |
| if (r3 != sb) {
0x08022b94 bne 0x8022aac | goto label_0;
| }
0x08022b98 ldr r5, [sp, 0x30] | r5 = var_30h;
| label_21:
0x08022b9c ldrb r3, [sp, 0x40] | r3 = var_40h;
0x08022ba0 cmp r3, 0 |
| if (r3 != 0) {
0x08022ba4 bne 0x8022e68 | goto label_24;
| }
| label_12:
0x08022ba8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x08022bac b 0x8022a6c | goto label_1;
| label_22:
0x08022bb0 mov r3, 0 | r3 = 0;
0x08022bb4 str r3, [r8, 0x24] | *((r8 + 0x24)) = r3;
0x08022bb8 str r3, [r8, 0x28] | *((r8 + 0x28)) = r3;
0x08022bbc ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x08022bc0 add r3, r3, lr | r3 += lr;
0x08022bc4 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x08022bc8 mov r3, r4 | r3 = r4;
0x08022bcc mov r0, r8 | r0 = r8;
0x08022bd0 bl 0x801d9b8 | r0 = mpage_process_page_bufs ();
0x08022bd4 cmp r0, 0 |
| if (r0 < 0) {
0x08022bd8 blt 0x8022c88 | goto label_23;
| }
0x08022bdc ldr r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x08022be0 cmp r3, 0 |
| if (r3 != 0) {
0x08022be4 beq 0x8022bf4 |
0x08022be8 ldr r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x08022bec cmp r4, r3 |
| if (r4 <= r3) {
0x08022bf0 blo 0x8022c24 | goto label_25;
| }
| }
0x08022bf4 ldrb r3, [sp, 0x40] | r3 = var_40h;
0x08022bf8 cmp r3, 0 |
| if (r3 != 0) {
0x08022bfc bne 0x8022c64 | goto label_26;
| }
| label_3:
0x08022c00 ldr r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x08022c04 mov r6, 1 | r6 = 1;
0x08022c08 cmp r3, 0 |
| if (r3 != 0) {
0x08022c0c bne 0x80229b8 | goto label_2;
| }
| label_4:
0x08022c10 mov sl, r8 | sl = r8;
0x08022c14 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x08022c18 ldr r8, [sp, 0x24] | r8 = var_24h;
0x08022c1c b 0x8022e8c | goto label_27;
| label_19:
0x08022c20 udf 0x12 | __asm ("udf 0x12");
| label_25:
0x08022c24 ldr r0, [sp, 0x18] | r0 = var_18h;
0x08022c28 stmdaeq r3, {r8, sb, fp, sp, lr, pc} | __asm ("stmdaeq r3, {r8, sb, fp, sp, lr, pc}");
0x08022c2c cmn r0, 0x1000 |
| if (r0 > 0x1000) {
0x08022c30 bhi 0x8022c80 | goto label_28;
| }
0x08022c34 ldr ip, [sp, 0x14] | ip = var_14h;
0x08022c38 ldr r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x08022c3c ldrb r1, [sp, 0x40] | r1 = var_40h;
0x08022c40 sub r2, ip, 0x20 | r2 = ip - 0x20;
0x08022c44 cmp r1, 0 |
0x08022c48 rsb r1, ip, 0x20 | r1 = 0x20 - ip;
0x08022c4c lsl r2, r3, r2 | r2 = r3 << r2;
0x08022c50 orr r2, r2, r3, lsr r1 | r2 |= (r3 >> r1);
0x08022c54 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x08022c58 lsl r3, r3, ip | r3 <<= ip;
0x08022c5c str r3, [r0, 8] | *((r0 + 8)) = r3;
| if (r1 == 0) {
0x08022c60 beq 0x8022c00 | goto label_3;
| }
| label_26:
0x08022c64 add r0, sp, 0x40 | r0 += var_40h;
0x08022c68 mov r6, 1 | r6 = 1;
0x08022c6c stmdaeq r8, {r0, r1, r2, r3, r4, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r7, sb, sl, fp, ip, pc}");
0x08022c70 ldr r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x08022c74 cmp r3, 0 |
| if (r3 != 0) {
0x08022c78 bne 0x80229b8 | goto label_2;
| }
0x08022c7c b 0x8022c10 | goto label_4;
| label_28:
0x08022c80 cmp r0, 0 |
| if (r0 >= 0) {
0x08022c84 bge 0x8022b74 | goto label_5;
| }
| label_23:
0x08022c88 ldrb r3, [sp, 0x40] | r3 = var_40h;
0x08022c8c mov sl, r8 | sl = r8;
0x08022c90 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x08022c94 mov fp, r0 |
0x08022c98 ldr r8, [sp, 0x24] | r8 = var_24h;
0x08022c9c cmp r3, 0 |
| if (r3 != 0) {
0x08022ca0 bne 0x8022e98 | goto label_29;
| }
| label_9:
0x08022ca4 ldr r2, [sl, 8] | r2 = *((sl + 8));
0x08022ca8 lsr r6, r2, 0x14 | r6 = r2 >> 0x14;
0x08022cac lsl r4, r2, 0xc | r4 = r2 << 0xc;
0x08022cb0 ldrd r2, r3, [r5, -0x28] | __asm ("ldrd r2, r3, [r5, -0x28]");
0x08022cb4 cmp r2, r4 |
0x08022cb8 sbcs r3, r3, r6 | __asm ("sbcs r3, r3, r6");
| if (r2 < r4) {
0x08022cbc bge 0x8022d5c |
0x08022cc0 sub r7, r5, 0x20 | r7 = r5 - 0x20;
0x08022cc4 mov r0, r7 | r0 = r7;
0x08022cc8 stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r8, sl, fp, ip, pc}");
0x08022ccc mov r3, sp | r3 = sp;
0x08022cd0 bic r3, r3, 0x1fc0 | r3 = BIT_MASK (r3, 0x1fc0);
0x08022cd4 bic r3, r3, 0x3f | r3 = BIT_MASK (r3, 0x3f);
0x08022cd8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08022cdc add r2, r2, 1 | r2++;
0x08022ce0 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08022ce4 ldr sl, [r5, 0x38] | sl = *((r5 + 0x38));
0x08022ce8 ldr sb, [r5, 0x3c] | sb = *((r5 + 0x3c));
0x08022cec ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x08022cf0 sub r2, r2, 1 | r2--;
0x08022cf4 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x08022cf8 cmp r2, 0 |
| if (r2 == 0) {
0x08022cfc beq 0x8022f38 | goto label_30;
| }
| label_14:
0x08022d00 cmp sl, r4 |
0x08022d04 mov r2, r4 | r2 = r4;
0x08022d08 sbcs r1, sb, r6 | __asm ("sbcs r1, sb, r6");
0x08022d0c ldr r1, [r5, -0x28] | r1 = *((r5 - 0x28));
| if (sl >= r4) {
0x08022d10 movlt r2, sl | r2 = sl;
| }
0x08022d14 mov r3, r6 | r3 = r6;
| if (sl >= r4) {
0x08022d18 movlt r3, sb | r3 = sb;
| }
0x08022d1c cmp r1, r2 |
0x08022d20 ldr r1, [r5, -0x24] | r1 = *((r5 - 0x24));
0x08022d24 mov r0, r7 | r0 = r7;
0x08022d28 sbcs r1, r1, r3 | __asm ("sbcs r1, r1, r3");
0x08022d2c strdlt r2, r3, [r5, -0x28] | __asm ("strdlt r2, r3, [r5, -0x28]");
0x08022d30 stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r8, sl, fp, ip, pc}");
0x08022d34 ldr r2, [pc, 0x38c] | r2 = *(0x80230c4);
0x08022d38 mov r1, r5 | r1 = r5;
0x08022d3c mov r0, r8 | r0 = r8;
0x08022d40 movw r3, 0x9ce | r3 = 0x9ce;
0x08022d44 stmdaeq r2, {r2, r3, r6, r7, r8, sb, sl, sp} | __asm ("stmdaeq r2, {r2, r3, r6, r7, r8, sb, sl, sp}");
0x08022d48 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x08022d4c bne 0x8022f00 | goto label_31;
| }
| label_13:
0x08022d50 subs r3, fp, 0 | r3 -= var_0h;
| if (r3 != var_0h) {
0x08022d54 moveq r3, r4 | r3 = r4;
| }
0x08022d58 mov fp, r3 |
| }
| label_10:
0x08022d5c mov r0, fp | r0 = fp;
0x08022d60 add sp, sp, 0x84 |
0x08022d64 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x08022d68 ldr r3, [r7, -0x6c] | r3 = *((r7 - 0x6c));
0x08022d6c tst r3, 0x80000 |
| if ((r3 & 0x80000) == 0) {
0x08022d70 beq 0x80229e0 | goto label_6;
| }
0x08022d74 mov r0, r7 | r0 = r7;
0x08022d78 stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp} | __asm ("stmdaeq r0, {r3, r4, r5, r6, r7, fp, ip, sp}");
0x08022d7c tst r0, 1 |
| if ((r0 & 1) != 0) {
0x08022d80 bne 0x80229e0 | goto label_6;
| }
0x08022d84 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x08022d88 ldr r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
0x08022d8c ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x08022d90 tst r3, 0x8000000 |
| if ((r3 & loc.imp.fs_overflowgid) == 0) {
0x08022d94 movne r4, 1 | r4 = 1;
| }
0x08022d98 movwne r3, 0x42b | __asm ("movwne r3, 0x42b");
| if ((r3 & loc.imp.fs_overflowgid) != 0) {
0x08022d9c bne 0x80229e8 | goto label_7;
| }
0x08022da0 b 0x80229e0 | goto label_6;
| label_18:
0x08022da4 ldr r3, [r8, 0x38] | r3 = *((r8 + 0x38));
0x08022da8 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x08022dac cmp r2, 0 |
| if (r2 == 0) {
0x08022db0 beq 0x8022e4c | goto label_32;
| }
| label_11:
0x08022db4 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x08022db8 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x08022dbc bne 0x8022a20 | goto label_8;
| }
0x08022dc0 add r7, r7, 0x1dc | r7 += 0x1dc;
0x08022dc4 orr r2, r2, 1 | r2 |= 1;
0x08022dc8 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x08022dcc pld [r7] | __asm ("pld [r7]");
| do {
0x08022dd0 ldrex r3, [r7] | __asm ("ldrex r3, [r7]");
0x08022dd4 add r3, r3, 1 | r3++;
0x08022dd8 strex r2, r3, [r7] | __asm ("strex r2, r3, [r7]");
0x08022ddc teq r2, 0 | __asm ("teq r2, 0");
0x08022de0 bne 0x8022dd0 |
| } while ((r2 & 1) != 0);
0x08022de4 b 0x8022a20 | goto label_8;
| label_17:
0x08022de8 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x08022dec mov sl, r8 | sl = r8;
0x08022df0 ldr r7, [sp, 0x34] | r7 = var_34h;
0x08022df4 mov fp, r0 |
0x08022df8 ldr r8, [sp, 0x24] | r8 = var_24h;
0x08022dfc ldr r4, [r5, 0x1c] | r4 = *((r5 + 0x1c));
0x08022e00 ldr r3, [r4, 0x1f8] | r3 = *((r4 + 0x1f8));
0x08022e04 ldr r2, [r3, 0x130] | r2 = *((r3 + 0x130));
0x08022e08 tst r2, 2 |
| if ((r2 & 2) != 0) {
0x08022e0c bne 0x8022ef4 | goto label_15;
| }
0x08022e10 ldr sb, [r3, 0x54] | sb = *((r3 + 0x54));
0x08022e14 ubfx sb, sb, 1, 1 | sb = (sb >> 1) & ((1 << 1) - 1);
0x08022e18 cmp sb, 0 |
| if (sb != 0) {
0x08022e1c bne 0x8022ef4 | goto label_15;
| }
0x08022e20 cmn r0, 0xc |
| if (r0 != 0xc) {
0x08022e24 beq 0x8022e40 |
0x08022e28 cmn r0, 0x1c |
| if (r0 != 0x1c) {
0x08022e2c bne 0x8022ea4 | goto label_33;
| }
0x08022e30 mov r0, r4 | r0 = r4;
0x08022e34 stmdaeq r0, {r2, r3, r4, sb, fp} | __asm ("stmdaeq r0, {r2, r3, r4, sb, fp}");
0x08022e38 orrs r0, r0, r1 | r0 |= r1;
| if (r0 == r0) {
0x08022e3c beq 0x8022f4c | goto label_34;
| }
| }
0x08022e40 cmp r6, 0 |
| if (r6 != 0) {
0x08022e44 bne 0x8022ca4 | goto label_9;
| }
0x08022e48 b 0x8022d5c | goto label_10;
| label_32:
0x08022e4c ldr r0, [sp, 0x24] | r0 = var_24h;
0x08022e50 cmp r0, 0x1000 |
| if (r0 < 0x1000) {
0x08022e54 ldrhs r1, [r0, 4] | r1 = *((r0 + 4));
| }
| if (r0 < 0x1000) {
0x08022e58 strhs r1, [r3, 8] | *((r3 + 8)) = r1;
| }
| if (r0 < 0x1000) {
0x08022e5c strhs r2, [r0, 4] | *((r0 + 4)) = r2;
| }
| if (r0 < 0x1000) {
0x08022e60 ldrhs r3, [r8, 0x38] | r3 = *((r8 + 0x38));
| }
0x08022e64 b 0x8022db4 | goto label_11;
| label_24:
0x08022e68 add r0, sp, 0x40 | r0 += var_40h;
0x08022e6c stmdaeq r8, {r0, r1, r2, r3, r4, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r7, sb, sl, fp, ip, pc}");
0x08022e70 b 0x8022ba8 | goto label_12;
| label_20:
0x08022e74 mov sl, r8 | sl = r8;
0x08022e78 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x08022e7c ldr r8, [sp, 0x24] | r8 = var_24h;
0x08022e80 mov r3, 0 | r3 = 0;
0x08022e84 str r3, [sl, 0x24] | *((sl + 0x24)) = r3;
0x08022e88 str r3, [sl, 0x28] | *((sl + 0x28)) = r3;
| label_27:
0x08022e8c mov r3, 0 | r3 = 0;
0x08022e90 mov fp, r3 |
0x08022e94 b 0x8022ca4 | goto label_9;
| label_29:
0x08022e98 add r0, sp, 0x40 | r0 += var_40h;
0x08022e9c stmdaeq r8, {r0, r1, r2, r3, r4, r7, sb, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r3, r4, r7, sb, sl, fp, ip, pc}");
0x08022ea0 b 0x8022ca4 | goto label_9;
| label_33:
0x08022ea4 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x08022ea8 mov r0, r4 | r0 = r4;
0x08022eac str sb, [sp, 4] | var_4h = sb;
0x08022eb0 rsb r1, fp, 0 | r1 = fp - ;
0x08022eb4 ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08022eb8 str r2, [sp, 8] | var_8h = r2;
0x08022ebc ldr r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x08022ec0 str r2, [sp] | *(sp) = r2;
0x08022ec4 stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc}");
0x08022ec8 stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc}");
0x08022ecc str r1, [sp, 0xc] | var_ch = r1;
0x08022ed0 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022ed4 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022ed8 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08022edc stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc}");
0x08022ee0 stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc}");
0x08022ee4 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022ee8 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022eec mov r0, r4 | r0 = r4;
0x08022ef0 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
| label_15:
0x08022ef4 mov r3, 1 | r3 = 1;
0x08022ef8 strb r3, [r7] | *(r7) = r3;
0x08022efc b 0x8022d5c | goto label_10;
| label_31:
0x08022f00 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x08022f04 mov r2, 0 | r2 = 0;
0x08022f08 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x08022f0c ldr r1, [pc, 0x1b4] | r1 = *(0x80230c4);
0x08022f10 str r3, [sp, 0xc] | var_ch = r3;
0x08022f14 stmdaeq r5, {r3, r4, r6, r7, r8, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r3, r4, r6, r7, r8, fp, ip, sp, pc}");
0x08022f18 stmdaeq r5, {r3, r4, r6, r7, r8, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r3, r4, r6, r7, r8, fp, ip, sp, pc}");
0x08022f1c str r3, [sp, 8] | var_8h = r3;
0x08022f20 mov r3, 0 | r3 = 0;
0x08022f24 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x08022f28 rsb r3, r4, 0 | r3 = r4 - ;
0x08022f2c mov r2, 0x9d0 | r2 = 0x9d0;
0x08022f30 stmdaeq r4, {r3, r6, ip, sp, lr} | __asm ("stmdaeq r4, {r3, r6, ip, sp, lr}");
0x08022f34 b 0x8022d50 | goto label_13;
| label_30:
0x08022f38 ldr r3, [r3] | r3 = *(r3);
0x08022f3c tst r3, 2 |
| if ((r3 & 2) == 0) {
0x08022f40 beq 0x8022d00 | goto label_14;
| }
0x08022f44 stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r6, sl, fp, ip, pc}");
0x08022f48 b 0x8022d00 | goto label_14;
| label_34:
0x08022f4c ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x08022f50 mov r0, r4 | r0 = r4;
0x08022f54 str sb, [sp, 4] | var_4h = sb;
0x08022f58 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022f5c stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022f60 ldr r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x08022f64 str r2, [sp, 8] | var_8h = r2;
0x08022f68 ldr r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x08022f6c str r2, [sp] | *(sp) = r2;
0x08022f70 mov r2, 0x1c | r2 = 0x1c;
0x08022f74 str r2, [sp, 0xc] | var_ch = r2;
0x08022f78 stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc}");
0x08022f7c stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, fp, ip, sp, pc}");
0x08022f80 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08022f84 mov r0, r4 | r0 = r4;
0x08022f88 stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc}");
0x08022f8c stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r5, r6, sb, fp, ip, sp, pc}");
0x08022f90 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022f94 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022f98 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08022f9c ldr r4, [r5, 0x1c] | r4 = *((r5 + 0x1c));
0x08022fa0 mov r0, r4 | r0 = r4;
0x08022fa4 ldr r6, [r4, 0x1f8] | r6 = *((r4 + 0x1f8));
0x08022fa8 stmdaeq r0, {r2, r3, r4, sb, fp} | __asm ("stmdaeq r0, {r2, r3, r4, sb, fp}");
0x08022fac ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x08022fb0 mov r3, r0 | r3 = r0;
0x08022fb4 ldr r2, [r2, 0x1f8] | r2 = *((r2 + 0x1f8));
0x08022fb8 ldr r0, [r2, 0x30] | r0 = *((r2 + 0x30));
0x08022fbc lsl r2, r1, r0 | r2 = r1 << r0;
0x08022fc0 sub r1, r0, 0x20 | r1 = r0 - 0x20;
0x08022fc4 orr r2, r2, r3, lsl r1 | r2 |= (r3 << r1);
0x08022fc8 rsb r1, r0, 0x20 | r1 = 0x20 - r0;
0x08022fcc orr r2, r2, r3, lsr r1 | r2 |= (r3 >> r1);
0x08022fd0 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022fd4 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08022fd8 lsl r3, r3, r0 | r3 <<= r0;
0x08022fdc str r2, [sp, 4] | var_4h = r2;
0x08022fe0 mov r0, r4 | r0 = r4;
0x08022fe4 str r3, [sp] | *(sp) = r3;
0x08022fe8 stmdaeq r5, {r4, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r7, sb, fp, ip, sp, pc}");
0x08022fec stmdaeq r5, {r4, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r7, sb, fp, ip, sp, pc}");
0x08022ff0 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08022ff4 mov r0, r4 | r0 = r4;
0x08022ff8 stmdaeq r5, {r4, r5, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, fp, ip, sp, pc}");
0x08022ffc stmdaeq r5, {r4, r5, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r5, r7, sb, fp, ip, sp, pc}");
0x08023000 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08023004 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08023008 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0802300c ldr r3, [r4, 0x1f8] | r3 = *((r4 + 0x1f8));
0x08023010 ldr r2, [r6, 0xb0] | r2 = *((r6 + 0xb0));
0x08023014 ldr r1, [r3, 0x30] | r1 = *((r3 + 0x30));
0x08023018 ldr r3, [r6, 0xb4] | r3 = *((r6 + 0xb4));
0x0802301c sub r0, r1, 0x20 | r0 = r1 - 0x20;
0x08023020 lsl r3, r3, r1 | r3 <<= r1;
0x08023024 orr r3, r3, r2, lsl r0 | r3 |= (r2 << r0);
0x08023028 rsb r0, r1, 0x20 | r0 = 0x20 - r1;
0x0802302c orr r3, r3, r2, lsr r0 | r3 |= (r2 >> r0);
0x08023030 mov r0, r4 | r0 = r4;
0x08023034 lsl r2, r2, r1 | r2 <<= r1;
0x08023038 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x0802303c stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08023040 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x08023044 stmdaeq r5, {r2, r3, r6, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r7, sb, fp, ip, sp, pc}");
0x08023048 stmdaeq r5, {r2, r3, r6, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r7, sb, fp, ip, sp, pc}");
0x0802304c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08023050 ldr r3, [r4, 0x1f8] | r3 = *((r4 + 0x1f8));
0x08023054 ldr r1, [r3, 0x30] | r1 = *((r3 + 0x30));
0x08023058 ldrd r2, r3, [r6, 0xc8] | __asm ("ldrd r2, r3, [r6, 0xc8]");
0x0802305c sub r0, r1, 0x20 | r0 = r1 - 0x20;
0x08023060 lsl r3, r3, r1 | r3 <<= r1;
0x08023064 orr r3, r3, r2, lsl r0 | r3 |= (r2 << r0);
0x08023068 rsb r0, r1, 0x20 | r0 = 0x20 - r1;
0x0802306c orr r3, r3, r2, lsr r0 | r3 |= (r2 >> r0);
0x08023070 mov r0, r4 | r0 = r4;
0x08023074 lsl r2, r2, r1 | r2 <<= r1;
0x08023078 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x0802307c stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x08023080 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x08023084 stmdaeq r5, {r5, r6, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, r7, sb, fp, ip, sp, pc}");
0x08023088 stmdaeq r5, {r5, r6, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, r7, sb, fp, ip, sp, pc}");
0x0802308c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08023090 mov r0, r4 | r0 = r4;
0x08023094 stmdaeq r5, {r2, r4, r5, r6, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r4, r5, r6, r7, sb, fp, ip, sp, pc}");
0x08023098 stmdaeq r5, {r2, r4, r5, r6, r7, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r2, r4, r5, r6, r7, sb, fp, ip, sp, pc}");
0x0802309c stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x080230a0 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x080230a4 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x080230a8 ldr r3, [r5, 0x1b4] | r3 = *((r5 + 0x1b4));
0x080230ac mov r0, r4 | r0 = r4;
0x080230b0 stmdaeq r5, {r4, r8, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r8, sb, fp, ip, sp, pc}");
0x080230b4 stmdaeq r5, {r4, r8, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r4, r8, sb, fp, ip, sp, pc}");
0x080230b8 stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x080230bc stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc} | __asm ("stmdaeq r5, {r5, r6, sb, fp, ip, sp, pc}");
0x080230c0 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x080230c4 b 0x8022ef4 | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis9/kernel/fs/ext4/ext4.ko @ 0x8047eac */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.parse_options () | void parse_options (int32_t arg_78h, uint32_t arg1, int32_t arg2) {
| int32_t var_8h;
| int32_t var_8h_2;
| int32_t var_14h;
| int32_t var_14h_2;
| int32_t var_1ch;
| int32_t var_6h;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_2ch;
| int32_t var_38h;
| int32_t var_38h_2;
| int32_t var_8h_3;
| int32_t var_ch;
| int32_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x08047eac push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x08047eb0 cmp r0, 0 |
0x08047eb4 sub sp, sp, 0x54 |
0x08047eb8 ldr r5, [r1, 0x1f8] | r5 = *((r1 + 0x1f8));
0x08047ebc strd r2, r3, [sp, 0x14] | __asm ("strd r2, r3, [var_14h]");
0x08047ec0 str r0, [sp, 0x24] | var_24h = r0;
| if (arg_78h == ) {
0x08047ec4 beq 0x80482bc | goto label_0;
| }
0x08047ec8 ldr fp, [pc, 0xab4] | fp = loc..LANCHOR0;
0x08047ecc stmdaeq r5, {r4, r5, sb, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r5, sb, sp, lr, pc}");
0x08047ed0 stmdaeq r5, {r4, r5, sb, sp, lr, pc} | __asm ("stmdaeq r5, {r4, r5, sb, sp, lr, pc}");
0x08047ed4 mov r8, r1 | r8 = r1;
0x08047ed8 mov r6, 0 | r6 = 0;
0x08047edc mov r7, 0 | r7 = 0;
0x08047ee0 strd r6, r7, [sp, 8] | __asm ("strd r6, r7, [var_8h]");
| do {
| label_4:
0x08047ee4 mov r1, sb | r1 = sb;
0x08047ee8 add r0, sp, 0x24 | r0 += var_24h;
0x08047eec stmdaeq r8, {r0, r1, r6, r7, r8, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r6, r7, r8, sp, pc}");
0x08047ef0 subs r4, r0, 0 | r4 -= var_24h;
| if (r4 == var_24h) {
0x08047ef4 beq 0x80482ac | goto label_7;
| }
0x08047ef8 ldrb r3, [r4] | r3 = *(r4);
0x08047efc cmp r3, 0 |
0x08047f00 beq 0x8047ee4 |
| } while (r3 == 0);
0x08047f04 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x08047f08 strd r2, r3, [sp, 0x38] | __asm ("strd r2, r3, [var_38h]");
0x08047f0c mov r1, fp | r1 = fp;
0x08047f10 add r2, sp, 0x38 | r2 += var_38h;
0x08047f14 stmdaeq r8, {r0, r1, r2, r6, r7, r8, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r6, r7, r8, sp, pc}");
0x08047f18 mov r3, 0 | r3 = 0;
0x08047f1c str r3, [sp, 0x2c] | var_2ch = r3;
0x08047f20 sub r3, r0, 6 | r3 -= var_6h;
0x08047f24 ldr r7, [r8, 0x1f8] | r7 = *((r8 + 0x1f8));
0x08047f28 mov sl, r0 | sl = r0;
0x08047f2c cmp r3, 0x38 |
| if (r3 > 0x38) {
| /* switch table (57 cases) at 0x8047f38 */
0x08047f30 ldrls pc, [pc, r3, lsl 2] | offset_0 = r3 << 2;
| pc = *((pc + offset_0));
| }
0x08047f34 b 0x8048040 |
0x08048040 stmdaeq r5, {r2, r3, r5, r8, sl, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r8, sl, ip, pc}");
0x08048044 stmdaeq r5, {r2, r3, r5, r8, sl, ip, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r8, sl, ip, pc}");
0x08048048 mov r3, 1 | r3 = 1;
0x0804804c b 0x804805c |
| while (sl != r3) {
0x08048050 ldr r3, [r2, 0xc]! | r3 = var_ch;
0x08048054 cmp r3, 0x2e |
| if (r3 == 0x2e) {
0x08048058 beq 0x80487a4 | goto label_8;
| }
0x0804805c cmp sl, r3 |
0x08048060 bne 0x8048050 |
| }
0x08048064 ldr r0, [r2, 8] | r0 = var_8h_3;
0x08048068 tst r0, 0x200 |
| if ((r0 & 0x200) != 0) {
0x0804806c beq 0x8048088 |
0x08048070 ldr r1, [r8, 0x78] | r1 = *((r8 + 0x78));
0x08048074 ldr ip, [r1, 0x20] | ip = *((r1 + 0x20));
0x08048078 stmdaeq r6, {r3, r5, r8, sb, sl, fp} | __asm ("stmdaeq r6, {r3, r5, r8, sb, sl, fp}");
0x0804807c stmdaeq r6, {r3, r5, r8, sb, sl, fp} | __asm ("stmdaeq r6, {r3, r5, r8, sb, sl, fp}");
0x08048080 cmp ip, r1 |
| if (ip == r1) {
0x08048084 beq 0x8048834 | goto label_9;
| }
| }
0x08048088 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0804808c cmp r1, 0 |
| if (r1 == 0) {
0x08048090 beq 0x80480a4 | goto label_2;
| }
0x08048094 tst r0, 0x400 |
| if ((r0 & 0x400) == 0) {
0x08048098 beq 0x8048324 | goto label_10;
| }
0x0804809c tst r0, 0x20 |
0x080480a0 bne 0x80482c8 |
| while (ip >= 0) {
| label_2:
0x080480a4 tst r0, 8 |
| if ((r0 & 8) != 0) {
0x080480a8 beq 0x80480d4 |
0x080480ac ldr r0, [r2, 4] | r0 = var_38h_2;
0x080480b0 tst r0, 0x8000000 |
| if ((r0 & loc.imp.fs_overflowgid) != 0) {
0x080480b4 bne 0x804830c | goto label_11;
| }
0x080480b8 tst r0, 0x800000 |
| if ((r0 & 0x800000) == 0) {
0x080480bc beq 0x80483d0 | goto label_6;
| }
0x080480c0 ldr ip, [r8, 0x1f8] | ip = *((r8 + 0x1f8));
0x080480c4 ldr r0, [ip, 0x50] | r0 = *((ip + 0x50));
0x080480c8 orr r0, r0, 8 | r0 |= 8;
0x080480cc str r0, [ip, 0x50] | *((ip + 0x50)) = r0;
0x080480d0 ldr r0, [r2, 8] | r0 = var_8h_3;
| }
| label_1:
0x080480d4 tst r0, 0x10 |
| if ((r0 & 0x10) == 0) {
0x080480d8 ldrne ip, [r8, 0x1f8] | ip = *((r8 + 0x1f8));
| }
| if ((r0 & 0x10) == 0) {
0x080480dc ldrne r0, [ip, 0x4c] | r0 = *((ip + 0x4c));
| }
0x080480e0 bicne r0, r0, 0x70 | __asm ("bicne r0, r0, 0x70");
| if ((r0 & 0x10) == 0) {
0x080480e4 strne r0, [ip, 0x4c] | *((ip + 0x4c)) = r0;
| }
| if ((r0 & 0x10) == 0) {
0x080480e8 ldrne r0, [r2, 8] | r0 = *((r2 + 8));
| }
0x080480ec tst r0, 4 |
| if ((r0 & 4) != 0) {
0x080480f0 bne 0x8048360 | goto label_12;
| }
0x080480f4 sub ip, r3, 4 |
0x080480f8 cmp ip, 0x47 |
| if (ip > 0x47) {
| /* switch table (72 cases) at 0x8048104 */
0x080480fc ldrls pc, [pc, ip, lsl 2] | offset_1 = ip << 2;
| pc = *((pc + offset_1));
| }
0x08048100 b 0x8048380 | goto label_13;
| label_7:
0x080482ac ldr r3, [r8, 0x1f8] | r3 = *((r8 + 0x1f8));
0x080482b0 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x080482b4 tst r3, 0x400000 |
| if ((r3 & 0x400000) != 0) {
0x080482b8 bne 0x80482d8 | goto label_14;
| }
| label_0:
0x080482bc mov r0, 1 | r0 = 1;
| label_5:
0x080482c0 add sp, sp, 0x54 |
0x080482c4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x080482c8 ldr ip, [sp, 0x2c] | ip = var_2ch;
0x080482cc cmp ip, 0 |
0x080482d0 bge 0x80480a4 |
| }
0x080482d4 b 0x80483d0 | goto label_6;
| label_14:
0x080482d8 ldr r2, [r5, 0x44] | r2 = *((r5 + 0x44));
0x080482dc mov r3, 0x400 | r3 = 0x400;
0x080482e0 ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x080482e4 lsl r3, r3, r2 | r3 <<= r2;
0x080482e8 cmp r3, 0x1000 |
| if (r3 >= 0x1000) {
0x080482ec bhs 0x80482bc | goto label_0;
| }
0x080482f0 mov r0, r8 | r0 = r8;
0x080482f4 stmdaeq r5, {r2, r4, r5, sb, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, sb, sp, lr, pc}");
0x080482f8 stmdaeq r5, {r2, r4, r5, sb, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r5, sb, sp, lr, pc}");
0x080482fc stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x08048300 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x08048304 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08048308 b 0x80482bc | goto label_0;
| label_11:
0x0804830c ldr ip, [r8, 0x1f8] | ip = *((r8 + 0x1f8));
0x08048310 ldr r0, [ip, 0x50] | r0 = *((ip + 0x50));
0x08048314 orr r0, r0, 1 | r0 |= 1;
0x08048318 str r0, [ip, 0x50] | *((ip + 0x50)) = r0;
0x0804831c ldr r0, [r2, 8] | r0 = var_8h_3;
0x08048320 b 0x80480d4 | goto label_1;
| label_10:
0x08048324 add r1, sp, 0x2c | r1 += var_2ch;
0x08048328 add r0, sp, 0x38 | r0 += var_38h;
0x0804832c strd r2, r3, [sp, 0x1c] | __asm ("strd r2, r3, [var_1ch]");
0x08048330 stmdaeq r8, {r0, r1, r3, r6, r7, r8, sp, pc} | __asm ("stmdaeq r8, {r0, r1, r3, r6, r7, r8, sp, pc}");
0x08048334 cmp r0, 0 |
| if (r0 != 0) {
0x08048338 bne 0x80483d0 | goto label_6;
| }
0x0804833c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x08048340 ldr r1, [sp, 0x38] | r1 = var_38h;
0x08048344 ldr r3, [sp, 0x20] | r3 = var_20h;
0x08048348 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x0804834c cmp r1, 0 |
| if (r1 == 0) {
0x08048350 beq 0x80480a4 | goto label_2;
| }
0x08048354 tst r0, 0x20 |
| if ((r0 & 0x20) == 0) {
0x08048358 beq 0x80480a4 | goto label_2;
| }
0x0804835c b 0x80482c8 | goto label_3;
| label_12:
0x08048360 mov r3, r4 | r3 = r4;
0x08048364 mov r0, r8 | r0 = r8;
0x08048368 stmdaeq r5, {r3, r4, r5, r6, r7, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, sb, sl, fp, ip, lr, pc}");
0x0804836c stmdaeq r5, {r3, r4, r5, r6, r7, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, sb, sl, fp, ip, lr, pc}");
0x08048370 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x08048374 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x08048378 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x0804837c b 0x8047ee4 | goto label_4;
| label_13:
0x08048380 tst r0, 0x80 |
| if ((r0 & 0x80) == 0) {
0x08048384 beq 0x8048654 | goto label_15;
| }
0x08048388 ldr r3, [sp, 0x78] | r3 = *(arg_78h);
0x0804838c cmp r3, 0 |
| if (r3 == 0) {
0x08048390 beq 0x80486dc | goto label_16;
| }
0x08048394 ldr r3, [r7, 0x118] | r3 = *((r7 + 0x118));
0x08048398 cmp r3, 0 |
| if (r3 == 0) {
0x0804839c beq 0x80487c4 | goto label_17;
| }
0x080483a0 ldr r3, [r8, 0x1f8] | r3 = *((r8 + 0x1f8));
0x080483a4 ldr r2, [r2, 4] | r2 = var_38h_2;
0x080483a8 ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x080483ac and r3, r3, 0xc00 | r3 &= 0xc00;
0x080483b0 cmp r3, r2 |
| if (r3 == r2) {
0x080483b4 beq 0x8047ee4 | goto label_4;
| }
0x080483b8 stmdaeq r5, {r2, r4, r6, r7, r8, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r6, r7, r8, sp, lr, pc}");
0x080483bc stmdaeq r5, {r2, r4, r6, r7, r8, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, r6, r7, r8, sp, lr, pc}");
0x080483c0 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x080483c4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x080483c8 mov r0, r8 | r0 = r8;
0x080483cc stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
| label_6:
0x080483d0 mov r0, 0 | r0 = 0;
0x080483d4 b 0x80482c0 | goto label_5;
| label_15:
0x08048654 sub ip, r3, 0x33 |
0x08048658 cmp ip, 3 |
| if (ip < 3) {
0x0804865c bls 0x80488bc | goto label_18;
| }
0x08048660 cmp r3, 0x1f |
| if (r3 == 0x1f) {
0x08048664 beq 0x8048700 | goto label_19;
| }
0x08048668 cmp r3, 0x20 |
| if (r3 == 0x20) {
0x0804866c beq 0x804873c | goto label_20;
| }
0x08048670 cmp r1, 0 |
| if (r1 != 0) {
0x08048674 moveq r3, 1 | r3 = 1;
| }
| if (r1 != 0) {
0x08048678 streq r3, [sp, 0x2c] | var_2ch = r3;
| }
0x0804867c ands r3, r0, 2 | r3 = r0 & 2;
0x08048680 mov r6, r3 | r6 = r3;
| if (r3 == r0) {
0x08048684 beq 0x804872c | goto label_21;
| }
0x08048688 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0804868c clz r1, r1 | r1 &= r1;
0x08048690 lsr r1, r1, 5 | r1 >>= 5;
0x08048694 str r1, [sp, 0x2c] | var_2ch = r1;
| do {
0x08048698 ldr r3, [r2, 4] | r3 = var_38h_2;
0x0804869c tst r0, 0x1000 |
| if ((r0 & 0x1000) == 0) {
0x080486a0 beq 0x8048750 | goto label_22;
| }
0x080486a4 ldr r2, [r7, 0x50] | r2 = *((r7 + 0x50));
0x080486a8 cmp r1, 0 |
| if (r1 == 0) {
0x080486ac orrne r3, r3, r2 | r3 |= r2;
| }
0x080486b0 biceq r2, r2, r3 | __asm ("biceq r2, r2, r3");
| if (r1 == 0) {
0x080486b4 strne r3, [r7, 0x50] | *((r7 + 0x50)) = r3;
| }
| if (r1 != 0) {
0x080486b8 streq r2, [r7, 0x50] | *((r7 + 0x50)) = r2;
| }
0x080486bc b 0x8047ee4 | goto label_4;
| label_16:
0x080486dc ldr r1, [r8, 0x1f8] | r1 = *((r8 + 0x1f8));
0x080486e0 ldr r3, [r1, 0x4c] | r3 = *((r1 + 0x4c));
0x080486e4 bic r3, r3, 0xc00 | r3 = BIT_MASK (r3, 0xc00);
0x080486e8 str r3, [r1, 0x4c] | *((r1 + 0x4c)) = r3;
0x080486ec ldr r2, [r2, 4] | r2 = var_38h_2;
0x080486f0 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x080486f4 orr r3, r3, r2 | r3 |= r2;
0x080486f8 str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x080486fc b 0x8047ee4 | goto label_4;
| label_19:
0x08048700 ldr r2, [r2, 4] | r2 = var_38h_2;
0x08048704 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x08048708 orr r3, r3, r2 | r3 |= r2;
0x0804870c str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x08048710 b 0x8047ee4 | goto label_4;
| label_21:
0x0804872c tst r0, 1 |
| if ((r0 & 1) == 0) {
0x08048730 beq 0x80487e0 | goto label_23;
| }
0x08048734 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x08048738 b 0x8048698 |
| } while (1);
| label_20:
0x0804873c ldr r2, [r2, 4] | r2 = var_38h_2;
0x08048740 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x08048744 bic r3, r3, r2 | r3 = BIT_MASK (r3, r2);
0x08048748 str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0804874c b 0x8047ee4 | goto label_4;
| label_22:
0x08048750 ldr r2, [r7, 0x4c] | r2 = *((r7 + 0x4c));
0x08048754 cmp r1, 0 |
| if (r1 == 0) {
0x08048758 orrne r3, r3, r2 | r3 |= r2;
| }
0x0804875c biceq r2, r2, r3 | __asm ("biceq r2, r2, r3");
| if (r1 == 0) {
0x08048760 strne r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
| }
| if (r1 != 0) {
0x08048764 streq r2, [r7, 0x4c] | *((r7 + 0x4c)) = r2;
| }
0x08048768 b 0x8047ee4 | goto label_4;
| label_8:
0x080487a4 mov r3, r4 | r3 = r4;
0x080487a8 mov r0, r8 | r0 = r8;
0x080487ac stmdaeq r5, {r2, r3, r4, r7, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r7, sb, sl, fp, ip, lr, pc}");
0x080487b0 stmdaeq r5, {r2, r3, r4, r7, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r4, r7, sb, sl, fp, ip, lr, pc}");
0x080487b4 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x080487b8 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x080487bc stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x080487c0 b 0x80483d0 | goto label_6;
| label_17:
0x080487c4 mov r0, r8 | r0 = r8;
0x080487c8 stmdaeq r5, {r3, r7, r8, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r7, r8, sp, lr, pc}");
0x080487cc stmdaeq r5, {r3, r7, r8, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r7, r8, sp, lr, pc}");
0x080487d0 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x080487d4 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x080487d8 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x080487dc b 0x8047ee4 | goto label_4;
| label_23:
0x080487e0 mov r0, r8 | r0 = r8;
0x080487e4 mov r3, r4 | r3 = r4;
0x080487e8 stmdaeq r5, {r2, r4, sb, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, sb, sp, lr, pc}");
0x080487ec stmdaeq r5, {r2, r4, sb, sp, lr, pc} | __asm ("stmdaeq r5, {r2, r4, sb, sp, lr, pc}");
0x080487f0 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x080487f4 stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r6, sb, sl, fp, ip, lr, pc}");
0x080487f8 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x080487fc mov r3, r6 | r3 = r6;
0x08048800 mov r2, 9 | r2 = 9;
0x08048804 movw r1, 0x96b | r1 = 0x96b;
0x08048808 stmdaeq r5, {r5, r7, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r5, r7, fp, ip, lr, pc}");
0x0804880c stmdaeq r5, {r5, r7, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r5, r7, fp, ip, lr, pc}");
0x08048810 stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc} | __asm ("stmdaeq r8, {r0, r1, r2, r4, r5, r6, sl, fp, ip, pc}");
0x08048814 b 0x80483d0 | goto label_6;
| label_9:
0x08048834 mov r3, r4 | r3 = r4;
0x08048838 mov r0, r8 | r0 = r8;
0x0804883c stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, ip, lr, pc}");
0x08048840 stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r6, r7, sb, sl, fp, ip, lr, pc}");
0x08048844 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x08048848 stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r3, r5, r6, r7, r8, fp, ip, lr, pc}");
0x0804884c stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x08048850 b 0x80483d0 | goto label_6;
| label_18:
0x080488bc mov r0, r8 | r0 = r8;
0x080488c0 stmdaeq r5, {r3, r4, r5, r6, r7, r8, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, sp, lr, pc}");
0x080488c4 stmdaeq r5, {r3, r4, r5, r6, r7, r8, sp, lr, pc} | __asm ("stmdaeq r5, {r3, r4, r5, r6, r7, r8, sp, lr, pc}");
0x080488c8 stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc}");
0x080488cc stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc} | __asm ("stmdaeq r5, {r2, r5, r7, r8, sl, fp, ip, lr, pc}");
0x080488d0 stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr} | __asm ("stmdaeq r4, {r4, r7, r8, sb, fp, sp, lr}");
0x080488d4 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x080488d8 orr r3, r3, 0x20 | r3 |= 0x20;
0x080488dc str r3, [r7, 0x50] | *((r7 + 0x50)) = r3;
0x080488e0 b 0x80483d0 | goto label_6;
| }
[*] Function printf used 1 times ext4.ko