Move the signature_ids field first.
This commit is contained in:
@@ -59,6 +59,9 @@ pub struct FuncEnvironment<'module_environment> {
|
|||||||
/// The Cranelift global holding the vmctx address.
|
/// The Cranelift global holding the vmctx address.
|
||||||
vmctx: Option<ir::GlobalValue>,
|
vmctx: Option<ir::GlobalValue>,
|
||||||
|
|
||||||
|
/// The Cranelift global holding the base address of the signature IDs vector.
|
||||||
|
signature_ids_base: Option<ir::GlobalValue>,
|
||||||
|
|
||||||
/// The Cranelift global holding the base address of the imported functions table.
|
/// The Cranelift global holding the base address of the imported functions table.
|
||||||
imported_functions_base: Option<ir::GlobalValue>,
|
imported_functions_base: Option<ir::GlobalValue>,
|
||||||
|
|
||||||
@@ -80,9 +83,6 @@ pub struct FuncEnvironment<'module_environment> {
|
|||||||
/// The Cranelift global holding the base address of the globals vector.
|
/// The Cranelift global holding the base address of the globals vector.
|
||||||
globals_base: Option<ir::GlobalValue>,
|
globals_base: Option<ir::GlobalValue>,
|
||||||
|
|
||||||
/// The Cranelift global holding the base address of the signature IDs vector.
|
|
||||||
signature_ids_base: Option<ir::GlobalValue>,
|
|
||||||
|
|
||||||
/// The external function declaration for implementing wasm's `memory.size`
|
/// The external function declaration for implementing wasm's `memory.size`
|
||||||
/// for locally-defined 32-bit memories.
|
/// for locally-defined 32-bit memories.
|
||||||
memory32_size_extfunc: Option<FuncRef>,
|
memory32_size_extfunc: Option<FuncRef>,
|
||||||
@@ -109,6 +109,7 @@ impl<'module_environment> FuncEnvironment<'module_environment> {
|
|||||||
target_config,
|
target_config,
|
||||||
module,
|
module,
|
||||||
vmctx: None,
|
vmctx: None,
|
||||||
|
signature_ids_base: None,
|
||||||
imported_functions_base: None,
|
imported_functions_base: None,
|
||||||
imported_tables_base: None,
|
imported_tables_base: None,
|
||||||
imported_memories_base: None,
|
imported_memories_base: None,
|
||||||
@@ -116,7 +117,6 @@ impl<'module_environment> FuncEnvironment<'module_environment> {
|
|||||||
tables_base: None,
|
tables_base: None,
|
||||||
memories_base: None,
|
memories_base: None,
|
||||||
globals_base: None,
|
globals_base: None,
|
||||||
signature_ids_base: None,
|
|
||||||
memory32_size_extfunc: None,
|
memory32_size_extfunc: None,
|
||||||
imported_memory32_size_extfunc: None,
|
imported_memory32_size_extfunc: None,
|
||||||
memory_grow_extfunc: None,
|
memory_grow_extfunc: None,
|
||||||
|
|||||||
@@ -207,45 +207,45 @@ impl VMOffsets {
|
|||||||
|
|
||||||
/// Offsets for `VMContext`.
|
/// Offsets for `VMContext`.
|
||||||
impl VMOffsets {
|
impl VMOffsets {
|
||||||
|
/// The offset of the `signature_ids` field.
|
||||||
|
pub fn vmctx_signature_ids(&self) -> u8 {
|
||||||
|
0 * self.pointer_size
|
||||||
|
}
|
||||||
|
|
||||||
/// The offset of the `tables` field.
|
/// The offset of the `tables` field.
|
||||||
#[allow(clippy::erasing_op)]
|
#[allow(clippy::erasing_op)]
|
||||||
pub fn vmctx_imported_functions(&self) -> u8 {
|
pub fn vmctx_imported_functions(&self) -> u8 {
|
||||||
0 * self.pointer_size
|
1 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The offset of the `tables` field.
|
/// The offset of the `tables` field.
|
||||||
#[allow(clippy::identity_op)]
|
#[allow(clippy::identity_op)]
|
||||||
pub fn vmctx_imported_tables(&self) -> u8 {
|
pub fn vmctx_imported_tables(&self) -> u8 {
|
||||||
1 * self.pointer_size
|
2 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The offset of the `memories` field.
|
/// The offset of the `memories` field.
|
||||||
pub fn vmctx_imported_memories(&self) -> u8 {
|
pub fn vmctx_imported_memories(&self) -> u8 {
|
||||||
2 * self.pointer_size
|
3 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The offset of the `globals` field.
|
/// The offset of the `globals` field.
|
||||||
pub fn vmctx_imported_globals(&self) -> u8 {
|
pub fn vmctx_imported_globals(&self) -> u8 {
|
||||||
3 * self.pointer_size
|
4 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The offset of the `tables` field.
|
/// The offset of the `tables` field.
|
||||||
pub fn vmctx_tables(&self) -> u8 {
|
pub fn vmctx_tables(&self) -> u8 {
|
||||||
4 * self.pointer_size
|
5 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The offset of the `memories` field.
|
/// The offset of the `memories` field.
|
||||||
pub fn vmctx_memories(&self) -> u8 {
|
pub fn vmctx_memories(&self) -> u8 {
|
||||||
5 * self.pointer_size
|
6 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The offset of the `globals` field.
|
/// The offset of the `globals` field.
|
||||||
pub fn vmctx_globals(&self) -> u8 {
|
pub fn vmctx_globals(&self) -> u8 {
|
||||||
6 * self.pointer_size
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The offset of the `signature_ids` field.
|
|
||||||
pub fn vmctx_signature_ids(&self) -> u8 {
|
|
||||||
7 * self.pointer_size
|
7 * self.pointer_size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -469,6 +469,9 @@ impl Default for VMCallerCheckedAnyfunc {
|
|||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
pub struct VMContext {
|
pub struct VMContext {
|
||||||
|
/// Signature identifiers for signature-checking indirect calls.
|
||||||
|
signature_ids: *mut VMSharedSignatureIndex,
|
||||||
|
|
||||||
/// A pointer to an array of `*const VMFunctionBody` instances, indexed by `FuncIndex`.
|
/// A pointer to an array of `*const VMFunctionBody` instances, indexed by `FuncIndex`.
|
||||||
imported_functions: *const VMFunctionImport,
|
imported_functions: *const VMFunctionImport,
|
||||||
|
|
||||||
@@ -492,9 +495,6 @@ pub struct VMContext {
|
|||||||
/// A pointer to an array of locally-defined `VMGlobalDefinition` instances,
|
/// A pointer to an array of locally-defined `VMGlobalDefinition` instances,
|
||||||
/// indexed by `DefinedGlobalIndex`.
|
/// indexed by `DefinedGlobalIndex`.
|
||||||
globals: *mut VMGlobalDefinition,
|
globals: *mut VMGlobalDefinition,
|
||||||
|
|
||||||
/// Signature identifiers for signature-checking indirect calls.
|
|
||||||
signature_ids: *mut VMSharedSignatureIndex,
|
|
||||||
// If more elements are added here, remember to add offset_of tests below!
|
// If more elements are added here, remember to add offset_of tests below!
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -509,20 +509,36 @@ mod test {
|
|||||||
let offsets = VMOffsets::new(size_of::<*mut u8>() as u8);
|
let offsets = VMOffsets::new(size_of::<*mut u8>() as u8);
|
||||||
assert_eq!(size_of::<VMContext>(), usize::from(offsets.size_of_vmctx()));
|
assert_eq!(size_of::<VMContext>(), usize::from(offsets.size_of_vmctx()));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
offset_of!(VMContext, memories),
|
offset_of!(VMContext, signature_ids),
|
||||||
usize::from(offsets.vmctx_memories())
|
usize::from(offsets.vmctx_signature_ids())
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
offset_of!(VMContext, globals),
|
offset_of!(VMContext, imported_functions),
|
||||||
usize::from(offsets.vmctx_globals())
|
usize::from(offsets.vmctx_imported_functions())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
offset_of!(VMContext, imported_tables),
|
||||||
|
usize::from(offsets.vmctx_imported_tables())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
offset_of!(VMContext, imported_memories),
|
||||||
|
usize::from(offsets.vmctx_imported_memories())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
offset_of!(VMContext, imported_globals),
|
||||||
|
usize::from(offsets.vmctx_imported_globals())
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
offset_of!(VMContext, tables),
|
offset_of!(VMContext, tables),
|
||||||
usize::from(offsets.vmctx_tables())
|
usize::from(offsets.vmctx_tables())
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
offset_of!(VMContext, signature_ids),
|
offset_of!(VMContext, memories),
|
||||||
usize::from(offsets.vmctx_signature_ids())
|
usize::from(offsets.vmctx_memories())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
offset_of!(VMContext, globals),
|
||||||
|
usize::from(offsets.vmctx_globals())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user