Skip to main content

LinkMode

Enum LinkMode 

Source
pub enum LinkMode {
    Static,
    StaticPie,
    Dynamic,
    DynamicNoPie,
    Shared,
}
Expand description

How the program is linked, which decides the first start file and the flags.

Five cases rather than two booleans for static and position independent, because the two are not independent and the start file is a different file in four of the five. A pair of flags would admit a sixth combination, a shared object that is not position independent, which is not a thing any of these linkers will produce.

Variants§

§

Static

Everything in the binary, no interpreter, no relocation at load. The default for musl, and the mode spec/cross-compile/02-the-goal.md’s exit criterion names.

§

StaticPie

Static, and position independent, so the loader may place it anywhere. A different first start file, because the program has to relocate itself before main and rcrt1.o is what does that.

§

Dynamic

Against the shared libc, position independent, with the libc’s loader named in the program header. What every distribution builds today and what -pie asks for.

§

DynamicNoPie

Against the shared libc, at a fixed address, which is -no-pie.

The same link as LinkMode::Dynamic with a different start file, because the reference to main in crt1.o is an absolute one and the reference in Scrt1.o is not. Build systems that pass -no-pie are usually doing it because something in them takes the address of a function and compares it, and they get the file that matches.

§

Shared

A shared object rather than a program, which is -shared.

No start file at all, since nothing starts a shared object and it has no main to be started at, and no loader named either: the program that loads this one carries that.

Implementations§

Source§

impl LinkMode

Source

pub const fn is_dynamic(self) -> bool

Whether the result is linked against a shared libc, which decides whether a loader is named.

Source

pub const fn is_pie(self) -> bool

Whether the result may be placed anywhere in memory.

Trait Implementations§

Source§

impl Clone for LinkMode

Source§

fn clone(&self) -> LinkMode

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 Copy for LinkMode

Source§

impl Debug for LinkMode

Source§

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

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

impl Default for LinkMode

Source§

fn default() -> LinkMode

Returns the “default value” for a type. Read more
Source§

impl Eq for LinkMode

Source§

impl PartialEq for LinkMode

Source§

fn eq(&self, other: &LinkMode) -> 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 LinkMode

Auto Trait Implementations§

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<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.