1 | /**
|
---|
2 | * \file lzma/bcj.h
|
---|
3 | * \brief Branch/Call/Jump conversion filters
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*
|
---|
7 | * Author: Lasse Collin
|
---|
8 | *
|
---|
9 | * This file has been put into the public domain.
|
---|
10 | * You can do whatever you want with this file.
|
---|
11 | *
|
---|
12 | * See ../lzma.h for information about liblzma as a whole.
|
---|
13 | */
|
---|
14 |
|
---|
15 | #ifndef LZMA_H_INTERNAL
|
---|
16 | # error Never include this file directly. Use <lzma.h> instead.
|
---|
17 | #endif
|
---|
18 |
|
---|
19 |
|
---|
20 | /* Filter IDs for lzma_filter.id */
|
---|
21 |
|
---|
22 | #define LZMA_FILTER_X86 LZMA_VLI_C(0x04)
|
---|
23 | /**<
|
---|
24 | * Filter for x86 binaries
|
---|
25 | */
|
---|
26 |
|
---|
27 | #define LZMA_FILTER_POWERPC LZMA_VLI_C(0x05)
|
---|
28 | /**<
|
---|
29 | * Filter for Big endian PowerPC binaries
|
---|
30 | */
|
---|
31 |
|
---|
32 | #define LZMA_FILTER_IA64 LZMA_VLI_C(0x06)
|
---|
33 | /**<
|
---|
34 | * Filter for IA-64 (Itanium) binaries.
|
---|
35 | */
|
---|
36 |
|
---|
37 | #define LZMA_FILTER_ARM LZMA_VLI_C(0x07)
|
---|
38 | /**<
|
---|
39 | * Filter for ARM binaries.
|
---|
40 | */
|
---|
41 |
|
---|
42 | #define LZMA_FILTER_ARMTHUMB LZMA_VLI_C(0x08)
|
---|
43 | /**<
|
---|
44 | * Filter for ARM-Thumb binaries.
|
---|
45 | */
|
---|
46 |
|
---|
47 | #define LZMA_FILTER_SPARC LZMA_VLI_C(0x09)
|
---|
48 | /**<
|
---|
49 | * Filter for SPARC binaries.
|
---|
50 | */
|
---|
51 |
|
---|
52 | #define LZMA_FILTER_ARM64 LZMA_VLI_C(0x0A)
|
---|
53 | /**<
|
---|
54 | * Filter for ARM64 binaries.
|
---|
55 | */
|
---|
56 |
|
---|
57 | /**
|
---|
58 | * \brief Options for BCJ filters (except ARM64)
|
---|
59 | *
|
---|
60 | * The BCJ filters never change the size of the data. Specifying options
|
---|
61 | * for them is optional: if pointer to options is NULL, default value is
|
---|
62 | * used. You probably never need to specify options to BCJ filters, so just
|
---|
63 | * set the options pointer to NULL and be happy.
|
---|
64 | *
|
---|
65 | * If options with non-default values have been specified when encoding,
|
---|
66 | * the same options must also be specified when decoding.
|
---|
67 | *
|
---|
68 | * \note At the moment, none of the BCJ filters support
|
---|
69 | * LZMA_SYNC_FLUSH. If LZMA_SYNC_FLUSH is specified,
|
---|
70 | * LZMA_OPTIONS_ERROR will be returned. If there is need,
|
---|
71 | * partial support for LZMA_SYNC_FLUSH can be added in future.
|
---|
72 | * Partial means that flushing would be possible only at
|
---|
73 | * offsets that are multiple of 2, 4, or 16 depending on
|
---|
74 | * the filter, except x86 which cannot be made to support
|
---|
75 | * LZMA_SYNC_FLUSH predictably.
|
---|
76 | */
|
---|
77 | typedef struct {
|
---|
78 | /**
|
---|
79 | * \brief Start offset for conversions
|
---|
80 | *
|
---|
81 | * This setting is useful only when the same filter is used
|
---|
82 | * _separately_ for multiple sections of the same executable file,
|
---|
83 | * and the sections contain cross-section branch/call/jump
|
---|
84 | * instructions. In that case it is beneficial to set the start
|
---|
85 | * offset of the non-first sections so that the relative addresses
|
---|
86 | * of the cross-section branch/call/jump instructions will use the
|
---|
87 | * same absolute addresses as in the first section.
|
---|
88 | *
|
---|
89 | * When the pointer to options is NULL, the default value (zero)
|
---|
90 | * is used.
|
---|
91 | */
|
---|
92 | uint32_t start_offset;
|
---|
93 |
|
---|
94 | } lzma_options_bcj;
|
---|