Skip to main content

Reloc

Struct Reloc 

Source
pub struct Reloc {
    pub at: usize,
    pub symbol: String,
    pub kind: Reference,
    pub addend: i64,
    pub after: u8,
}
Expand description

One reference to something this file does not contain.

Fields§

§at: usize

Where the bytes the linker writes over begin.

§symbol: String

What is wanted, as the C program spelled it.

§kind: Reference

What the linker is being asked for.

§addend: i64

What to add to the distance, which is the constant the instruction already meant plus the bytes between the hole and the end of the instruction, negated. An instruction counts from where it ends and a relocation counts from where it starts, and this is the difference.

§after: u8

How many bytes of the instruction come after the four the linker writes over, which is zero for everything except an instruction carrying an immediate behind its displacement.

Already inside Self::addend and written down again because the two formats disagree about which of the two numbers they want. ELF takes the one number and counts from where the hole starts, so the difference between that and where the instruction ends is the writer’s to fold in and nothing after it ever has to be told apart again. COFF counts from where the instruction ends and says how far that is in the relocation type itself, which is what IMAGE_REL_AMD64_REL32_1 through REL32_5 are, so it needs the two apart. A writer cannot recover one from the other, since a displacement of minus four and no trailing bytes and a displacement of zero and four of them are the same sum.

Zero for a relocation in an image, where there is no instruction and the question does not arise.

Trait Implementations§

Source§

impl Clone for Reloc

Source§

fn clone(&self) -> Reloc

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Reloc

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for Reloc

Source§

impl PartialEq for Reloc

Source§

fn eq(&self, other: &Reloc) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Reloc

Auto Trait Implementations§

§

impl Freeze for Reloc

§

impl RefUnwindSafe for Reloc

§

impl Send for Reloc

§

impl Sync for Reloc

§

impl Unpin for Reloc

§

impl UnsafeUnpin for Reloc

§

impl UnwindSafe for Reloc

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.