use crate::{
arch::NativeArch,
image::{LocalScope, RawDynamic},
memory::{HostRegion, RegionAccess},
relocation::{BindingMode, LookupOrder, RelocationArch},
tls::TlsResolver,
};
pub struct LinkerRelocationEvent<
D: Send + Sync + 'static,
Arch: RelocationArch = NativeArch,
R: RegionAccess = HostRegion,
Tls: TlsResolver<Arch> = (),
> {
raw: RawDynamic<D, Arch, R, Tls>,
scope: LocalScope<Arch, Tls>,
binding: BindingMode,
lookup_order: LookupOrder,
}
impl<D: Send + Sync + 'static, Arch, R, Tls> LinkerRelocationEvent<D, Arch, R, Tls>
where
Arch: RelocationArch,
R: RegionAccess,
Tls: TlsResolver<Arch>,
{
#[inline]
pub(crate) fn new(
raw: RawDynamic<D, Arch, R, Tls>,
scope: LocalScope<Arch, Tls>,
lookup_order: LookupOrder,
) -> Self {
Self {
raw,
scope,
binding: BindingMode::Default,
lookup_order,
}
}
#[inline]
pub const fn raw(&self) -> &RawDynamic<D, Arch, R, Tls> {
&self.raw
}
#[inline]
pub const fn scope(&self) -> &LocalScope<Arch, Tls> {
&self.scope
}
#[inline]
pub const fn scope_mut(&mut self) -> &mut LocalScope<Arch, Tls> {
&mut self.scope
}
#[inline]
pub const fn binding(&self) -> BindingMode {
self.binding
}
#[inline]
pub fn set_binding(&mut self, binding: BindingMode) {
self.binding = binding;
}
#[inline]
pub const fn lookup_order(&self) -> LookupOrder {
self.lookup_order
}
#[inline]
pub fn set_lookup_order(&mut self, order: LookupOrder) {
self.lookup_order = order;
}
#[inline]
pub(crate) fn into_parts(
self,
) -> (
RawDynamic<D, Arch, R, Tls>,
LocalScope<Arch, Tls>,
BindingMode,
LookupOrder,
) {
(self.raw, self.scope, self.binding, self.lookup_order)
}
}