Summary: wasm-ld requires --shared-memory to be passed when the atomics feature is enabled because historically atomic operations were only valid with shared memories. This change relaxes that requirement for when building relocatable objects because their memories are not meaningful. This technically maintains the validity of object files because the threads spec now allows atomic operations with unshared memories, although we don't support that elsewhere in the tools yet. This fixes and Emscripten build issue reported at https://bugs.chromium.org/p/webp/issues/detail?id=463. Reviewers: sbc100 Subscribers: dschuff, jgravelle-google, aheejin, sunfish, jfb, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D78072
80 lines
2.8 KiB
YAML
80 lines
2.8 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: not wasm-ld --no-entry --features=atomics %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-NO-SHARED
|
|
|
|
# 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-NO-SHARED: 'atomics' feature is used, so --shared-memory must be used{{$}}
|
|
|
|
# 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
|