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.
/// 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],
}
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.
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.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in relox
by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.