Support building big-endian objects (#2382)
The JIT build_object routine currently rejects building object files for any big-endian platform. However, most of the object builder code works fine for either byte order, with the exception of a small change in the ObjectBuilderTarget::new routine. This patch adds that change and removes the assert in build_object.
This commit is contained in:
@@ -28,10 +28,6 @@ pub(crate) fn build_object(
|
|||||||
dwarf_sections: Vec<DwarfSection>,
|
dwarf_sections: Vec<DwarfSection>,
|
||||||
) -> Result<(Object, Vec<ObjectUnwindInfo>), anyhow::Error> {
|
) -> Result<(Object, Vec<ObjectUnwindInfo>), anyhow::Error> {
|
||||||
const CODE_SECTION_ALIGNMENT: u64 = 0x1000;
|
const CODE_SECTION_ALIGNMENT: u64 = 0x1000;
|
||||||
assert_eq!(
|
|
||||||
isa.triple().architecture.endianness(),
|
|
||||||
Ok(target_lexicon::Endianness::Little)
|
|
||||||
);
|
|
||||||
|
|
||||||
let mut unwind_info = Vec::new();
|
let mut unwind_info = Vec::new();
|
||||||
|
|
||||||
|
|||||||
@@ -122,10 +122,6 @@ fn process_unwind_info(info: &UnwindInfo, obj: &mut Object, code_section: Sectio
|
|||||||
|
|
||||||
/// Builds ELF image from the module `Compilation`.
|
/// Builds ELF image from the module `Compilation`.
|
||||||
// const CODE_SECTION_ALIGNMENT: u64 = 0x1000;
|
// const CODE_SECTION_ALIGNMENT: u64 = 0x1000;
|
||||||
// assert_eq!(
|
|
||||||
// isa.triple().architecture.endianness(),
|
|
||||||
// Ok(target_lexicon::Endianness::Little)
|
|
||||||
// );
|
|
||||||
|
|
||||||
/// Iterates through all `LibCall` members and all runtime exported functions.
|
/// Iterates through all `LibCall` members and all runtime exported functions.
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
@@ -223,7 +219,10 @@ impl ObjectBuilderTarget {
|
|||||||
Ok(Self {
|
Ok(Self {
|
||||||
binary_format: BinaryFormat::Elf,
|
binary_format: BinaryFormat::Elf,
|
||||||
architecture: to_object_architecture(arch)?,
|
architecture: to_object_architecture(arch)?,
|
||||||
endianness: Endianness::Little,
|
endianness: match arch.endianness().unwrap() {
|
||||||
|
target_lexicon::Endianness::Little => object::Endianness::Little,
|
||||||
|
target_lexicon::Endianness::Big => object::Endianness::Big,
|
||||||
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user