[*] Binary protection state of imx-sdma.ko

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


[*] Function strcpy tear down of imx-sdma.ko

    ; assembly                                                           | /* r2dec pseudo code output */
                                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/dma/imx-sdma.ko @ 0x8001e70 */
                                                                         | #include <stdint.h>
                                                                         |  
                                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                         |  
    ; (fcn) sym.sdma_config_write ()                                     | void sdma_config_write (int32_t arg1, int32_t arg2) {
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x08001e70 push {r4, r5, r6, r7, r8, sb, sl, lr}                     |     
    0x08001e74 mov r3, 0                                                 |     r3 = 0;
    0x08001e78 mov r4, r0                                                |     r4 = r0;
    0x08001e7c ldr r6, [r0, 0xcc]                                        |     r6 = *((r0 + 0xcc));
    0x08001e80 mov r8, r2                                                |     r8 = r2;
    0x08001e84 cmp r2, 2                                                 |     
    0x08001e88 str r3, [r0, 0x100]                                       |     *((r0 + 0x100)) = r3;
    0x08001e8c strb r3, [r0, 0x138]                                      |     *((r0 + 0x138)) = r3;
                                                                         |     if (r2 == 2) {
    0x08001e90 beq 0x8002028                                             |         goto label_6;
                                                                         |     }
    0x08001e94 cmp r2, 3                                                 |     
                                                                         |     if (r2 == 3) {
    0x08001e98 beq 0x8001ff0                                             |         goto label_7;
                                                                         |     }
    0x08001e9c ldr r3, [r1, 8]                                           |     r3 = *((r1 + 8));
    0x08001ea0 cmp r6, 0x1a                                              |     
    0x08001ea4 str r3, [r0, 0xf0]                                        |     *((r0 + 0xf0)) = r3;
                                                                         |     if (r6 == 0x1a) {
    0x08001ea8 ldrne r3, [r1, 0x18]                                      |         r3 = *((r1 + 0x18));
                                                                         |     }
                                                                         |     if (r6 == 0x1a) {
    0x08001eac ldrne r2, [r1, 0x10]                                      |         r2 = *((r1 + 0x10));
                                                                         |     }
                                                                         |     if (r6 != 0x1a) {
    0x08001eb0 ldreq r3, [r1, 4]                                         |         r3 = *((r1 + 4));
                                                                         |     }
                                                                         |     if (r6 != 0x1a) {
    0x08001eb4 streq r3, [r0, 0xf4]                                      |         *((r0 + 0xf4)) = r3;
                                                                         |     }
                                                                         |     if (r6 == 0x1a) {
    0x08001eb8 mulne r3, r2, r3                                          |         r3 = r2 * r3;
                                                                         |     }
                                                                         |     if (r6 == 0x1a) {
    0x08001ebc strne r3, [r0, 0x100]                                     |         *((r0 + 0x100)) = r3;
                                                                         |     }
                                                                         |     if (r6 == 0x1a) {
    0x08001ec0 ldrne r3, [r1, 0x10]                                      |         r3 = *((r1 + 0x10));
                                                                         |     }
    0x08001ec4 strne r3, [r0, 0xd8]                                      |     *((r0 + 0xd8)) = r3;
                                                                         |     while (1) {
                                                                         | label_0:
    0x08001ec8 ldr r7, [r4, 0x88]                                        |         r7 = *((r4 + 0x88));
    0x08001ecc mov r1, 1                                                 |         r1 = 1;
    0x08001ed0 ldr r5, [r4, 0x8c]                                        |         r5 = *((r4 + 0x8c));
    0x08001ed4 add r7, r7, 0x2000                                        |         r7 += 0x2000;
    0x08001ed8 str r8, [r4, 0x90]                                        |         *((r4 + 0x90)) = r8;
    0x08001edc lsl r2, r1, r5                                            |         r2 = r1 << r5;
    0x08001ee0 ldr r3, [r7, 0xa4c]                                       |         r3 = *((r7 + 0xa4c));
    0x08001ee4 str r2, [r3, 8]                                           |         *((r3 + 8)) = r2;
    0x08001ee8 mov r3, 0                                                 |         r3 = 0;
    0x08001eec mov r2, 3                                                 |         r2 = 3;
    0x08001ef0 cmp r6, 0xf                                               |         
    0x08001ef4 str r3, [r4, 0xf8]                                        |         *((r4 + 0xf8)) = r3;
    0x08001ef8 str r3, [r4, 0xfc]                                        |         *((r4 + 0xfc)) = r3;
    0x08001efc str r3, [r4, 0x104]                                       |         *((r4 + 0x104)) = r3;
    0x08001f00 str r3, [r4, 0x108]                                       |         *((r4 + 0x108)) = r3;
    0x08001f04 str r2, [r4, 0x10c]                                       |         *((r4 + 0x10c)) = r2;
                                                                         |         if (r6 == 0xf) {
    0x08001f08 beq 0x8002060                                             |             goto label_8;
                                                                         |         }
    0x08001f0c cmp r6, 0x10                                              |         
                                                                         |         if (r6 == 0x10) {
    0x08001f10 beq 0x800204c                                             |             goto label_9;
                                                                         |         }
    0x08001f14 mov r2, r3                                                |         r2 = r3;
    0x08001f18 mov r0, r4                                                |         r0 = r4;
    0x08001f1c bl 0x8001290                                              |         sdma_config_ownership_constprop_0 ();
                                                                         | label_1:
    0x08001f20 ldr r2, [r4, 0x13c]                                       |         r2 = *((r4 + 0x13c));
    0x08001f24 sub r3, r2, 1                                             |         r3 = r2 - 1;
    0x08001f28 cmp r3, 6                                                 |         
                                                                         |         if (r3 <= 6) {
    0x08001f2c bhi 0x8001f44                                             |             
    0x08001f30 ldr r3, [r7, 0xa4c]                                       |             r3 = *((r7 + 0xa4c));
    0x08001f34 lsl r5, r5, 2                                             |             r5 <<= 2;
    0x08001f38 add r5, r5, 0x100                                         |             r5 += 0x100;
    0x08001f3c add r3, r3, r5                                            |             r3 += r5;
    0x08001f40 str r2, [r3]                                              |             *(r3) = r2;
                                                                         |         }
    0x08001f44 ldr r5, [r4, 0xd0]                                        |         r5 = *((r4 + 0xd0));
    0x08001f48 mov r0, r4                                                |         r0 = r4;
    0x08001f4c mov r1, r5                                                |         r1 = r5;
    0x08001f50 bl 0x80011d0                                              |         sdma_event_enable_constprop_0 ();
    0x08001f54 ldr sb, [r4, 0xd4]                                        |         sb = *((r4 + 0xd4));
    0x08001f58 cmp sb, 0                                                 |         
                                                                         |         if (sb != 0) {
    0x08001f5c bne 0x8002074                                             |             goto label_10;
                                                                         |         }
                                                                         | label_2:
    0x08001f60 mov r3, 0                                                 |         r3 = 0;
    0x08001f64 str r3, [r4, 0xdc]                                        |         *((r4 + 0xdc)) = r3;
    0x08001f68 str r3, [r4, 0xe0]                                        |         *((r4 + 0xe0)) = r3;
    0x08001f6c str r3, [r4, 0xe4]                                        |         *((r4 + 0xe4)) = r3;
    0x08001f70 str r3, [r4, 0xe8]                                        |         *((r4 + 0xe8)) = r3;
    0x08001f74 cmp r6, 0x1b                                              |         
                                                                         |         if (r6 > 0x1b) {
                                                                         |             /* switch table (28 cases) at 0x8001f80 */
    0x08001f78 ldrls pc, [pc, r6, lsl 2]                                 |             offset_0 = r6 << 2;
                                                                         |             pc = *((pc + offset_0));
                                                                         |         }
    0x08001f7c b 0x8002280                                               |         goto label_11;
                                                                         | label_7:
    0x08001ff0 ldr r3, [r1, 4]                                           |         r3 = *((r1 + 4));
    0x08001ff4 str r3, [r0, 0xf4]                                        |         *((r0 + 0xf4)) = r3;
    0x08001ff8 ldr r3, [r1, 8]                                           |         r3 = *((r1 + 8));
    0x08001ffc str r3, [r0, 0xf0]                                        |         *((r0 + 0xf0)) = r3;
    0x08002000 ldrb r2, [r1, 0x14]                                       |         r2 = *((r1 + 0x14));
    0x08002004 str r2, [r0, 0x100]                                       |         *((r0 + 0x100)) = r2;
    0x08002008 ldr r3, [r1, 0x18]                                        |         r3 = *((r1 + 0x18));
    0x0800200c lsl r3, r3, 0x10                                          |         r3 <<= 0x10;
    0x08002010 and r3, r3, 0xff0000                                      |         r3 &= 0xff0000;
    0x08002014 orr r3, r3, r2                                            |         r3 |= r2;
    0x08002018 str r3, [r0, 0x100]                                       |         *((r0 + 0x100)) = r3;
    0x0800201c ldr r3, [r1, 0x10]                                        |         r3 = *((r1 + 0x10));
    0x08002020 str r3, [r0, 0xd8]                                        |         *((r0 + 0xd8)) = r3;
    0x08002024 b 0x8001ec8                                               |         
                                                                         |     }
                                                                         | label_6:
    0x08002028 ldr r3, [r1, 4]                                           |     r3 = *((r1 + 4));
    0x0800202c str r3, [r0, 0xf0]                                        |     *((r0 + 0xf0)) = r3;
    0x08002030 ldr r3, [r1, 0x14]                                        |     r3 = *((r1 + 0x14));
    0x08002034 ldr r2, [r1, 0xc]                                         |     r2 = *((r1 + 0xc));
    0x08002038 mul r3, r2, r3                                            |     r3 = r2 * r3;
    0x0800203c str r3, [r0, 0x100]                                       |     *((r0 + 0x100)) = r3;
    0x08002040 ldr r3, [r1, 0xc]                                         |     r3 = *((r1 + 0xc));
    0x08002044 str r3, [r0, 0xd8]                                        |     *((r0 + 0xd8)) = r3;
    0x08002048 b 0x8001ec8                                               |     goto label_0;
                                                                         | label_9:
    0x0800204c mov r2, r3                                                |     r2 = r3;
    0x08002050 mov r1, r3                                                |     r1 = r3;
    0x08002054 mov r0, r4                                                |     r0 = r4;
    0x08002058 bl 0x8001290                                              |     sdma_config_ownership_constprop_0 ();
    0x0800205c b 0x8001f20                                               |     goto label_1;
                                                                         | label_8:
    0x08002060 mov r2, r1                                                |     r2 = r1;
    0x08002064 mov r0, r4                                                |     r0 = r4;
    0x08002068 mov r1, r3                                                |     r1 = r3;
    0x0800206c bl 0x8001290                                              |     sdma_config_ownership_constprop_0 ();
    0x08002070 b 0x8001f20                                               |     goto label_1;
                                                                         | label_10:
    0x08002074 mov r1, sb                                                |     r1 = sb;
    0x08002078 mov r0, r4                                                |     r0 = r4;
    0x0800207c bl 0x80011d0                                              |     sdma_event_enable_constprop_0 ();
    0x08002080 b 0x8001f60                                               |     goto label_2;
                                                                         |     do {
    0x08002090 strd r2, r3, [r4, 0xdc]                                   |         __asm ("strd r2, r3, [r4, 0xdc]");
    0x08002094 sub r3, r6, 0xf                                           |         r3 = r6 - 0xf;
    0x08002098 cmp r3, 1                                                 |         
                                                                         |         if (r3 <= 1) {
    0x0800209c bhi 0x80020dc                                             |             
    0x080020a0 mov r3, 0                                                 |             r3 = 0;
    0x080020a4 mov r0, 0                                                 |             r0 = 0;
    0x080020a8 str r3, [r4, 0x100]                                       |             *((r4 + 0x100)) = r3;
    0x080020ac pop {r4, r5, r6, r7, r8, sb, sl, pc}                      |             
                                                                         |         }
    0x080020dc cmp sb, 0                                                 |         
                                                                         |         if (sb == 0) {
    0x080020e0 beq 0x800228c                                             |             goto label_12;
                                                                         |         }
    0x080020e4 cmp r6, 0x14                                              |         
    0x080020e8 cmpne r6, 0x17                                            |         __asm ("cmpne r6, 0x17");
                                                                         |         if (r6 == 0x14) {
    0x080020ec beq 0x80022cc                                             |             goto label_13;
                                                                         |         }
                                                                         | label_3:
    0x080020f0 ldrd r2, r3, [r4, 0xf0]                                   |         __asm ("ldrd r2, r3, [r4, 0xf0]");
                                                                         | label_4:
    0x080020f4 str r2, [r4, 0x104]                                       |         *((r4 + 0x104)) = r2;
    0x080020f8 str r3, [r4, 0x108]                                       |         *((r4 + 0x108)) = r3;
    0x080020fc mov r0, 0                                                 |         r0 = 0;
    0x08002100 pop {r4, r5, r6, r7, r8, sb, sl, pc}                      |         
                                                                         | label_11:
    0x08002280 mov r3, 0                                                 |         r3 = 0;
    0x08002284 mov r2, r3                                                |         r2 = r3;
    0x08002288 b 0x8002090                                               |         
                                                                         |     } while (1);
                                                                         | label_12:
    0x0800228c cmp r8, 1                                                 |     
    0x08002290 cmpeq r6, 7                                               |     __asm ("cmpeq r6, 7");
                                                                         |     if (r8 == 1) {
    0x08002294 beq 0x8002438                                             |         goto label_14;
                                                                         |     }
    0x08002298 cmp r6, 0x19                                              |     
    0x0800229c beq 0x80023b8                                             |     
                                                                         |     while (1) {
                                                                         | label_5:
    0x080022a0 cmp r5, 0                                                 |         
    0x080022a4 add r3, r5, 0x1f                                          |         r3 = r5 + 0x1f;
                                                                         |         if (r5 < 0) {
    0x080022a8 movge r3, r5                                              |             r3 = r5;
                                                                         |         }
    0x080022ac add r1, r4, 0xf8                                          |         r1 = r4 + 0xf8;
    0x080022b0 and r5, r5, 0x1f                                          |         r5 &= 0x1f;
    0x080022b4 mov r0, 1                                                 |         r0 = 1;
    0x080022b8 asr r3, r3, 5                                             |         r3 >>= 5;
    0x080022bc ldr r2, [r1, r3, lsl 2]                                   |         offset_1 = r3 << 2;
                                                                         |         r2 = *((r1 + offset_1));
    0x080022c0 orr r5, r2, r0, lsl r5                                    |         r5 = r2 | (r0 << r5);
    0x080022c4 str r5, [r1, r3, lsl 2]                                   |         offset_2 = r3 << 2;
                                                                         |         *((r1 + offset_2)) = r5;
    0x080022c8 b 0x80020f0                                               |         goto label_3;
                                                                         | label_13:
    0x080022cc ldr r3, [r4, 0x100]                                       |         r3 = *((r4 + 0x100));
    0x080022d0 and r0, r5, 0x1f                                          |         r0 = r5 & 0x1f;
    0x080022d4 add r1, r4, 0xfc                                          |         r1 = r4 + 0xfc;
    0x080022d8 uxtb r6, r3                                               |         r6 = (int8_t) r3;
    0x080022dc ubfx r5, r3, 0x10, 8                                      |         r5 = (r3 >> 0x10) & ((1 << 8) - 1);
    0x080022e0 stmdaeq r0, {r1, r2, r3, r8, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r1, r2, r3, r8, sl, fp, ip, sp, lr}");
    0x080022e4 ldr r0, [r4, 0xd4]                                        |         r0 = *((r4 + 0xd4));
    0x080022e8 add r1, r4, 0xf8                                          |         r1 = r4 + 0xf8;
    0x080022ec and r0, r0, 0x1f                                          |         r0 &= 0x1f;
    0x080022f0 stmdaeq r0, {r1, r2, r3, r8, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r1, r2, r3, r8, sl, fp, ip, sp, lr}");
    0x080022f4 ldr r3, [r4, 0xd0]                                        |         r3 = *((r4 + 0xd0));
    0x080022f8 ldr r1, [r4, 0x100]                                       |         r1 = *((r4 + 0x100));
    0x080022fc cmp r3, 0x1f                                              |         
    0x08002300 ldr r3, [r4, 0xd4]                                        |         r3 = *((r4 + 0xd4));
                                                                         |         if (r3 <= 0x1f) {
    0x08002304 orrhi r1, r1, 0x10000000                                  |             r1 |= 0x10000000;
                                                                         |         }
                                                                         |         if (r3 <= 0x1f) {
    0x08002308 strhi r1, [r4, 0x100]                                     |             *((r4 + 0x100)) = r1;
                                                                         |         }
    0x0800230c cmp r3, 0x1f                                              |         
                                                                         |         if (r3 <= 0x1f) {
    0x08002310 orrhi r1, r1, 0x20000000                                  |             r1 |= 0x20000000;
                                                                         |         }
                                                                         |         if (r3 <= 0x1f) {
    0x08002314 strhi r1, [r4, 0x100]                                     |             *((r4 + 0x100)) = r1;
                                                                         |         }
    0x08002318 cmp r6, r5                                                |         
                                                                         |         if (r6 > r5) {
    0x0800231c ble 0x8002344                                             |             
    0x08002320 bic r1, r1, 0xff0000                                      |             r1 = BIT_MASK (r1, 0xff0000);
    0x08002324 orr r3, r5, r6, lsl 16                                    |             r3 = r5 | (r6 << 16);
    0x08002328 bic r1, r1, 0xff                                          |             r1 = BIT_MASK (r1, 0xff);
    0x0800232c ldr r2, [r4, 0xf8]                                        |             r2 = *((r4 + 0xf8));
    0x08002330 orr r1, r3, r1                                            |             r1 = r3 | r1;
    0x08002334 ldr r3, [r4, 0xfc]                                        |             r3 = *((r4 + 0xfc));
    0x08002338 str r1, [r4, 0x100]                                       |             *((r4 + 0x100)) = r1;
    0x0800233c str r2, [r4, 0xfc]                                        |             *((r4 + 0xfc)) = r2;
    0x08002340 str r3, [r4, 0xf8]                                        |             *((r4 + 0xf8)) = r3;
                                                                         |         }
    0x08002344 ldr r3, [r4, 0xf4]                                        |         r3 = *((r4 + 0xf4));
    0x08002348 ldr r0, [r7, 0xb54]                                       |         r0 = *((r7 + 0xb54));
    0x0800234c cmp r3, r0                                                |         
                                                                         |         if (r3 > r0) {
    0x08002350 blo 0x8002368                                             |             
    0x08002354 ldr r2, [r7, 0xb58]                                       |             r2 = *((r7 + 0xb58));
    0x08002358 cmp r3, r2                                                |             
                                                                         |             if (r3 > r2) {
    0x0800235c orrls r1, r1, 0x800                                       |                 r1 |= 0x800;
                                                                         |             }
                                                                         |             if (r3 > r2) {
    0x08002360 strls r1, [r4, 0x100]                                     |                 *((r4 + 0x100)) = r1;
                                                                         |             }
                                                                         |             if (r3 <= r2) {
    0x08002364 ldrls r0, [r7, 0xb54]                                     |                 r0 = *((r7 + 0xb54));
                                                                         |                 goto label_15;
                                                                         |             }
                                                                         |         }
                                                                         | label_15:
    0x08002368 ldr r2, [r4, 0xf0]                                        |         r2 = *((r4 + 0xf0));
    0x0800236c cmp r2, r0                                                |         
                                                                         |         if (r2 > r0) {
    0x08002370 blo 0x8002380                                             |             
    0x08002374 ldr r0, [r7, 0xb58]                                       |             r0 = *((r7 + 0xb58));
    0x08002378 cmp r2, r0                                                |             
                                                                         |             if (r2 <= r0) {
    0x0800237c orrls r1, r1, 0x1000                                      |                 r1 |= 0x1000;
                                                                         |                 goto label_16;
                                                                         |             }
                                                                         |         }
                                                                         | label_16:
    0x08002380 orr r0, r1, 0x80000000                                    |         r0 = r1 | 0x80000000;
    0x08002384 str r0, [r4, 0x100]                                       |         *((r4 + 0x100)) = r0;
    0x08002388 ldr r0, [r4, 0xc8]                                        |         r0 = *((r4 + 0xc8));
    0x0800238c ldrb ip, [r0]                                             |         ip = *(r0);
    0x08002390 cmp ip, 1                                                 |         
                                                                         |         if (ip <= 1) {
    0x08002394 orrhi r1, r1, 0x80000000                                  |             r1 |= 0x80000000;
                                                                         |         }
                                                                         |         if (ip <= 1) {
    0x08002398 orrhi r1, r1, 0x2000                                      |             r1 |= 0x2000;
                                                                         |         }
                                                                         |         if (ip <= 1) {
    0x0800239c strhi r1, [r4, 0x100]                                     |             *((r4 + 0x100)) = r1;
                                                                         |         }
    0x080023a0 ldrb r1, [r0, 1]                                          |         r1 = *((r0 + 1));
    0x080023a4 cmp r1, 1                                                 |         
                                                                         |         if (r1 <= 1) {
    0x080023a8 ldrhi r1, [r4, 0x100]                                     |             r1 = *((r4 + 0x100));
                                                                         |         }
                                                                         |         if (r1 <= 1) {
    0x080023ac orrhi r1, r1, 0x4000                                      |             r1 |= 0x4000;
                                                                         |         }
                                                                         |         if (r1 <= 1) {
    0x080023b0 strhi r1, [r4, 0x100]                                     |             *((r4 + 0x100)) = r1;
                                                                         |         }
    0x080023b4 b 0x80020f4                                               |         goto label_4;
    0x080023b8 ldr r2, [r4, 0xc8]                                        |         r2 = *((r4 + 0xc8));
    0x080023bc ldr ip, [r4, 0x100]                                       |         ip = *((r4 + 0x100));
    0x080023c0 ldrb r3, [r2, 1]                                          |         r3 = *((r2 + 1));
    0x080023c4 ldrb r0, [r2]                                             |         r0 = *(r2);
    0x080023c8 ldrb r1, [r2, 2]                                          |         r1 = *((r2 + 2));
    0x080023cc orr r0, r0, r3                                            |         r0 |= r3;
    0x080023d0 movw r3, 0xfff                                            |         
    0x080023d4 movt r3, 0x70                                             |         r3 = 0x700fff;
    0x080023d8 and r3, r3, ip                                            |         r3 &= ip;
    0x080023dc ldrb ip, [r2, 3]                                          |         ip = *((r2 + 3));
    0x080023e0 orr r1, r1, ip                                            |         r1 |= ip;
    0x080023e4 ldrb ip, [r2, 4]                                          |         ip = *((r2 + 4));
    0x080023e8 str r3, [r4, 0x100]                                       |         *((r4 + 0x100)) = r3;
    0x080023ec ldr r2, [r2, 8]                                           |         r2 = *((r2 + 8));
    0x080023f0 cmp r2, 0                                                 |         
                                                                         |         if (r2 >= 0) {
    0x080023f4 orrlt r3, r3, r2, lsl 24                                  |             r3 |= (r2 << 24);
                                                                         |         }
                                                                         |         if (r2 >= 0) {
    0x080023f8 orrlt r3, r3, 0x800000                                    |             r3 |= 0x800000;
                                                                         |         }
                                                                         |         if (r2 >= 0) {
    0x080023fc strlt r3, [r4, 0x100]                                     |             *((r4 + 0x100)) = r3;
                                                                         |         }
    0x08002400 cmp r0, 0                                                 |         
                                                                         |         if (r0 == 0) {
    0x08002404 ldrne r3, [r4, 0x100]                                     |             r3 = *((r4 + 0x100));
                                                                         |         }
                                                                         |         if (r0 == 0) {
    0x08002408 orrne r3, r3, r0, lsl 12                                  |             r3 |= (r0 << 12);
                                                                         |         }
                                                                         |         if (r0 == 0) {
    0x0800240c strne r3, [r4, 0x100]                                     |             *((r4 + 0x100)) = r3;
                                                                         |         }
    0x08002410 cmp r1, 0                                                 |         
                                                                         |         if (r1 == 0) {
    0x08002414 ldrne r3, [r4, 0x100]                                     |             r3 = *((r4 + 0x100));
                                                                         |         }
                                                                         |         if (r1 == 0) {
    0x08002418 orrne r3, r3, r1, lsl 16                                  |             r3 |= (r1 << 16);
                                                                         |         }
                                                                         |         if (r1 == 0) {
    0x0800241c strne r3, [r4, 0x100]                                     |             *((r4 + 0x100)) = r3;
                                                                         |         }
    0x08002420 cmp ip, 0                                                 |         
                                                                         |         if (ip == 0) {
    0x08002424 subne r3, ip, 1                                           |             r3 = ip - 1;
                                                                         |         }
                                                                         |         if (ip == 0) {
    0x08002428 ldrne r2, [r4, 0x100]                                     |             r2 = *((r4 + 0x100));
                                                                         |         }
                                                                         |         if (ip == 0) {
    0x0800242c orrne r3, r2, r3, lsl 28                                  |             r3 = r2 | (r3 << 28);
                                                                         |         }
                                                                         |         if (ip == 0) {
    0x08002430 strne r3, [r4, 0x100]                                     |             *((r4 + 0x100)) = r3;
                                                                         |         }
    0x08002434 b 0x80022a0                                               |         
                                                                         |     }
                                                                         | label_14:
    0x08002438 ldr r3, [r7, 0xb50]                                       |     r3 = *((r7 + 0xb50));
    0x0800243c ldrb r3, [r3, 0xd]                                        |     r3 = *((r3 + 0xd));
    0x08002440 cmp r3, 0                                                 |     
                                                                         |     if (r3 == 0) {
    0x08002444 ldrne r3, [r4, 0x100]                                     |         r3 = *((r4 + 0x100));
                                                                         |     }
                                                                         |     if (r3 == 0) {
    0x08002448 orrne r3, r3, 0x80000000                                  |         r3 |= 0x80000000;
                                                                         |     }
                                                                         |     if (r3 == 0) {
    0x0800244c strne r3, [r4, 0x100]                                     |         *((r4 + 0x100)) = r3;
                                                                         |     }
    0x08002450 b 0x80022a0                                               |     goto label_5;
                                                                         | }
    ; assembly                                                               | /* r2dec pseudo code output */
                                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/dma/imx-sdma.ko @ 0x8000b60 */
                                                                             | #include <stdint.h>
                                                                             |  
                                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                             |  
    ; (fcn) sym.sdma_free_chan_resources ()                                  | void sdma_free_chan_resources (int32_t arg1) {
                                                                             |     int32_t var_0h;
                                                                             |     int32_t var_4h;
                                                                             |     int32_t var_ch;
                                                                             |     r0 = arg1;
    0x08000b60 ldr r2, [r0, 0x88]                                            |     r2 = *((r0 + 0x88));
    0x08000b64 add r3, r2, 0x2000                                            |     r3 = r2 + 0x2000;
    0x08000b68 ldr r1, [r3, 0xb78]                                           |     r1 = *((r3 + 0xb78));
    0x08000b6c cmp r1, 0                                                     |     
                                                                             |     if (r1 != 0) {
    0x08000b70 bxeq lr                                                       |         return;
                                                                             |     }
    0x08000b74 push {r4, r5, lr}                                             |     
    0x08000b78 mov r4, r0                                                    |     r4 = r0;
    0x08000b7c ldr r3, [r3, 0xb50]                                           |     r3 = *((r3 + 0xb50));
    0x08000b80 sub sp, sp, 0xc                                               |     
    0x08000b84 ldrb r3, [r3, 0xf]                                            |     r3 = *((r3 + 0xf));
    0x08000b88 cmp r3, 0                                                     |     
    0x08000b8c bne 0x8000c84                                                 |     
                                                                             |     while (1) {
    0x08000b90 mov r0, r4                                                    |         r0 = r4;
    0x08000b94 bl 0x8000900                                                  |         sdma_terminate_all ();
    0x08000b98 add r0, r4, 0x3c                                              |         r0 = r4 + 0x3c;
    0x08000b9c str sp, [sp]                                                  |         *(sp) = sp;
    0x08000ba0 str sp, [sp, 4]                                               |         var_4h = sp;
    0x08000ba4 stmdaeq r0, {r1, r4, r5, r7, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r1, r4, r5, r7, sl, fp, ip, sp, lr}");
    0x08000ba8 mrs ip, apsr                                                  |         ip = apsr;
    0x08000bac cpsid i                                                       |         __asm ("cpsid i");
    0x08000bb0 mov r3, sp                                                    |         r3 = sp;
    0x08000bb4 bic r3, r3, 0x1fc0                                            |         r3 = BIT_MASK (r3, 0x1fc0);
    0x08000bb8 bic r3, r3, 0x3f                                              |         r3 = BIT_MASK (r3, 0x3f);
    0x08000bbc ldr r2, [r3, 4]                                               |         r2 = *((r3 + 4));
    0x08000bc0 add r2, r2, 1                                                 |         r2++;
    0x08000bc4 str r2, [r3, 4]                                               |         *((r3 + 4)) = r2;
    0x08000bc8 ldr r2, [r4, 0x78]                                            |         r2 = *((r4 + 0x78));
    0x08000bcc add r3, r4, 0x78                                              |         r3 = r4 + 0x78;
    0x08000bd0 cmp r3, r2                                                    |         
                                                                             |         if (r3 != r2) {
    0x08000bd4 beq 0x8000bfc                                                 |             
    0x08000bd8 ldr r2, [r4, 0x7c]                                            |             r2 = *((r4 + 0x7c));
    0x08000bdc ldr r1, [sp, 4]                                               |             r1 = var_4h;
    0x08000be0 ldr r0, [r4, 0x78]                                            |             r0 = *((r4 + 0x78));
    0x08000be4 str r1, [r0, 4]                                               |             *((r0 + 4)) = r1;
    0x08000be8 str r0, [r1]                                                  |             *(r1) = r0;
    0x08000bec str sp, [r2]                                                  |             *(r2) = sp;
    0x08000bf0 str r2, [sp, 4]                                               |             var_4h = r2;
    0x08000bf4 str r3, [r4, 0x78]                                            |             *((r4 + 0x78)) = r3;
    0x08000bf8 str r3, [r4, 0x7c]                                            |             *((r4 + 0x7c)) = r3;
                                                                             |         }
    0x08000bfc msr cpsr_c, ip                                                |         cpsr_c = ip;
    0x08000c00 mov r3, sp                                                    |         r3 = sp;
    0x08000c04 bic r3, r3, 0x1fc0                                            |         r3 = BIT_MASK (r3, 0x1fc0);
    0x08000c08 bic r3, r3, 0x3f                                              |         r3 = BIT_MASK (r3, 0x3f);
    0x08000c0c ldr r2, [r3, 4]                                               |         r2 = *((r3 + 4));
    0x08000c10 sub r2, r2, 1                                                 |         r2--;
    0x08000c14 str r2, [r3, 4]                                               |         *((r3 + 4)) = r2;
    0x08000c18 cmp r2, 0                                                     |         
                                                                             |         if (r2 == 0) {
    0x08000c1c beq 0x8000cd0                                                 |             goto label_2;
                                                                             |         }
                                                                             | label_1:
    0x08000c20 mov r1, sp                                                    |         r1 = sp;
    0x08000c24 mov r0, r4                                                    |         r0 = r4;
    0x08000c28 stmdaeq r0, {r1, r2, r4, r5, r7, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r1, r2, r4, r5, r7, sl, fp, ip, sp, lr}");
    0x08000c2c add r0, r4, 0x120                                             |         r0 = r4 + 0x120;
    0x08000c30 stmdaeq r0, {r1, r3, r4, r5, r7, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r1, r3, r4, r5, r7, sl, fp, ip, sp, lr}");
    0x08000c34 ldr r1, [r4, 0xd0]                                            |         r1 = *((r4 + 0xd0));
    0x08000c38 mov r0, r4                                                    |         r0 = r4;
    0x08000c3c bl 0x8000070                                                  |         sdma_event_disable ();
    0x08000c40 ldr r1, [r4, 0xd4]                                            |         r1 = *((r4 + 0xd4));
    0x08000c44 cmp r1, 0                                                     |         
                                                                             |         if (r1 != 0) {
    0x08000c48 bne 0x8000cc4                                                 |             goto label_3;
                                                                             |         }
                                                                             | label_0:
    0x08000c4c mov r5, 0                                                     |         r5 = 0;
    0x08000c50 ldr r0, [r4, 0xc8]                                            |         r0 = *((r4 + 0xc8));
    0x08000c54 str r5, [r4, 0xd0]                                            |         *((r4 + 0xd0)) = r5;
    0x08000c58 str r5, [r4, 0xd4]                                            |         *((r4 + 0xd4)) = r5;
    0x08000c5c stmdaeq r0, {r1, r3, r4, r7, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r1, r3, r4, r7, sl, fp, ip, sp, lr}");
    0x08000c60 ldr r3, [r4, 0x88]                                            |         r3 = *((r4 + 0x88));
    0x08000c64 str r5, [r4, 0xc8]                                            |         *((r4 + 0xc8)) = r5;
    0x08000c68 add r2, r3, 0x2000                                            |         r2 = r3 + 0x2000;
    0x08000c6c ldr r2, [r2, 0xb50]                                           |         r2 = *((r2 + 0xb50));
    0x08000c70 ldrb r2, [r2, 0xf]                                            |         r2 = *((r2 + 0xf));
    0x08000c74 cmp r2, r5                                                    |         
                                                                             |         if (r2 != r5) {
    0x08000c78 bne 0x8000c94                                                 |             goto label_4;
                                                                             |         }
    0x08000c7c add sp, sp, 0xc                                               |         
    0x08000c80 pop {r4, r5, pc}                                              |         
    0x08000c84 ldr r0, [r2]                                                  |         r0 = *(r2);
    0x08000c88 mov r1, 4                                                     |         r1 = 4;
    0x08000c8c stmdaeq r0, {r1, r2, r5, r7, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r1, r2, r5, r7, sl, fp, ip, sp, lr}");
    0x08000c90 b 0x8000b90                                                   |         
                                                                             |     }
                                                                             | label_4:
    0x08000c94 ldr r5, [r3]                                                  |     r5 = *(r3);
    0x08000c98 stmdaeq r0, {r1, r3, r5, r7, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r1, r3, r5, r7, sl, fp, ip, sp, lr}");
    0x08000c9c mov r2, r0                                                    |     r2 = r0;
    0x08000ca0 mov r3, r1                                                    |     r3 = r1;
    0x08000ca4 add r5, r5, 0x120                                             |     r5 += 0x120;
    0x08000ca8 mov r1, 0xd                                                   |     r1 = 0xd;
    0x08000cac strd r2, r3, [r5, -8]                                         |     __asm ("strd r2, r3, [r5, -8]");
    0x08000cb0 ldr r3, [r4, 0x88]                                            |     r3 = *((r4 + 0x88));
    0x08000cb4 ldr r0, [r3]                                                  |     r0 = *(r3);
    0x08000cb8 add sp, sp, 0xc                                               |     
    0x08000cbc pop {r4, r5, lr}                                              |     
    0x08000cc0 stmdaeq r0, {r1, r2, r3, r5, r7, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r1, r2, r3, r5, r7, sl, fp, ip, sp, lr}");
                                                                             | label_3:
    0x08000cc4 mov r0, r4                                                    |     r0 = r4;
    0x08000cc8 bl 0x8000070                                                  |     sdma_event_disable ();
    0x08000ccc b 0x8000c4c                                                   |     goto label_0;
                                                                             | label_2:
    0x08000cd0 ldr r3, [r3]                                                  |     r3 = *(r3);
    0x08000cd4 tst r3, 2                                                     |     
                                                                             |     if ((r3 & 2) == 0) {
    0x08000cd8 beq 0x8000c20                                                 |         goto label_1;
                                                                             |     }
    0x08000cdc stmdaeq r0, {r1, r3, r4, r5, r6, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r1, r3, r4, r5, r6, sl, fp, ip, sp, lr}");
    0x08000ce0 b 0x8000c20                                                   |     goto label_1;
                                                                             | }
    ; assembly                                                                   | /* r2dec pseudo code output */
                                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/dma/imx-sdma.ko @ 0x8001598 */
                                                                                 | #include <stdint.h>
                                                                                 |  
    ; (fcn) sym.sdma_load_firmware ()                                            | void sdma_load_firmware (int32_t arg1, int32_t arg2) {
                                                                                 |     int32_t var_0h;
                                                                                 |     int32_t var_4h;
                                                                                 |     int32_t var_8h;
                                                                                 |     int32_t var_10h;
                                                                                 |     r0 = arg1;
                                                                                 |     r1 = arg2;
    0x08001598 push {r4, r5, r6, lr}                                             |     
    0x0800159c mov r5, r1                                                        |     r5 = r1;
    0x080015a0 subs r4, r0, 0                                                    |     r4 = r0 - 0;
    0x080015a4 sub sp, sp, 0x10                                                  |     
                                                                                 |     if (r4 == r0) {
    0x080015a8 beq 0x800162c                                                     |         goto label_1;
                                                                                 |     }
    0x080015ac ldr r3, [r4]                                                      |     r3 = *(r4);
    0x080015b0 cmp r3, 0x1b                                                      |     
                                                                                 |     if (r3 < 0x1b) {
    0x080015b4 bls 0x80015e0                                                     |         goto label_0;
                                                                                 |     }
    0x080015b8 add r6, r1, 0x2000                                                |     r6 = r1 + 0x2000;
    0x080015bc ldrb r2, [r6, 0xb70]                                              |     r2 = *((r6 + 0xb70));
    0x080015c0 cmp r2, 0                                                         |     
                                                                                 |     if (r2 != 0) {
    0x080015c4 bne 0x80015e0                                                     |         goto label_0;
                                                                                 |     }
    0x080015c8 ldr r1, [r4, 4]                                                   |     r1 = *((r4 + 4));
    0x080015cc movw r2, 0x4453                                                   |     
    0x080015d0 movt r2, 0x414d                                                   |     r2 = 0x414d4453;
    0x080015d4 ldr r0, [r1]                                                      |     r0 = *(r1);
    0x080015d8 cmp r0, r2                                                        |     
    0x080015dc beq 0x80015f0                                                     |     
                                                                                 |     while (r3 <= r2) {
                                                                                 | label_0:
    0x080015e0 mov r0, r4                                                        |         r0 = r4;
    0x080015e4 add sp, sp, 0x10                                                  |         
    0x080015e8 pop {r4, r5, r6, lr}                                              |         
    0x080015ec stmdaeq r0, {r1, r2, r3, r5, r6, r7, sl, fp, ip, sp, lr}          |         __asm ("stmdaeq r0, {r1, r2, r3, r5, r6, r7, sl, fp, ip, sp, lr}");
    0x080015f0 ldr r2, [r1, 0x14]                                                |         r2 = *((r1 + 0x14));
    0x080015f4 ldr r0, [r1, 0x18]                                                |         r0 = *((r1 + 0x18));
    0x080015f8 add r2, r2, r0                                                    |         r2 += r0;
    0x080015fc cmp r3, r2                                                        |         
    0x08001600 blo 0x80015e0                                                     |         
                                                                                 |     }
    0x08001604 ldr r3, [r1, 4]                                                   |     r3 = *((r1 + 4));
    0x08001608 ldr r0, [r5]                                                      |     r0 = *(r5);
    0x0800160c sub r3, r3, 1                                                     |     r3--;
    0x08001610 cmp r3, 3                                                         |     
                                                                                 |     if (r3 > 3) {
                                                                                 |         /* switch table (4 cases) at 0x800161c */
    0x08001614 ldrls pc, [pc, r3, lsl 2]                                         |         offset_0 = r3 << 2;
                                                                                 |         pc = *((pc + offset_0));
                                                                                 |     }
    0x08001618 b 0x8001708                                                       |     goto label_2;
                                                                                 | label_1:
    0x0800162c add r4, r1, 0x2000                                                |     r4 = r1 + 0x2000;
    0x08001630 ldr r3, [r1]                                                      |     r3 = *(r1);
    0x08001634 ldr r2, [r4, 0xb74]                                               |     r2 = *((r4 + 0xb74));
    0x08001638 cmp r2, 0                                                         |     
                                                                                 |     if (r2 == 0) {
    0x0800163c bne 0x8001680                                                     |         
    0x08001640 ldr r2, [r4, 0xa48]                                               |         r2 = *((r4 + 0xa48));
    0x08001644 mov r0, 0xcc0                                                     |         r0 = 0xcc0;
    0x08001648 str r5, [sp, 4]                                                   |         var_4h = r5;
    0x0800164c stmdaeq r0, {r3, r4, r7, r8, sl, ip}                              |         __asm ("stmdaeq r0, {r3, r4, r7, r8, sl, ip}");
    0x08001650 stmdaeq r0, {r3, r4, r7, r8, sl, ip}                              |         __asm ("stmdaeq r0, {r3, r4, r7, r8, sl, ip}");
    0x08001654 str r0, [sp]                                                      |         *(sp) = r0;
    0x08001658 str r1, [sp, 8]                                                   |         var_8h = r1;
    0x0800165c stmdaeq r0, {r6, r7, r8, sl, fp, lr}                              |         __asm ("stmdaeq r0, {r6, r7, r8, sl, fp, lr}");
    0x08001660 stmdaeq r0, {r6, r7, r8, sl, fp, lr}                              |         __asm ("stmdaeq r0, {r6, r7, r8, sl, fp, lr}");
    0x08001664 mov r1, 1                                                         |         r1 = 1;
    0x08001668 stmdaeq r0, {r1, r4, r5, r6, r7, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r1, r4, r5, r6, r7, sl, fp, ip, sp, lr}");
    0x0800166c ldr r3, [r4, 0xb74]                                               |         r3 = *((r4 + 0xb74));
    0x08001670 add r3, r3, 1                                                     |         r3++;
    0x08001674 str r3, [r4, 0xb74]                                               |         *((r4 + 0xb74)) = r3;
    0x08001678 add sp, sp, 0x10                                                  |         
    0x0800167c pop {r4, r5, r6, pc}                                              |         
                                                                                 |     }
    0x08001680 mov r0, r3                                                        |     r0 = r3;
    0x08001684 stmdaeq r0, {r2, r5, r6, sb, sl, ip, sp}                          |     __asm ("stmdaeq r0, {r2, r5, r6, sb, sl, ip, sp}");
    0x08001688 stmdaeq r0, {r2, r5, r6, sb, sl, ip, sp}                          |     __asm ("stmdaeq r0, {r2, r5, r6, sb, sl, ip, sp}");
    0x0800168c add sp, sp, 0x10                                                  |     
    0x08001690 pop {r4, r5, r6, lr}                                              |     
    0x08001694 stmdaeq r0, {r1, r3, r7, sl, fp, ip, sp, lr}                      |     __asm ("stmdaeq r0, {r1, r3, r7, sl, fp, ip, sp, lr}");
    0x08001698 mov r3, 0x30                                                      |     r3 = 0x30;
    0x0800169c str r3, [r6, 0xb48]                                               |     *((r6 + 0xb48)) = r3;
    0x080016a0 stmdaeq r0, {r2, r4, r5, r7, sb, sl, ip, sp}                      |     __asm ("stmdaeq r0, {r2, r4, r5, r7, sb, sl, ip, sp}");
    0x080016a4 stmdaeq r0, {r2, r4, r5, r7, sb, sl, ip, sp}                      |     __asm ("stmdaeq r0, {r2, r4, r5, r7, sb, sl, ip, sp}");
    0x080016a8 stmdaeq r0, {r1, r3, r7, sl, fp, ip, sp, lr}                      |     __asm ("stmdaeq r0, {r1, r3, r7, sl, fp, ip, sp, lr}");
    0x080016ac ldr r3, [r6, 0xb78]                                               |     r3 = *((r6 + 0xb78));
    0x080016b0 cmp r3, 0                                                         |     
                                                                                 |     if (r3 != 0) {
    0x080016b4 bne 0x80015e0                                                     |         goto label_0;
                                                                                 |     }
    0x080016b8 ldr r0, [r4]                                                      |     r0 = *(r4);
    0x080016bc mov r1, 0xcc0                                                     |     r1 = 0xcc0;
    0x080016c0 stmdaeq r0, {r1, r2, r4, r5, r6, r7, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r1, r2, r4, r5, r6, r7, sl, fp, ip, sp, lr}");
    0x080016c4 cmp r0, 0                                                         |     
    0x080016c8 str r0, [r6, 0xb78]                                               |     *((r6 + 0xb78)) = r0;
                                                                                 |     if (r0 == 0) {
    0x080016cc beq 0x80015e0                                                     |         goto label_0;
                                                                                 |     }
    0x080016d0 ldr r2, [r4]                                                      |     r2 = *(r4);
    0x080016d4 ldr r1, [r4, 4]                                                   |     r1 = *((r4 + 4));
    0x080016d8 stmdaeq r0, {r1, r7, sl, fp, ip, sp, lr}                          |     __asm ("stmdaeq r0, {r1, r7, sl, fp, ip, sp, lr}");
    0x080016dc ldr r3, [r6, 0xb50]                                               |     r3 = *((r6 + 0xb50));
    0x080016e0 ldrb r3, [r3, 0xf]                                                |     r3 = *((r3 + 0xf));
    0x080016e4 cmp r3, 0                                                         |     
                                                                                 |     if (r3 != 0) {
    0x080016e8 bne 0x80015e0                                                     |         goto label_0;
                                                                                 |     }
    0x080016ec ldr r0, [r5]                                                      |     r0 = *(r5);
    0x080016f0 bl 0x8001370                                                      |     sdma_runtime_resume ();
    0x080016f4 b 0x80015e0                                                       |     goto label_0;
                                                                                 | label_2:
    0x08001708 stmdaeq r0, {r3, r4, r7, sb, sl, ip, sp}                          |     __asm ("stmdaeq r0, {r3, r4, r7, sb, sl, ip, sp}");
    0x0800170c stmdaeq r0, {r3, r4, r7, sb, sl, ip, sp}                          |     __asm ("stmdaeq r0, {r3, r4, r7, sb, sl, ip, sp}");
    0x08001710 stmdaeq r0, {r1, r3, r5, r6, sl, fp, ip, sp, lr}                  |     __asm ("stmdaeq r0, {r1, r3, r5, r6, sl, fp, ip, sp, lr}");
    0x08001714 b 0x80015e0                                                       |     goto label_0;
                                                                                 | }
    ; assembly                                                               | /* r2dec pseudo code output */
                                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/modules/5.10.52-axis8/kernel/drivers/dma/imx-sdma.ko @ 0x8002454 */
                                                                             | #include <stdint.h>
                                                                             |  
                                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                             |  
    ; (fcn) sym.sdma_prep_slave_sg ()                                        | void sdma_prep_slave_sg (int32_t arg_38h, int32_t arg1, int32_t arg2) {
                                                                             |     int32_t var_0h;
                                                                             |     int32_t var_ch;
                                                                             |     int32_t var_14h;
                                                                             |     r0 = arg1;
                                                                             |     r1 = arg2;
    0x08002454 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}                     |     
    0x08002458 mov r6, r2                                                    |     r6 = r2;
    0x0800245c mov r4, r3                                                    |     r4 = r3;
    0x08002460 ldr sb, [r0, 0x88]                                            |     sb = *(arg_38hx88);
    0x08002464 sub sp, sp, 0x14                                              |     
    0x08002468 ldr r3, [r0, 0x8c]                                            |     r3 = *(arg_38hx8c);
    0x0800246c mov r5, r0                                                    |     r5 = r0;
    0x08002470 add r8, sb, 0x2000                                            |     r8 = sb + 0x2000;
    0x08002474 mov sl, r1                                                    |     sl = r1;
    0x08002478 str r3, [sp, 0xc]                                             |     var_ch = r3;
    0x0800247c ldr r2, [r8, 0xb50]                                           |     r2 = *((r8 + 0xb50));
    0x08002480 ldrb r2, [r2, 0xf]                                            |     r2 = *((r2 + 0xf));
    0x08002484 cmp r2, 0                                                     |     
    0x08002488 bne 0x800268c                                                 |     
                                                                             |     while (1) {
    0x0800248c mov r2, r4                                                    |         r2 = r4;
    0x08002490 add r1, r5, 0x94                                              |         r1 = r5 + 0x94;
    0x08002494 mov r0, r5                                                    |         r0 = r5;
    0x08002498 bl 0x8001e70                                                  |         sdma_config_write ();
    0x0800249c mov r1, r4                                                    |         r1 = r4;
    0x080024a0 mov r2, r6                                                    |         r2 = r6;
    0x080024a4 mov r0, r5                                                    |         r0 = r5;
    0x080024a8 bl 0x8001720                                                  |         r0 = sdma_transfer_init ();
    0x080024ac subs r4, r0, 0                                                |         r4 = r0 - 0;
                                                                             |         if (r4 != r0) {
    0x080024b0 beq 0x800265c                                                 |             
    0x080024b4 cmp r6, 0                                                     |             
                                                                             |             if (r6 != 0) {
    0x080024b8 beq 0x800257c                                                 |                 
    0x080024bc mov r0, sl                                                    |                 r0 = sl;
    0x080024c0 mov fp, 0                                                     |                 
    0x080024c4 mov r7, 0xc                                                   |                 r7 = 0xc;
    0x080024c8 ldr r1, [r4, 0x60]                                            |                 r1 = *((r4 + 0x60));
    0x080024cc mul r2, r7, fp                                                |                 r2 = r7 * fp;
    0x080024d0 ldr r3, [r0, 0xc]                                             |                 r3 = *((r0 + 0xc));
    0x080024d4 add ip, r1, r2                                                |                 
    0x080024d8 str r3, [ip, 4]                                               |                 *((ip + 4)) = r3;
    0x080024dc ldr r3, [r0, 8]                                               |                 r3 = *((r0 + 8));
    0x080024e0 cmp r3, 0x10000                                               |                 
                                                                             |                 if (r3 >= 0x10000) {
    0x080024e4 bge 0x80026e0                                                 |                     goto label_2;
                                                                             |                 }
    0x080024e8 strh r3, [r1, r2]                                             |                 *((r1 + r2)) = r3;
    0x080024ec ldr r2, [r4, 0x58]                                            |                 r2 = *((r4 + 0x58));
    0x080024f0 add r2, r2, r3                                                |                 r2 += r3;
    0x080024f4 str r2, [r4, 0x58]                                            |                 *((r4 + 0x58)) = r2;
    0x080024f8 ldr r2, [r5, 0xd8]                                            |                 r2 = *((r5 + 0xd8));
    0x080024fc cmp r2, 4                                                     |                 
                                                                             |                 if (r2 > 4) {
    0x08002500 bhi 0x800264c                                                 |                     goto label_1;
                                                                             |                 }
    0x08002504 sub r2, r2, 1                                                 |                 r2--;
    0x08002508 cmp r2, 3                                                     |                 
                                                                             |                 if (r2 > 3) {
                                                                             |                     /* switch table (4 cases) at 0x8002514 */
    0x0800250c ldrls pc, [pc, r2, lsl 2]                                     |                     offset_0 = r2 << 2;
                                                                             |                     pc = *((pc + offset_0));
                                                                             |                 }
    0x08002510 b 0x800264c                                                   |                 
                                                                             |             } else {
    0x0800257c ldr r3, [r5, 0x88]                                            |                 r3 = *((r5 + 0x88));
    0x08002580 add r2, r3, 0x2000                                            |                 r2 = r3 + 0x2000;
    0x08002584 ldr r2, [r2, 0xb50]                                           |                 r2 = *((r2 + 0xb50));
    0x08002588 ldrb r2, [r2, 0xf]                                            |                 r2 = *((r2 + 0xf));
    0x0800258c cmp r2, 0                                                     |                 
                                                                             |                 if (r2 != 0) {
    0x08002590 bne 0x80026bc                                                 |                     goto label_3;
                                                                             |                 }
                                                                             | label_0:
    0x08002594 mov r1, r5                                                    |                 r1 = r5;
    0x08002598 mov r0, r4                                                    |                 r0 = r4;
    0x0800259c stmdaeq r0, {r1, r2, r4, r8, sl, fp, ip, sp, lr}              |                 __asm ("stmdaeq r0, {r1, r2, r4, r8, sl, fp, ip, sp, lr}");
    0x080025a0 ldr r3, [sp, 0x38]                                            |                 r3 = *(arg_38h);
    0x080025a4 mov r1, 0                                                     |                 r1 = 0;
    0x080025a8 str r3, [r4, 4]                                               |                 *((r4 + 4)) = r3;
    0x080025ac stmdaeq r0, {r1, r3, r4, r8, sl, fp, ip, sp, lr}              |                 __asm ("stmdaeq r0, {r1, r3, r4, r8, sl, fp, ip, sp, lr}");
    0x080025b0 stmdaeq r0, {r1, r3, r4, r8, sl, fp, ip, sp, lr}              |                 __asm ("stmdaeq r0, {r1, r3, r4, r8, sl, fp, ip, sp, lr}");
    0x080025b4 stmdaeq r0, {r1, r2, r3, r4, r8, sl, fp, ip, sp, lr}          |                 __asm ("stmdaeq r0, {r1, r2, r3, r4, r8, sl, fp, ip, sp, lr}");
    0x080025b8 stmdaeq r0, {r1, r2, r3, r4, r8, sl, fp, ip, sp, lr}          |                 __asm ("stmdaeq r0, {r1, r2, r3, r4, r8, sl, fp, ip, sp, lr}");
    0x080025bc str r1, [r4, 0x30]                                            |                 *((r4 + 0x30)) = r1;
    0x080025c0 strd r2, r3, [r4, 0x10]                                       |                 __asm ("strd r2, r3, [r4, 0x10]");
    0x080025c4 str r1, [r4, 0x34]                                            |                 *((r4 + 0x34)) = r1;
    0x080025c8 mrs r0, apsr                                                  |                 r0 = apsr;
    0x080025cc cpsid i                                                       |                 __asm ("cpsid i");
    0x080025d0 mov r3, sp                                                    |                 r3 = sp;
    0x080025d4 bic r3, r3, 0x1fc0                                            |                 r3 = BIT_MASK (r3, 0x1fc0);
    0x080025d8 bic r3, r3, 0x3f                                              |                 r3 = BIT_MASK (r3, 0x3f);
    0x080025dc ldr r2, [r3, 4]                                               |                 r2 = *((r3 + 4));
    0x080025e0 add r2, r2, 1                                                 |                 r2++;
    0x080025e4 str r2, [r3, 4]                                               |                 *((r3 + 4)) = r2;
    0x080025e8 ldr r2, [r5, 0x5c]                                            |                 r2 = *((r5 + 0x5c));
    0x080025ec add r1, r4, 0x38                                              |                 r1 = r4 + 0x38;
    0x080025f0 add r5, r5, 0x58                                              |                 r5 += 0x58;
    0x080025f4 str r1, [r5, 4]                                               |                 *((r5 + 4)) = r1;
    0x080025f8 str r5, [r4, 0x38]                                            |                 *((r4 + 0x38)) = r5;
    0x080025fc str r2, [r4, 0x3c]                                            |                 *((r4 + 0x3c)) = r2;
    0x08002600 str r1, [r2]                                                  |                 *(r2) = r1;
    0x08002604 msr cpsr_c, r0                                                |                 cpsr_c = r0;
    0x08002608 ldr r2, [r3, 4]                                               |                 r2 = *((r3 + 4));
    0x0800260c sub r2, r2, 1                                                 |                 r2--;
    0x08002610 str r2, [r3, 4]                                               |                 *((r3 + 4)) = r2;
    0x08002614 cmp r2, 0                                                     |                 
                                                                             |                 if (r2 != 0) {
    0x08002618 bne 0x8002674                                                 |                     goto label_4;
                                                                             |                 }
    0x0800261c ldr r3, [r3]                                                  |                 r3 = *(r3);
    0x08002620 tst r3, 2                                                     |                 
                                                                             |                 if ((r3 & 2) == 0) {
    0x08002624 beq 0x8002674                                                 |                     goto label_4;
                                                                             |                 }
    0x08002628 stmdaeq r0, {r1, r3, r4, r5, r6, sl, fp, ip, sp, lr}          |                 __asm ("stmdaeq r0, {r1, r3, r4, r5, r6, sl, fp, ip, sp, lr}");
    0x0800262c b 0x8002674                                                   |                 goto label_4;
                                                                             |             }
                                                                             | label_1:
    0x0800264c mov r0, r4                                                    |             r0 = r4;
    0x08002650 bl 0x800087c                                                  |             sdma_free_bd ();
    0x08002654 mov r0, r4                                                    |             r0 = r4;
    0x08002658 stmdaeq r0, {r1, r3, r4, r7, sl, fp, ip, sp, lr}              |             __asm ("stmdaeq r0, {r1, r3, r4, r7, sl, fp, ip, sp, lr}");
                                                                             |         }
    0x0800265c mov r3, 3                                                     |         r3 = 3;
    0x08002660 str r3, [r5, 0x10c]                                           |         *((r5 + 0x10c)) = r3;
    0x08002664 ldr r3, [r8, 0xb50]                                           |         r3 = *((r8 + 0xb50));
    0x08002668 ldrb r4, [r3, 0xf]                                            |         r4 = *((r3 + 0xf));
    0x0800266c cmp r4, 0                                                     |         
                                                                             |         if (r4 != 0) {
    0x08002670 bne 0x800269c                                                 |             goto label_5;
                                                                             |         }
                                                                             | label_4:
    0x08002674 mov r0, r4                                                    |         r0 = r4;
    0x08002678 add sp, sp, 0x14                                              |         
    0x0800267c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                      |         
    0x0800268c ldr r0, [sb]                                                  |         r0 = *(sb);
    0x08002690 mov r1, 4                                                     |         r1 = 4;
    0x08002694 stmdaeq r0, {r1, r2, r5, r7, sl, fp, ip, sp, lr}              |         __asm ("stmdaeq r0, {r1, r2, r5, r7, sl, fp, ip, sp, lr}");
    0x08002698 b 0x800248c                                                   |         
                                                                             |     }
                                                                             | label_5:
    0x0800269c ldr r3, [r5, 0x88]                                            |     r3 = *((r5 + 0x88));
    0x080026a0 mov r1, 4                                                     |     r1 = 4;
    0x080026a4 mov r4, 0                                                     |     r4 = 0;
    0x080026a8 ldr r0, [r3]                                                  |     r0 = *(r3);
    0x080026ac stmdaeq r0, {r1, r2, r3, r5, r7, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r1, r2, r3, r5, r7, sl, fp, ip, sp, lr}");
    0x080026b0 mov r0, r4                                                    |     r0 = r4;
    0x080026b4 add sp, sp, 0x14                                              |     
    0x080026b8 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}                      |     
                                                                             | label_3:
    0x080026bc ldr r6, [r3]                                                  |     r6 = *(r3);
    0x080026c0 stmdaeq r0, {r1, r3, r5, r7, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r1, r3, r5, r7, sl, fp, ip, sp, lr}");
    0x080026c4 add r6, r6, 0x120                                             |     r6 += 0x120;
    0x080026c8 strd r0, r1, [r6, -8]                                         |     __asm ("strd r0, r1, [r6, -8]");
    0x080026cc mov r1, 0xd                                                   |     r1 = 0xd;
    0x080026d0 ldr r3, [r5, 0x88]                                            |     r3 = *((r5 + 0x88));
    0x080026d4 ldr r0, [r3]                                                  |     r0 = *(r3);
    0x080026d8 stmdaeq r0, {r1, r2, r3, r5, r7, sl, fp, ip, sp, lr}          |     __asm ("stmdaeq r0, {r1, r2, r3, r5, r7, sl, fp, ip, sp, lr}");
    0x080026dc b 0x8002594                                                   |     goto label_0;
                                                                             | label_2:
    0x080026e0 movw r1, 0xffff                                               |     r1 = 0xffff;
    0x080026e4 str r1, [sp]                                                  |     *(sp) = r1;
    0x080026e8 ldr r2, [sp, 0xc]                                             |     r2 = var_ch;
    0x080026ec stmdaeq r0, {r2, r8, sb, sl, ip, sp}                          |     __asm ("stmdaeq r0, {r2, r8, sb, sl, ip, sp}");
    0x080026f0 stmdaeq r0, {r2, r8, sb, sl, ip, sp}                          |     __asm ("stmdaeq r0, {r2, r8, sb, sl, ip, sp}");
    0x080026f4 ldr r0, [sb]                                                  |     r0 = *(sb);
    0x080026f8 stmdaeq r0, {r1, r3, r5, r6, sl, fp, ip, sp, lr}              |     __asm ("stmdaeq r0, {r1, r3, r5, r6, sl, fp, ip, sp, lr}");
    0x080026fc b 0x800264c                                                   |     goto label_1;
                                                                             | }

[*] Function strcpy used 1 times imx-sdma.ko