Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / lzma / bcj.h @ 14

History | View | Annotate | Download (2.57 KB)

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

    
53
/**
54
 * \brief       Options for BCJ filters
55
 *
56
 * The BCJ filters never change the size of the data. Specifying options
57
 * for them is optional: if pointer to options is NULL, default value is
58
 * used. You probably never need to specify options to BCJ filters, so just
59
 * set the options pointer to NULL and be happy.
60
 *
61
 * If options with non-default values have been specified when encoding,
62
 * the same options must also be specified when decoding.
63
 *
64
 * \note        At the moment, none of the BCJ filters support
65
 *              LZMA_SYNC_FLUSH. If LZMA_SYNC_FLUSH is specified,
66
 *              LZMA_OPTIONS_ERROR will be returned. If there is need,
67
 *              partial support for LZMA_SYNC_FLUSH can be added in future.
68
 *              Partial means that flushing would be possible only at
69
 *              offsets that are multiple of 2, 4, or 16 depending on
70
 *              the filter, except x86 which cannot be made to support
71
 *              LZMA_SYNC_FLUSH predictably.
72
 */
73
typedef struct {
74
        /**
75
         * \brief       Start offset for conversions
76
         *
77
         * This setting is useful only when the same filter is used
78
         * _separately_ for multiple sections of the same executable file,
79
         * and the sections contain cross-section branch/call/jump
80
         * instructions. In that case it is beneficial to set the start
81
         * offset of the non-first sections so that the relative addresses
82
         * of the cross-section branch/call/jump instructions will use the
83
         * same absolute addresses as in the first section.
84
         *
85
         * When the pointer to options is NULL, the default value (zero)
86
         * is used.
87
         */
88
        uint32_t start_offset;
89

    
90
} lzma_options_bcj;