Skip to main content

pe_machine

Function pe_machine 

Source
pub fn pe_machine(target: TargetTuple) -> Option<&'static str>
Expand description

Which machine a PE linker is to write for, in the name -m knows it by.

A different table from emulation and a much shorter one, because PE has four machine types that matter against ELF’s dozen formats: there is no byte order to spell, since every Windows port is little endian, and no data model to spell either, since each machine type fixes one.

The names are GNU ld’s PE emulations, which ld.lld accepts in its MinGW mode for exactly this reason. i386pep is the 64-bit x86 one and i386pe the 32-bit one, and the p that tells them apart is PE32+ rather than anything about the architecture, which is a piece of 1990s naming that nothing can be done about now.

None for a Windows target in Microsoft’s ABI, which is not a gap. These names are GNU ld’s and lld-link has never read one: it takes /MACHINE:X64, in an argument syntax where the rest of the line is different too, so there is nothing for a shared table to hold. ARM64EC is None for that reason first and for a second one: spec/cross-compile/09-libc-stubs.md refuses its import libraries as well, because an export in that ABI is a mangled name and a library written the way the others are written links and then fails to load.