diff --git a/crates/examples/src/readobj/elf.rs b/crates/examples/src/readobj/elf.rs index dc84f87e..f98bf617 100644 --- a/crates/examples/src/readobj/elf.rs +++ b/crates/examples/src/readobj/elf.rs @@ -1373,6 +1373,7 @@ const FLAGS_SHT: &[Flag] = &flags!( SHT_PREINIT_ARRAY, SHT_GROUP, SHT_SYMTAB_SHNDX, + SHT_RELR, SHT_LLVM_DEPENDENT_LIBRARIES, SHT_GNU_ATTRIBUTES, SHT_GNU_HASH, diff --git a/src/build/elf.rs b/src/build/elf.rs index e655de4a..23c49eb5 100644 --- a/src/build/elf.rs +++ b/src/build/elf.rs @@ -227,7 +227,7 @@ impl<'data> Builder<'data> { | elf::SHT_LLVM_DEPENDENT_LIBRARIES => { SectionData::Data(section.data(endian, data)?.into()) } - elf::SHT_REL | elf::SHT_RELA => relocations, + elf::SHT_REL | elf::SHT_RELA | elf::SHT_RELR => relocations, elf::SHT_SYMTAB => { if index == symbols.section() { SectionData::Symbol diff --git a/src/elf.rs b/src/elf.rs index 3d7f0403..6de0a0a8 100644 --- a/src/elf.rs +++ b/src/elf.rs @@ -710,6 +710,8 @@ pub const SHT_PREINIT_ARRAY: u32 = 16; pub const SHT_GROUP: u32 = 17; /// Extended section indices for a symbol table. pub const SHT_SYMTAB_SHNDX: u32 = 18; +/// Relative Relocation entries (https://maskray.me/blog/2021-10-31-relative-relocations-and-relr) +pub const SHT_RELR: u32 = 19; /// Start of OS-specific section types. pub const SHT_LOOS: u32 = 0x6000_0000; /// LLVM-style dependent libraries. diff --git a/src/read/elf/section.rs b/src/read/elf/section.rs index f175d84d..60561238 100644 --- a/src/read/elf/section.rs +++ b/src/read/elf/section.rs @@ -654,7 +654,8 @@ where | elf::SHT_DYNAMIC | elf::SHT_REL | elf::SHT_DYNSYM - | elf::SHT_GROUP => SectionKind::Metadata, + | elf::SHT_GROUP + | elf::SHT_RELR => SectionKind::Metadata, _ => SectionKind::Elf(sh_type), } }