1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
//! `llvm-support` provides support types to the other *mollusc* crates,
//! in furtherance of the general task of parsing LLVM's bitcode.
#![deny(rustdoc::broken_intra_doc_links)]
#![deny(missing_docs)]
#![allow(clippy::redundant_field_names)]
#![forbid(unsafe_code)]
pub mod align;
pub mod attribute;
pub mod ty;
pub use self::align::*;
pub use self::attribute::*;
pub use self::ty::*;
/// An exact endianness.
///
/// For an inexact endianness model (i.e., one that supports a notion of "system" endianness),
/// see [`InexactEndian`](InexactEndian)
#[derive(Debug, PartialEq)]
pub enum Endian {
/// Little-endian.
Little,
/// Big-endian.
Big,
}
/// An "inexact" endianness, i.e. one supports an unspecified system endianness.
#[derive(Debug)]
pub enum InexactEndian {
/// Either big-endian or little-endian.
Exact(Endian),
/// The host system's endianness, which may not be known immediately.
System,
}
/// Symbol mangling styles supported by LLVM.
#[derive(Debug, PartialEq)]
pub enum Mangling {
/// ELF-style mangling.
Elf,
/// MIPS-style mangling.
Mips,
/// Mach-O-style mangling.
Macho,
/// COFF on x86 Windows-style mangling.
WindowsX86Coff,
/// COFF on Windows-style mangling.
WindowsCoff,
/// XCOFF-style mangling.
XCoff,
}
/// An `(offset, size)` reference to a string within some string table.
pub struct StrtabRef {
/// The string's offset within its string table.
pub offset: usize,
/// The string's size, in bytes.
pub size: usize,
}
impl From<(usize, usize)> for StrtabRef {
fn from(value: (usize, usize)) -> Self {
Self {
offset: value.0,
size: value.1,
}
}
}
impl From<(u64, u64)> for StrtabRef {
fn from(value: (u64, u64)) -> Self {
Self::from((value.0 as usize, value.1 as usize))
}
}