Summary: Adds `--passive-segments` and `--active-segments` flags to control what kind of segments are emitted. For now the default is always to emit active segments so this is not a breaking change, but in the future the default will be changed to passive segments when shared memory is requested and active segments otherwise. When passive segments are emitted, corresponding memory.init and data.drop instructions are emitted in a `__wasm_init_memory` function that is automatically called at the beginning of `__wasm_call_ctors`. Reviewers: sbc100, aheejin, dschuff Subscribers: azakai, dschuff, jgravelle-google, sunfish, jfb, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D59343 llvm-svn: 365088
125 lines
5.6 KiB
LLVM
125 lines
5.6 KiB
LLVM
target triple = "wasm32-unknown-unknown"
|
|
|
|
@a = hidden global [6 x i8] c"hello\00", align 1
|
|
@b = hidden global [8 x i8] c"goodbye\00", align 1
|
|
@c = hidden global [9 x i8] c"whatever\00", align 1
|
|
@d = hidden global i32 42, align 4
|
|
|
|
@e = private constant [9 x i8] c"constant\00", align 1
|
|
@f = private constant i8 43, align 4
|
|
|
|
; RUN: llc -mattr=+bulk-memory -filetype=obj %s -o %t.o
|
|
|
|
; RUN: wasm-ld -no-gc-sections --no-entry -o %t.merged.wasm %t.o
|
|
; RUN: obj2yaml %t.merged.wasm | FileCheck %s --check-prefix=MERGE
|
|
|
|
; MERGE-LABEL: - Type: DATA
|
|
; MERGE-NEXT: Segments:
|
|
; MERGE-NEXT: - SectionOffset: 7
|
|
; MERGE-NEXT: InitFlags: 0
|
|
; MERGE-NEXT: Offset:
|
|
; MERGE: Content: 68656C6C6F00676F6F6462796500776861746576657200002A000000
|
|
; MERGE-NEXT: - SectionOffset: 41
|
|
; MERGE-NEXT: InitFlags: 0
|
|
; MERGE-NEXT: Offset:
|
|
; MERGE: Content: 636F6E7374616E74000000002B
|
|
; MERGE-NEXT: - Type: CUSTOM
|
|
; MERGE-NEXT: Name: name
|
|
; MERGE-NEXT: FunctionNames:
|
|
; MERGE-NEXT: - Index: 0
|
|
; MERGE-NEXT: Name: __wasm_call_ctors
|
|
; MERGE-NOT: - Index:
|
|
|
|
; RUN: wasm-ld -no-gc-sections --no-entry --no-merge-data-segments -o %t.separate.wasm %t.o
|
|
; RUN: obj2yaml %t.separate.wasm | FileCheck %s --check-prefix=SEPARATE
|
|
|
|
; SEPARATE-NOT: DATACOUNT
|
|
; SEPARATE-LABEL: - Type: DATA
|
|
; SEPARATE-NEXT: Segments:
|
|
; SEPARATE-NEXT: - SectionOffset: 7
|
|
; SEPARATE-NEXT: InitFlags: 0
|
|
; SEPARATE-NEXT: Offset:
|
|
; SEPARATE: Content: 68656C6C6F00
|
|
; SEPARATE-NEXT: - SectionOffset: 19
|
|
; SEPARATE-NEXT: InitFlags: 0
|
|
; SEPARATE-NEXT: Offset:
|
|
; SEPARATE: Content: 676F6F6462796500
|
|
; SEPARATE-NEXT: - SectionOffset: 33
|
|
; SEPARATE-NEXT: InitFlags: 0
|
|
; SEPARATE-NEXT: Offset:
|
|
; SEPARATE: Content: '776861746576657200'
|
|
; SEPARATE-NEXT: - SectionOffset: 48
|
|
; SEPARATE-NEXT: InitFlags: 0
|
|
; SEPARATE-NEXT: Offset:
|
|
; SEPARATE: Content: 2A000000
|
|
; SEPARATE-NEXT: - SectionOffset: 58
|
|
; SEPARATE-NEXT: InitFlags: 0
|
|
; SEPARATE-NEXT: Offset:
|
|
; SEPARATE: Content: 636F6E7374616E7400
|
|
; SEPARATE-NEXT: - SectionOffset: 73
|
|
; SEPARATE-NEXT: InitFlags: 0
|
|
; SEPARATE-NEXT: Offset:
|
|
; SEPARATE: Content: 2B
|
|
; SEPARATE-NEXT: - Type: CUSTOM
|
|
; SEPARATE-NEXT: Name: name
|
|
; SEPARATE-NEXT: FunctionNames:
|
|
; SEPARATE-NEXT: - Index: 0
|
|
; SEPARATE-NEXT: Name: __wasm_call_ctors
|
|
; SEPARATE-NOT: - Index:
|
|
|
|
; RUN: wasm-ld -no-gc-sections --no-entry --passive-segments -o %t.merged.passive.wasm %t.o
|
|
; RUN: obj2yaml %t.merged.passive.wasm | FileCheck %s --check-prefix=PASSIVE-MERGE
|
|
|
|
; PASSIVE-MERGE-LABEL: - Type: DATACOUNT
|
|
; PASSIVE-MERGE-NEXT: Count: 2
|
|
; PASSIVE-MERGE-LABEL: - Type: DATA
|
|
; PASSIVE-MERGE-NEXT: Segments:
|
|
; PASSIVE-MERGE-NEXT: - SectionOffset: 3
|
|
; PASSIVE-MERGE-NEXT: InitFlags: 1
|
|
; PASSIVE-MERGE-NEXT: Content: 68656C6C6F00676F6F6462796500776861746576657200002A000000
|
|
; PASSIVE-MERGE-NEXT: - SectionOffset: 33
|
|
; PASSIVE-MERGE-NEXT: InitFlags: 1
|
|
; PASSIVE-MERGE-NEXT: Content: 636F6E7374616E74000000002B
|
|
; PASSIVE-MERGE-NEXT: - Type: CUSTOM
|
|
; PASSIVE-MERGE-NEXT: Name: name
|
|
; PASSIVE-MERGE-NEXT: FunctionNames:
|
|
; PASSIVE-MERGE-NEXT: - Index: 0
|
|
; PASSIVE-MERGE-NEXT: Name: __wasm_call_ctors
|
|
; PASSIVE-MERGE-NEXT: - Index: 1
|
|
; PASSIVE-MERGE-NEXT: Name: __wasm_init_memory
|
|
; PASSIVE-MERGE-NOT: - Index:
|
|
|
|
; RUN: wasm-ld -no-gc-sections --no-entry --passive-segments -no-merge-data-segments -o %t.separate.passive.wasm %t.o
|
|
; RUN: obj2yaml %t.separate.passive.wasm | FileCheck %s --check-prefix=PASSIVE-SEPARATE
|
|
|
|
; PASSIVE-SEPARATE-LABEL: - Type: DATACOUNT
|
|
; PASSIVE-SEPARATE-NEXT: Count: 6
|
|
; PASSIVE-SEPARATE-LABEL: - Type: DATA
|
|
; PASSIVE-SEPARATE-NEXT: Segments:
|
|
; PASSIVE-SEPARATE-NEXT: - SectionOffset: 3
|
|
; PASSIVE-SEPARATE-NEXT: InitFlags: 1
|
|
; PASSIVE-SEPARATE-NEXT: Content: 68656C6C6F00
|
|
; PASSIVE-SEPARATE-NEXT: - SectionOffset: 11
|
|
; PASSIVE-SEPARATE-NEXT: InitFlags: 1
|
|
; PASSIVE-SEPARATE-NEXT: Content: 676F6F6462796500
|
|
; PASSIVE-SEPARATE-NEXT: - SectionOffset: 21
|
|
; PASSIVE-SEPARATE-NEXT: InitFlags: 1
|
|
; PASSIVE-SEPARATE-NEXT: Content: '776861746576657200'
|
|
; PASSIVE-SEPARATE-NEXT: - SectionOffset: 32
|
|
; PASSIVE-SEPARATE-NEXT: InitFlags: 1
|
|
; PASSIVE-SEPARATE-NEXT: Content: 2A000000
|
|
; PASSIVE-SEPARATE-NEXT: - SectionOffset: 38
|
|
; PASSIVE-SEPARATE-NEXT: InitFlags: 1
|
|
; PASSIVE-SEPARATE-NEXT: Content: 636F6E7374616E7400
|
|
; PASSIVE-SEPARATE-NEXT: - SectionOffset: 49
|
|
; PASSIVE-SEPARATE-NEXT: InitFlags: 1
|
|
; PASSIVE-SEPARATE-NEXT: Content: 2B
|
|
; PASSIVE-SEPARATE-NEXT: - Type: CUSTOM
|
|
; PASSIVE-SEPARATE-NEXT: Name: name
|
|
; PASSIVE-SEPARATE-NEXT: FunctionNames:
|
|
; PASSIVE-SEPARATE-NEXT: - Index: 0
|
|
; PASSIVE-SEPARATE-NEXT: Name: __wasm_call_ctors
|
|
; PASSIVE-SEPARATE-NEXT: - Index: 1
|
|
; PASSIVE-SEPARATE-NEXT: Name: __wasm_init_memory
|
|
; PASSIVE-SEPARATE-NOT: - Index
|