ARM lzma bug in cacheflush
This commit is contained in:
+1877
-1877
File diff suppressed because it is too large
Load Diff
@@ -112,13 +112,13 @@
|
|||||||
#define __NR_SYSCALL_BASE 0x900000
|
#define __NR_SYSCALL_BASE 0x900000
|
||||||
#define __ARM_NR_BASE (__NR_SYSCALL_BASE+0x0f0000)
|
#define __ARM_NR_BASE (__NR_SYSCALL_BASE+0x0f0000)
|
||||||
#define __ARM_NR_cacheflush (__ARM_NR_BASE+2)
|
#define __ARM_NR_cacheflush (__ARM_NR_BASE+2)
|
||||||
mov r4,r0 // save result value
|
mov r3,r0 // save result value
|
||||||
POP {r0,r1} // dst, ldst
|
POP {r0,r1} // dst, ldst
|
||||||
ldr r1,[r1] // ldst by reference
|
ldr r1,[r1] // ldst by reference
|
||||||
add r1,r1,r0 // just beyond what was written
|
add r1,r1,r0 // just beyond what was written
|
||||||
mov r2,#0
|
mov r2,#0
|
||||||
swi __ARM_NR_cacheflush // decompressed region
|
swi __ARM_NR_cacheflush // decompressed region
|
||||||
mov r0,r4 // result value
|
mov r0,r3 // result value
|
||||||
#endif /*}*/
|
#endif /*}*/
|
||||||
|
|
||||||
POP {fp,pc}
|
POP {fp,pc}
|
||||||
|
|||||||
@@ -111,8 +111,7 @@ copy:
|
|||||||
str r3,[sp,#2*4] // sz_unc; lzma needs for EOF
|
str r3,[sp,#2*4] // sz_unc; lzma needs for EOF
|
||||||
add r3, sp,#2*4 // &sz_unc
|
add r3, sp,#2*4 // &sz_unc
|
||||||
mov lr,pc; mov pc,r5 // decompress folded code [opcode 'bx' not in v4a]
|
mov lr,pc; mov pc,r5 // decompress folded code [opcode 'bx' not in v4a]
|
||||||
add sp,sp,#4 // discard 5th param
|
ldmia sp!,{r1, pc} // discard 5th param; return
|
||||||
ldmia sp!,{pc}
|
|
||||||
|
|
||||||
f_decompress:
|
f_decompress:
|
||||||
#define LINUX_ARM_CACHEFLUSH 1
|
#define LINUX_ARM_CACHEFLUSH 1
|
||||||
|
|||||||
Reference in New Issue
Block a user