Expand description
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
ⓘ
/// 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
: useunsafe
code instead of bounds-checking variants.no_sanity_check
: do not perform extra sanity checks when processing LEB128 encodings.
Structs§
- Representation of a regular ELF32 relocation.
- Representation of a regular ELF32 relocation section.
- Representation of an error.
Enums§
- Possible reasons of an Error.
Functions§
- Processes a compressed ELF32 relocation section and calls
op
for every relocation for further processing.