https://github.com/WebAssembly/threads/issues/144 updated the WebAssembly threads proposal to make atomic operations on unshared memories valid. This change updates the feature checking in the linker accordingly. Production WebAssembly engines have recently been updated to allow this behvaior, but after this change users who accidentally use atomics with unshared memories on older versions of the engines will get validation errors at runtime rather than link errors. Differential Revision: https://reviews.llvm.org/D79530
76 lines
2.6 KiB
YAML
76 lines
2.6 KiB
YAML
# RUN: yaml2obj %s -o %t1.o
|
|
|
|
# RUN: not wasm-ld --no-entry --shared-memory %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-NO-MAX
|
|
|
|
# RUN: not wasm-ld --no-entry --shared-memory --max-memory=100000 %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-UNALIGNED
|
|
|
|
# RUN: not wasm-ld --no-entry --shared-memory --max-memory=131072 --features=bulk-memory %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-NO-ATOMICS
|
|
|
|
# RUN: not wasm-ld --no-entry --shared-memory --max-memory=131072 --features=atomics %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-NO-BULK-MEM
|
|
|
|
# RUN: wasm-ld --relocatable --features=atomics %t1.o -o - | obj2yaml | FileCheck %s --check-prefix ATOMICS-RELOCATABLE
|
|
|
|
# RUN: wasm-ld --no-entry --shared-memory --max-memory=131072 --features=atomics,bulk-memory %t1.o -o - | obj2yaml | FileCheck %s --check-prefix SHARED
|
|
|
|
--- !WASM
|
|
FileHeader:
|
|
Version: 0x00000001
|
|
Sections:
|
|
- Type: IMPORT
|
|
Imports:
|
|
- Module: env
|
|
Field: __linear_memory
|
|
Kind: MEMORY
|
|
Memory:
|
|
Initial: 0x00000001
|
|
- Module: env
|
|
Field: __indirect_function_table
|
|
Kind: TABLE
|
|
Table:
|
|
ElemType: FUNCREF
|
|
Limits:
|
|
Initial: 0x00000000
|
|
- Type: DATA
|
|
Segments:
|
|
- SectionOffset: 6
|
|
InitFlags: 0
|
|
Offset:
|
|
Opcode: I32_CONST
|
|
Value: 0
|
|
Content: 68656C6C6F0A00
|
|
- Type: CUSTOM
|
|
Name: linking
|
|
Version: 2
|
|
SymbolTable:
|
|
- Index: 0
|
|
Kind: DATA
|
|
Name: hello_str
|
|
Flags: [ ]
|
|
Segment: 0
|
|
Size: 7
|
|
SegmentInfo:
|
|
- Index: 0
|
|
Name: .rodata.hello_str
|
|
Alignment: 0
|
|
Flags: [ ]
|
|
...
|
|
|
|
# SHARED-NO-MAX: maximum memory too small, 66576 bytes needed{{$}}
|
|
|
|
# SHARED-UNALIGNED: maximum memory must be 65536-byte aligned{{$}}
|
|
|
|
# SHARED-NO-ATOMICS: 'atomics' feature must be used in order to use shared memory
|
|
|
|
# SHARED-NO-BULK-MEM: 'bulk-memory' feature must be used in order to use shared memory
|
|
|
|
# ATOMICS-RELOCATABLE: - Type: MEMORY
|
|
# ATOMICS-RELOCATABLE-NEXT: Memories:
|
|
# ATOMICS-RELOCATABLE-NEXT: Initial: 0x00000001
|
|
# ATOMICS-RELOCATABLE-NEXT: - Type:
|
|
|
|
# SHARED: - Type: MEMORY
|
|
# SHARED-NEXT: Memories:
|
|
# SHARED-NEXT: - Flags: [ HAS_MAX, IS_SHARED ]
|
|
# SHARED-NEXT: Initial: 0x00000002
|
|
# SHARED-NEXT: Maximum: 0x00000002
|