xz-utils (5.4.5)

(root)/
include/
lzma/
bcj.h
       1  /**
       2   * \file        lzma/bcj.h
       3   * \brief       Branch/Call/Jump conversion filters
       4   * \note        Never include this file directly. Use <lzma.h> instead.
       5   */
       6  
       7  /*
       8   * Author: Lasse Collin
       9   *
      10   * This file has been put into the public domain.
      11   * You can do whatever you want with this file.
      12   */
      13  
      14  #ifndef LZMA_H_INTERNAL
      15  #	error Never include this file directly. Use <lzma.h> instead.
      16  #endif
      17  
      18  
      19  /* Filter IDs for lzma_filter.id */
      20  
      21  /**
      22   * \brief       Filter for x86 binaries
      23   */
      24  #define LZMA_FILTER_X86         LZMA_VLI_C(0x04)
      25  
      26  /**
      27   * \brief       Filter for Big endian PowerPC binaries
      28   */
      29  #define LZMA_FILTER_POWERPC     LZMA_VLI_C(0x05)
      30  
      31  /**
      32   * \brief       Filter for IA-64 (Itanium) binaries
      33   */
      34  #define LZMA_FILTER_IA64        LZMA_VLI_C(0x06)
      35  
      36  /**
      37   * \brief       Filter for ARM binaries
      38   */
      39  #define LZMA_FILTER_ARM         LZMA_VLI_C(0x07)
      40  
      41  /**
      42   * \brief       Filter for ARM-Thumb binaries
      43   */
      44  #define LZMA_FILTER_ARMTHUMB    LZMA_VLI_C(0x08)
      45  
      46  /**
      47   * \brief       Filter for SPARC binaries
      48   */
      49  #define LZMA_FILTER_SPARC       LZMA_VLI_C(0x09)
      50  
      51  /**
      52   * \brief       Filter for ARM64 binaries
      53   */
      54  #define LZMA_FILTER_ARM64       LZMA_VLI_C(0x0A)
      55  
      56  
      57  /**
      58   * \brief       Options for BCJ filters
      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;