1 ///////////////////////////////////////////////////////////////////////////////
4 /// \brief Filter for ARM binaries
6 // Authors: Igor Pavlov
9 // This file has been put into the public domain.
10 // You can do whatever you want with this file.
12 ///////////////////////////////////////////////////////////////////////////////
14 #include "simple_private.h"
18 arm_code(void *simple
lzma_attribute((__unused__
)),
19 uint32_t now_pos
, bool is_encoder
,
20 uint8_t *buffer
, size_t size
)
23 for (i
= 0; i
+ 4 <= size
; i
+= 4) {
24 if (buffer
[i
+ 3] == 0xEB) {
25 uint32_t src
= (buffer
[i
+ 2] << 16)
26 | (buffer
[i
+ 1] << 8)
32 dest
= now_pos
+ (uint32_t)(i
) + 8 + src
;
34 dest
= src
- (now_pos
+ (uint32_t)(i
) + 8);
37 buffer
[i
+ 2] = (dest
>> 16);
38 buffer
[i
+ 1] = (dest
>> 8);
48 arm_coder_init(lzma_next_coder
*next
, const lzma_allocator
*allocator
,
49 const lzma_filter_info
*filters
, bool is_encoder
)
51 return lzma_simple_coder_init(next
, allocator
, filters
,
52 &arm_code
, 0, 4, 4, is_encoder
);
57 lzma_simple_arm_encoder_init(lzma_next_coder
*next
,
58 const lzma_allocator
*allocator
,
59 const lzma_filter_info
*filters
)
61 return arm_coder_init(next
, allocator
, filters
, true);
66 lzma_simple_arm_decoder_init(lzma_next_coder
*next
,
67 const lzma_allocator
*allocator
,
68 const lzma_filter_info
*filters
)
70 return arm_coder_init(next
, allocator
, filters
, false);