[*] 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