[*] Binary protection state of ip_vs.ko

  
  	No RELRO       No Canary found   NX disabled  REL          No RPATH     No RUNPATH   Symbols


[*] Function mmap tear down of ip_vs.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/net/netfilter/ipvs/ip_vs.ko @ 0x800bcf4 */
                                                                         | #include <stdint.h>
                                                                         |  
                                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                         |  
    ; (fcn) sym.do_ip_vs_get_ctl ()                                      | void do_ip_vs_get_ctl (int32_t arg1, int32_t arg2) {
                                                                         |     int32_t var_0h;
                                                                         |     int32_t var_4h;
                                                                         |     int32_t var_8h;
                                                                         |     int32_t var_ch;
                                                                         |     int32_t var_1ch;
                                                                         |     int32_t var_20h;
                                                                         |     int32_t var_24h;
                                                                         |     int32_t var_34h;
                                                                         |     int32_t var_48h;
                                                                         |     int32_t var_b4h;
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x0800bcf4 push {r4, r5, r6, r7, r8, sb, lr}                         |     
    0x0800bcf8 mov r5, r2                                                |     r5 = r2;
    0x0800bcfc ldr r2, [r0, 0x24]                                        |     r2 = *((r0 + 0x24));
    0x0800bd00 sub sp, sp, 0xb4                                          |     
    0x0800bd04 cmp r2, 0                                                 |     
    0x0800bd08 ldr r7, [r2, 0x888]                                       |     r7 = *((r2 + 0x888));
                                                                         |     if (r2 == 0) {
    0x0800bd0c beq 0x800c138                                             |         goto label_6;
                                                                         |     }
    0x0800bd10 ldr r0, [r2, 0x30]                                        |     r0 = *((r2 + 0x30));
    0x0800bd14 mov r4, r1                                                |     r4 = r1;
    0x0800bd18 mov r1, 0xc                                               |     r1 = 0xc;
    0x0800bd1c mov r6, r3                                                |     r6 = r3;
    0x0800bd20 stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr}");
    0x0800bd24 cmp r0, 0                                                 |     
                                                                         |     if (r0 == 0) {
    0x0800bd28 beq 0x800c334                                             |         goto label_7;
                                                                         |     }
    0x0800bd2c sub r8, r4, 0x480                                         |     r8 = r4 - 0x480;
    0x0800bd30 cmp r8, 7                                                 |     
                                                                         |     if (r8 > 7) {
    0x0800bd34 bhi 0x800c32c                                             |         goto label_8;
                                                                         |     }
    0x0800bd38 stmdaeq r1, {r4, r7, sl, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
    0x0800bd3c stmdaeq r1, {r4, r7, sl, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
    0x0800bd40 add r2, r2, r4                                            |     r2 += r4;
    0x0800bd44 ldr r3, [r6]                                              |     r3 = *(r6);
    0x0800bd48 ldrb r2, [r2, -0x2a0]                                     |     r2 = *((r2 - 0x2a0));
    0x0800bd4c cmp r3, r2                                                |     
                                                                         |     if (r3 < r2) {
    0x0800bd50 blt 0x800c32c                                             |         goto label_8;
                                                                         |     }
    0x0800bd54 cmp r2, 0x68                                              |     
                                                                         |     if (r2 > 0x68) {
    0x0800bd58 bhi 0x800c13c                                             |         goto label_9;
                                                                         |     }
    0x0800bd5c mov r3, sp                                                |     r3 = sp;
    0x0800bd60 bic r3, r3, 0x1fc0                                        |     r3 = BIT_MASK (r3, 0x1fc0);
    0x0800bd64 bic r3, r3, 0x3f                                          |     r3 = BIT_MASK (r3, 0x3f);
    0x0800bd68 ldr ip, [r3, 8]                                           |     ip = *((r3 + 8));
    0x0800bd6c adds r1, r5, r2                                           |     r1 = r5 + r2;
    0x0800bd70 sbcslo r1, r1, ip                                         |     __asm ("sbcslo r1, r1, ip");
                                                                         |     if (r1 >= r5) {
    0x0800bd74 movlo ip, 0                                               |         
                                                                         |     }
    0x0800bd78 cmp ip, 0                                                 |     
                                                                         |     if (ip == 0) {
    0x0800bd7c bne 0x800bdac                                             |         
    0x0800bd80 mrc p15, 0, sb, c3, c0, 0                                 |         __asm ("mrc p15, 0, sb, c3, c0, 0");
    0x0800bd84 bic r3, sb, 0xc                                           |         r3 = BIT_MASK (sb, 0xc);
    0x0800bd88 orr r3, r3, 4                                             |         r3 |= 4;
    0x0800bd8c mcr p15, 0, r3, c3, c0, 0                                 |         __asm ("mcr p15, 0, r3, c3, c0, 0");
    0x0800bd90 isb sy                                                    |         __asm ("isb sy");
    0x0800bd94 mov r1, r5                                                |         r1 = r5;
    0x0800bd98 add r0, sp, 0x48                                          |         r0 += var_48h;
    0x0800bd9c stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr}");
    0x0800bda0 mov r2, r0                                                |         r2 = r0;
    0x0800bda4 mcr p15, 0, sb, c3, c0, 0                                 |         __asm ("mcr p15, 0, sb, c3, c0, 0");
    0x0800bda8 isb sy                                                    |         __asm ("isb sy");
                                                                         |     }
    0x0800bdac cmp r2, 0                                                 |     
                                                                         |     if (r2 != 0) {
    0x0800bdb0 bne 0x800c164                                             |         goto label_10;
                                                                         |     }
    0x0800bdb4 movw r3, 0x487                                            |     r3 = 0x487;
    0x0800bdb8 cmp r4, r3                                                |     
                                                                         |     if (r4 == r3) {
    0x0800bdbc beq 0x800c0c4                                             |         goto label_11;
                                                                         |     }
    0x0800bdc0 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |     __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800bdc4 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |     __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800bdc8 stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}              |     __asm ("stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}");
    0x0800bdcc cmp r8, 6                                                 |     
                                                                         |     if (r8 > 6) {
                                                                         |         /* switch table (7 cases) at 0x800bdd8 */
    0x0800bdd0 ldrls pc, [pc, r8, lsl 2]                                 |         offset_0 = r8 << 2;
                                                                         |         pc = *((pc + offset_0));
                                                                         |     }
    0x0800bdd4 b 0x800c358                                               |     goto label_12;
                                                                         | label_5:
    0x0800be94 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |     __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800be98 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |     __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800be9c stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}");
                                                                         |     do {
                                                                         | label_4:
    0x0800bea0 mov r0, r4                                                |         r0 = r4;
    0x0800bea4 add sp, sp, 0xb4                                          |         
    0x0800bea8 pop {r4, r5, r6, r7, r8, sb, pc}                          |         
                                                                         | label_11:
    0x0800c0c4 add r6, r7, 0x4a0                                         |         r6 = r7 + 0x4a0;
    0x0800c0c8 mov r1, r2                                                |         r1 = r2;
    0x0800c0cc add r6, r6, 0xc                                           |         r6 += 0xc;
    0x0800c0d0 mov r2, 0x30                                              |         r2 = 0x30;
    0x0800c0d4 add r0, sp, 8                                             |         r0 += var_8h;
    0x0800c0d8 stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}");
    0x0800c0dc mov r0, r6                                                |         r0 = r6;
    0x0800c0e0 stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}              |         __asm ("stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}");
    0x0800c0e4 ldr r3, [r7, 0x4a8]                                       |         r3 = *((r7 + 0x4a8));
    0x0800c0e8 tst r3, 1                                                 |         
                                                                         |         if ((r3 & 1) != 0) {
    0x0800c0ec bne 0x800c1d0                                             |             goto label_13;
                                                                         |         }
                                                                         | label_3:
    0x0800c0f0 ldr r3, [r7, 0x4a8]                                       |         r3 = *((r7 + 0x4a8));
    0x0800c0f4 tst r3, 2                                                 |         
                                                                         |         if ((r3 & 2) != 0) {
    0x0800c0f8 bne 0x800c1a8                                             |             goto label_14;
                                                                         |         }
                                                                         | label_2:
    0x0800c0fc mov r3, sp                                                |         r3 = sp;
    0x0800c100 bic r2, r3, 0x1fc0                                        |         r2 = BIT_MASK (r3, 0x1fc0);
    0x0800c104 bic r2, r2, 0x3f                                          |         r2 = BIT_MASK (r2, 0x3f);
    0x0800c108 ldr r3, [r2, 8]                                           |         r3 = *((r2 + 8));
    0x0800c10c adds r1, r5, 0x30                                         |         r1 = r5 + 0x30;
    0x0800c110 sbcslo r1, r1, r3                                         |         __asm ("sbcslo r1, r1, r3");
                                                                         |         if (r1 >= r5) {
    0x0800c114 movlo r3, 0                                               |             r3 = 0;
                                                                         |         }
    0x0800c118 cmp r3, 0                                                 |         
                                                                         |         if (r3 == 0) {
    0x0800c11c beq 0x800c16c                                             |             goto label_15;
                                                                         |         }
                                                                         | label_0:
    0x0800c120 mvn r4, 0xd                                               |         r4 = ~0xd;
                                                                         | label_1:
    0x0800c124 mov r0, r6                                                |         r0 = r6;
    0x0800c128 stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}");
    0x0800c12c mov r0, r4                                                |         r0 = r4;
    0x0800c130 add sp, sp, 0xb4                                          |         
    0x0800c134 pop {r4, r5, r6, r7, r8, sb, pc}                          |         
                                                                         | label_6:
    0x0800c138 udf 0x12                                                  |         __asm ("udf 0x12");
                                                                         | label_9:
    0x0800c13c mov r3, 0x68                                              |         r3 = 0x68;
    0x0800c140 str r2, [sp, 4]                                           |         var_4h = r2;
    0x0800c144 str r3, [sp]                                              |         *(sp) = r3;
    0x0800c148 stmdaeq r1, {r2, r4, r6, r8, sl, pc}                      |         __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
    0x0800c14c stmdaeq r1, {r2, r4, r6, r8, sl, pc}                      |         __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
    0x0800c150 stmdaeq r1, {r2, r3, r5, r8, sl, pc}                      |         __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
    0x0800c154 stmdaeq r1, {r2, r3, r5, r8, sl, pc}                      |         __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
    0x0800c158 mov r2, 9                                                 |         r2 = 9;
    0x0800c15c mov r1, 0x93                                              |         r1 = 0x93;
    0x0800c160 stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}");
                                                                         | label_10:
    0x0800c164 mvn r4, 0xd                                               |         r4 = ~0xd;
    0x0800c168 b 0x800bea0                                               |         
                                                                         |     } while (1);
                                                                         | label_15:
    0x0800c16c mrc p15, 0, r4, c3, c0, 0                                 |     __asm ("mrc p15, 0, r4, c3, c0, 0");
    0x0800c170 bic r3, r4, 0xc                                           |     r3 = BIT_MASK (r4, 0xc);
    0x0800c174 orr r3, r3, 4                                             |     r3 |= 4;
    0x0800c178 mcr p15, 0, r3, c3, c0, 0                                 |     __asm ("mcr p15, 0, r3, c3, c0, 0");
    0x0800c17c isb sy                                                    |     __asm ("isb sy");
    0x0800c180 mov r2, 0x30                                              |     r2 = 0x30;
    0x0800c184 add r1, sp, 8                                             |     r1 += var_8h;
    0x0800c188 mov r0, r5                                                |     r0 = r5;
    0x0800c18c stmdaeq r2, {r3, r4, r5, r7, sb, ip, sp, lr}              |     __asm ("stmdaeq r2, {r3, r4, r5, r7, sb, ip, sp, lr}");
    0x0800c190 mcr p15, 0, r4, c3, c0, 0                                 |     __asm ("mcr p15, 0, r4, c3, c0, 0");
    0x0800c194 isb sy                                                    |     __asm ("isb sy");
    0x0800c198 cmp r0, 0                                                 |     
                                                                         |     if (r0 != 0) {
    0x0800c19c bne 0x800c120                                             |         goto label_0;
                                                                         |     }
    0x0800c1a0 mov r4, r0                                                |     r4 = r0;
    0x0800c1a4 b 0x800c124                                               |     goto label_1;
                                                                         | label_14:
    0x0800c1a8 add r1, r7, 0x4f0                                         |     r1 = r7 + 0x4f0;
    0x0800c1ac add r0, sp, 0x24                                          |     r0 += var_24h;
    0x0800c1b0 add r1, r1, 0xe                                           |     r1 += 0xe;
    0x0800c1b4 mov r2, 0x10                                              |     r2 = 0x10;
    0x0800c1b8 mov r3, 2                                                 |     r3 = 2;
    0x0800c1bc str r3, [sp, 0x20]                                        |     var_20h = r3;
    0x0800c1c0 stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr}");
    0x0800c1c4 ldr r3, [r7, 0x4f4]                                       |     r3 = *((r7 + 0x4f4));
    0x0800c1c8 str r3, [sp, 0x34]                                        |     var_34h = r3;
    0x0800c1cc b 0x800c0fc                                               |     goto label_2;
                                                                         | label_13:
    0x0800c1d0 add r1, r7, 0x4d0                                         |     r1 = r7 + 0x4d0;
    0x0800c1d4 add r0, sp, 0xc                                           |     r0 += var_ch;
    0x0800c1d8 add r1, r1, 2                                             |     r1 += 2;
    0x0800c1dc mov r2, 0x10                                              |     r2 = 0x10;
    0x0800c1e0 mov r3, 1                                                 |     r3 = 1;
    0x0800c1e4 str r3, [sp, 8]                                           |     var_8h = r3;
    0x0800c1e8 stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r5, r6, sb, ip, sp, lr}");
    0x0800c1ec ldr r3, [r7, 0x4c8]                                       |     r3 = *((r7 + 0x4c8));
    0x0800c1f0 str r3, [sp, 0x1c]                                        |     var_1ch = r3;
    0x0800c1f4 b 0x800c0f0                                               |     goto label_3;
                                                                         | label_8:
    0x0800c32c mvn r4, 0x15                                              |     r4 = ~0x15;
    0x0800c330 b 0x800bea0                                               |     goto label_4;
                                                                         | label_7:
    0x0800c334 mvn r4, 0                                                 |     r4 = ~0;
    0x0800c338 b 0x800bea0                                               |     goto label_4;
                                                                         | label_12:
    0x0800c358 mvn r4, 0x15                                              |     r4 = ~0x15;
    0x0800c35c b 0x800be94                                               |     goto label_5;
                                                                         | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x800b724 */
                                                                         | #include <stdint.h>
                                                                         |  
                                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                         | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                         |                                ((n & 0x0000ff00) <<  8) | \
                                                                         |                                ((n & 0x00ff0000) >>  8) | \
                                                                         |                                ((n & 0xff000000) >> 24)))
                                                                         |  
    ; (fcn) sym.do_ip_vs_set_ctl ()                                      | void do_ip_vs_set_ctl (int32_t arg_e8h, int32_t arg1, int32_t arg2) {
                                                                         |     int32_t var_0h;
                                                                         |     int32_t var_0h_2;
                                                                         |     int32_t var_ch;
                                                                         |     int32_t var_10h;
                                                                         |     int32_t var_14h;
                                                                         |     int32_t var_1ch;
                                                                         |     int32_t var_20h;
                                                                         |     int32_t var_24h;
                                                                         |     int32_t var_30h;
                                                                         |     int32_t var_34h;
                                                                         |     int32_t var_38h;
                                                                         |     int32_t var_3ch;
                                                                         |     int32_t var_40h;
                                                                         |     int32_t var_44h;
                                                                         |     int32_t var_4ch;
                                                                         |     int32_t var_4eh;
                                                                         |     int32_t var_50h;
                                                                         |     int32_t var_54h;
                                                                         |     int32_t var_58h;
                                                                         |     int32_t var_5ch;
                                                                         |     int32_t var_60h;
                                                                         |     int32_t var_64h;
                                                                         |     int32_t var_66h;
                                                                         |     int32_t var_68h;
                                                                         |     int32_t var_6ch;
                                                                         |     int32_t var_70h;
                                                                         |     int32_t var_74h;
                                                                         |     int32_t var_78h;
                                                                         |     int32_t var_7ch;
                                                                         |     int32_t var_80h;
                                                                         |     int32_t var_84h;
                                                                         |     int32_t var_88h;
                                                                         |     int32_t var_8ch;
                                                                         |     int32_t var_90h;
                                                                         |     int32_t var_9ch;
                                                                         |     int32_t var_a0h;
                                                                         |     int32_t var_a4h;
                                                                         |     int32_t var_a8h;
                                                                         |     int32_t var_ach;
                                                                         |     int32_t var_b0h;
                                                                         |     int32_t var_b4h;
                                                                         |     int32_t var_b8h;
                                                                         |     int32_t var_bch;
                                                                         |     int32_t var_c4h;
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x0800b724 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}                 |     
    0x0800b728 mov r4, r1                                                |     r4 = r1;
    0x0800b72c mov r1, 0xc                                               |     r1 = 0xc;
    0x0800b730 ldr r0, [r0, 0x24]                                        |     r0 = *(arg_e8hx24);
    0x0800b734 sub sp, sp, 0xc4                                          |     
    0x0800b738 add ip, sp, 0x10                                          |     
    0x0800b73c ldr r7, [r0, 0x888]                                       |     r7 = *((r0 + 0x888));
    0x0800b740 ldr r0, [r0, 0x30]                                        |     r0 = *((r0 + 0x30));
    0x0800b744 ldr r8, [sp, 0xe8]                                        |     r8 = *(arg_e8h);
    0x0800b748 stm ip, {r2, r3}                                          |     *(ip) = r2;
                                                                         |     *((ip + 4)) = r3;
    0x0800b74c stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, sb, ip, sp, lr}");
    0x0800b750 cmp r0, 0                                                 |     
                                                                         |     if (r0 == 0) {
    0x0800b754 beq 0x800bcc8                                             |         goto label_8;
                                                                         |     }
    0x0800b758 sub r6, r4, 0x480                                         |     r6 = r4 - 0x480;
    0x0800b75c cmp r6, 0xf                                               |     
                                                                         |     if (r6 > 0xf) {
    0x0800b760 bhi 0x800bcc0                                             |         goto label_9;
                                                                         |     }
    0x0800b764 stmdaeq r1, {r4, r7, sl, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
    0x0800b768 stmdaeq r1, {r4, r7, sl, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r4, r7, sl, ip, sp, lr}");
    0x0800b76c add r3, r3, r4                                            |     r3 += r4;
    0x0800b770 ldrb r3, [r3, -0x2b0]                                     |     r3 = *((r3 - 0x2b0));
    0x0800b774 cmp r3, r8                                                |     
                                                                         |     if (r3 != r8) {
    0x0800b778 bne 0x800bcc0                                             |         goto label_9;
                                                                         |     }
    0x0800b77c ldrb r2, [sp, 0x14]                                       |     r2 = var_14h;
    0x0800b780 ldr r1, [sp, 0x10]                                        |     r1 = var_10h;
    0x0800b784 tst r2, 1                                                 |     
                                                                         |     if ((r2 & 1) != 0) {
    0x0800b788 bne 0x800b850                                             |         goto label_10;
                                                                         |     }
    0x0800b78c cmp r3, 0x44                                              |     
                                                                         |     if (r3 > 0x44) {
    0x0800b790 bhi 0x800bc80                                             |         goto label_11;
                                                                         |     }
    0x0800b794 mov r3, sp                                                |     r3 = sp;
    0x0800b798 bic r2, r3, 0x1fc0                                        |     r2 = BIT_MASK (r3, 0x1fc0);
    0x0800b79c bic r2, r2, 0x3f                                          |     r2 = BIT_MASK (r2, 0x3f);
    0x0800b7a0 ldr r3, [r2, 8]                                           |     r3 = *((r2 + 8));
    0x0800b7a4 adds r0, r1, r8                                           |     r0 = r1 + r8;
    0x0800b7a8 sbcslo r0, r0, r3                                         |     __asm ("sbcslo r0, r0, r3");
                                                                         |     if (r0 >= r1) {
    0x0800b7ac movlo r3, 0                                               |         r3 = 0;
                                                                         |     }
    0x0800b7b0 cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x0800b7b4 bne 0x800bc78                                             |         goto label_12;
                                                                         |     }
    0x0800b7b8 mrc p15, 0, sb, c3, c0, 0                                 |     __asm ("mrc p15, 0, sb, c3, c0, 0");
    0x0800b7bc bic r3, sb, 0xc                                           |     r3 = BIT_MASK (sb, 0xc);
    0x0800b7c0 orr r3, r3, 4                                             |     r3 |= 4;
    0x0800b7c4 mcr p15, 0, r3, c3, c0, 0                                 |     __asm ("mcr p15, 0, r3, c3, c0, 0");
    0x0800b7c8 isb sy                                                    |     __asm ("isb sy");
    0x0800b7cc mov r2, r8                                                |     r2 = r8;
    0x0800b7d0 add r0, sp, 0x7c                                          |     r0 += var_7ch;
    0x0800b7d4 stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r5, r6, r7, sb, ip, sp, lr}");
    0x0800b7d8 mcr p15, 0, sb, c3, c0, 0                                 |     __asm ("mcr p15, 0, sb, c3, c0, 0");
    0x0800b7dc isb sy                                                    |     __asm ("isb sy");
                                                                         | label_6:
    0x0800b7e0 cmp r0, 0                                                 |     
                                                                         |     if (r0 != 0) {
    0x0800b7e4 bne 0x800bca4                                             |         goto label_13;
                                                                         |     }
    0x0800b7e8 sub r3, r6, 0xb                                           |     r3 = r6 - 0xb;
    0x0800b7ec cmp r3, 1                                                 |     
                                                                         |     if (r3 > 1) {
    0x0800b7f0 bhi 0x800b868                                             |         goto label_14;
                                                                         |     }
                                                                         |     do {
    0x0800b7f4 movw r3, 0x48b                                            |         r3 = 0x48b;
    0x0800b7f8 cmp r4, r3                                                |         
                                                                         |         if (r4 != r3) {
    0x0800b7fc bne 0x800b8b0                                             |             goto label_15;
                                                                         |         }
    0x0800b800 mov r2, 0x2c                                              |         r2 = 0x2c;
    0x0800b804 mov r1, 0                                                 |         r1 = 0;
    0x0800b808 add r0, sp, 0x4c                                          |         r0 += var_4ch;
    0x0800b80c stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}");
    0x0800b810 mov r2, 0x10                                              |         r2 = 0x10;
    0x0800b814 add r1, sp, 0x80                                          |         r1 += var_80h;
    0x0800b818 add r0, sp, 0x66                                          |         r0 += var_66h;
    0x0800b81c stmdaeq r2, {r2, r5, r6, r7, sb, ip, sp, lr}              |         __asm ("stmdaeq r2, {r2, r5, r6, r7, sb, ip, sp, lr}");
    0x0800b820 cmp r0, 0                                                 |         
                                                                         |         if (r0 <= 0) {
    0x0800b824 ble 0x800bcc0                                             |             goto label_9;
                                                                         |         }
    0x0800b828 ldr r3, [sp, 0x90]                                        |         r3 = var_90h;
    0x0800b82c add r1, sp, 0x4c                                          |         r1 += var_4ch;
    0x0800b830 ldr r2, [sp, 0x7c]                                        |         r2 = var_7ch;
    0x0800b834 mov r0, r7                                                |         r0 = r7;
    0x0800b838 str r3, [sp, 0x5c]                                        |         var_5ch = r3;
    0x0800b83c stmdaeq r1, {r2, r5, r6, sb, fp, ip}                      |         __asm ("stmdaeq r1, {r2, r5, r6, sb, fp, ip}");
    0x0800b840 mov r5, r0                                                |         r5 = r0;
                                                                         | label_7:
    0x0800b844 mov r0, r5                                                |         r0 = r5;
    0x0800b848 add sp, sp, 0xc4                                          |         
    0x0800b84c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                  |         
                                                                         | label_10:
    0x0800b850 mov r2, r8                                                |         r2 = r8;
    0x0800b854 add r0, sp, 0x7c                                          |         r0 += var_7ch;
    0x0800b858 stmdaeq r2, {r2, r4, r5, r7, r8, ip, sp, lr}              |         __asm ("stmdaeq r2, {r2, r4, r5, r7, r8, ip, sp, lr}");
    0x0800b85c sub r3, r6, 0xb                                           |         r3 = r6 - 0xb;
    0x0800b860 cmp r3, 1                                                 |         
    0x0800b864 bls 0x800b7f4                                             |         
                                                                         |     } while (r3 < 1);
                                                                         | label_14:
    0x0800b868 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |     __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800b86c stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |     __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800b870 stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}              |     __asm ("stmdaeq r2, {r2, r3, r5, r7, sb, ip, sp, lr}");
    0x0800b874 movw r3, 0x485                                            |     r3 = 0x485;
    0x0800b878 cmp r4, r3                                                |     
                                                                         |     if (r4 == r3) {
    0x0800b87c beq 0x800bc64                                             |         goto label_16;
                                                                         |     }
    0x0800b880 movw r3, 0x48a                                            |     r3 = 0x48a;
    0x0800b884 cmp r4, r3                                                |     
                                                                         |     if (r4 == r3) {
    0x0800b888 beq 0x800bcac                                             |         goto label_17;
                                                                         |     }
    0x0800b88c cmp r8, 0                                                 |     
    0x0800b890 bne 0x800b8cc                                             |     
                                                                         |     while (r0 == 0x10) {
    0x0800b894 mvn r5, 0x15                                              |         r5 = ~0x15;
                                                                         | label_1:
    0x0800b898 stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |         __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800b89c stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}              |         __asm ("stmdaeq r1, {r2, r4, r5, r7, r8, sb, ip, pc}");
    0x0800b8a0 stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r4, r5, r7, sb, ip, sp, lr}");
    0x0800b8a4 mov r0, r5                                                |         r0 = r5;
    0x0800b8a8 add sp, sp, 0xc4                                          |         
    0x0800b8ac pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                  |         
                                                                         | label_15:
    0x0800b8b0 ldr r1, [sp, 0x7c]                                        |         r1 = var_7ch;
    0x0800b8b4 mov r0, r7                                                |         r0 = r7;
    0x0800b8b8 stmdaeq r1, {r2, r5, r6, sl, sp}                          |         __asm ("stmdaeq r1, {r2, r5, r6, sl, sp}");
    0x0800b8bc mov r5, r0                                                |         r5 = r0;
    0x0800b8c0 mov r0, r5                                                |         r0 = r5;
    0x0800b8c4 add sp, sp, 0xc4                                          |         
    0x0800b8c8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                  |         
    0x0800b8cc ldr r2, [sp, 0xa0]                                        |         r2 = var_a0h;
    0x0800b8d0 mov r1, 0                                                 |         r1 = 0;
    0x0800b8d4 str r2, [sp, 0x74]                                        |         var_74h = r2;
    0x0800b8d8 add r0, sp, 0x24                                          |         r0 += var_24h;
    0x0800b8dc ldr r2, [sp, 0xa4]                                        |         r2 = var_a4h;
    0x0800b8e0 mov sl, 2                                                 |         sl = 2;
    0x0800b8e4 str r2, [sp, 0x78]                                        |         var_78h = r2;
    0x0800b8e8 ldr r2, [sp, 0x9c]                                        |         r2 = var_9ch;
    0x0800b8ec ldr r3, [sp, 0x88]                                        |         r3 = var_88h;
    0x0800b8f0 ldrh r8, [sp, 0x7c]                                       |         r8 = var_7ch;
    0x0800b8f4 ldr sb, [sp, 0x80]                                        |         sb = var_80h;
    0x0800b8f8 ldrh fp, [sp, 0x84]                                       |         fp = var_84h;
    0x0800b8fc str r2, [sp, 0x70]                                        |         var_70h = r2;
    0x0800b900 mov r2, 0x28                                              |         r2 = 0x28;
    0x0800b904 str r1, [sp, 0x60]                                        |         var_60h = r1;
    0x0800b908 str r3, [sp, 0x64]                                        |         var_64h = r3;
    0x0800b90c str r3, [sp, 0xc]                                         |         var_ch = r3;
    0x0800b910 add r3, sp, 0x8c                                          |         r3 += var_8ch;
    0x0800b914 str r1, [sp, 0x54]                                        |         var_54h = r1;
    0x0800b918 str r3, [sp, 0x68]                                        |         var_68h = r3;
    0x0800b91c str r1, [sp, 0x58]                                        |         var_58h = r1;
    0x0800b920 str r1, [sp, 0x5c]                                        |         var_5ch = r1;
    0x0800b924 str r1, [sp, 0x6c]                                        |         var_6ch = r1;
    0x0800b928 strh sl, [sp, 0x4c]                                       |         var_4ch = sl;
    0x0800b92c strh r8, [sp, 0x4e]                                       |         var_4eh = r8;
    0x0800b930 str sb, [sp, 0x50]                                        |         var_50h = sb;
    0x0800b934 strh fp, [sp, 0x60]                                       |         var_60h = fp;
    0x0800b938 stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r2, r4, r5, sb, ip, sp, lr}");
    0x0800b93c ldr r2, [sp, 0xa8]                                        |         r2 = var_a8h;
    0x0800b940 str r2, [sp, 0x20]                                        |         var_20h = r2;
    0x0800b944 ldrh r2, [sp, 0xac]                                       |         r2 = var_ach;
    0x0800b948 strh r2, [sp, 0x30]                                       |         var_30h = r2;
    0x0800b94c ldr r2, [sp, 0xb0]                                        |         r2 = var_b0h;
    0x0800b950 str r2, [sp, 0x34]                                        |         var_34h = r2;
    0x0800b954 ldr r2, [sp, 0xb4]                                        |         r2 = var_b4h;
    0x0800b958 str r2, [sp, 0x38]                                        |         var_38h = r2;
    0x0800b95c ldr r2, [sp, 0xbc]                                        |         r2 = var_bch;
    0x0800b960 str r2, [sp, 0x40]                                        |         var_40h = r2;
    0x0800b964 ldr r2, [sp, 0xb8]                                        |         r2 = var_b8h;
    0x0800b968 str r2, [sp, 0x3c]                                        |         var_3ch = r2;
    0x0800b96c movw r2, 0x48f                                            |         r2 = 0x48f;
    0x0800b970 ldr r3, [sp, 0xc]                                         |         r3 = var_ch;
    0x0800b974 cmp r4, r2                                                |         
    0x0800b978 strh sl, [sp, 0x44]                                       |         var_44h = sl;
                                                                         |         if (r4 == r2) {
    0x0800b97c beq 0x800bb74                                             |             goto label_18;
                                                                         |         }
    0x0800b980 sub r2, r6, 2                                             |         r2 = r6 - 2;
    0x0800b984 cmp r2, 1                                                 |         
                                                                         |         if (r2 > 1) {
    0x0800b988 bhi 0x800b9a0                                             |             goto label_5;
                                                                         |         }
    0x0800b98c add r0, sp, 0x8c                                          |         r0 += var_8ch;
    0x0800b990 mov r1, 0x10                                              |         r1 = 0x10;
    0x0800b994 stmdaeq r2, {r3, r5, r6, r7, sb, ip, sp, lr}              |         __asm ("stmdaeq r2, {r3, r5, r6, r7, sb, ip, sp, lr}");
    0x0800b998 cmp r0, 0x10                                              |         
    0x0800b99c beq 0x800b894                                             |         
                                                                         |     }
                                                                         | label_5:
    0x0800b9a0 cmp r8, 6                                                 |     
    0x0800b9a4 cmpne r8, 0x11                                            |     __asm ("cmpne r8, 0x11");
                                                                         |     if (r8 == 6) {
    0x0800b9a8 movne r3, 1                                               |         r3 = 1;
                                                                         |     }
                                                                         |     if (r8 != 6) {
    0x0800b9ac moveq r3, 0                                               |         r3 = 0;
                                                                         |     }
    0x0800b9b0 cmp r8, 0x84                                              |     
                                                                         |     if (r8 != 0x84) {
    0x0800b9b4 moveq r3, 0                                               |         r3 = 0;
                                                                         |     }
                                                                         |     if (r8 == 0x84) {
    0x0800b9b8 andne r3, r3, 1                                           |         r3 &= 1;
                                                                         |     }
    0x0800b9bc cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x0800b9c0 bne 0x800bcd0                                             |         goto label_19;
                                                                         |     }
    0x0800b9c4 stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}");
    0x0800b9c8 ldr r1, [sp, 0x64]                                        |     r1 = var_64h;
    0x0800b9cc lsr r2, r7, 8                                             |     r2 = r7 >> 8;
    0x0800b9d0 cmp r1, 0                                                 |     
                                                                         |     if (r1 != 0) {
    0x0800b9d4 bne 0x800bb08                                             |         goto label_20;
                                                                         |     }
    0x0800b9d8 ldrh r1, [sp, 0x4c]                                       |     r1 = var_4ch;
    0x0800b9dc ldr r0, [sp, 0x50]                                        |     r0 = var_50h;
    0x0800b9e0 cmp r1, 0xa                                               |     
    0x0800b9e4 ldrh ip, [sp, 0x60]                                       |     ip = var_60h;
    0x0800b9e8 ldrh lr, [sp, 0x4e]                                       |     lr = var_4eh;
                                                                         |     if (r1 == 0xa) {
    0x0800b9ec movne r8, r0                                              |         r8 = r0;
                                                                         |     }
    0x0800b9f0 rev16 sb, ip                                              |     __asm ("rev16 sb, ip");
                                                                         |     if (r1 != 0xa) {
    0x0800b9f4 ldreq r8, [sp, 0x54]                                      |         r8 = var_54h;
                                                                         |     }
                                                                         |     if (r1 != 0xa) {
    0x0800b9f8 ldreq r3, [sp, 0x58]                                      |         r3 = var_58h;
                                                                         |     }
    0x0800b9fc uxth sb, sb                                               |     sb = (int16_t) sb;
                                                                         |     if (r1 != 0xa) {
    0x0800ba00 eoreq r8, r8, r0                                          |         r8 ^= r0;
                                                                         |     }
                                                                         |     if (r1 != 0xa) {
    0x0800ba04 eoreq r8, r8, r3                                          |         r8 ^= r3;
                                                                         |     }
                                                                         |     if (r1 != 0xa) {
    0x0800ba08 ldreq r3, [sp, 0x5c]                                      |         r3 = var_5ch;
                                                                         |     }
                                                                         |     if (r1 != 0xa) {
    0x0800ba0c eoreq r8, r8, r3                                          |         r8 ^= r3;
                                                                         |     }
    0x0800ba10 uxtb r3, ip                                               |     r3 = (int8_t) ip;
    0x0800ba14 eor r3, r3, lr                                            |     r3 ^= lr;
    0x0800ba18 rev r8, r8                                                |     r8 = SWAP32 (r8);
    0x0800ba1c eor r3, r3, r2                                            |     r3 ^= r2;
    0x0800ba20 stmdaeq r1, {r2, r3, r5, fp, sp, pc}                      |     __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
    0x0800ba24 stmdaeq r1, {r2, r3, r5, fp, sp, pc}                      |     __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
    0x0800ba28 eor r3, r3, sb                                            |     r3 ^= sb;
    0x0800ba2c eor r3, r3, r8                                            |     r3 ^= r8;
    0x0800ba30 uxtb r3, r3                                               |     r3 = (int8_t) r3;
    0x0800ba34 ldr r3, [r2, r3, lsl 2]                                   |     offset_0 = r3 << 2;
                                                                         |     r3 = *((r2 + offset_0));
    0x0800ba38 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800ba3c beq 0x800baa0                                             |         goto label_3;
                                                                         |     }
    0x0800ba40 ldr sl, [sp, 0x54]                                        |     sl = var_54h;
    0x0800ba44 ldr sb, [sp, 0x58]                                        |     sb = var_58h;
    0x0800ba48 ldr r8, [sp, 0x5c]                                        |     r8 = var_5ch;
    0x0800ba4c b 0x800ba5c                                               |     
                                                                         |     while (r1 != r2) {
                                                                         | label_0:
    0x0800ba50 ldr r3, [r3]                                              |         r3 = *(r3);
    0x0800ba54 cmp r3, 0                                                 |         
                                                                         |         if (r3 == 0) {
    0x0800ba58 beq 0x800baa0                                             |             goto label_3;
                                                                         |         }
    0x0800ba5c ldrh r2, [r3, 0x14]                                       |         r2 = *((r3 + 0x14));
    0x0800ba60 cmp r1, r2                                                |         
    0x0800ba64 bne 0x800ba50                                             |         
                                                                         |     }
    0x0800ba68 ldr r2, [r3, 0x18]                                        |     r2 = *((r3 + 0x18));
    0x0800ba6c cmp r1, 0xa                                               |     
                                                                         |     if (r1 == 0xa) {
    0x0800ba70 beq 0x800bad8                                             |         goto label_21;
                                                                         |     }
    0x0800ba74 cmp r2, r0                                                |     
                                                                         |     if (r2 != r0) {
    0x0800ba78 bne 0x800ba50                                             |         goto label_0;
                                                                         |     }
                                                                         | label_2:
    0x0800ba7c ldrh r2, [r3, 0x28]                                       |     r2 = *((r3 + 0x28));
    0x0800ba80 cmp r2, ip                                                |     
                                                                         |     if (r2 != ip) {
    0x0800ba84 bne 0x800ba50                                             |         goto label_0;
                                                                         |     }
    0x0800ba88 ldrh r2, [r3, 0x16]                                       |     r2 = *((r3 + 0x16));
    0x0800ba8c cmp r2, lr                                                |     
                                                                         |     if (r2 != lr) {
    0x0800ba90 bne 0x800ba50                                             |         goto label_0;
                                                                         |     }
    0x0800ba94 ldr r2, [r3, 0x3c]                                        |     r2 = *((r3 + 0x3c));
    0x0800ba98 cmp r7, r2                                                |     
                                                                         |     if (r7 != r2) {
    0x0800ba9c bne 0x800ba50                                             |         goto label_0;
                                                                         |     }
                                                                         | label_3:
    0x0800baa0 str r3, [sp, 0x1c]                                        |     var_1ch = r3;
    0x0800baa4 stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
    0x0800baa8 movw r3, 0x482                                            |     r3 = 0x482;
    0x0800baac cmp r4, r3                                                |     
                                                                         |     if (r4 == r3) {
    0x0800bab0 beq 0x800bc40                                             |         goto label_22;
                                                                         |     }
    0x0800bab4 ldr r0, [sp, 0x1c]                                        |     r0 = var_1ch;
    0x0800bab8 cmp r0, 0                                                 |     
                                                                         |     if (r0 != 0) {
    0x0800babc beq 0x800bad0                                             |         
    0x0800bac0 ldrh r2, [r0, 0x16]                                       |         r2 = *((r0 + 0x16));
    0x0800bac4 ldrh r3, [sp, 0x4e]                                       |         r3 = var_4eh;
    0x0800bac8 cmp r2, r3                                                |         
                                                                         |         if (r2 == r3) {
    0x0800bacc beq 0x800bb94                                             |             goto label_23;
                                                                         |         }
                                                                         |     }
    0x0800bad0 mvn r5, 2                                                 |     r5 = ~2;
    0x0800bad4 b 0x800b898                                               |     goto label_1;
                                                                         | label_21:
    0x0800bad8 ldr fp, [r3, 0x1c]                                        |     fp = *((r3 + 0x1c));
    0x0800badc eor r2, r2, r0                                            |     r2 ^= r0;
    0x0800bae0 eor fp, fp, sl                                            |     
    0x0800bae4 orr r2, fp, r2                                            |     r2 = fp | r2;
    0x0800bae8 ldr fp, [r3, 0x20]                                        |     fp = *((r3 + 0x20));
    0x0800baec eor fp, fp, sb                                            |     
    0x0800baf0 orr r2, r2, fp                                            |     r2 |= fp;
    0x0800baf4 ldr fp, [r3, 0x24]                                        |     fp = *((r3 + 0x24));
    0x0800baf8 eor fp, fp, r8                                            |     
    0x0800bafc orrs fp, r2, fp                                           |     
                                                                         |     if (fp == r2) {
    0x0800bb00 beq 0x800ba7c                                             |         goto label_2;
                                                                         |     }
    0x0800bb04 b 0x800ba50                                               |     goto label_0;
                                                                         | label_20:
    0x0800bb08 eor r2, r2, r1                                            |     r2 ^= r1;
    0x0800bb0c stmdaeq r1, {r2, r3, r5, fp, sp, pc}                      |     __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
    0x0800bb10 stmdaeq r1, {r2, r3, r5, fp, sp, pc}                      |     __asm ("stmdaeq r1, {r2, r3, r5, fp, sp, pc}");
    0x0800bb14 uxtb r2, r2                                               |     r2 = (int8_t) r2;
    0x0800bb18 add r3, r3, r2, lsl 2                                     |     r3 += (r2 << 2);
    0x0800bb1c ldr r3, [r3, 0x400]                                       |     r3 = *((r3 + 0x400));
    0x0800bb20 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800bb24 beq 0x800baa0                                             |         goto label_3;
                                                                         |     }
    0x0800bb28 ldrh r0, [sp, 0x4c]                                       |     r0 = var_4ch;
    0x0800bb2c sub r3, r3, 8                                             |     r3 -= 8;
    0x0800bb30 b 0x800bb44                                               |     goto label_24;
                                                                         | label_4:
    0x0800bb34 ldr r3, [r3, 8]                                           |     r3 = *((r3 + 8));
    0x0800bb38 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800bb3c beq 0x800baa0                                             |         goto label_3;
                                                                         |     }
    0x0800bb40 sub r3, r3, 8                                             |     r3 -= 8;
                                                                         | label_24:
    0x0800bb44 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800bb48 beq 0x800baa0                                             |         goto label_3;
                                                                         |     }
    0x0800bb4c ldr r2, [r3, 0x2c]                                        |     r2 = *((r3 + 0x2c));
    0x0800bb50 cmp r1, r2                                                |     
                                                                         |     if (r1 != r2) {
    0x0800bb54 bne 0x800bb34                                             |         goto label_4;
                                                                         |     }
    0x0800bb58 ldrh r2, [r3, 0x14]                                       |     r2 = *((r3 + 0x14));
    0x0800bb5c cmp r2, r0                                                |     
                                                                         |     if (r2 != r0) {
    0x0800bb60 bne 0x800bb34                                             |         goto label_4;
                                                                         |     }
    0x0800bb64 ldr r2, [r3, 0x3c]                                        |     r2 = *((r3 + 0x3c));
    0x0800bb68 cmp r7, r2                                                |     
                                                                         |     if (r7 != r2) {
    0x0800bb6c bne 0x800bb34                                             |         goto label_4;
                                                                         |     }
    0x0800bb70 b 0x800baa0                                               |     goto label_3;
                                                                         | label_18:
    0x0800bb74 orr sb, sb, r3                                            |     sb |= r3;
    0x0800bb78 cmp fp, 0                                                 |     
    0x0800bb7c cmpeq sb, 0                                               |     __asm ("cmpeq sb, 0");
                                                                         |     if (fp != 0) {
    0x0800bb80 bne 0x800b9a0                                             |         goto label_5;
                                                                         |     }
    0x0800bb84 mov r0, r7                                                |     r0 = r7;
    0x0800bb88 bl 0x80083e8                                              |     r0 = ip_vs_zero_all ();
    0x0800bb8c mov r5, r0                                                |     r5 = r0;
    0x0800bb90 b 0x800b898                                               |     goto label_1;
                                                                         | label_23:
    0x0800bb94 sub r6, r6, 2                                             |     r6 -= 2;
    0x0800bb98 cmp r6, 0xd                                               |     
                                                                         |     if (r6 > 0xd) {
                                                                         |         /* switch table (14 cases) at 0x800bba4 */
    0x0800bb9c ldrls pc, [pc, r6, lsl 2]                                 |         offset_1 = r6 << 2;
                                                                         |         pc = *((pc + offset_1));
                                                                         |     }
    0x0800bba0 b 0x800b898                                               |     goto label_1;
                                                                         |     do {
    0x0800bbdc mvn r5, 0x10                                              |         r5 = ~0x10;
    0x0800bbe0 b 0x800b898                                               |         goto label_1;
                                                                         | label_22:
    0x0800bc40 ldr r3, [sp, 0x1c]                                        |         r3 = var_1ch;
    0x0800bc44 cmp r3, 0                                                 |         
    0x0800bc48 bne 0x800bbdc                                             |         
                                                                         |     } while (r3 != 0);
    0x0800bc4c add r2, sp, 0x1c                                          |     r2 += var_1ch;
    0x0800bc50 add r1, sp, 0x4c                                          |     r1 += var_4ch;
    0x0800bc54 mov r0, r7                                                |     r0 = r7;
    0x0800bc58 bl 0x8007b08                                              |     r0 = ip_vs_add_service ();
    0x0800bc5c mov r5, r0                                                |     r5 = r0;
    0x0800bc60 b 0x800b898                                               |     goto label_1;
                                                                         | label_16:
    0x0800bc64 mov r0, r7                                                |     r0 = r7;
    0x0800bc68 mov r1, 0                                                 |     r1 = 0;
    0x0800bc6c bl 0x80097d8                                              |     r0 = ip_vs_flush ();
    0x0800bc70 mov r5, r0                                                |     r5 = r0;
    0x0800bc74 b 0x800b898                                               |     goto label_1;
                                                                         | label_12:
    0x0800bc78 mov r0, r8                                                |     r0 = r8;
    0x0800bc7c b 0x800b7e0                                               |     goto label_6;
                                                                         | label_11:
    0x0800bc80 mov r2, 0x44                                              |     r2 = 0x44;
    0x0800bc84 stmdaeq r1, {r2, r4, r6, r8, sl, pc}                      |     __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
    0x0800bc88 stmdaeq r1, {r2, r4, r6, r8, sl, pc}                      |     __asm ("stmdaeq r1, {r2, r4, r6, r8, sl, pc}");
    0x0800bc8c strd r2, r3, [sp]                                         |     __asm ("strd r2, r3, [sp]");
    0x0800bc90 mov r1, 0x93                                              |     r1 = 0x93;
    0x0800bc94 stmdaeq r1, {r2, r3, r5, r8, sl, pc}                      |     __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
    0x0800bc98 stmdaeq r1, {r2, r3, r5, r8, sl, pc}                      |     __asm ("stmdaeq r1, {r2, r3, r5, r8, sl, pc}");
    0x0800bc9c mov r2, 9                                                 |     r2 = 9;
    0x0800bca0 stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}");
                                                                         | label_13:
    0x0800bca4 mvn r5, 0xd                                               |     r5 = ~0xd;
    0x0800bca8 b 0x800b844                                               |     goto label_7;
                                                                         | label_17:
    0x0800bcac add r1, sp, 0x7c                                          |     r1 += var_7ch;
    0x0800bcb0 mov r0, r7                                                |     r0 = r7;
    0x0800bcb4 bl 0x800779c                                              |     r0 = ip_vs_set_timeout ();
    0x0800bcb8 mov r5, r0                                                |     r5 = r0;
    0x0800bcbc b 0x800b898                                               |     goto label_1;
                                                                         | label_9:
    0x0800bcc0 mvn r5, 0x15                                              |     r5 = ~0x15;
    0x0800bcc4 b 0x800b844                                               |     goto label_7;
                                                                         | label_8:
    0x0800bcc8 mvn r5, 0                                                 |     r5 = ~0;
    0x0800bccc b 0x800b844                                               |     goto label_7;
                                                                         | label_19:
    0x0800bcd0 rev16 r3, fp                                              |     __asm ("rev16 r3, fp");
    0x0800bcd4 add r2, sp, 0x50                                          |     r2 += var_50h;
    0x0800bcd8 mov r1, r8                                                |     r1 = r8;
    0x0800bcdc stmdaeq r1, {r4, r5, r6, r8, sl, pc}                      |     __asm ("stmdaeq r1, {r4, r5, r6, r8, sl, pc}");
    0x0800bce0 stmdaeq r1, {r4, r5, r6, r8, sl, pc}                      |     __asm ("stmdaeq r1, {r4, r5, r6, r8, sl, pc}");
    0x0800bce4 uxth r3, r3                                               |     r3 = (int16_t) r3;
    0x0800bce8 mvn r5, 0xd                                               |     r5 = ~0xd;
    0x0800bcec stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}");
    0x0800bcf0 b 0x800b898                                               |     goto label_1;
                                                                         | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x8001f1c */
                                                                             | #include <stdint.h>
                                                                             |  
                                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                             |  
    ; (fcn) sym.ip_vs_conn_new ()                                            | void ip_vs_conn_new (int32_t arg_40h, int32_t arg_44h, int32_t arg_48h, int32_t arg1, int32_t arg2) {
                                                                             |     int32_t var_0h;
                                                                             |     int32_t var_8h;
                                                                             |     int32_t var_ch;
                                                                             |     int32_t var_10h;
                                                                             |     int32_t var_14h;
                                                                             |     r0 = arg1;
                                                                             |     r1 = arg2;
    0x08001f1c push {r4, r5, r6, r7, r8, sb, sl, fp, lr}                     |     
    0x08001f20 stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc}                  |     __asm ("stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc}");
    0x08001f24 stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc}                  |     __asm ("stmdaeq r1, {r3, r5, r7, r8, sl, fp, ip, pc}");
    0x08001f28 sub sp, sp, 0x1c                                              |     
    0x08001f2c ldr r8, [r0]                                                  |     r8 = *(r0);
    0x08001f30 mov r5, r0                                                    |     r5 = r0;
    0x08001f34 mov r6, r1                                                    |     r6 = r1;
    0x08001f38 ldrh r1, [r0, 0x10]                                           |     r1 = *(var_0hx10);
    0x08001f3c mov r0, r8                                                    |     r0 = r8;
    0x08001f40 mov sb, r2                                                    |     sb = r2;
    0x08001f44 str lr, [sp, 0x14]                                            |     var_14h = lr;
    0x08001f48 str r3, [sp, 0xc]                                             |     var_ch = r3;
    0x08001f4c str r4, [sp, 0x10]                                            |     var_10h = r4;
    0x08001f50 ldr r7, [sp, 0x44]                                            |     r7 = *(arg_44h);
    0x08001f54 stmdaeq r1, {r3, r4, r5, sl, fp, sp}                          |     __asm ("stmdaeq r1, {r3, r4, r5, sl, fp, sp}");
    0x08001f58 mov r1, 0xa20                                                 |     r1 = 0xa20;
    0x08001f5c str r0, [sp, 8]                                               |     var_8h = r0;
    0x08001f60 ldr r0, [r4, 8]                                               |     r0 = *((r4 + 8));
    0x08001f64 stmdaeq r2, {r2, r5, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r2, r5, r6, r7, r8, ip, sp, lr}");
    0x08001f68 subs r4, r0, 0                                                |     r4 = r0 - 0;
                                                                             |     if (r4 == r0) {
    0x08001f6c beq 0x80024a4                                                 |         goto label_11;
                                                                             |     }
    0x08001f70 mov r0, r4                                                    |     r0 = r4;
    0x08001f74 mov r3, 0                                                     |     r3 = 0;
    0x08001f78 stmdaeq r0, {r3, r5, r6, r7, r8, fp}                          |     __asm ("stmdaeq r0, {r3, r5, r6, r7, r8, fp}");
    0x08001f7c stmdaeq r0, {r3, r5, r6, r7, r8, fp}                          |     __asm ("stmdaeq r0, {r3, r5, r6, r7, r8, fp}");
    0x08001f80 mov r2, r3                                                    |     r2 = r3;
    0x08001f84 mov sl, 0                                                     |     sl = 0;
    0x08001f88 mov fp, 0                                                     |     
    0x08001f8c strd sl, fp, [r0], 0x50                                       |     __asm ("strd sl, fp, [r0], 0x50");
    0x08001f90 str r3, [sp]                                                  |     *(sp) = r3;
    0x08001f94 stmdaeq r2, {r3, r5, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r3, r5, r6, r7, r8, ip, sp, lr}");
    0x08001f98 ldrh r2, [r5, 0x12]                                           |     r2 = *((r5 + 0x12));
    0x08001f9c ldrh r1, [r5, 0x10]                                           |     r1 = *((r5 + 0x10));
    0x08001fa0 mov r3, 0                                                     |     r3 = 0;
    0x08001fa4 cmp r2, 0xa                                                   |     
    0x08001fa8 strh r2, [r4, 0xe]                                            |     *((r4 + 0xe)) = r2;
    0x08001fac str r8, [r4, 0x48]                                            |     *((r4 + 0x48)) = r8;
    0x08001fb0 ldr r2, [r5, 4]                                               |     r2 = *((r5 + 4));
    0x08001fb4 strh r6, [r4, 0x46]                                           |     *((r4 + 0x46)) = r6;
    0x08001fb8 strh r1, [r4, 0x44]                                           |     *((r4 + 0x44)) = r1;
                                                                             |     if (r2 == 0xa) {
    0x08001fbc beq 0x800239c                                                 |         goto label_12;
                                                                             |     }
    0x08001fc0 ldr r2, [r2]                                                  |     r2 = *(r2);
    0x08001fc4 ldr ip, [r5, 8]                                               |     ip = *((r5 + 8));
    0x08001fc8 strd r2, r3, [r4, 0x10]                                       |     __asm ("strd r2, r3, [r4, 0x10]");
    0x08001fcc str r3, [r4, 0x18]                                            |     *((r4 + 0x18)) = r3;
    0x08001fd0 str r3, [r4, 0x1c]                                            |     *((r4 + 0x1c)) = r3;
    0x08001fd4 ldrh r3, [r5, 0xc]                                            |     r3 = *((r5 + 0xc));
    0x08001fd8 strh r3, [r4, 8]                                              |     *((r4 + 8)) = r3;
                                                                             | label_3:
    0x08001fdc ldr r3, [ip]                                                  |     r3 = *(ip);
    0x08001fe0 str r3, [r4, 0x20]                                            |     *((r4 + 0x20)) = r3;
    0x08001fe4 mov r3, 0                                                     |     r3 = 0;
    0x08001fe8 str r3, [r4, 0x24]                                            |     *((r4 + 0x24)) = r3;
    0x08001fec str r3, [r4, 0x28]                                            |     *((r4 + 0x28)) = r3;
    0x08001ff0 str r3, [r4, 0x2c]                                            |     *((r4 + 0x2c)) = r3;
                                                                             | label_4:
    0x08001ff4 uxth r6, r6                                                   |     r6 = (int16_t) r6;
    0x08001ff8 ldrh r3, [r5, 0xe]                                            |     r3 = *((r5 + 0xe));
    0x08001ffc cmp r6, 0xa                                                   |     
    0x08002000 strh r3, [r4, 0xc]                                            |     *((r4 + 0xc)) = r3;
                                                                             |     if (r6 != 0xa) {
    0x08002004 addeq ip, r4, 0x30                                            |         
                                                                             |     }
                                                                             |     if (r6 == 0xa) {
    0x08002008 ldrne r3, [sb]                                                |         r3 = *(sb);
                                                                             |     }
                                                                             |     if (r6 != 0xa) {
    0x0800200c ldmeq sb, {r0, r1, r2, r3}                                    |         r0 = *(sb);
                                                                             |         r1 = *((sb + 4));
                                                                             |         r2 = *((sb + 8));
                                                                             |         r3 = *((sb + 12));
                                                                             |     }
                                                                             |     if (r6 != 0xa) {
    0x08002010 stmeq ip, {r0, r1, r2, r3}                                    |         *(ip) = r0;
                                                                             |         *((ip + 4)) = r1;
                                                                             |         *((ip + 8)) = r2;
                                                                             |         *((ip + 12)) = r3;
                                                                             |     }
                                                                             |     if (r6 == 0xa) {
    0x08002014 strne r3, [r4, 0x30]                                          |         *((r4 + 0x30)) = r3;
                                                                             |     }
                                                                             |     if (r6 == 0xa) {
    0x08002018 movne r3, 0                                                   |         r3 = 0;
                                                                             |     }
                                                                             |     if (r6 == 0xa) {
    0x0800201c strne r3, [r4, 0x34]                                          |         *((r4 + 0x34)) = r3;
                                                                             |     }
                                                                             |     if (r6 == 0xa) {
    0x08002020 strne r3, [r4, 0x38]                                          |         *((r4 + 0x38)) = r3;
                                                                             |     }
                                                                             |     if (r6 == 0xa) {
    0x08002024 strne r3, [r4, 0x3c]                                          |         *((r4 + 0x3c)) = r3;
                                                                             |     }
    0x08002028 ldr r3, [sp, 0xc]                                             |     r3 = var_ch;
    0x0800202c strh r3, [r4, 0xa]                                            |     *((r4 + 0xa)) = r3;
    0x08002030 ldr r3, [sp, 0x40]                                            |     r3 = *(arg_40h);
    0x08002034 str r3, [r4, 0x40]                                            |     *((r4 + 0x40)) = r3;
    0x08002038 tst r3, 0x1000                                                |     
    0x0800203c ldr r3, [sp, 0x48]                                            |     r3 = *(arg_48h);
    0x08002040 str r3, [r4, 0x6c]                                            |     *((r4 + 0x6c)) = r3;
                                                                             |     if ((r3 & 0x1000) != 0) {
    0x08002044 beq 0x800207c                                                 |         
    0x08002048 ldr r3, [r5, 0x14]                                            |         r3 = *((r5 + 0x14));
    0x0800204c cmp r3, 0                                                     |         
                                                                             |         if (r3 != 0) {
    0x08002050 beq 0x800207c                                                 |             
    0x08002054 ldr r0, [r3, 0x10]                                            |             r0 = *((r3 + 0x10));
    0x08002058 cmp r0, 0                                                     |             
                                                                             |             if (r0 != 0) {
    0x0800205c beq 0x8002068                                                 |                 
    0x08002060 stmdaeq r2, {r2, r3, r5, r6, r7, r8, ip, sp, lr}              |                 __asm ("stmdaeq r2, {r2, r3, r5, r6, r7, r8, ip, sp, lr}");
    0x08002064 ldr r3, [r5, 0x14]                                            |                 r3 = *((r5 + 0x14));
                                                                             |             }
    0x08002068 str r3, [r4, 0xa8]                                            |             *((r4 + 0xa8)) = r3;
    0x0800206c ldr r3, [r5, 0x18]                                            |             r3 = *((r5 + 0x18));
    0x08002070 str r3, [r4, 0xac]                                            |             *((r4 + 0xac)) = r3;
    0x08002074 ldrb r3, [r5, 0x1c]                                           |             r3 = *((r5 + 0x1c));
    0x08002078 b 0x800208c                                                   |             
                                                                             |         }
                                                                             |     } else {
    0x0800207c mov r0, 0                                                     |         r0 = 0;
    0x08002080 mov r1, 0                                                     |         r1 = 0;
    0x08002084 mov r3, 0                                                     |         r3 = 0;
    0x08002088 strd r0, r1, [r4, 0xa8]                                       |         __asm ("strd r0, r1, [r4, 0xa8]");
                                                                             |     }
    0x0800208c strb r3, [r4, 0xb0]                                           |     *((r4 + 0xb0)) = r3;
    0x08002090 add r3, r8, 0x250                                             |     r3 = r8 + 0x250;
    0x08002094 mov r2, 0                                                     |     r2 = 0;
    0x08002098 mov r1, 1                                                     |     r1 = 1;
    0x0800209c mov r0, 0                                                     |     r0 = 0;
    0x080020a0 pld [r3]                                                      |     __asm ("pld [r3]");
    0x080020a4 str r1, [r4, 0x4c]                                            |     *((r4 + 0x4c)) = r1;
    0x080020a8 mov r1, 0                                                     |     r1 = 0;
    0x080020ac str r2, [r4, 0x78]                                            |     *((r4 + 0x78)) = r2;
    0x080020b0 str r2, [r4, 0x74]                                            |     *((r4 + 0x74)) = r2;
    0x080020b4 str r2, [r4, 0x84]                                            |     *((r4 + 0x84)) = r2;
    0x080020b8 str r2, [r4, 0x94]                                            |     *((r4 + 0x94)) = r2;
    0x080020bc str r2, [r4, 0xa0]                                            |     *((r4 + 0xa0)) = r2;
    0x080020c0 str r2, [r4, 0x80]                                            |     *((r4 + 0x80)) = r2;
    0x080020c4 strd r0, r1, [r4, 0x88]                                       |     __asm ("strd r0, r1, [r4, 0x88]");
                                                                             |     do {
    0x080020c8 ldrex r2, [r3]                                                |         __asm ("ldrex r2, [r3]");
    0x080020cc add r2, r2, 1                                                 |         r2++;
    0x080020d0 strex r1, r2, [r3]                                            |         __asm ("strex r1, r2, [r3]");
    0x080020d4 teq r1, 0                                                     |         __asm ("teq r1, 0");
    0x080020d8 bne 0x80020c8                                                 |         
                                                                             |     } while (r0 != 0);
    0x080020dc ldr r3, [sp, 0x40]                                            |     r3 = *(arg_40h);
    0x080020e0 tst r3, 0x800                                                 |     
                                                                             |     if ((r3 & 0x800) != 0) {
    0x080020e4 bne 0x8002260                                                 |         goto label_13;
                                                                             |     }
                                                                             | label_0:
    0x080020e8 mov r3, 0                                                     |     r3 = 0;
    0x080020ec cmp r7, 0                                                     |     
    0x080020f0 str r3, [r4, 0x7c]                                            |     *((r4 + 0x7c)) = r3;
                                                                             |     if (r7 == 0) {
    0x080020f4 beq 0x80021b0                                                 |         goto label_14;
                                                                             |     }
    0x080020f8 add r0, r7, 0x3c                                              |     r0 = r7 + 0x3c;
    0x080020fc pld [r0]                                                      |     __asm ("pld [r0]");
                                                                             |     do {
    0x08002100 ldrex r3, [r0]                                                |         __asm ("ldrex r3, [r0]");
    0x08002104 add r2, r3, 1                                                 |         r2 = r3 + 1;
    0x08002108 strex r1, r2, [r0]                                            |         __asm ("strex r1, r2, [r0]");
    0x0800210c teq r1, 0                                                     |         __asm ("teq r1, 0");
    0x08002110 bne 0x8002100                                                 |         
                                                                             |     } while (r7 != 0);
    0x08002114 cmp r3, 0                                                     |     
                                                                             |     if (r3 == 0) {
    0x08002118 beq 0x800248c                                                 |         goto label_15;
                                                                             |     }
    0x0800211c add r2, r3, 1                                                 |     r2 = r3 + 1;
    0x08002120 orrs r2, r2, r3                                               |     r2 |= r3;
                                                                             |     if (r2 < r2) {
    0x08002124 bmi 0x8002454                                                 |         goto label_16;
                                                                             |     }
                                                                             | label_6:
    0x08002128 ldrh r3, [r4, 0x44]                                           |     r3 = *((r4 + 0x44));
    0x0800212c cmp r3, 0x11                                                  |     
    0x08002130 ldr r3, [r7, 0x28]                                            |     r3 = *((r7 + 0x28));
    0x08002134 ldr r2, [r4, 0x40]                                            |     r2 = *((r4 + 0x40));
    0x08002138 bicne r3, r3, 0x2000                                          |     __asm ("bicne r3, r3, 0x2000");
    0x0800213c tst r2, 0x20                                                  |     
                                                                             |     if ((r2 & 0x20) != 0) {
    0x08002140 beq 0x8002150                                                 |         
    0x08002144 tst r2, 0x1000                                                |         
    0x08002148 bic r2, r2, 0x87                                              |         r2 = BIT_MASK (r2, 0x87);
    0x0800214c biceq r3, r3, 0x100                                           |         __asm ("biceq r3, r3, 0x100");
                                                                             |     }
    0x08002150 orr r3, r3, r2                                                |     r3 |= r2;
    0x08002154 str r7, [r4, 0x7c]                                            |     *((r4 + 0x7c)) = r7;
    0x08002158 tst r3, 0x1000                                                |     
    0x0800215c str r3, [r4, 0x40]                                            |     *((r4 + 0x40)) = r3;
                                                                             |     if ((r3 & 0x1000) != 0) {
    0x08002160 bne 0x8002284                                                 |         goto label_17;
                                                                             |     }
    0x08002164 tst r3, 0x100                                                 |     
                                                                             |     if ((r3 & 0x100) != 0) {
    0x08002168 addeq r3, r7, 0x144                                           |         r3 = r7 + 0x144;
                                                                             |     }
                                                                             |     if ((r3 & 0x100) == 0) {
    0x0800216c addne r3, r7, 0x148                                           |         r3 = r7 + 0x148;
                                                                             |     }
    0x08002170 pld [r3]                                                      |     __asm ("pld [r3]");
                                                                             |     do {
    0x08002174 ldrex r2, [r3]                                                |         __asm ("ldrex r2, [r3]");
    0x08002178 add r2, r2, 1                                                 |         r2++;
    0x0800217c strex r1, r2, [r3]                                            |         __asm ("strex r1, r2, [r3]");
    0x08002180 teq r1, 0                                                     |         __asm ("teq r1, 0");
    0x08002184 bne 0x8002174                                                 |         
                                                                             |     } while ((r3 & 0x100) != 0);
                                                                             | label_1:
    0x08002188 ldr r3, [r7, 0x150]                                           |     r3 = *((r7 + 0x150));
    0x0800218c cmp r3, 0                                                     |     
                                                                             |     if (r3 != 0) {
    0x08002190 beq 0x80021b0                                                 |         
    0x08002194 ldr r2, [r7, 0x144]                                           |         r2 = *((r7 + 0x144));
    0x08002198 ldr r1, [r7, 0x148]                                           |         r1 = *((r7 + 0x148));
    0x0800219c add r2, r2, r1                                                |         r2 += r1;
    0x080021a0 cmp r3, r2                                                    |         
                                                                             |         if (r3 > r2) {
    0x080021a4 ldrls r3, [r7, 0x24]                                          |             r3 = *((r7 + 0x24));
                                                                             |         }
                                                                             |         if (r3 > r2) {
    0x080021a8 orrls r3, r3, 2                                               |             r3 |= 2;
                                                                             |         }
                                                                             |         if (r3 <= r2) {
    0x080021ac strls r3, [r7, 0x24]                                          |             *((r7 + 0x24)) = r3;
                                                                             |             goto label_14;
                                                                             |         }
                                                                             |     }
                                                                             | label_14:
    0x080021b0 ldrh r3, [r5, 0x12]                                           |     r3 = *((r5 + 0x12));
    0x080021b4 mov r2, 0                                                     |     r2 = 0;
    0x080021b8 strh r2, [r4, 0x68]                                           |     *((r4 + 0x68)) = r2;
    0x080021bc cmp r3, 0xa                                                   |     
    0x080021c0 stmdaeq r2, {r5, r7, r8, ip, sp, lr}                          |     __asm ("stmdaeq r2, {r5, r7, r8, ip, sp, lr}");
    0x080021c4 stmdaeq r2, {r5, r7, r8, ip, sp, lr}                          |     __asm ("stmdaeq r2, {r5, r7, r8, ip, sp, lr}");
    0x080021c8 strh r2, [r4, 0x6a]                                           |     *((r4 + 0x6a)) = r2;
    0x080021cc mov r2, 0x12c                                                 |     r2 = 0x12c;
    0x080021d0 str r2, [r4, 0x64]                                            |     *((r4 + 0x64)) = r2;
    0x080021d4 ldr r3, [r3]                                                  |     r3 = *(r3);
    0x080021d8 bic r3, r3, 3                                                 |     r3 = BIT_MASK (r3, 3);
    0x080021dc str r3, [r4, 0x70]                                            |     *((r4 + 0x70)) = r3;
    0x080021e0 ldr r3, [r4, 0x40]                                            |     r3 = *((r4 + 0x40));
    0x080021e4 and r3, r3, 7                                                 |     r3 &= 7;
                                                                             |     if (r3 == 0xa) {
    0x080021e8 beq 0x800237c                                                 |         goto label_18;
                                                                             |     }
    0x080021ec cmp r3, 4                                                     |     
                                                                             |     if (r3 > 4) {
                                                                             |         /* switch table (5 cases) at 0x80021f8 */
    0x080021f0 ldrls pc, [pc, r3, lsl 2]                                     |         offset_0 = r3 << 2;
                                                                             |         pc = *((pc + offset_0));
                                                                             |     }
    0x080021f4 b 0x8002228                                                   |     
                                                                             | label_2:
    0x08002228 ldr r3, [sp, 8]                                               |     r3 = var_8h;
    0x0800222c cmp r3, 0                                                     |     
                                                                             |     if (r3 != 0) {
    0x08002230 bne 0x8002460                                                 |         goto label_19;
                                                                             |     }
                                                                             | label_7:
    0x08002234 ldr r3, [r8, 0x40c]                                           |     r3 = *((r8 + 0x40c));
    0x08002238 cmp r3, 0                                                     |     
                                                                             |     if (r3 == 0) {
    0x0800223c ldrne r3, [r4, 0x40]                                          |         r3 = *((r4 + 0x40));
                                                                             |     }
                                                                             |     if (r3 == 0) {
    0x08002240 orrne r3, r3, 0x10000                                         |         r3 |= 0x10000;
                                                                             |     }
                                                                             |     if (r3 == 0) {
    0x08002244 strne r3, [r4, 0x40]                                          |         *((r4 + 0x40)) = r3;
                                                                             |     }
    0x08002248 ldr r3, [r4, 0x40]                                            |     r3 = *((r4 + 0x40));
    0x0800224c tst r3, 0x2000                                                |     
                                                                             |     if ((r3 & 0x2000) == 0) {
    0x08002250 beq 0x80022a4                                                 |         goto label_20;
                                                                             |     }
                                                                             | label_9:
    0x08002254 mov r0, r4                                                    |     r0 = r4;
    0x08002258 add sp, sp, 0x1c                                              |     
    0x0800225c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                      |     
                                                                             | label_13:
    0x08002260 stmdaeq r1, {r2, fp, sp, pc}                                  |     __asm ("stmdaeq r1, {r2, fp, sp, pc}");
    0x08002264 stmdaeq r1, {r2, fp, sp, pc}                                  |     __asm ("stmdaeq r1, {r2, fp, sp, pc}");
    0x08002268 pld [r3]                                                      |     __asm ("pld [r3]");
                                                                             |     do {
    0x0800226c ldrex r2, [r3]                                                |         __asm ("ldrex r2, [r3]");
    0x08002270 add r2, r2, 1                                                 |         r2++;
    0x08002274 strex r1, r2, [r3]                                            |         __asm ("strex r1, r2, [r3]");
    0x08002278 teq r1, 0                                                     |         __asm ("teq r1, 0");
    0x0800227c bne 0x800226c                                                 |         
                                                                             |     } while ((r3 & 0x2000) != 0);
    0x08002280 b 0x80020e8                                                   |     goto label_0;
                                                                             | label_17:
    0x08002284 add r3, r7, 0x14c                                             |     r3 = r7 + 0x14c;
    0x08002288 pld [r3]                                                      |     __asm ("pld [r3]");
                                                                             |     do {
    0x0800228c ldrex r2, [r3]                                                |         __asm ("ldrex r2, [r3]");
    0x08002290 add r2, r2, 1                                                 |         r2++;
    0x08002294 strex r1, r2, [r3]                                            |         __asm ("strex r1, r2, [r3]");
    0x08002298 teq r1, 0                                                     |         __asm ("teq r1, 0");
    0x0800229c bne 0x800228c                                                 |         
                                                                             |     } while ((r3 & 0x2000) != 0);
    0x080022a0 b 0x8002188                                                   |     goto label_1;
                                                                             | label_20:
    0x080022a4 mov r0, r4                                                    |     r0 = r4;
    0x080022a8 bl 0x8000974                                                  |     ip_vs_conn_hashkey_conn ();
    0x080022ac mov r3, sp                                                    |     r3 = sp;
    0x080022b0 bic r3, r3, 0x1fc0                                            |     r3 = BIT_MASK (r3, 0x1fc0);
    0x080022b4 mov r5, r0                                                    |     r5 = r0;
    0x080022b8 bic r3, r3, 0x3f                                              |     r3 = BIT_MASK (r3, 0x3f);
    0x080022bc ldr r2, [r3, 4]                                               |     r2 = *((r3 + 4));
    0x080022c0 add r2, r2, 0x200                                             |     r2 += 0x200;
    0x080022c4 add r2, r2, 1                                                 |     r2++;
    0x080022c8 str r2, [r3, 4]                                               |     *((r3 + 4)) = r2;
    0x080022cc ldr r2, [r3, 4]                                               |     r2 = *((r3 + 4));
    0x080022d0 add r2, r2, 1                                                 |     r2++;
    0x080022d4 str r2, [r3, 4]                                               |     *((r3 + 4)) = r2;
    0x080022d8 ldr r3, [r4, 0x40]                                            |     r3 = *((r4 + 0x40));
    0x080022dc tst r3, 0x40                                                  |     
                                                                             |     if ((r3 & 0x40) != 0) {
    0x080022e0 bne 0x80024c4                                                 |         goto label_21;
                                                                             |     }
    0x080022e4 add r0, r4, 0x4c                                              |     r0 = r4 + 0x4c;
    0x080022e8 ldr r3, [r4, 0x40]                                            |     r3 = *((r4 + 0x40));
    0x080022ec orr r3, r3, 0x40                                              |     r3 |= 0x40;
    0x080022f0 str r3, [r4, 0x40]                                            |     *((r4 + 0x40)) = r3;
    0x080022f4 pld [r0]                                                      |     __asm ("pld [r0]");
                                                                             |     do {
    0x080022f8 ldrex r3, [r0]                                                |         __asm ("ldrex r3, [r0]");
    0x080022fc add r2, r3, 1                                                 |         r2 = r3 + 1;
    0x08002300 strex r1, r2, [r0]                                            |         __asm ("strex r1, r2, [r0]");
    0x08002304 teq r1, 0                                                     |         __asm ("teq r1, 0");
    0x08002308 bne 0x80022f8                                                 |         
                                                                             |     } while ((r3 & 0x40) != 0);
    0x0800230c cmp r3, 0                                                     |     
                                                                             |     if (r3 == 0) {
    0x08002310 beq 0x8002498                                                 |         goto label_22;
                                                                             |     }
    0x08002314 add r2, r3, 1                                                 |     r2 = r3 + 1;
    0x08002318 orrs r2, r2, r3                                               |     r2 |= r3;
                                                                             |     if (r2 < r2) {
    0x0800231c bmi 0x8002480                                                 |         goto label_23;
                                                                             |     }
                                                                             | label_8:
    0x08002320 ldr r3, [sp, 0x10]                                            |     r3 = var_10h;
    0x08002324 ldr r3, [r3, 4]                                               |     r3 = *((r3 + 4));
    0x08002328 ldr r2, [r3, r5, lsl 2]                                       |     offset_1 = r5 << 2;
                                                                             |     r2 = *((r3 + offset_1));
    0x0800232c add r1, r3, r5, lsl 2                                         |     r1 = r3 + (r5 << 2);
    0x08002330 str r2, [r4]                                                  |     *(r4) = r2;
    0x08002334 str r1, [r4, 4]                                               |     *((r4 + 4)) = r1;
    0x08002338 cmp r2, 0                                                     |     
    0x0800233c str r4, [r3, r5, lsl 2]                                       |     offset_2 = r5 << 2;
                                                                             |     *((r3 + offset_2)) = r4;
                                                                             |     if (r2 == 0) {
    0x08002340 strne r4, [r2, 4]                                             |         *((r2 + 4)) = r4;
                                                                             |     }
                                                                             | label_10:
    0x08002344 mov r3, sp                                                    |     r3 = sp;
    0x08002348 bic r3, r3, 0x1fc0                                            |     r3 = BIT_MASK (r3, 0x1fc0);
    0x0800234c bic r3, r3, 0x3f                                              |     r3 = BIT_MASK (r3, 0x3f);
    0x08002350 ldr r2, [r3, 4]                                               |     r2 = *((r3 + 4));
    0x08002354 sub r2, r2, 1                                                 |     r2--;
    0x08002358 str r2, [r3, 4]                                               |     *((r3 + 4)) = r2;
    0x0800235c cmp r2, 0                                                     |     
                                                                             |     if (r2 == 0) {
    0x08002360 beq 0x8002440                                                 |         goto label_24;
                                                                             |     }
                                                                             | label_5:
    0x08002364 ldr r0, [pc, 0x174]                                           |     r0 = *(0x80024dc);
    0x08002368 movw r1, 0x201                                                |     r1 = 0x201;
    0x0800236c stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}                      |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08002370 mov r0, r4                                                    |     r0 = r4;
    0x08002374 add sp, sp, 0x1c                                              |     
    0x08002378 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                      |     
                                                                             | label_18:
    0x0800237c cmp r3, 4                                                     |     
                                                                             |     if (r3 > 4) {
                                                                             |         /* switch table (5 cases) at 0x8002388 */
    0x08002380 ldrls pc, [pc, r3, lsl 2]                                     |         offset_3 = r3 << 2;
                                                                             |         pc = *((pc + offset_3));
                                                                             |     }
    0x08002384 b 0x8002228                                                   |     goto label_2;
                                                                             | label_12:
    0x0800239c add lr, r4, 0x10                                              |     lr = r4 + 0x10;
    0x080023a0 ldrh sl, [r5, 0xc]                                            |     sl = *((r5 + 0xc));
    0x080023a4 cmp r1, r3                                                    |     
    0x080023a8 ldr ip, [r5, 8]                                               |     ip = *((r5 + 8));
    0x080023ac ldm r2, {r0, r1, r2, r3}                                      |     r0 = *(r2);
                                                                             |     r1 = *((r2 + 4));
                                                                             |     r2 = *((r2 + 8));
                                                                             |     r3 = *((r2 + 12));
    0x080023b0 stm lr, {r0, r1, r2, r3}                                      |     *(lr) = r0;
                                                                             |     *((lr + 4)) = r1;
                                                                             |     *((lr + 8)) = r2;
                                                                             |     *((lr + 12)) = r3;
    0x080023b4 strh sl, [r4, 8]                                              |     *((r4 + 8)) = sl;
                                                                             |     if (r1 == r3) {
    0x080023b8 beq 0x8001fdc                                                 |         goto label_3;
                                                                             |     }
    0x080023bc add lr, r4, 0x20                                              |     lr = r4 + 0x20;
    0x080023c0 ldm ip, {r0, r1, r2, r3}                                      |     r0 = *(ip);
                                                                             |     r1 = *((ip + 4));
                                                                             |     r2 = *((ip + 8));
                                                                             |     r3 = *((ip + 12));
    0x080023c4 mov ip, lr                                                    |     
    0x080023c8 stm lr, {r0, r1, r2, r3}                                      |     *(lr) = r0;
                                                                             |     *((lr + 4)) = r1;
                                                                             |     *((lr + 8)) = r2;
                                                                             |     *((lr + 12)) = r3;
    0x080023cc b 0x8001ff4                                                   |     goto label_4;
                                                                             | label_24:
    0x08002440 ldr r3, [r3]                                                  |     r3 = *(r3);
    0x08002444 tst r3, 2                                                     |     
                                                                             |     if ((r3 & 2) == 0) {
    0x08002448 beq 0x8002364                                                 |         goto label_5;
                                                                             |     }
    0x0800244c stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
    0x08002450 b 0x8002364                                                   |     goto label_5;
                                                                             | label_16:
    0x08002454 mov r1, 1                                                     |     r1 = 1;
    0x08002458 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}                      |     __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
    0x0800245c b 0x8002128                                                   |     goto label_6;
                                                                             | label_19:
    0x08002460 ldr r3, [r3, 0xc]                                             |     r3 = *((r3 + 0xc));
    0x08002464 cmp r3, 0                                                     |     
                                                                             |     if (r3 == 0) {
    0x08002468 beq 0x8002234                                                 |         goto label_7;
                                                                             |     }
    0x0800246c ldr r3, [sp, 8]                                               |     r3 = var_8h;
    0x08002470 mov r0, r4                                                    |     r0 = r4;
    0x08002474 ldr r1, [r3, 4]                                               |     r1 = *((r3 + 4));
    0x08002478 stmdaeq r1, {r4, r5, r6, r7, fp}                              |     __asm ("stmdaeq r1, {r4, r5, r6, r7, fp}");
    0x0800247c b 0x8002234                                                   |     goto label_7;
                                                                             | label_23:
    0x08002480 mov r1, 1                                                     |     r1 = 1;
    0x08002484 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}                      |     __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
    0x08002488 b 0x8002320                                                   |     goto label_8;
                                                                             | label_15:
    0x0800248c mov r1, 2                                                     |     r1 = 2;
    0x08002490 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}                      |     __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
    0x08002494 b 0x8002128                                                   |     goto label_6;
                                                                             | label_22:
    0x08002498 mov r1, 2                                                     |     r1 = 2;
    0x0800249c stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}                      |     __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
    0x080024a0 b 0x8002320                                                   |     goto label_8;
                                                                             | label_11:
    0x080024a4 stmdaeq r2, {r4, r5, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r4, r5, r6, r7, r8, ip, sp, lr}");
    0x080024a8 cmp r0, 0                                                     |     
                                                                             |     if (r0 == 0) {
    0x080024ac beq 0x8002254                                                 |         goto label_9;
                                                                             |     }
    0x080024b0 ldr r1, [pc, 0x2c]                                            |     r1 = .text;
    0x080024b4 stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr}");
    0x080024b8 stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r3, sb, sl, fp, ip, sp, lr}");
    0x080024bc stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}              |     __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}");
    0x080024c0 b 0x8002254                                                   |     goto label_9;
                                                                             | label_21:
    0x080024c4 ldr r2, [sp, 0x14]                                            |     r2 = var_14h;
    0x080024c8 stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr}");
    0x080024cc stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr}                      |     __asm ("stmdaeq r1, {r2, r4, r8, sb, ip, sp, lr}");
    0x080024d0 stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr}");
    0x080024d4 stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r1, {r2, r3, r6, r7, r8, sl, fp, ip, sp, lr}");
    0x080024d8 stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}              |     __asm ("stmdaeq r2, {r2, r3, r4, r6, r7, r8, ip, sp, lr}");
    0x080024dc b 0x8002344                                                   |     goto label_10;
                                                                             | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x8006bcc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.ip_vs_copy_stats ()                              | void ip_vs_copy_stats (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x08006bcc push {r4, r5, r6, lr}                             |     
    0x08006bd0 movw r4, 0x201                                    |     r4 = 0x201;
    0x08006bd4 mov r3, sp                                        |     r3 = sp;
    0x08006bd8 bic ip, r3, 0x1fc0                                |     ip = BIT_MASK (r3, 0x1fc0);
    0x08006bdc bic ip, ip, 0x3f                                  |     ip = BIT_MASK (ip, 0x3f);
    0x08006be0 ldr lr, [ip, 4]                                   |     
    0x08006be4 add lr, lr, r4                                    |     lr += r4;
    0x08006be8 str lr, [ip, 4]                                   |     
    0x08006bec ldr lr, [r1, 0xb0]                                |     
    0x08006bf0 ldr ip, [r1]                                      |     ip = *(r1);
    0x08006bf4 ldr r5, [r1, 0xb4]                                |     r5 = *((r1 + 0xb4));
    0x08006bf8 subs ip, ip, lr                                   |     
    0x08006bfc ldr lr, [r1, 4]                                   |     
    0x08006c00 str ip, [r0]                                      |     *(r0) = ip;
    0x08006c04 sbc ip, lr, r5                                    |     __asm ("sbc ip, lr, r5");
    0x08006c08 str ip, [r0, 4]                                   |     *((r0 + 4)) = ip;
    0x08006c0c ldr lr, [r1, 0xb8]                                |     
    0x08006c10 ldr ip, [r1, 8]                                   |     ip = *((r1 + 8));
    0x08006c14 ldr r5, [r1, 0xbc]                                |     r5 = *((r1 + 0xbc));
    0x08006c18 subs ip, ip, lr                                   |     
    0x08006c1c ldr lr, [r1, 0xc]                                 |     
    0x08006c20 str ip, [r0, 8]                                   |     *((r0 + 8)) = ip;
    0x08006c24 sbc ip, lr, r5                                    |     __asm ("sbc ip, lr, r5");
    0x08006c28 str ip, [r0, 0xc]                                 |     *((r0 + 0xc)) = ip;
    0x08006c2c ldr lr, [r1, 0xc0]                                |     
    0x08006c30 ldr ip, [r1, 0x10]                                |     ip = *((r1 + 0x10));
    0x08006c34 ldr r5, [r1, 0xc4]                                |     r5 = *((r1 + 0xc4));
    0x08006c38 subs ip, ip, lr                                   |     
    0x08006c3c ldr lr, [r1, 0x14]                                |     
    0x08006c40 str ip, [r0, 0x10]                                |     *((r0 + 0x10)) = ip;
    0x08006c44 sbc ip, lr, r5                                    |     __asm ("sbc ip, lr, r5");
    0x08006c48 str ip, [r0, 0x14]                                |     *((r0 + 0x14)) = ip;
    0x08006c4c ldr lr, [r1, 0xc8]                                |     
    0x08006c50 ldr ip, [r1, 0x18]                                |     ip = *((r1 + 0x18));
    0x08006c54 ldr r5, [r1, 0xcc]                                |     r5 = *((r1 + 0xcc));
    0x08006c58 subs ip, ip, lr                                   |     
    0x08006c5c ldr lr, [r1, 0x1c]                                |     
    0x08006c60 str ip, [r0, 0x18]                                |     *((r0 + 0x18)) = ip;
    0x08006c64 sbc ip, lr, r5                                    |     __asm ("sbc ip, lr, r5");
    0x08006c68 str ip, [r0, 0x1c]                                |     *((r0 + 0x1c)) = ip;
    0x08006c6c ldr lr, [r1, 0xd0]                                |     
    0x08006c70 ldr ip, [r1, 0x20]                                |     ip = *((r1 + 0x20));
    0x08006c74 ldr r3, [r1, 0xd4]                                |     r3 = *((r1 + 0xd4));
    0x08006c78 subs ip, ip, lr                                   |     
    0x08006c7c ldr lr, [r1, 0x24]                                |     
    0x08006c80 str ip, [r0, 0x20]                                |     *((r0 + 0x20)) = ip;
    0x08006c84 sbc r3, lr, r3                                    |     __asm ("sbc r3, lr, r3");
    0x08006c88 str r3, [r0, 0x24]                                |     *((r0 + 0x24)) = r3;
    0x08006c8c stmdaeq r1, {r2, r4, r6, r7, sb, fp, sp}          |     __asm ("stmdaeq r1, {r2, r4, r6, r7, sb, fp, sp}");
    0x08006c90 mov r1, r4                                        |     r1 = r4;
    0x08006c94 ldr r0, [pc, 4]                                   |     r0 = sym.ip_vs_conn_seq_next;
    0x08006c98 pop {r4, r5, r6, lr}                              |     
    0x08006c9c stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08006ca0 stmdaeq r0, {r4, r5, r6}                          |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                 | }


r2dec has crashed (info: /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/net/netfilter/ipvs/ip_vs.ko @ 0x800b1a0).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate 
the needed data for the issue.
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x800dc48 */
                                                                         | #include <stdint.h>
                                                                         |  
                                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                         |  
    ; (fcn) sym.ip_vs_nat_send_or_cont ()                                | void ip_vs_nat_send_or_cont (int32_t arg1, int32_t arg2) {
                                                                         |     int32_t var_24h;
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x0800dc48 push {r4, r5, r6, r7, lr}                                 |     
    0x0800dc4c mov r6, r3                                                |     r6 = r3;
    0x0800dc50 mov r4, r1                                                |     r4 = r1;
    0x0800dc54 ldrb r3, [r1, 0x67]                                       |     r3 = *((r1 + 0x67));
    0x0800dc58 sub sp, sp, 0x24                                          |     
    0x0800dc5c mov r5, r2                                                |     r5 = r2;
    0x0800dc60 mov r7, r0                                                |     r7 = r0;
    0x0800dc64 orr r3, r3, 1                                             |     r3 |= 1;
    0x0800dc68 strb r3, [r1, 0x67]                                       |     *((r1 + 0x67)) = r3;
    0x0800dc6c ldr r3, [r2, 0x40]                                        |     r3 = *((r2 + 0x40));
    0x0800dc70 tst r3, 0x10000                                           |     
                                                                         |     if ((r3 & 0x10000) != 0) {
    0x0800dc74 bne 0x800de94                                             |         goto label_5;
                                                                         |     }
    0x0800dc78 ldr ip, [r1, 0x50]                                        |     ip = *((r1 + 0x50));
    0x0800dc7c cmp ip, 7                                                 |     
                                                                         |     if (ip < 7) {
    0x0800dc80 bls 0x800dcb0                                             |         goto label_2;
                                                                         |     }
    0x0800dc84 bic r0, ip, 7                                             |     r0 = BIT_MASK (ip, 7);
    0x0800dc88 pld [r0]                                                  |     __asm ("pld [r0]");
                                                                         |     do {
    0x0800dc8c ldrex r3, [r0]                                            |         __asm ("ldrex r3, [r0]");
    0x0800dc90 sub r3, r3, 1                                             |         r3--;
    0x0800dc94 strex r2, r3, [r0]                                        |         __asm ("strex r2, r3, [r0]");
    0x0800dc98 teq r2, 0                                                 |         __asm ("teq r2, 0");
    0x0800dc9c bne 0x800dc8c                                             |         
                                                                         |     } while (ip != 7);
    0x0800dca0 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800dca4 beq 0x800dea8                                             |         goto label_6;
                                                                         |     }
                                                                         | label_3:
    0x0800dca8 mov r3, 7                                                 |     r3 = 7;
    0x0800dcac str r3, [r4, 0x50]                                        |     *((r4 + 0x50)) = r3;
                                                                         | label_2:
    0x0800dcb0 cmp r6, 0                                                 |     
                                                                         |     if (r6 == 0) {
    0x0800dcb4 beq 0x800dd0c                                             |         goto label_7;
                                                                         |     }
    0x0800dcb8 ldrh r2, [r5, 0xc]                                        |     r2 = *((r5 + 0xc));
    0x0800dcbc ldrh r3, [r5, 0xa]                                        |     r3 = *((r5 + 0xa));
    0x0800dcc0 cmp r2, r3                                                |     
                                                                         |     if (r2 == r3) {
    0x0800dcc4 beq 0x800ddfc                                             |         goto label_8;
                                                                         |     }
                                                                         | label_1:
    0x0800dcc8 ldr r3, [r4, 8]                                           |     r3 = *((r4 + 8));
    0x0800dccc cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800dcd0 beq 0x800dd00                                             |         goto label_0;
                                                                         |     }
    0x0800dcd4 ldr r3, [r4, 0x4c]                                        |     r3 = *((r4 + 0x4c));
    0x0800dcd8 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800dcdc beq 0x800de1c                                             |         goto label_9;
                                                                         |     }
                                                                         |     do {
    0x0800dce0 mov r0, r4                                                |         r0 = r4;
    0x0800dce4 blx r3                                                    |         uint32_t (*r3)(uint32_t) (r0);
    0x0800dce8 mov r3, 0                                                 |         r3 = 0;
    0x0800dcec cmp r6, r3                                                |         
    0x0800dcf0 str r3, [r4, 0x4c]                                        |         *((r4 + 0x4c)) = r3;
    0x0800dcf4 str r3, [r4, 0xc]                                         |         *((r4 + 0xc)) = r3;
                                                                         |         if (r6 != r3) {
    0x0800dcf8 ldreq r2, [r4, 8]                                         |             r2 = *((r4 + 8));
                                                                         |         }
                                                                         |         if (r6 == r3) {
    0x0800dcfc beq 0x800dd30                                             |             goto label_10;
                                                                         |         }
                                                                         | label_0:
    0x0800dd00 mov r0, 1                                                 |         r0 = 1;
    0x0800dd04 add sp, sp, 0x24                                          |         
    0x0800dd08 pop {r4, r5, r6, r7, pc}                                  |         
                                                                         | label_7:
    0x0800dd0c ldr r2, [r4, 8]                                           |         r2 = *((r4 + 8));
    0x0800dd10 cmp r2, 0                                                 |         
                                                                         |         if (r2 == 0) {
    0x0800dd14 beq 0x800dd58                                             |             goto label_11;
                                                                         |         }
    0x0800dd18 ldr r3, [r4, 0x4c]                                        |         r3 = *((r4 + 0x4c));
    0x0800dd1c cmp r3, 0                                                 |         
    0x0800dd20 bne 0x800dce0                                             |         
                                                                         |     } while (r3 != 0);
    0x0800dd24 ldr r3, [r4, 0xc]                                         |     r3 = *((r4 + 0xc));
    0x0800dd28 cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x0800dd2c bne 0x800de28                                             |         goto label_12;
                                                                         |     }
                                                                         | label_10:
    0x0800dd30 ldrb r3, [r4, 0x64]                                       |     r3 = *((r4 + 0x64));
    0x0800dd34 and r1, r3, 0x60                                          |     r1 = r3 & 0x60;
    0x0800dd38 cmp r1, 0x40                                              |     
    0x0800dd3c bfceq r3, 5, 2                                            |     __asm ("bfceq r3, 5, 2");
                                                                         |     if (r1 != 0x40) {
    0x0800dd40 strbeq r3, [r4, 0x64]                                     |         *((r4 + 0x64)) = r3;
                                                                         |     }
    0x0800dd44 cmp r2, 0                                                 |     
                                                                         |     if (r2 == 0) {
    0x0800dd48 movne r2, 0                                               |         r2 = 0;
                                                                         |     }
                                                                         |     if (r2 == 0) {
    0x0800dd4c movne r3, 0                                               |         r3 = 0;
                                                                         |     }
    0x0800dd50 strdne r2, r3, [r4, 0x10]                                 |     __asm ("strdne r2, r3, [r4, 0x10]");
    0x0800dd54 b 0x800dd6c                                               |     goto label_13;
                                                                         | label_11:
    0x0800dd58 ldrb r3, [r4, 0x64]                                       |     r3 = *((r4 + 0x64));
    0x0800dd5c and r2, r3, 0x60                                          |     r2 = r3 & 0x60;
    0x0800dd60 cmp r2, 0x40                                              |     
    0x0800dd64 bfieq r3, r6, 5, 2                                        |     __asm ("bfieq r3, r6, 5, 2");
                                                                         |     if (r2 != 0x40) {
    0x0800dd68 strbeq r3, [r4, 0x64]                                     |         *((r4 + 0x64)) = r3;
                                                                         |     }
                                                                         | label_13:
    0x0800dd6c ldr r3, [r4, 0x48]                                        |     r3 = *((r4 + 0x48));
    0x0800dd70 uxtb r7, r7                                               |     r7 = (int8_t) r7;
    0x0800dd74 ldr r2, [r5, 0x48]                                        |     r2 = *((r5 + 0x48));
    0x0800dd78 bic r3, r3, 1                                             |     r3 = BIT_MASK (r3, 1);
    0x0800dd7c ldr r5, [r2, 0x510]                                       |     r5 = *((r2 + 0x510));
    0x0800dd80 ldr r6, [r3]                                              |     r6 = *(r3);
    0x0800dd84 stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}");
    0x0800dd88 sub r3, r7, 2                                             |     r3 = r7 - 2;
    0x0800dd8c cmp r3, 8                                                 |     
                                                                         |     if (r3 > 8) {
                                                                         |         /* switch table (9 cases) at 0x800dd98 */
    0x0800dd90 ldrls pc, [pc, r3, lsl 2]                                 |         offset_0 = r3 << 2;
                                                                         |         pc = *((pc + offset_0));
                                                                         |     }
    0x0800dd94 b 0x800ddbc                                               |     
    0x0800ddbc stmdaeq r1, {r2, sb, sl, fp, ip, pc}                      |     __asm ("stmdaeq r1, {r2, sb, sl, fp, ip, pc}");
    0x0800ddc0 stmdaeq r1, {r2, sb, sl, fp, ip, pc}                      |     __asm ("stmdaeq r1, {r2, sb, sl, fp, ip, pc}");
    0x0800ddc4 ldrb r3, [r2]                                             |     r3 = *(r2);
    0x0800ddc8 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800ddcc beq 0x800deb0                                             |         goto label_14;
                                                                         |     }
                                                                         | label_4:
    0x0800ddd0 stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
    0x0800ddd4 ldr r3, [r4, 0x48]                                        |     r3 = *((r4 + 0x48));
    0x0800ddd8 mov r2, r4                                                |     r2 = r4;
    0x0800dddc mov r0, r5                                                |     r0 = r5;
    0x0800dde0 mov r1, 0                                                 |     r1 = 0;
    0x0800dde4 bic r3, r3, 1                                             |     r3 = BIT_MASK (r3, 1);
    0x0800dde8 ldr r3, [r3, 0x18]                                        |     r3 = *((r3 + 0x18));
    0x0800ddec blx r3                                                    |     uint32_t (*r3)(uint32_t) (r3);
    0x0800ddf0 mov r0, 2                                                 |     r0 = 2;
    0x0800ddf4 add sp, sp, 0x24                                          |     
    0x0800ddf8 pop {r4, r5, r6, r7, pc}                                  |     
                                                                         | label_8:
    0x0800ddfc ldrh r3, [r5, 0xe]                                        |     r3 = *((r5 + 0xe));
    0x0800de00 ldr r2, [r5, 0x20]                                        |     r2 = *((r5 + 0x20));
    0x0800de04 cmp r3, 0xa                                               |     
    0x0800de08 ldr r3, [r5, 0x30]                                        |     r3 = *((r5 + 0x30));
                                                                         |     if (r3 == 0xa) {
    0x0800de0c beq 0x800ded0                                             |         goto label_15;
                                                                         |     }
    0x0800de10 cmp r3, r2                                                |     
                                                                         |     if (r3 == r2) {
    0x0800de14 beq 0x800dd00                                             |         goto label_0;
                                                                         |     }
    0x0800de18 b 0x800dcc8                                               |     goto label_1;
                                                                         | label_9:
    0x0800de1c ldr r3, [r4, 0xc]                                         |     r3 = *((r4 + 0xc));
    0x0800de20 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x0800de24 beq 0x800dd00                                             |         goto label_0;
                                                                         |     }
                                                                         | label_12:
    0x0800de28 udf 0x12                                                  |     __asm ("udf 0x12");
                                                                         | label_5:
    0x0800de94 mov r1, r5                                                |     r1 = r5;
    0x0800de98 mov r0, r4                                                |     r0 = r4;
    0x0800de9c mov r2, 1                                                 |     r2 = 1;
    0x0800dea0 stmdaeq r1, {r2, r4, r8, sl, fp, ip, lr}                  |     __asm ("stmdaeq r1, {r2, r4, r8, sl, fp, ip, lr}");
    0x0800dea4 b 0x800dcb0                                               |     goto label_2;
                                                                         | label_6:
    0x0800dea8 stmdaeq r2, {r4, r5, sb, ip, sp, lr}                      |     __asm ("stmdaeq r2, {r4, r5, sb, ip, sp, lr}");
    0x0800deac b 0x800dca8                                               |     goto label_3;
                                                                         | label_14:
    0x0800deb0 mov r1, 1                                                 |     r1 = 1;
    0x0800deb4 stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc}              |     __asm ("stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc}");
    0x0800deb8 stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc}              |     __asm ("stmdaeq r1, {r2, r3, r4, r6, r7, r8, fp, pc}");
    0x0800debc strb r1, [r2]                                             |     *(r2) = r1;
    0x0800dec0 mov r2, 9                                                 |     r2 = 9;
    0x0800dec4 mov r1, 0xf6                                              |     r1 = 0xf6;
    0x0800dec8 stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r3, r6, r7, sb, ip, sp, lr}");
    0x0800decc b 0x800ddd0                                               |     goto label_4;
                                                                         | label_15:
    0x0800ded0 ldr r1, [r5, 0x34]                                        |     r1 = *((r5 + 0x34));
    0x0800ded4 eor r3, r3, r2                                            |     r3 ^= r2;
    0x0800ded8 ldr r2, [r5, 0x24]                                        |     r2 = *((r5 + 0x24));
    0x0800dedc eor r2, r2, r1                                            |     r2 ^= r1;
    0x0800dee0 ldr r1, [r5, 0x38]                                        |     r1 = *((r5 + 0x38));
    0x0800dee4 orr r3, r2, r3                                            |     r3 = r2 | r3;
    0x0800dee8 ldr r2, [r5, 0x28]                                        |     r2 = *((r5 + 0x28));
    0x0800deec eor r2, r2, r1                                            |     r2 ^= r1;
    0x0800def0 ldr r1, [r5, 0x3c]                                        |     r1 = *((r5 + 0x3c));
    0x0800def4 orr r3, r3, r2                                            |     r3 |= r2;
    0x0800def8 ldr r2, [r5, 0x2c]                                        |     r2 = *((r5 + 0x2c));
    0x0800defc eor r2, r2, r1                                            |     r2 ^= r1;
    0x0800df00 orrs r3, r3, r2                                           |     r3 |= r2;
                                                                         |     if (r3 != r3) {
    0x0800df04 bne 0x800dcc8                                             |         goto label_1;
                                                                         |     }
    0x0800df08 b 0x800dd00                                               |     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/net/netfilter/ipvs/ip_vs.ko @ 0x8002c3c */
                                                                             | #include <stdint.h>
                                                                             |  
    ; (fcn) sym.ip_vs_proto_name ()                                          | void ip_vs_proto_name (uint32_t arg1) {
                                                                             |     r0 = arg1;
    0x08002c3c mov r2, r0                                                    |     r2 = r0;
    0x08002c40 cmp r0, 0x11                                                  |     
                                                                             |     if (r0 <= 0x11) {
    0x08002c44 bhi 0x8002c9c                                                 |         
    0x08002c48 cmp r0, 0x11                                                  |         
                                                                             |         if (r0 > 0x11) {
                                                                             |             /* switch table (18 cases) at 0x8002c54 */
    0x08002c4c ldrls pc, [pc, r0, lsl 2]                                     |             offset_0 = r0 << 2;
                                                                             |             pc = *((pc + offset_0));
                                                                             |         }
    0x08002c50 b 0x8002cc4                                                   |         
                                                                             |     } else {
    0x08002c9c cmp r0, 0x3a                                                  |         
                                                                             |         if (r0 != 0x3a) {
    0x08002ca0 beq 0x8002cb8                                                 |             
    0x08002ca4 cmp r0, 0x84                                                  |             
                                                                             |             if (r0 != 0x84) {
    0x08002ca8 bne 0x8002cc4                                                 |                 goto label_0;
                                                                             |             }
    0x08002cac stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr}                  |             __asm ("stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr}");
    0x08002cb0 stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr}                  |             __asm ("stmdaeq r1, {r4, r7, sb, sl, fp, ip, sp, lr}");
    0x08002cb4 bx lr                                                         |             return;
                                                                             |         }
    0x08002cb8 stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr}                  |         __asm ("stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr}");
    0x08002cbc stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr}                  |         __asm ("stmdaeq r1, {r5, r7, sb, sl, fp, ip, sp, lr}");
    0x08002cc0 bx lr                                                         |         return;
                                                                             |     }
                                                                             | label_0:
    0x08002cc4 push {r4, lr}                                                 |     
    0x08002cc8 stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr}");
    0x08002ccc stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r1, {r2, r3, r5, r7, sb, sl, fp, ip, sp, lr}");
    0x08002cd0 ldr r0, [pc, 0x38]                                            |     r0 = *(0x8002d0c);
    0x08002cd4 stmdaeq r2, {r3, r4, sb, ip, sp, lr}                          |     __asm ("stmdaeq r2, {r3, r4, sb, ip, sp, lr}");
    0x08002cd8 ldr r0, [pc, 0x30]                                            |     r0 = *(0x8002d0c);
    0x08002cdc pop {r4, pc}                                                  |     
                                                                             | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x80129d8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.ip_vs_start_estimator ()                         | void ip_vs_start_estimator (int32_t arg1, int32_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x080129d8 str lr, [sp, -4]!                                 |     
    0x080129dc add ip, r1, 0x50                                  |     
    0x080129e0 mov r2, r0                                        |     r2 = r0;
    0x080129e4 mov r3, sp                                        |     r3 = sp;
    0x080129e8 str ip, [r1, 0x50]                                |     *((r1 + 0x50)) = ip;
    0x080129ec bic lr, r3, 0x1fc0                                |     lr = BIT_MASK (r3, 0x1fc0);
    0x080129f0 str ip, [r1, 0x54]                                |     *((r1 + 0x54)) = ip;
    0x080129f4 bic lr, lr, 0x3f                                  |     lr = BIT_MASK (lr, 0x3f);
    0x080129f8 mov r3, r1                                        |     r3 = r1;
    0x080129fc movw r1, 0x201                                    |     r1 = 0x201;
    0x08012a00 ldr r0, [lr, 4]                                   |     r0 = *((lr + 4));
    0x08012a04 add r0, r0, r1                                    |     r0 += r1;
    0x08012a08 str r0, [lr, 4]                                   |     *((lr + 4)) = r0;
    0x08012a0c ldr r0, [r2, 0x47c]                               |     r0 = *((r2 + 0x47c));
    0x08012a10 str ip, [r0, 4]                                   |     *((r0 + 4)) = ip;
    0x08012a14 str r0, [r3, 0x50]                                |     *((r3 + 0x50)) = r0;
    0x08012a18 add r0, r2, 0x470                                 |     r0 = r2 + 0x470;
    0x08012a1c add r0, r0, 0xc                                   |     r0 += 0xc;
    0x08012a20 str r0, [r3, 0x54]                                |     *((r3 + 0x54)) = r0;
    0x08012a24 str ip, [r2, 0x47c]                               |     *((r2 + 0x47c)) = ip;
    0x08012a28 ldr r0, [pc, 4]                                   |     r0 = sym.ip_vs_conn_seq_next;
    0x08012a2c pop {lr}                                          |     
    0x08012a30 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08012a34 stmdaeq r0, {r4, r5, r6}                          |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                 | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x8012a38 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.ip_vs_stop_estimator ()                          | void ip_vs_stop_estimator (int32_t arg2) {
                                                                 |     r1 = arg2;
    0x08012a38 mov r3, sp                                        |     r3 = sp;
    0x08012a3c bic r2, r3, 0x1fc0                                |     r2 = BIT_MASK (r3, 0x1fc0);
    0x08012a40 mov r3, r1                                        |     r3 = r1;
    0x08012a44 bic r2, r2, 0x3f                                  |     r2 = BIT_MASK (r2, 0x3f);
    0x08012a48 movw r1, 0x201                                    |     r1 = 0x201;
    0x08012a4c ldr r0, [r2, 4]                                   |     r0 = *((r2 + 4));
    0x08012a50 add r0, r0, r1                                    |     r0 += r1;
    0x08012a54 str r0, [r2, 4]                                   |     *((r2 + 4)) = r0;
    0x08012a58 ldr r2, [r3, 0x54]                                |     r2 = *((r3 + 0x54));
    0x08012a5c mov ip, 0x100                                     |     
    0x08012a60 ldr r0, [r3, 0x50]                                |     r0 = *((r3 + 0x50));
    0x08012a64 str r2, [r0, 4]                                   |     *((r0 + 4)) = r2;
    0x08012a68 str r0, [r2]                                      |     *(r2) = r0;
    0x08012a6c movw r2, 0x122                                    |     r2 = 0x122;
    0x08012a70 ldr r0, [pc, 8]                                   |     r0 = sym.ip_vs_conn_seq_next;
    0x08012a74 str ip, [r3, 0x50]                                |     *((r3 + 0x50)) = ip;
    0x08012a78 str r2, [r3, 0x54]                                |     *((r3 + 0x54)) = r2;
    0x08012a7c stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08012a80 stmdaeq r0, {r4, r5, r6}                          |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                 | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x80142d8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.ip_vs_tcp_conn_listen ()                         | void ip_vs_tcp_conn_listen (uint32_t arg1) {
                                                                 |     int32_t var_0h;
                                                                 |     r0 = arg1;
    0x080142d8 push {r4, lr}                                     |     
    0x080142dc mov r1, 6                                         |     r1 = 6;
    0x080142e0 mov r4, r0                                        |     r4 = r0;
    0x080142e4 ldr r0, [r0, 0x48]                                |     r0 = *((r0 + 0x48));
    0x080142e8 stmdaeq r1, {r3, r4, r5, sl, fp, sp}              |     __asm ("stmdaeq r1, {r3, r4, r5, sl, fp, sp}");
    0x080142ec mov r3, sp                                        |     r3 = sp;
    0x080142f0 bic r2, r3, 0x1fc0                                |     r2 = BIT_MASK (r3, 0x1fc0);
    0x080142f4 bic r2, r2, 0x3f                                  |     r2 = BIT_MASK (r2, 0x3f);
    0x080142f8 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x080142fc add r3, r3, 0x200                                 |     r3 += 0x200;
    0x08014300 add r3, r3, 1                                     |     r3++;
    0x08014304 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x08014308 cmp r0, 0                                         |     
    0x0801430c mov r3, 9                                         |     r3 = 9;
    0x08014310 strh r3, [r4, 0x68]                               |     *((r4 + 0x68)) = r3;
    0x08014314 movw r1, 0x201                                    |     r1 = 0x201;
    0x08014318 movweq r3, 0x2ee0                                 |     __asm ("movweq r3, 0x2ee0");
                                                                 |     if (r0 == 0) {
    0x0801431c ldrne r3, [r0, 8]                                 |         r3 = *((r0 + 8));
                                                                 |     }
    0x08014320 ldr r0, [pc, 0xc]                                 |     r0 = *(0x8014330);
                                                                 |     if (r0 == 0) {
    0x08014324 ldrne r3, [r3, 0x24]                              |         r3 = *((r3 + 0x24));
                                                                 |     }
    0x08014328 str r3, [r4, 0x64]                                |     *((r4 + 0x64)) = r3;
    0x0801432c pop {r4, lr}                                      |     
    0x08014330 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08014334 stmdaeq r0, {r4, r5, r6}                          |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                 | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x8001948 */
                                                                         | #include <stdint.h>
                                                                         |  
                                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                         |  
    ; (fcn) sym.ip_vs_try_bind_dest ()                                   | void ip_vs_try_bind_dest (int32_t arg1) {
                                                                         |     int32_t var_0h;
                                                                         |     int32_t var_4h;
                                                                         |     int32_t var_8h;
                                                                         |     int32_t var_ch;
                                                                         |     int32_t var_10h;
                                                                         |     int32_t var_14h;
                                                                         |     int32_t var_1ch;
                                                                         |     r0 = arg1;
    0x08001948 push {r4, r5, lr}                                         |     
    0x0800194c mov r4, r0                                                |     r4 = r0;
    0x08001950 sub sp, sp, 0x1c                                          |     
    0x08001954 stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r2, r3, r4, r5, r7, r8, ip, sp, lr}");
    0x08001958 add r2, r4, 0x20                                          |     r2 = r4 + 0x20;
    0x0800195c str r2, [sp, 4]                                           |     var_4h = r2;
    0x08001960 add r3, r4, 0x30                                          |     r3 = r4 + 0x30;
    0x08001964 ldr r0, [r4, 0x40]                                        |     r0 = *((r4 + 0x40));
    0x08001968 ldr r1, [r4, 0x6c]                                        |     r1 = *((r4 + 0x6c));
    0x0800196c ldrh r2, [r4, 0xe]                                        |     r2 = *((r4 + 0xe));
    0x08001970 str r0, [sp, 0x14]                                        |     var_14h = r0;
    0x08001974 str r1, [sp, 0x10]                                        |     var_10h = r1;
    0x08001978 ldrh r0, [r4, 0x44]                                       |     r0 = *((r4 + 0x44));
    0x0800197c ldrh r1, [r4, 0xc]                                        |     r1 = *((r4 + 0xc));
    0x08001980 str r1, [sp, 8]                                           |     var_8h = r1;
    0x08001984 mov r1, r2                                                |     r1 = r2;
    0x08001988 str r0, [sp, 0xc]                                         |     var_ch = r0;
    0x0800198c ldrh r0, [r4, 0xa]                                        |     r0 = *((r4 + 0xa));
    0x08001990 str r0, [sp]                                              |     *(sp) = r0;
    0x08001994 ldr r0, [r4, 0x48]                                        |     r0 = *((r4 + 0x48));
    0x08001998 stmdaeq r0, {r2, r4, r7, r8, fp, lr, pc}                  |     __asm ("stmdaeq r0, {r2, r4, r7, r8, fp, lr, pc}");
    0x0800199c subs r5, r0, 0                                            |     r5 = r0 - 0;
                                                                         |     if (r5 == r0) {
    0x080019a0 beq 0x8001ac0                                             |         goto label_0;
                                                                         |     }
    0x080019a4 mov r3, sp                                                |     r3 = sp;
    0x080019a8 movw r1, 0x201                                            |     r1 = 0x201;
    0x080019ac bic r3, r3, 0x1fc0                                        |     r3 = BIT_MASK (r3, 0x1fc0);
    0x080019b0 bic r3, r3, 0x3f                                          |     r3 = BIT_MASK (r3, 0x3f);
    0x080019b4 ldr r2, [r3, 4]                                           |     r2 = *((r3 + 4));
    0x080019b8 add r2, r2, r1                                            |     r2 += r1;
    0x080019bc str r2, [r3, 4]                                           |     *((r3 + 4)) = r2;
    0x080019c0 ldr r3, [r4, 0x7c]                                        |     r3 = *((r4 + 0x7c));
    0x080019c4 cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x080019c8 bne 0x8001ab8                                             |         goto label_6;
                                                                         |     }
    0x080019cc ldr r3, [r4, 0x88]                                        |     r3 = *((r4 + 0x88));
    0x080019d0 cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x080019d4 beq 0x80019e0                                             |         
    0x080019d8 mov r0, r4                                                |         r0 = r4;
    0x080019dc stmdaeq r1, {r3, r4, r5, r6, r7, fp}                      |         __asm ("stmdaeq r1, {r3, r4, r5, r6, r7, fp}");
                                                                         |     }
    0x080019e0 add r0, r5, 0x3c                                          |     r0 = r5 + 0x3c;
    0x080019e4 pld [r0]                                                  |     __asm ("pld [r0]");
                                                                         |     do {
    0x080019e8 ldrex r3, [r0]                                            |         __asm ("ldrex r3, [r0]");
    0x080019ec add r2, r3, 1                                             |         r2 = r3 + 1;
    0x080019f0 strex r1, r2, [r0]                                        |         __asm ("strex r1, r2, [r0]");
    0x080019f4 teq r1, 0                                                 |         __asm ("teq r1, 0");
    0x080019f8 bne 0x80019e8                                             |         
                                                                         |     } while (r3 != 0);
    0x080019fc cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x08001a00 beq 0x8001bdc                                             |         goto label_7;
                                                                         |     }
    0x08001a04 add r2, r3, 1                                             |     r2 = r3 + 1;
    0x08001a08 orrs r2, r2, r3                                           |     r2 |= r3;
                                                                         |     if (r2 < r2) {
    0x08001a0c bmi 0x8001bd0                                             |         goto label_8;
                                                                         |     }
                                                                         | label_5:
    0x08001a10 ldrh r2, [r4, 0x44]                                       |     r2 = *((r4 + 0x44));
    0x08001a14 ldr r3, [r5, 0x28]                                        |     r3 = *((r5 + 0x28));
    0x08001a18 cmp r2, 0x11                                              |     
    0x08001a1c ldr r2, [r4, 0x40]                                        |     r2 = *((r4 + 0x40));
    0x08001a20 bicne r3, r3, 0x2000                                      |     __asm ("bicne r3, r3, 0x2000");
    0x08001a24 tst r2, 0x20                                              |     
                                                                         |     if ((r2 & 0x20) != 0) {
    0x08001a28 bne 0x8001b40                                             |         goto label_9;
                                                                         |     }
                                                                         | label_2:
    0x08001a2c orr r3, r3, r2                                            |     r3 |= r2;
    0x08001a30 str r5, [r4, 0x7c]                                        |     *((r4 + 0x7c)) = r5;
    0x08001a34 tst r3, 0x1000                                            |     
    0x08001a38 str r3, [r4, 0x40]                                        |     *((r4 + 0x40)) = r3;
                                                                         |     if ((r3 & 0x1000) != 0) {
    0x08001a3c bne 0x8001bb0                                             |         goto label_10;
                                                                         |     }
    0x08001a40 tst r3, 0x100                                             |     
                                                                         |     if ((r3 & 0x100) != 0) {
    0x08001a44 addeq r3, r5, 0x144                                       |         r3 = r5 + 0x144;
                                                                         |     }
                                                                         |     if ((r3 & 0x100) == 0) {
    0x08001a48 addne r3, r5, 0x148                                       |         r3 = r5 + 0x148;
                                                                         |     }
    0x08001a4c pld [r3]                                                  |     __asm ("pld [r3]");
                                                                         |     do {
    0x08001a50 ldrex r2, [r3]                                            |         __asm ("ldrex r2, [r3]");
    0x08001a54 add r2, r2, 1                                             |         r2++;
    0x08001a58 strex r1, r2, [r3]                                        |         __asm ("strex r1, r2, [r3]");
    0x08001a5c teq r1, 0                                                 |         __asm ("teq r1, 0");
    0x08001a60 bne 0x8001a50                                             |         
                                                                         |     } while ((r3 & 0x100) != 0);
                                                                         | label_4:
    0x08001a64 ldr r3, [r5, 0x150]                                       |     r3 = *((r5 + 0x150));
    0x08001a68 cmp r3, 0                                                 |     
                                                                         |     if (r3 != 0) {
    0x08001a6c bne 0x8001b20                                             |         goto label_11;
                                                                         |     }
                                                                         | label_1:
    0x08001a70 ldr r0, [pc, 0x1a0]                                       |     r0 = *(0x8001c14);
    0x08001a74 movw r1, 0x201                                            |     r1 = 0x201;
    0x08001a78 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08001a7c ldrh r3, [r4, 0xe]                                        |     r3 = *((r4 + 0xe));
    0x08001a80 mov r2, 0                                                 |     r2 = 0;
    0x08001a84 str r2, [r4, 0x84]                                        |     *((r4 + 0x84)) = r2;
    0x08001a88 cmp r3, 0xa                                               |     
    0x08001a8c ldr r3, [r4, 0x40]                                        |     r3 = *((r4 + 0x40));
    0x08001a90 and r3, r3, 7                                             |     r3 &= 7;
                                                                         |     if (r3 == 0xa) {
    0x08001a94 beq 0x8001b90                                             |         goto label_12;
                                                                         |     }
    0x08001a98 cmp r3, 4                                                 |     
                                                                         |     if (r3 > 4) {
                                                                         |         /* switch table (5 cases) at 0x8001aa4 */
    0x08001a9c ldrls pc, [pc, r3, lsl 2]                                 |         offset_0 = r3 << 2;
                                                                         |         pc = *((pc + offset_0));
                                                                         |     }
    0x08001aa0 b 0x8001ae8                                               |     goto label_3;
                                                                         | label_6:
    0x08001ab8 ldr r0, [pc, 0x15c]                                       |     r0 = .text;
    0x08001abc stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
                                                                         |     do {
                                                                         | label_0:
    0x08001ac0 add sp, sp, 0x1c                                          |         
    0x08001ac4 pop {r4, r5, lr}                                          |         
    0x08001ac8 stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}                  |         __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
    0x08001acc ldrh r3, [r4, 0x46]                                       |         r3 = *((r4 + 0x46));
    0x08001ad0 cmp r3, 0xa                                               |         
    0x08001ad4 stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc}          |         __asm ("stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc}");
    0x08001ad8 stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc}              |         __asm ("stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc}");
    0x08001adc stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc}          |         __asm ("stmdaeq r0, {r4, r5, r6, sb, sl, ip, sp, lr, pc}");
    0x08001ae0 stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc}              |         __asm ("stmdaeq r0, {r3, r4, r5, sb, ip, sp, lr, pc}");
    0x08001ae4 str r3, [r4, 0x84]                                        |         *((r4 + 0x84)) = r3;
                                                                         | label_3:
    0x08001ae8 ldrh r1, [r4, 0x44]                                       |         r1 = *((r4 + 0x44));
    0x08001aec ldr r0, [r4, 0x48]                                        |         r0 = *((r4 + 0x48));
    0x08001af0 stmdaeq r1, {r3, r4, r5, sl, fp, sp}                      |         __asm ("stmdaeq r1, {r3, r4, r5, sl, fp, sp}");
    0x08001af4 cmp r0, 0                                                 |         
    0x08001af8 beq 0x8001ac0                                             |         
                                                                         |     } while (r0 == 0);
    0x08001afc ldr r3, [r0, 0xc]                                         |     r3 = *((r0 + 0xc));
    0x08001b00 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x08001b04 beq 0x8001ac0                                             |         goto label_0;
                                                                         |     }
    0x08001b08 ldr r1, [r0, 4]                                           |     r1 = *((r0 + 4));
    0x08001b0c mov r0, r4                                                |     r0 = r4;
    0x08001b10 stmdaeq r1, {r4, r5, r6, r7, fp}                          |     __asm ("stmdaeq r1, {r4, r5, r6, r7, fp}");
    0x08001b14 add sp, sp, 0x1c                                          |     
    0x08001b18 pop {r4, r5, lr}                                          |     
    0x08001b1c stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r2, r3, r7, r8, ip, sp, lr}");
                                                                         | label_11:
    0x08001b20 ldr r2, [r5, 0x144]                                       |     r2 = *((r5 + 0x144));
    0x08001b24 ldr r1, [r5, 0x148]                                       |     r1 = *((r5 + 0x148));
    0x08001b28 add r2, r2, r1                                            |     r2 += r1;
    0x08001b2c cmp r3, r2                                                |     
                                                                         |     if (r3 > r2) {
    0x08001b30 ldrls r3, [r5, 0x24]                                      |         r3 = *((r5 + 0x24));
                                                                         |     }
                                                                         |     if (r3 > r2) {
    0x08001b34 orrls r3, r3, 2                                           |         r3 |= 2;
                                                                         |     }
                                                                         |     if (r3 > r2) {
    0x08001b38 strls r3, [r5, 0x24]                                      |         *((r5 + 0x24)) = r3;
                                                                         |     }
    0x08001b3c b 0x8001a70                                               |     goto label_1;
                                                                         | label_9:
    0x08001b40 tst r2, 0x1000                                            |     
    0x08001b44 bic r2, r2, 0x87                                          |     r2 = BIT_MASK (r2, 0x87);
    0x08001b48 biceq r3, r3, 0x100                                       |     __asm ("biceq r3, r3, 0x100");
    0x08001b4c b 0x8001a2c                                               |     goto label_2;
                                                                         | label_12:
    0x08001b90 cmp r3, 4                                                 |     
                                                                         |     if (r3 > 4) {
                                                                         |         /* switch table (5 cases) at 0x8001b9c */
    0x08001b94 ldrls pc, [pc, r3, lsl 2]                                 |         offset_1 = r3 << 2;
                                                                         |         pc = *((pc + offset_1));
                                                                         |     }
    0x08001b98 b 0x8001ae8                                               |     goto label_3;
                                                                         | label_10:
    0x08001bb0 add r3, r5, 0x14c                                         |     r3 = r5 + 0x14c;
    0x08001bb4 pld [r3]                                                  |     __asm ("pld [r3]");
                                                                         |     do {
    0x08001bb8 ldrex r2, [r3]                                            |         __asm ("ldrex r2, [r3]");
    0x08001bbc add r2, r2, 1                                             |         r2++;
    0x08001bc0 strex r1, r2, [r3]                                        |         __asm ("strex r1, r2, [r3]");
    0x08001bc4 teq r1, 0                                                 |         __asm ("teq r1, 0");
    0x08001bc8 bne 0x8001bb8                                             |         
                                                                         |     } while (r3 != 4);
    0x08001bcc b 0x8001a64                                               |     goto label_4;
                                                                         | label_8:
    0x08001bd0 mov r1, 1                                                 |     r1 = 1;
    0x08001bd4 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
    0x08001bd8 b 0x8001a10                                               |     goto label_5;
                                                                         | label_7:
    0x08001bdc mov r1, 2                                                 |     r1 = 2;
    0x08001be0 stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}                  |     __asm ("stmdaeq r2, {r2, r6, r7, r8, ip, sp, lr}");
    0x08001be4 b 0x8001a10                                               |     goto label_5;
                                                                         | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x800787c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.ip_vs_zero_stats ()                              | void ip_vs_zero_stats (int32_t arg1) {
                                                                 |     int32_t var_0h;
                                                                 |     r0 = arg1;
    0x0800787c push {r4, r6, r7, lr}                             |     
    0x08007880 movw r4, 0x201                                    |     r4 = 0x201;
    0x08007884 mov r3, sp                                        |     r3 = sp;
    0x08007888 bic r2, r3, 0x1fc0                                |     r2 = BIT_MASK (r3, 0x1fc0);
    0x0800788c bic r2, r2, 0x3f                                  |     r2 = BIT_MASK (r2, 0x3f);
    0x08007890 ldr ip, [r2, 4]                                   |     ip = *((r2 + 4));
    0x08007894 add ip, ip, r4                                    |     
    0x08007898 str ip, [r2, 4]                                   |     *((r2 + 4)) = ip;
    0x0800789c ldrd r6, r7, [r0]                                 |     __asm ("ldrd r6, r7, [r0]");
    0x080078a0 strd r6, r7, [r0, 0xb0]                           |     __asm ("strd r6, r7, [r0, 0xb0]");
    0x080078a4 ldrd r6, r7, [r0, 8]                              |     __asm ("ldrd r6, r7, [r0, 8]");
    0x080078a8 strd r6, r7, [r0, 0xb8]                           |     __asm ("strd r6, r7, [r0, 0xb8]");
    0x080078ac ldrd r6, r7, [r0, 0x10]                           |     __asm ("ldrd r6, r7, [r0, 0x10]");
    0x080078b0 strd r6, r7, [r0, 0xc0]                           |     __asm ("strd r6, r7, [r0, 0xc0]");
    0x080078b4 ldrd r6, r7, [r0, 0x18]                           |     __asm ("ldrd r6, r7, [r0, 0x18]");
    0x080078b8 strd r6, r7, [r0, 0xc8]                           |     __asm ("strd r6, r7, [r0, 0xc8]");
    0x080078bc ldrd r6, r7, [r0, 0x20]                           |     __asm ("ldrd r6, r7, [r0, 0x20]");
    0x080078c0 strd r6, r7, [r0, 0xd0]                           |     __asm ("strd r6, r7, [r0, 0xd0]");
    0x080078c4 stmdaeq r1, {r2, r7, sb, fp, sp}                  |     __asm ("stmdaeq r1, {r2, r7, sb, fp, sp}");
    0x080078c8 mov r1, r4                                        |     r1 = r4;
    0x080078cc ldr r0, [pc, 4]                                   |     r0 = sym.ip_vs_conn_seq_next;
    0x080078d0 pop {r4, r6, r7, lr}                              |     
    0x080078d4 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x080078d8 stmdaeq r0, {r4, r5, r6}                          |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                 | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x8010fdc */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) sym.master_wakeup_work_handler ()                        | void master_wakeup_work_handler (int32_t arg1) {
                                                                     |     int32_t var_0h;
                                                                     |     r0 = arg1;
    0x08010fdc push {r4, lr}                                         |     
    0x08010fe0 mov r3, sp                                            |     r3 = sp;
    0x08010fe4 ldr r1, [r0, 0x2c]                                    |     r1 = *((r0 + 0x2c));
    0x08010fe8 bic r2, r3, 0x1fc0                                    |     r2 = BIT_MASK (r3, 0x1fc0);
    0x08010fec bic r2, r2, 0x3f                                      |     r2 = BIT_MASK (r2, 0x3f);
    0x08010ff0 ldr r3, [r2, 4]                                       |     r3 = *((r2 + 4));
    0x08010ff4 add r3, r3, 0x200                                     |     r3 += 0x200;
    0x08010ff8 add r3, r3, 1                                         |     r3++;
    0x08010ffc str r3, [r2, 4]                                       |     *((r2 + 4)) = r3;
    0x08011000 ldr r3, [r0, -8]                                      |     r3 = *((r0 - 8));
    0x08011004 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x08011008 beq 0x8011018                                         |         
    0x0801100c ldr r3, [r0, -4]                                      |         r3 = *((r0 - 4));
    0x08011010 cmp r3, 7                                             |         
                                                                     |         if (r3 < 7) {
    0x08011014 bls 0x8011028                                         |             goto label_0;
                                                                     |         }
                                                                     |     }
    0x08011018 pop {r4, lr}                                          |     
    0x0801101c movw r1, 0x201                                        |     r1 = 0x201;
    0x08011020 ldr r0, [pc, 0x40]                                    |     r0 = *(0x8011064);
    0x08011024 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}              |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
                                                                     | label_0:
    0x08011028 ldr ip, [r1, 0x498]                                   |     ip = *((r1 + 0x498));
    0x0801102c sub r3, r0, 0x14                                      |     r3 = r0 - 0x14;
    0x08011030 movw r2, 0xd2d4                                       |     
    0x08011034 movt r2, 0xd2d2                                       |     r2 = 0xd2d2d2d4;
    0x08011038 sub r3, r3, ip                                        |     r3 -= ip;
    0x0801103c mov ip, 8                                             |     
    0x08011040 str ip, [r0, -4]                                      |     *((r0 - 4)) = ip;
    0x08011044 asr r3, r3, 2                                         |     r3 >>= 2;
    0x08011048 ldr r1, [r1, 0x49c]                                   |     r1 = *((r1 + 0x49c));
    0x0801104c mul r2, r3, r2                                        |     r2 = r3 * r2;
    0x08011050 ldr r0, [r1, r2]                                      |     r0 = *((r1 + r2));
    0x08011054 stmdaeq r2, {r4, r5, r6, r8, sb, ip, sp, lr}          |     __asm ("stmdaeq r2, {r4, r5, r6, r8, sb, ip, sp, lr}");
    0x08011058 ldr r0, [pc, 8]                                       |     r0 = sym.ip_vs_conn_seq_next;
    0x0801105c pop {r4, lr}                                          |     
    0x08011060 movw r1, 0x201                                        |     r1 = 0x201;
    0x08011064 stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}              |     __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x08011068 stmdaeq r0, {r4, r5, r6}                              |     __asm ("stmdaeq r0, {r4, r5, r6}");
                                                                     | }
    ; 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/net/netfilter/ipvs/ip_vs.ko @ 0x800714c */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) sym.update_defense_level ()                              | void update_defense_level (int32_t arg1) {
                                                                     |     int32_t var_14h;
                                                                     |     int32_t var_1ch;
                                                                     |     r0 = arg1;
    0x0800714c push {r4, r5, r6, r7, lr}                             |     
    0x08007150 mov r4, r0                                            |     r4 = r0;
    0x08007154 sub sp, sp, 0x44                                      |     
    0x08007158 mov r0, sp                                            |     r0 = sp;
    0x0800715c stmdaeq r2, {r3, r5, r6, sb, ip, sp, lr}              |     __asm ("stmdaeq r2, {r3, r5, r6, sb, ip, sp, lr}");
    0x08007160 mov r3, sp                                            |     r3 = sp;
    0x08007164 bic r3, r3, 0x1fc0                                    |     r3 = BIT_MASK (r3, 0x1fc0);
    0x08007168 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0800716c bic r3, r3, 0x3f                                      |     r3 = BIT_MASK (r3, 0x3f);
    0x08007170 ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x08007174 ldr r6, [r4, 0x3f8]                                   |     r6 = *((r4 + 0x3f8));
    0x08007178 add r5, r5, r2                                        |     r5 += r2;
    0x0800717c ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x08007180 add r2, r2, 0x200                                     |     r2 += 0x200;
    0x08007184 str r2, [r3, 4]                                       |     *((r3 + 4)) = r2;
    0x08007188 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0800718c add r2, r2, 1                                         |     r2++;
    0x08007190 str r2, [r3, 4]                                       |     *((r3 + 4)) = r2;
    0x08007194 ldr r3, [r4, 0x400]                                   |     r3 = *((r4 + 0x400));
    0x08007198 cmp r3, 3                                             |     
                                                                     |     if (r3 > 3) {
                                                                     |         /* switch table (4 cases) at 0x80071a4 */
    0x0800719c ldrls pc, [pc, r3, lsl 2]                             |         offset_0 = r3 << 2;
                                                                     |         pc = *((pc + offset_0));
                                                                     |     }
    0x080071a0 b 0x80071c4                                           |     
    0x080071c4 mov r7, 0xe000                                        |     
    0x080071c8 movt r7, 0xffff                                       |     r7 = 0x-2000;
    0x080071cc mov r3, sp                                            |     r3 = sp;
    0x080071d0 and r3, r3, r7                                        |     r3 &= r7;
    0x080071d4 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x080071d8 sub r2, r2, 1                                         |     r2--;
    0x080071dc str r2, [r3, 4]                                       |     *((r3 + 4)) = r2;
    0x080071e0 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x080071e4 beq 0x8007390                                         |         goto label_3;
                                                                     |     }
                                                                     | label_1:
    0x080071e8 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x080071ec add r2, r2, 1                                         |     r2++;
    0x080071f0 str r2, [r3, 4]                                       |     *((r3 + 4)) = r2;
    0x080071f4 ldr r3, [r4, 0x404]                                   |     r3 = *((r4 + 0x404));
    0x080071f8 cmp r3, 3                                             |     
                                                                     |     if (r3 > 3) {
                                                                     |         /* switch table (4 cases) at 0x8007204 */
    0x080071fc ldrls pc, [pc, r3, lsl 2]                             |         offset_1 = r3 << 2;
                                                                     |         pc = *((pc + offset_1));
                                                                     |     }
    0x08007200 b 0x8007224                                           |     
    0x08007224 mov r7, 0xe000                                        |     
    0x08007228 movt r7, 0xffff                                       |     r7 = 0x-2000;
    0x0800722c mov r3, sp                                            |     r3 = sp;
    0x08007230 and r3, r3, r7                                        |     r3 &= r7;
    0x08007234 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x08007238 sub r2, r2, 1                                         |     r2--;
    0x0800723c str r2, [r3, 4]                                       |     *((r3 + 4)) = r2;
    0x08007240 cmp r2, 0                                             |     
    0x08007244 beq 0x8007374                                         |     
                                                                     |     while ((r2 & 2) == 0) {
                                                                     | label_0:
    0x08007248 ldr r2, [r3, 4]                                       |         r2 = *((r3 + 4));
    0x0800724c add r2, r2, 1                                         |         r2++;
    0x08007250 str r2, [r3, 4]                                       |         *((r3 + 4)) = r2;
    0x08007254 ldr r3, [r4, 0x408]                                   |         r3 = *((r4 + 0x408));
    0x08007258 cmp r3, 3                                             |         
                                                                     |         if (r3 > 3) {
                                                                     |             /* switch table (4 cases) at 0x8007264 */
    0x0800725c ldrls pc, [pc, r3, lsl 2]                             |             offset_2 = r3 << 2;
                                                                     |             pc = *((pc + offset_2));
                                                                     |         }
    0x08007260 b 0x8007280                                           |         
    0x08007280 str r3, [r4, 0x3e8]                                   |         *((r4 + 0x3e8)) = r3;
    0x08007284 mov r3, sp                                            |         r3 = sp;
    0x08007288 bic r3, r3, 0x1fc0                                    |         r3 = BIT_MASK (r3, 0x1fc0);
    0x0800728c bic r3, r3, 0x3f                                      |         r3 = BIT_MASK (r3, 0x3f);
    0x08007290 ldr r2, [r3, 4]                                       |         r2 = *((r3 + 4));
    0x08007294 sub r2, r2, 1                                         |         r2--;
    0x08007298 str r2, [r3, 4]                                       |         *((r3 + 4)) = r2;
    0x0800729c cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x080072a0 beq 0x80073ac                                         |             goto label_4;
                                                                     |         }
                                                                     | label_2:
    0x080072a4 ldr r0, [pc, 0x1a0]                                   |         r0 = *(0x8007448);
    0x080072a8 mov r1, 0x200                                         |         r1 = 0x200;
    0x080072ac stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}              |         __asm ("stmdaeq r2, {r3, r6, r7, r8, ip, sp, lr}");
    0x080072b0 add sp, sp, 0x44                                      |         
    0x080072b4 pop {r4, r5, r6, r7, pc}                              |         
    0x08007374 ldr r2, [r3]                                          |         r2 = *(r3);
    0x08007378 tst r2, 2                                             |         
    0x0800737c beq 0x8007248                                         |         
                                                                     |     }
    0x08007380 stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
    0x08007384 mov r3, sp                                            |     r3 = sp;
    0x08007388 and r3, r3, r7                                        |     r3 &= r7;
    0x0800738c b 0x8007248                                           |     goto label_0;
                                                                     | label_3:
    0x08007390 ldr r2, [r3]                                          |     r2 = *(r3);
    0x08007394 tst r2, 2                                             |     
                                                                     |     if ((r2 & 2) == 0) {
    0x08007398 beq 0x80071e8                                         |         goto label_1;
                                                                     |     }
    0x0800739c stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
    0x080073a0 mov r3, sp                                            |     r3 = sp;
    0x080073a4 and r3, r3, r7                                        |     r3 &= r7;
    0x080073a8 b 0x80071e8                                           |     goto label_1;
                                                                     | label_4:
    0x080073ac ldr r3, [r3]                                          |     r3 = *(r3);
    0x080073b0 tst r3, 2                                             |     
                                                                     |     if ((r3 & 2) == 0) {
    0x080073b4 beq 0x80072a4                                         |         goto label_2;
                                                                     |     }
    0x080073b8 stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}          |     __asm ("stmdaeq r2, {r3, r4, r6, r7, r8, ip, sp, lr}");
    0x080073bc b 0x80072a4                                           |     goto label_2;
                                                                     | }

[*] Function mmap used 1 times ip_vs.ko