From aa88ee5582d548b4af651bbdbc947c125b0ef2d2 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Thu, 11 Jun 2026 10:20:23 -0600 Subject: [PATCH] Adapt OMF to upstream API changes (permissions, subtractor) --- src/read/omf/relocation.rs | 1 + src/read/omf/segment.rs | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/read/omf/relocation.rs b/src/read/omf/relocation.rs index b616d7c..aa77538 100644 --- a/src/read/omf/relocation.rs +++ b/src/read/omf/relocation.rs @@ -136,6 +136,7 @@ impl<'data, 'file, R: ReadRef<'data>> Iterator for OmfRelocationIterator<'data, target, addend: (reloc.target_displacement as i64) + base_addend, implicit_addend: false, + subtractor: None, flags: RelocationFlags::Omf { location: reloc.location, mode: if reloc.is_segment_relative { diff --git a/src/read/omf/segment.rs b/src/read/omf/segment.rs index 1055f14..79304b4 100644 --- a/src/read/omf/segment.rs +++ b/src/read/omf/segment.rs @@ -1,7 +1,7 @@ use alloc::vec::Vec; -use crate::read::{self, ObjectSegment, ReadRef, Result}; -use crate::{omf, SegmentFlags}; +use crate::read::{self, ObjectSegment, ReadRef, Result, SectionKind}; +use crate::{omf, Permissions, SegmentFlags}; use super::{OmfFile, OmfFixup}; @@ -126,6 +126,18 @@ impl<'data, 'file, R: ReadRef<'data>> ObjectSegment<'data> for OmfSegmentRef<'da fn flags(&self) -> SegmentFlags { SegmentFlags::None } + + fn permissions(&self) -> Permissions { + // OMF segment definitions don't carry permission flags, so derive them + // from the segment's class name. + match self.file.segment_section_kind(self.index) { + SectionKind::Text => Permissions::new(true, false, true), + SectionKind::ReadOnlyData | SectionKind::ReadOnlyString | SectionKind::Debug => { + Permissions::new(true, false, false) + } + _ => Permissions::new(true, true, false), + } + } } /// An iterator over OMF segments.