diff options
Diffstat (limited to 'vendor/object/src/common.rs')
-rw-r--r-- | vendor/object/src/common.rs | 536 |
1 files changed, 0 insertions, 536 deletions
diff --git a/vendor/object/src/common.rs b/vendor/object/src/common.rs deleted file mode 100644 index 36f6656..0000000 --- a/vendor/object/src/common.rs +++ /dev/null @@ -1,536 +0,0 @@ -/// A CPU architecture. -#[allow(missing_docs)] -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum Architecture { - Unknown, - Aarch64, - #[allow(non_camel_case_types)] - Aarch64_Ilp32, - Arm, - Avr, - Bpf, - Csky, - I386, - X86_64, - #[allow(non_camel_case_types)] - X86_64_X32, - Hexagon, - LoongArch64, - Mips, - Mips64, - Msp430, - PowerPc, - PowerPc64, - Riscv32, - Riscv64, - S390x, - Sbf, - Sharc, - Sparc64, - Wasm32, - Wasm64, - Xtensa, -} - -/// A CPU sub-architecture. -#[allow(missing_docs)] -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum SubArchitecture { - Arm64E, - Arm64EC, -} - -impl Architecture { - /// The size of an address value for this architecture. - /// - /// Returns `None` for unknown architectures. - pub fn address_size(self) -> Option<AddressSize> { - match self { - Architecture::Unknown => None, - Architecture::Aarch64 => Some(AddressSize::U64), - Architecture::Aarch64_Ilp32 => Some(AddressSize::U32), - Architecture::Arm => Some(AddressSize::U32), - Architecture::Avr => Some(AddressSize::U8), - Architecture::Bpf => Some(AddressSize::U64), - Architecture::Csky => Some(AddressSize::U32), - Architecture::I386 => Some(AddressSize::U32), - Architecture::X86_64 => Some(AddressSize::U64), - Architecture::X86_64_X32 => Some(AddressSize::U32), - Architecture::Hexagon => Some(AddressSize::U32), - Architecture::LoongArch64 => Some(AddressSize::U64), - Architecture::Mips => Some(AddressSize::U32), - Architecture::Mips64 => Some(AddressSize::U64), - Architecture::Msp430 => Some(AddressSize::U16), - Architecture::PowerPc => Some(AddressSize::U32), - Architecture::PowerPc64 => Some(AddressSize::U64), - Architecture::Riscv32 => Some(AddressSize::U32), - Architecture::Riscv64 => Some(AddressSize::U64), - Architecture::S390x => Some(AddressSize::U64), - Architecture::Sbf => Some(AddressSize::U64), - Architecture::Sharc => Some(AddressSize::U32), - Architecture::Sparc64 => Some(AddressSize::U64), - Architecture::Wasm32 => Some(AddressSize::U32), - Architecture::Wasm64 => Some(AddressSize::U64), - Architecture::Xtensa => Some(AddressSize::U32), - } - } -} - -/// The size of an address value for an architecture. -/// -/// This may differ from the address size supported by the file format (such as for COFF). -#[allow(missing_docs)] -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -#[repr(u8)] -pub enum AddressSize { - U8 = 1, - U16 = 2, - U32 = 4, - U64 = 8, -} - -impl AddressSize { - /// The size in bytes of an address value. - #[inline] - pub fn bytes(self) -> u8 { - self as u8 - } -} - -/// A binary file format. -#[allow(missing_docs)] -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum BinaryFormat { - Coff, - Elf, - MachO, - Pe, - Wasm, - Xcoff, -} - -/// The kind of a section. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum SectionKind { - /// The section kind is unknown. - Unknown, - /// An executable code section. - /// - /// Example ELF sections: `.text` - /// - /// Example Mach-O sections: `__TEXT/__text` - Text, - /// A data section. - /// - /// Example ELF sections: `.data` - /// - /// Example Mach-O sections: `__DATA/__data` - Data, - /// A read only data section. - /// - /// Example ELF sections: `.rodata` - /// - /// Example Mach-O sections: `__TEXT/__const`, `__DATA/__const`, `__TEXT/__literal4` - ReadOnlyData, - /// A read only data section with relocations. - /// - /// This is the same as either `Data` or `ReadOnlyData`, depending on the file format. - /// This value is only used in the API for writing files. It is never returned when reading files. - ReadOnlyDataWithRel, - /// A loadable string section. - /// - /// Example ELF sections: `.rodata.str` - /// - /// Example Mach-O sections: `__TEXT/__cstring` - ReadOnlyString, - /// An uninitialized data section. - /// - /// Example ELF sections: `.bss` - /// - /// Example Mach-O sections: `__DATA/__bss` - UninitializedData, - /// An uninitialized common data section. - /// - /// Example Mach-O sections: `__DATA/__common` - Common, - /// A TLS data section. - /// - /// Example ELF sections: `.tdata` - /// - /// Example Mach-O sections: `__DATA/__thread_data` - Tls, - /// An uninitialized TLS data section. - /// - /// Example ELF sections: `.tbss` - /// - /// Example Mach-O sections: `__DATA/__thread_bss` - UninitializedTls, - /// A TLS variables section. - /// - /// This contains TLS variable structures, rather than the variable initializers. - /// - /// Example Mach-O sections: `__DATA/__thread_vars` - TlsVariables, - /// A non-loadable string section. - /// - /// Example ELF sections: `.comment`, `.debug_str` - OtherString, - /// Some other non-loadable section. - /// - /// Example ELF sections: `.debug_info` - Other, - /// Debug information. - /// - /// Example Mach-O sections: `__DWARF/__debug_info` - Debug, - /// Information for the linker. - /// - /// Example COFF sections: `.drectve` - Linker, - /// ELF note section. - Note, - /// Metadata such as symbols or relocations. - /// - /// Example ELF sections: `.symtab`, `.strtab`, `.group` - Metadata, - /// Some other ELF section type. - /// - /// This is the `sh_type` field in the section header. - /// The meaning may be dependent on the architecture. - Elf(u32), -} - -impl SectionKind { - /// Return true if this section contains zerofill data. - pub fn is_bss(self) -> bool { - self == SectionKind::UninitializedData - || self == SectionKind::UninitializedTls - || self == SectionKind::Common - } -} - -/// The selection kind for a COMDAT section group. -/// -/// This determines the way in which the linker resolves multiple definitions of the COMDAT -/// sections. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum ComdatKind { - /// The selection kind is unknown. - Unknown, - /// Multiple definitions are allowed. - /// - /// An arbitrary definition is selected, and the rest are removed. - /// - /// This is the only supported selection kind for ELF. - Any, - /// Multiple definitions are not allowed. - /// - /// This is used to group sections without allowing duplicates. - NoDuplicates, - /// Multiple definitions must have the same size. - /// - /// An arbitrary definition is selected, and the rest are removed. - SameSize, - /// Multiple definitions must match exactly. - /// - /// An arbitrary definition is selected, and the rest are removed. - ExactMatch, - /// Multiple definitions are allowed, and the largest is selected. - /// - /// An arbitrary definition with the largest size is selected, and the rest are removed. - Largest, - /// Multiple definitions are allowed, and the newest is selected. - Newest, -} - -/// The kind of a symbol. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum SymbolKind { - /// The symbol kind is unknown. - Unknown, - /// The symbol is a null placeholder. - Null, - /// The symbol is for executable code. - Text, - /// The symbol is for a data object. - Data, - /// The symbol is for a section. - Section, - /// The symbol is the name of a file. It precedes symbols within that file. - File, - /// The symbol is for a code label. - Label, - /// The symbol is for a thread local storage entity. - Tls, -} - -/// A symbol scope. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub enum SymbolScope { - /// Unknown scope. - Unknown, - /// Symbol is visible to the compilation unit. - Compilation, - /// Symbol is visible to the static linkage unit. - Linkage, - /// Symbol is visible to dynamically linked objects. - Dynamic, -} - -/// The operation used to calculate the result of the relocation. -/// -/// The relocation descriptions use the following definitions. Note that -/// these definitions probably don't match any ELF ABI. -/// -/// * A - The value of the addend. -/// * G - The address of the symbol's entry within the global offset table. -/// * L - The address of the symbol's entry within the procedure linkage table. -/// * P - The address of the place of the relocation. -/// * S - The address of the symbol. -/// * GotBase - The address of the global offset table. -/// * Image - The base address of the image. -/// * Section - The address of the section containing the symbol. -/// -/// 'XxxRelative' means 'Xxx + A - P'. 'XxxOffset' means 'S + A - Xxx'. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum RelocationKind { - /// S + A - Absolute, - /// S + A - P - Relative, - /// G + A - GotBase - Got, - /// G + A - P - GotRelative, - /// GotBase + A - P - GotBaseRelative, - /// S + A - GotBase - GotBaseOffset, - /// L + A - P - PltRelative, - /// S + A - Image - ImageOffset, - /// S + A - Section - SectionOffset, - /// The index of the section containing the symbol. - SectionIndex, - /// Some other ELF relocation. The value is dependent on the architecture. - Elf(u32), - /// Some other Mach-O relocation. The value is dependent on the architecture. - MachO { - /// The relocation type. - value: u8, - /// Whether the relocation is relative to the place. - relative: bool, - }, - /// Some other COFF relocation. The value is dependent on the architecture. - Coff(u16), - /// Some other XCOFF relocation. - Xcoff(u8), -} - -/// Information about how the result of the relocation operation is encoded in the place. -/// -/// This is usually architecture specific, such as specifying an addressing mode or -/// a specific instruction. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum RelocationEncoding { - /// Generic encoding. - Generic, - - /// x86 sign extension at runtime. - /// - /// Used with `RelocationKind::Absolute`. - X86Signed, - /// x86 rip-relative addressing. - /// - /// The `RelocationKind` must be PC relative. - X86RipRelative, - /// x86 rip-relative addressing in movq instruction. - /// - /// The `RelocationKind` must be PC relative. - X86RipRelativeMovq, - /// x86 branch instruction. - /// - /// The `RelocationKind` must be PC relative. - X86Branch, - - /// s390x PC-relative offset shifted right by one bit. - /// - /// The `RelocationKind` must be PC relative. - S390xDbl, - - /// AArch64 call target. - /// - /// The `RelocationKind` must be PC relative. - AArch64Call, - - /// LoongArch branch offset with two trailing zeros. - /// - /// The `RelocationKind` must be PC relative. - LoongArchBranch, - - /// SHARC+ 48-bit Type A instruction - /// - /// Represents these possible variants, each with a corresponding - /// `R_SHARC_*` constant: - /// - /// * 24-bit absolute address - /// * 32-bit absolute address - /// * 6-bit relative address - /// * 24-bit relative address - /// * 6-bit absolute address in the immediate value field - /// * 16-bit absolute address in the immediate value field - SharcTypeA, - - /// SHARC+ 32-bit Type B instruction - /// - /// Represents these possible variants, each with a corresponding - /// `R_SHARC_*` constant: - /// - /// * 6-bit absolute address in the immediate value field - /// * 7-bit absolute address in the immediate value field - /// * 16-bit absolute address - /// * 6-bit relative address - SharcTypeB, -} - -/// File flags that are specific to each file format. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum FileFlags { - /// No file flags. - None, - /// ELF file flags. - Elf { - /// `os_abi` field in the ELF file header. - os_abi: u8, - /// `abi_version` field in the ELF file header. - abi_version: u8, - /// `e_flags` field in the ELF file header. - e_flags: u32, - }, - /// Mach-O file flags. - MachO { - /// `flags` field in the Mach-O file header. - flags: u32, - }, - /// COFF file flags. - Coff { - /// `Characteristics` field in the COFF file header. - characteristics: u16, - }, - /// XCOFF file flags. - Xcoff { - /// `f_flags` field in the XCOFF file header. - f_flags: u16, - }, -} - -/// Segment flags that are specific to each file format. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum SegmentFlags { - /// No segment flags. - None, - /// ELF segment flags. - Elf { - /// `p_flags` field in the segment header. - p_flags: u32, - }, - /// Mach-O segment flags. - MachO { - /// `flags` field in the segment header. - flags: u32, - /// `maxprot` field in the segment header. - maxprot: u32, - /// `initprot` field in the segment header. - initprot: u32, - }, - /// COFF segment flags. - Coff { - /// `Characteristics` field in the segment header. - characteristics: u32, - }, -} - -/// Section flags that are specific to each file format. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum SectionFlags { - /// No section flags. - None, - /// ELF section flags. - Elf { - /// `sh_flags` field in the section header. - sh_flags: u64, - }, - /// Mach-O section flags. - MachO { - /// `flags` field in the section header. - flags: u32, - }, - /// COFF section flags. - Coff { - /// `Characteristics` field in the section header. - characteristics: u32, - }, - /// XCOFF section flags. - Xcoff { - /// `s_flags` field in the section header. - s_flags: u32, - }, -} - -/// Symbol flags that are specific to each file format. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[non_exhaustive] -pub enum SymbolFlags<Section, Symbol> { - /// No symbol flags. - None, - /// ELF symbol flags. - Elf { - /// `st_info` field in the ELF symbol. - st_info: u8, - /// `st_other` field in the ELF symbol. - st_other: u8, - }, - /// Mach-O symbol flags. - MachO { - /// `n_desc` field in the Mach-O symbol. - n_desc: u16, - }, - /// COFF flags for a section symbol. - CoffSection { - /// `Selection` field in the auxiliary symbol for the section. - selection: u8, - /// `Number` field in the auxiliary symbol for the section. - associative_section: Option<Section>, - }, - /// XCOFF symbol flags. - Xcoff { - /// `n_sclass` field in the XCOFF symbol. - n_sclass: u8, - /// `x_smtyp` field in the CSECT auxiliary symbol. - /// - /// Only valid if `n_sclass` is `C_EXT`, `C_WEAKEXT`, or `C_HIDEXT`. - x_smtyp: u8, - /// `x_smclas` field in the CSECT auxiliary symbol. - /// - /// Only valid if `n_sclass` is `C_EXT`, `C_WEAKEXT`, or `C_HIDEXT`. - x_smclas: u8, - /// The containing csect for the symbol. - /// - /// Only valid if `x_smtyp` is `XTY_LD`. - containing_csect: Option<Symbol>, - }, -} |