blob: 0681344de2cb74ded754b4176314e6cd5135a421 [file] [edit]
# REQUIRES: webassembly
# An active data segment is mapped into the module's linear memory at the
# virtual address given by its init expression. Linear memory is a separate
# address space from code: a wasm 64-bit address encodes the space in its top
# two bits (0 = Memory, 1 = Object/code). Code is addressed in the Object space
# by its module offset; data must be addressed in the Memory space at its
# linear address.
#
# Here the data segment's init expr places it at linear address 0x10000.
# RUN: yaml2obj %s -o %t.wasm
# RUN: %lldb %t.wasm \
# RUN: -o "target modules dump sections" \
# RUN: -o "target modules load --file %t.wasm --slide 0x4000000000000000" \
# RUN: -o "target modules dump sections" \
# RUN: -o exit 2>&1 | FileCheck %s
# Before loading, sections carry their file addresses. The data segment's file
# address is its linear-memory address (from the init expr), not its offset in
# the wasm file.
# CHECK-LABEL: File Address
# CHECK: code {{.*}}[0x0000000000000000-
# CHECK: data {{.*}}[0x0000000000010000-0x0000000000010004)
# After loading the module in the Object space (top bit set), the code section
# is placed in the Object space at its module offset, while the data segment is
# placed in the Memory space at its linear address. It is *not* Object-tagged.
# CHECK-LABEL: Load Address
# CHECK: code {{.*}}[0x40000000{{[0-9a-f]+}}-
# CHECK: data {{.*}}[0x0000000000010000-0x0000000000010004)
--- !WASM
FileHeader:
Version: 0x1
Sections:
- Type: TYPE
Signatures:
- Index: 0
ParamTypes: []
ReturnTypes:
- I32
- Type: FUNCTION
FunctionTypes: [ 0 ]
- Type: MEMORY
Memories:
- Minimum: 0x2
- Type: CODE
Functions:
- Index: 0
Locals: []
Body: 412A0F0B
- Type: DATA
Segments:
- SectionOffset: 6
InitFlags: 0
Offset:
Opcode: I32_CONST
Value: 65536
Content: 'DEADBEEF'
- Type: CUSTOM
Name: name
FunctionNames:
- Index: 0
Name: get_42
...