Add a function_alignment function to the TargetIsa trait, and use it to align functions when generating objects. Additionally, collect the maximum alignment required for pc-relative constants in functions and pass that value out. Use the max of these two values when padding functions for alignment. This fixes a bug on x86_64 where rip-relative loads to sse registers could cause a segfault, as functions weren't always guaranteed to be aligned to 16-byte addresses. Fixes #4812
This crate provides module-level functionality, which allow multiple functions and data to be emitted with Cranelift and then linked together.
This crate is structured as an optional layer on top of cranelift-codegen. It provides additional functionality, such as linking, however users that require greater flexibility don't need to use it.
A module is a collection of functions and data objects that are linked
together. The Module trait that defines a common interface for various kinds
of modules. Most users will use one of the following Module implementations:
JITModule, provided by cranelift-jit, which JITs code to memory for direct execution.ObjectModule, provided by cranelift-object, which emits native object files.