[*] Binary protection state of liburcu.so.8.0.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of liburcu.so.8.0.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/liburcu.so.8.0.0 @ 0x2ab4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.urcu_memb_register_thread () | void urcu_memb_register_thread () {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_3ch;
0x00002ab4 invalid |
0x00002ab8 ldcl p6, c4, [ip], 0x14 | __asm ("ldcl p6, c4, [ip], 0x14");
0x00002abc ldr r3, [pc, 0x9c] |
0x00002abe add r3, pc | r3 = 0x561e;
0x00002ac0 mov r0, r3 | r0 = r3;
0x00002ac2 blx 0x1624 | fcn_00001624 ();
0x00002ac6 ldrb r3, [r0, 4] | r3 = *((r0 + 4));
0x00002ac8 str r5, [r0, 0x48] | *((r0 + 0x48)) = r5;
| if (r3 == 0) {
0x00002aca cbnz r3, 0x2b14 |
0x00002acc ldrh r3, [r0] | r3 = *(r0);
0x00002ace mov r4, r0 | r4 = r0;
0x00002ad0 cmp r3, 0 |
| if (r3 != 0) {
0x00002ad2 bne 0x2b44 | goto label_22;
| }
0x00002ad4 ldr r5, [pc, 0x88] |
0x00002ad6 add r5, pc | r5 = 0x563a;
0x00002ad8 adds r5, 4 | r5 += 4;
0x00002ada mov r0, r5 | r0 = r5;
0x00002adc bl 0x1894 | fcn_00001894 ();
0x00002ae0 ldrb.w r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x00002ae4 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 < r3) {
0x00002ae6 bmi 0x2b2c | goto label_23;
| }
0x00002ae8 orr r3, r3, 1 | r3 |= 1;
0x00002aec strb.w r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x00002af0 blx 0x1570 | fcn_00001570 ();
0x00002af4 ldr r3, [pc, 0x6c] |
0x00002af6 mov r0, r5 | r0 = r5;
0x00002af8 add.w r5, r4, 0x40 | r5 = r4 + 0x40;
0x00002afa lsls r0, r0, 0x15 | r0 <<= 0x15;
0x00002afc add r3, pc | r3 = 0x5664;
0x00002afe mov r2, r3 | r2 = r3;
0x00002b00 ldr r1, [r2, 8]! | r1 = *((r2 += 8));
0x00002b04 str r5, [r3, 8] | *((r3 + 8)) = r5;
0x00002b06 str r5, [r1, 4] | *((r1 + 4)) = r5;
0x00002b08 strd r1, r2, [r4, 0x40] | __asm ("strd r1, r2, [r4, 0x40]");
0x00002b0c pop.w {r3, r4, r5, lr} |
0x00002b10 b.w 0x1928 | void (*0x1928)() ();
| }
0x00002b14 ldr r3, [pc, 0x50] |
0x00002b16 movw r2, 0x21f | r2 = 0x21f;
0x00002b1a ldr r1, [pc, 0x50] |
0x00002b1c ldr r0, [pc, 0x50] |
0x00002b1e add r3, pc |
0x00002b20 add r1, pc | r1 = 0x5692;
0x00002b22 add.w r3, r3, 0x1c0 | r3 = 0x584a;
0x00002b26 add r0, pc | r0 = 0x569a;
0x00002b28 blx 0x1660 | fcn_00001660 ();
| label_23:
0x00002b2c ldr r3, [pc, 0x44] |
0x00002b2e movw r2, 0x223 | r2 = 0x223;
0x00002b32 ldr r1, [pc, 0x44] |
0x00002b34 ldr r0, [pc, 0x44] |
0x00002b36 add r3, pc |
0x00002b38 add r1, pc | r1 = 0x56b6;
0x00002b3a add.w r3, r3, 0x1c0 | r3 = 0x586e;
0x00002b3e add r0, pc | r0 = 0x56be;
0x00002b40 blx 0x1660 | fcn_00001660 ();
| label_22:
0x00002b44 ldr r3, [pc, 0x38] |
0x00002b46 mov.w r2, 0x220 | r2 = 0x220;
0x00002b4a ldr r1, [pc, 0x38] |
0x00002b4c ldr r0, [pc, 0x38] |
0x00002b4e add r3, pc |
0x00002b50 add r1, pc | r1 = 0x56da;
0x00002b52 add.w r3, r3, 0x1c0 | r3 = 0x5892;
0x00002b56 add r0, pc | r0 = 0x56e2;
0x00002b58 blx 0x1660 | fcn_00001660 ();
0x00002b5c adds r5, 2 | r5 += 2;
0x00002b5e movs r0, r0 |
0x00002b60 adds r6, 2 | r6 += 2;
0x00002b62 movs r0, r0 |
0x00002b64 adds r5, 0xc0 | r5 += 0xc0;
0x00002b66 movs r0, r0 |
0x00002b68 subs r6, r1, r5 | r6 = r1 - r5;
0x00002b6a movs r0, r0 |
0x00002b6c asrs r4, r4, 0x17 | r4 >>= 0x17;
0x00002b6e movs r0, r0 |
0x00002b70 adds r2, r5, r3 | r2 = r5 + r3;
0x00002b72 movs r0, r0 |
0x00002b74 subs r6, r6, r4 | r6 -= r4;
0x00002b76 movs r0, r0 |
0x00002b78 asrs r4, r1, 0x17 | r4 = r1 >> 0x17;
0x00002b7a movs r0, r0 |
0x00002b7c adds r2, r5, r4 | r2 = r5 + r4;
0x00002b7e movs r0, r0 |
0x00002b80 subs r6, r3, r4 | r6 = r3 - r4;
0x00002b82 movs r0, r0 |
0x00002b84 asrs r4, r6, 0x16 | r4 = r6 >> 0x16;
0x00002b86 movs r0, r0 |
0x00002b88 adds r6, r3, r3 | r6 = r3 + r3;
0x00002b8a movs r0, r0 |
0x00002b8c ldr r3, [pc, 0x320] |
0x00002b8e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00002b92 sub sp, 0x44 |
0x00002b94 ldr r2, [pc, 0x31c] |
0x00002b96 mov r5, r0 | r5 = r0;
0x00002b98 add r3, pc | r3 = 0x5a4c;
0x00002b9a str r3, [sp, 0x14] | var_14h = r3;
0x00002b9c ldr r3, [pc, 0x318] | r3 = *(0x2eb8);
0x00002b9e add r2, pc | r2 = 0x5a56;
0x00002ba0 ldr r3, [r2, r3] |
0x00002ba2 ldr r3, [r3] | r3 = *(0x5a56);
0x00002ba4 str r3, [sp, 0x3c] | var_3ch = r3;
0x00002ba6 mov.w r3, 0 | r3 = 0;
0x00002baa ldr r3, [r0, 0x20] | r3 = *(0x5702);
0x00002bac and r8, r3, 1 | r8 = r3 & 1;
0x00002bb0 bl 0x1974 | r0 = fcn_00001974 (r0);
0x00002bb4 cmp r0, 0 |
| if (r0 != 0) {
0x00002bb6 bne.w 0x2fb4 | goto label_24;
| }
0x00002bba blx 0x1434 | fcn_00001434 ();
0x00002bbe ldr r0, [pc, 0x2e8] |
0x00002bc0 add r0, pc | r0 = 0x5a6e;
0x00002bc2 blx 0x1624 | fcn_00001624 ();
0x00002bc6 ldr r3, [pc, 0x2e4] | r3 = *(0x2eae);
0x00002bc8 str r5, [r3, r0] | *((r3 + r0)) = r5;
0x00002bca cmp.w r8, 0 |
| if (r8 == 0) {
0x00002bce beq.w 0x2f0e | goto label_25;
| }
| label_20:
0x00002bd2 add.w sb, r5, 0x20 | sb = r5 + 0x20;
0x00002bd6 movs r6, 0 | r6 = 0;
| label_2:
0x00002bd8 mov r0, r5 | r0 = r5;
0x00002bda bl 0x1974 | r0 = fcn_00001974 (r0);
0x00002bde cmp r0, 0 |
| if (r0 != 0) {
0x00002be0 bne.w 0x2f3e | goto label_26;
| }
0x00002be4 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00002be6 lsls r0, r3, 0x1b | r0 = r3 << 0x1b;
| if (r0 < r3) {
0x00002be8 bmi.w 0x2e4c | goto label_27;
| }
| label_14:
0x00002bec add r7, sp, 0x20 | r7 += var_20h;
0x00002bee movs r1, 0 | r1 = 0;
0x00002bf0 add r0, sp, 0x24 | r0 += var_24h;
0x00002bf2 strd r7, r6, [sp, 0x1c] | __asm ("strd r7, r6, [var_20h]");
0x00002bf6 blx 0x14bc | r0 = fcn_000014bc ();
0x00002bfa cmp r0, 0 |
| if (r0 != 0) {
0x00002bfc bne.w 0x2fa0 | goto label_28;
| }
0x00002c00 adds r4, r5, 4 | r4 = r5 + 4;
0x00002c02 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00002c04 cmp r3, 0 |
| if (r3 == 0) {
0x00002c06 beq 0x2d08 | goto label_29;
| }
| label_3:
0x00002c08 movs r2, 0 | r2 = 0;
| label_1:
0x00002c0a dmb ish | __asm ("dmb ish");
| do {
| label_0:
0x00002c0e ldrex fp, [r4] | __asm ("ldrex fp, [r4]");
0x00002c12 strex r3, r6, [r4] | __asm ("strex r3, r6, [r4]");
0x00002c16 cmp r3, 0 |
0x00002c18 bne 0x2c0e |
| } while (r3 != 0);
0x00002c1a dmb ish | __asm ("dmb ish");
0x00002c1e cmp.w fp, 0 |
| if (fp != 0) {
0x00002c22 bne 0x2cbe | goto label_30;
| }
0x00002c24 ldr r3, [r5] | r3 = *(r5);
0x00002c26 cmp r4, r3 |
| if (r4 == r3) {
0x00002c28 beq 0x2c9e | goto label_31;
| }
0x00002c2a adds r2, 1 | r2++;
0x00002c2c cmp r2, 0xa |
| if (r2 != 0xa) {
0x00002c2e beq 0x2c36 |
0x00002c30 dmb ish | __asm ("dmb ish");
0x00002c34 b 0x2c0e | goto label_0;
| }
0x00002c36 mov r1, fp | r1 = fp;
0x00002c38 mov r0, fp | r0 = fp;
0x00002c3a blx 0x1510 | fcn_00001510 ();
0x00002c3e mov r2, fp | r2 = fp;
0x00002c40 b 0x2c0a | goto label_1;
| label_5:
0x00002c42 ldr.w sl, [r7] | sl = *(r7);
0x00002c46 cmp.w sl, 0 |
| if (sl == 0) {
0x00002c4a beq.w 0x2ecc | goto label_32;
| }
| label_17:
0x00002c4e mov.w fp, 0 |
0x00002c52 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00002c54 mov r0, r7 | r0 = r7;
0x00002c56 add.w fp, fp, 1 |
0x00002c5a blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
0x00002c5c cmp.w sl, 0 |
0x00002c5e lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x00002c60 beq 0x2c80 | goto label_21;
| }
| do {
0x00002c62 ldr.w r1, [sl] | r1 = *(sl);
0x00002c66 cmp r1, 0 |
| if (r1 == 0) {
0x00002c68 beq.w 0x2d88 | goto label_33;
| }
| label_7:
0x00002c6c mov r7, sl | r7 = sl;
0x00002c6e mov sl, r1 | sl = r1;
0x00002c70 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00002c72 mov r0, r7 | r0 = r7;
0x00002c74 add.w fp, fp, 1 |
0x00002c78 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
0x00002c7a cmp.w sl, 0 |
0x00002c7e bne 0x2c62 |
| } while (sl != 0);
| label_21:
0x00002c80 rsb.w fp, fp, 0 |
| label_16:
0x00002c84 add.w r3, r5, 0x28 | r3 = r5 + 0x28;
0x00002c88 dmb ish | __asm ("dmb ish");
| do {
0x00002c8c ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x00002c90 add r1, fp | r1 += fp;
0x00002c92 strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x00002c96 cmp r2, 0 |
0x00002c98 bne 0x2c8c |
| } while (r2 != 0);
0x00002c9a dmb ish | __asm ("dmb ish");
| label_31:
0x00002c9e ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00002ca0 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x00002ca2 bmi 0x2d16 | goto label_34;
| }
| label_4:
0x00002ca4 cmp.w r8, 0 |
| if (r8 == 0) {
0x00002ca8 bne 0x2cb2 |
0x00002caa ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00002cac cmp r3, 0 |
| if (r3 == 0) {
0x00002cae beq.w 0x2dbe | goto label_35;
| }
| }
| label_9:
0x00002cb2 movs r1, 0 | r1 = 0;
0x00002cb4 movs r2, 0xa | r2 = 0xa;
0x00002cb6 mov r0, r1 | r0 = r1;
0x00002cb8 blx 0x1510 | fcn_00001510 ();
0x00002cbc b 0x2bd8 | goto label_2;
| label_30:
0x00002cbe dmb ish | __asm ("dmb ish");
| do {
0x00002cc2 ldrex r1, [r5] | __asm ("ldrex r1, [r5]");
0x00002cc6 strex r3, r4, [r5] | __asm ("strex r3, r4, [r5]");
0x00002cca cmp r3, 0 |
0x00002ccc bne 0x2cc2 |
| } while (r3 != 0);
0x00002cce dmb ish | __asm ("dmb ish");
0x00002cd2 dmb ish | __asm ("dmb ish");
0x00002cd6 add r2, sp, 0x1c | r2 += var_1ch;
| do {
0x00002cd8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00002cdc strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00002ce0 cmp r0, 0 |
0x00002ce2 bne 0x2cd8 |
| } while (r0 != 0);
0x00002ce4 dmb ish | __asm ("dmb ish");
0x00002ce8 str.w fp, [r3] | __asm ("str.w fp, [r3]");
0x00002cec cmp r3, r7 |
| if (r3 == r7) {
0x00002cee beq 0x2d5a | goto label_36;
| }
0x00002cf0 ldr r3, [pc, 0x1c8] |
0x00002cf2 mov.w r2, 0x178 | r2 = 0x178;
0x00002cf6 ldr r1, [pc, 0x1c8] |
0x00002cf8 ldr r0, [pc, 0x1c8] |
0x00002cfa add r3, pc |
0x00002cfc add r1, pc | r1 = 0x5bc2;
0x00002cfe add.w r3, r3, 0x1ec | r3 = 0x5da6;
0x00002d02 add r0, pc | r0 = 0x5bca;
0x00002d04 blx 0x1660 | fcn_00001660 ();
| label_29:
0x00002d08 ldr r3, [r5] | r3 = *(r5);
0x00002d0a cmp r4, r3 |
| if (r4 != r3) {
0x00002d0c bne.w 0x2c08 | goto label_3;
| }
0x00002d10 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00002d12 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00002d14 bpl 0x2ca4 | goto label_4;
| }
| label_34:
0x00002d16 cmp.w r8, 0 |
| if (r8 == 0) {
0x00002d1a beq.w 0x2f04 | goto label_37;
| }
0x00002d1c strh r3, [r6, 6] | *((r6 + 6)) = r3;
| label_19:
0x00002d1e adds r5, 0x20 | r5 += 0x20;
0x00002d20 dmb ish | __asm ("dmb ish");
| do {
0x00002d24 ldrex r3, [r5] | __asm ("ldrex r3, [r5]");
0x00002d28 orr r3, r3, 8 | r3 |= 8;
0x00002d2c strex r2, r3, [r5] | __asm ("strex r2, r3, [r5]");
0x00002d30 cmp r2, 0 |
0x00002d32 bne 0x2d24 |
| } while (r2 != 0);
0x00002d34 dmb ish | __asm ("dmb ish");
0x00002d38 blx 0x15e8 | fcn_000015e8 ();
0x00002d3c ldr r2, [pc, 0x188] |
0x00002d3e ldr r3, [pc, 0x178] | r3 = *(0x2eba);
0x00002d40 add r2, pc | r2 = 0x5c0c;
0x00002d42 ldr r3, [r2, r3] | r3 = *(0x5c0c);
0x00002d44 ldr r2, [r3] | r2 = *(0x5c0c);
0x00002d46 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00002d48 eors r2, r3 | r2 ^= r3;
0x00002d4a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00002d4e bne.w 0x2f3a | goto label_38;
| }
0x00002d52 movs r0, 0 | r0 = 0;
0x00002d54 add sp, 0x44 |
0x00002d56 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_36:
0x00002d5a blx 0x1458 | fcn_00001458 ();
0x00002d5e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00002d60 cmp r3, 0 |
| if (r3 == 0) {
0x00002d62 beq.w 0x2e9c | goto label_39;
| }
| label_15:
0x00002d66 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00002d68 mov r2, r7 | r2 = r7;
| if (r7 == 0) {
0x00002d6a cbz r7, 0x2d76 | goto label_40;
| }
0x00002d6c b 0x2c42 | goto label_5;
| label_6:
0x00002d6e ldr r7, [sp, 0x20] | r7 = var_20h;
0x00002d70 cmp r7, 0 |
| if (r7 != 0) {
0x00002d72 bne.w 0x2c42 | goto label_5;
| }
| label_40:
0x00002d76 adds r2, 1 | r2++;
0x00002d78 cmp r2, 0xa |
| if (r2 != 0xa) {
0x00002d7a bne 0x2d6e | goto label_6;
| }
0x00002d7c movs r1, 0 | r1 = 0;
0x00002d7e mov r0, r1 | r0 = r1;
0x00002d80 blx 0x1510 | fcn_00001510 ();
0x00002d84 movs r2, 0 | r2 = 0;
0x00002d86 b 0x2d6e | goto label_6;
| label_33:
0x00002d88 dmb ish | __asm ("dmb ish");
0x00002d8c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00002d8e cmp sl, r2 |
| if (sl == r2) {
0x00002d90 beq.w 0x2c6c | goto label_7;
| }
0x00002d94 ldr.w r1, [sl] | r1 = *(sl);
0x00002d98 cmp r1, 0 |
| if (r1 != 0) {
0x00002d9a bne.w 0x2c6c | goto label_7;
| }
0x00002d9e mov r2, r1 | r2 = r1;
0x00002da0 b 0x2dac | goto label_41;
| label_8:
0x00002da2 ldr.w r1, [sl] | r1 = *(sl);
0x00002da6 cmp r1, 0 |
| if (r1 != 0) {
0x00002da8 bne.w 0x2c6c | goto label_7;
| }
| label_41:
0x00002dac adds r2, 1 | r2++;
0x00002dae cmp r2, 0xa |
| if (r2 != 0xa) {
0x00002db0 bne 0x2da2 | goto label_8;
| }
0x00002db2 movs r1, 0 | r1 = 0;
0x00002db4 mov r0, r1 | r0 = r1;
0x00002db6 blx 0x1510 | fcn_00001510 ();
0x00002dba movs r2, 0 | r2 = 0;
0x00002dbc b 0x2da2 | goto label_8;
| label_35:
0x00002dbe ldr r3, [r5] | r3 = *(r5);
0x00002dc0 cmp r4, r3 |
| if (r4 != r3) {
0x00002dc2 bne.w 0x2cb2 | goto label_9;
| }
0x00002dc6 dmb ish | __asm ("dmb ish");
0x00002dca mov r4, r5 | r4 = r5;
0x00002dcc ldr r3, [r4, 0x24]! | r3 = *((r4 += 0x24));
0x00002dd0 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00002dd2 bne 0x2dfe |
| label_12:
0x00002dd4 mov.w r3, -1 | r3 = -1;
0x00002dd8 movs r2, 0 | r2 = 0;
0x00002dda mov r1, r4 | r1 = r4;
0x00002ddc movs r0, 0xf0 | r0 = 0xf0;
0x00002dde strd r6, r6, [sp, 4] | __asm ("strd r6, r6, [var_4h]");
0x00002de2 str r6, [sp] | *(sp) = r6;
0x00002de4 blx 0x157c | r0 = fcn_0000157c ();
0x00002de8 cmp r0, 0 |
| if (r0 < 0) {
0x00002dea blt 0x2e24 | goto label_42;
| }
| if (r0 == 0) {
0x00002dec cbz r0, 0x2e44 | goto label_43;
| }
| label_11:
0x00002dee blx 0x15a0 | r0 = fcn_000015a0 ();
0x00002df2 ldr r0, [r0] | r0 = *(r0);
| label_10:
0x00002df4 cmp r0, 4 |
| if (r0 == 4) {
0x00002df6 beq 0x2e44 | goto label_43;
| }
0x00002df8 cmp r0, 0xb |
| if (r0 != 0xb) {
0x00002dfa bne.w 0x2f72 | goto label_44;
| }
| }
| label_13:
0x00002dfe movs r1, 0 | r1 = 0;
0x00002e00 movs r2, 0xa | r2 = 0xa;
0x00002e02 mov r0, r1 | r0 = r1;
0x00002e04 blx 0x1510 | fcn_00001510 ();
0x00002e08 dmb ish | __asm ("dmb ish");
| do {
0x00002e0c ldrex r3, [r4] | __asm ("ldrex r3, [r4]");
0x00002e10 subs r3, 1 | r3--;
0x00002e12 strex r2, r3, [r4] | __asm ("strex r2, r3, [r4]");
0x00002e14 adds r2, 0 | r2 += 0;
0x00002e16 cmp r2, 0 |
0x00002e18 bne 0x2e0c |
| } while (r2 != 0);
0x00002e1a dmb ish | __asm ("dmb ish");
0x00002e1e dmb ish | __asm ("dmb ish");
0x00002e22 b 0x2bd8 | goto label_2;
| label_42:
0x00002e24 blx 0x15a0 | r0 = fcn_000015a0 ();
0x00002e28 ldr r0, [r0] | r0 = *(r0);
0x00002e2a cmp r0, 0x26 |
| if (r0 != 0x26) {
0x00002e2c bne 0x2df4 | goto label_10;
| }
0x00002e2e movs r3, 0 | r3 = 0;
0x00002e30 mov.w r2, -1 | r2 = -1;
0x00002e34 mov r1, r3 | r1 = r3;
0x00002e36 mov r0, r4 | r0 = r4;
0x00002e38 strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x00002e3c blx 0x1488 | r0 = fcn_00001488 ();
0x00002e40 cmp r0, 0 |
| if (r0 != 0) {
0x00002e42 bne 0x2dee | goto label_11;
| }
| label_43:
0x00002e44 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00002e46 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00002e48 beq 0x2dd4 | goto label_12;
| }
0x00002e4a b 0x2dfe | goto label_13;
| label_27:
0x00002e4c blx 0x15e8 | fcn_000015e8 ();
0x00002e50 dmb ish | __asm ("dmb ish");
| do {
0x00002e54 ldrex r3, [sb] | __asm ("ldrex r3, [sb]");
0x00002e58 orr r3, r3, 0x20 | r3 |= 0x20;
0x00002e5c strex r2, r3, [sb] | __asm ("strex r2, r3, [sb]");
0x00002e60 cmp r2, 0 |
0x00002e62 bne 0x2e54 |
| } while (r2 != 0);
0x00002e64 dmb ish | __asm ("dmb ish");
0x00002e68 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00002e6a lsls r1, r3, 0x1b | r1 = r3 << 0x1b;
| if (r1 >= r3) {
0x00002e6c bpl 0x2e7e | goto label_45;
| }
| do {
0x00002e6e movs r1, 0 | r1 = 0;
0x00002e70 movs r2, 1 | r2 = 1;
0x00002e72 mov r0, r1 | r0 = r1;
0x00002e74 blx 0x1510 | fcn_00001510 ();
0x00002e78 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00002e7a lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
0x00002e7c bmi 0x2e6e |
| } while (r2 < r3);
| label_45:
0x00002e7e dmb ish | __asm ("dmb ish");
| do {
0x00002e82 ldrex r3, [sb] | __asm ("ldrex r3, [sb]");
0x00002e86 bic r3, r3, 0x20 | r3 = BIT_MASK (r3, 0x20);
0x00002e8a strex r2, r3, [sb] | __asm ("strex r2, r3, [sb]");
0x00002e8e cmp r2, 0 |
0x00002e90 bne 0x2e82 |
| } while (r2 != 0);
0x00002e92 dmb ish | __asm ("dmb ish");
0x00002e96 blx 0x1434 | fcn_00001434 ();
0x00002e9a b 0x2bec | goto label_14;
| label_39:
0x00002e9c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00002e9e cmp r2, r7 |
| if (r2 != r7) {
0x00002ea0 bne.w 0x2d66 | goto label_15;
| }
0x00002ea4 mov fp, r3 |
0x00002ea6 b 0x2c84 | goto label_16;
| label_32:
0x00002ecc dmb ish | __asm ("dmb ish");
0x00002ed0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00002ed2 cmp r7, r3 |
| if (r7 == r3) {
0x00002ed4 beq 0x2f2e | goto label_46;
| }
0x00002ed6 ldr.w sl, [r7] | sl = *(r7);
0x00002eda cmp.w sl, 0 |
| if (sl != 0) {
0x00002ede bne.w 0x2c4e | goto label_17;
| }
0x00002ee2 mov r2, sl | r2 = sl;
0x00002ee4 b 0x2ef2 | goto label_47;
| label_18:
0x00002ee6 ldr.w sl, [r7] | sl = *(r7);
0x00002eea cmp.w sl, 0 |
0x00002eec lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x00002eee bne.w 0x2c4e | goto label_17;
| }
| label_47:
0x00002ef2 adds r2, 1 | r2++;
0x00002ef4 cmp r2, 0xa |
| if (r2 != 0xa) {
0x00002ef6 bne 0x2ee6 | goto label_18;
| }
0x00002ef8 movs r1, 0 | r1 = 0;
0x00002efa mov r0, r1 | r0 = r1;
0x00002efc blx 0x1510 | fcn_00001510 ();
0x00002f00 movs r2, 0 | r2 = 0;
0x00002f02 b 0x2ee6 | goto label_18;
| label_37:
0x00002f04 dmb ish | __asm ("dmb ish");
0x00002f08 str.w r8, [r5, 0x24] | __asm ("str.w r8, [r5, 0x24]");
0x00002f0c b 0x2d1e | goto label_19;
| label_25:
0x00002f0e add.w r3, r5, 0x24 | r3 = r5 + 0x24;
0x00002f12 dmb ish | __asm ("dmb ish");
| do {
0x00002f16 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x00002f1a subs r1, 1 | r1--;
0x00002f1c strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x00002f20 cmp r2, 0 |
0x00002f22 bne 0x2f16 |
| } while (r2 != 0);
0x00002f24 dmb ish | __asm ("dmb ish");
0x00002f28 dmb ish | __asm ("dmb ish");
0x00002f2c b 0x2bd2 | goto label_20;
| label_46:
0x00002f2e ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00002f30 mov r0, r7 | r0 = r7;
0x00002f32 mov.w fp, 1 |
0x00002f36 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00002f38 b 0x2c80 | goto label_21;
| label_38:
0x00002f3a blx 0x14e0 | fcn_000014e0 ();
| label_26:
0x00002f3e ldr r2, [sp, 0x14] | r2 = var_14h;
0x00002f40 ldr r3, [pc, 0x94] | r3 = *(0x2fd8);
0x00002f42 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002f44 ldr r5, [r3] | r5 = *(0x2fd8);
0x00002f46 blx 0x15a0 | r0 = fcn_000015a0 ();
0x00002f4a ldr r0, [r0] | r0 = *(r0);
0x00002f4c blx 0x1558 | fcn_00001558 ();
0x00002f50 ldr r3, [pc, 0x88] |
0x00002f52 mov r4, r0 | r4 = r0;
0x00002f54 ldr r2, [pc, 0x88] |
0x00002f56 movw r1, 0x161 | r1 = 0x161;
0x00002f5a add r3, pc | r3 = 0x5f3a;
0x00002f5c add r2, pc | r2 = 0x5f40;
| do {
0x00002f5e add.w r3, r3, 0x1dc | r3 += 0x1dc;
0x00002f62 strd r1, r4, [sp] | __asm ("strd r1, r4, [sp]");
0x00002f66 mov r0, r5 | r0 = r5;
0x00002f68 movs r1, 1 | r1 = 1;
0x00002f6a blx 0x15b8 | fcn_000015b8 ();
0x00002f6e blx 0x163c | fcn_0000163c ();
| label_44:
0x00002f72 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00002f74 ldr r3, [pc, 0x60] | r3 = *(0x2fd8);
0x00002f76 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002f78 ldr r5, [r3] | r5 = *(0x2fd8);
0x00002f7a blx 0x1558 | fcn_00001558 ();
0x00002f7e ldr r3, [pc, 0x64] |
0x00002f80 mov r4, r0 | r4 = r0;
0x00002f82 ldr r2, [pc, 0x64] |
0x00002f84 movw r1, 0x109 | r1 = 0x109;
0x00002f88 str r1, [sp] | *(sp) = r1;
0x00002f8a mov r0, r5 | r0 = r5;
0x00002f8c add r3, pc |
0x00002f8e movs r1, 1 | r1 = 1;
0x00002f90 add r2, pc | r2 = 0x5f7e;
0x00002f92 add.w r3, r3, 0x1fc | r3 = 0x6172;
0x00002f96 str r4, [sp, 4] | var_4h = r4;
0x00002f98 blx 0x15b8 | fcn_000015b8 ();
0x00002f9c blx 0x163c | fcn_0000163c ();
| label_28:
0x00002fa0 ldr r3, [pc, 0x48] |
0x00002fa2 movs r2, 0x6b | r2 = 0x6b;
0x00002fa4 ldr r1, [pc, 0x48] |
0x00002fa6 ldr r0, [pc, 0x4c] |
0x00002fa8 add r3, pc | r3 = 0x5f98;
0x00002faa add r1, pc | r1 = 0x5f9e;
0x00002fac adds r3, 0x80 | r3 += 0x80;
0x00002fae add r0, pc | r0 = 0x5fa8;
0x00002fb0 blx 0x1660 | fcn_00001660 ();
| label_24:
0x00002fb4 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00002fb6 ldr r3, [pc, 0x20] | r3 = *(0x2fda);
0x00002fb8 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002fba ldr r5, [r3] | r5 = *(0x2fda);
0x00002fbc blx 0x15a0 | r0 = fcn_000015a0 ();
0x00002fc0 ldr r0, [r0] | r0 = *(r0);
0x00002fc2 blx 0x1558 | fcn_00001558 ();
0x00002fc6 ldr r3, [pc, 0x30] |
0x00002fc8 mov r4, r0 | r4 = r0;
0x00002fca ldr r2, [pc, 0x30] |
0x00002fcc movw r1, 0x14d | r1 = 0x14d;
0x00002fd0 add r3, pc | r3 = 0x5fce;
0x00002fd2 add r2, pc | r2 = 0x5fd4;
0x00002fd4 b 0x2f5e |
| } while (1);
| }
[*] Function fprintf used 1 times liburcu.so.8.0.0