[][src]Crate relox

Compress and decompress ELF32 relocation sections

This crate can be used to compress ELF32 relocation sections post-link time. It also provides a decompressing method which can be used during relocation.

The approach might be useful for embedded system if a relocation section uses too much static storage.

Decompressing relocations is a trade-off between used static storage and CPU time required to process relocations during initialization.

Compressed section layout for ELF32

This example is not tested
/// ELF32 relocations grouped by relocation type.
struct Elf32CRelGroup {
    // Type of the relocation.
    relocation_type: u8,
    // Number of relocations encoded as ULEB128.
    count: u32,
    // Offsets are encoded as ULEB128.
    // First offset is relative to `base_address`,
    // otherwise offset[i+1] is relative to offset[i].
    offsets: [u32; count],

/// A compressed ELF32 relocation section.
struct Elf32CRel {
    // Base address of all the relocations.
    base_address: u32,
    // Number of relocation groups.
    count: u8,
    // Relocation groups.
    groups: [Elf32CRelGroup; count],

Recommended usage

On host machines, during post-link time processing, use host feature group.

When targeting embedded devices use either embedded or embedded_minimal feature group. The latter one enables no_bounds_check and no_sanity_check features to further reduce memory footprint.

List of optional features

  • compress: include methods and structures related to compressing.
  • decompress: include methods and structures related to decompressing.
  • no-std: do not use standard library.
  • no_bounds_check: use unsafe code instead of bounds-checking variants.
  • no_sanity_check: do not perform extra sanity checks when processing LEB128 encodings.



Representation of a regular ELF32 relocation.


Representation of a regular ELF32 relocation section.


Representation of an error.



Possible reasons of an Error.



Processes a compressed ELF32 relocation section and calls op for every relocation for further processing.