Add comments about vmctx pointers in various datastructures. (#2925)

This forward-ports the relevant parts of #1396.
This commit is contained in:
Dan Gohman
2021-07-27 07:33:27 -07:00
committed by GitHub
parent 5deda27977
commit 784a380e5f
2 changed files with 6 additions and 3 deletions

View File

@@ -89,7 +89,8 @@ impl From<ExportMemory> for Export {
pub struct ExportGlobal { pub struct ExportGlobal {
/// The address of the global storage. /// The address of the global storage.
pub definition: *mut VMGlobalDefinition, pub definition: *mut VMGlobalDefinition,
/// Pointer to the containing `VMContext`. /// Pointer to a `VMContext` which has a lifetime at least as long as the
/// global. This may not be the `VMContext` which defines the global.
pub vmctx: *mut VMContext, pub vmctx: *mut VMContext,
/// The global declaration, used for compatibilty checking. /// The global declaration, used for compatibilty checking.
pub global: Global, pub global: Global,

View File

@@ -159,6 +159,10 @@ mod test_vmmemory_import {
/// The fields compiled code needs to access to utilize a WebAssembly global /// The fields compiled code needs to access to utilize a WebAssembly global
/// variable imported from another instance. /// variable imported from another instance.
///
/// Note that unlike with functions, tables, and memories, `VMGlobalImport`
/// doesn't include a `vmctx` pointer. Globals are never resized, and don't
/// require a `vmctx` pointer to access.
#[derive(Debug, Copy, Clone)] #[derive(Debug, Copy, Clone)]
#[repr(C)] #[repr(C)]
pub struct VMGlobalImport { pub struct VMGlobalImport {
@@ -744,8 +748,6 @@ mod test_vminterrupts {
/// The struct here is empty, as the sizes of these fields are dynamic, and /// The struct here is empty, as the sizes of these fields are dynamic, and
/// we can't describe them in Rust's type system. Sufficient memory is /// we can't describe them in Rust's type system. Sufficient memory is
/// allocated at runtime. /// allocated at runtime.
///
/// TODO: We could move the globals into the `vmctx` allocation too.
#[derive(Debug)] #[derive(Debug)]
#[repr(C, align(16))] // align 16 since globals are aligned to that and contained inside #[repr(C, align(16))] // align 16 since globals are aligned to that and contained inside
pub struct VMContext { pub struct VMContext {