Skip to content

Commit

Permalink
[WebAssembly] Add support for named globals in the object format.
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D91769
  • Loading branch information
sbc100 committed Nov 19, 2020
1 parent ea7ab5a commit 1827005
Show file tree
Hide file tree
Showing 34 changed files with 233 additions and 59 deletions.
3 changes: 3 additions & 0 deletions lld/test/wasm/alias.s
Expand Up @@ -62,4 +62,7 @@ _start:
# CHECK-NEXT: FunctionNames:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Name: _start
# CHECK-NEXT: GlobalNames:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Name: __stack_pointer
# CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/call-indirect.ll
Expand Up @@ -153,4 +153,7 @@ define void @call_ptr(i64 (i64)* %arg) {
; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Name: call_ptr
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/ctor_return_value.s
Expand Up @@ -43,4 +43,7 @@ _start:
# CHECK-NEXT: Name: myctor
# CHECK-NEXT: - Index: 2
# CHECK-NEXT: Name: _start
# CHECK-NEXT: GlobalNames:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Name: __stack_pointer
# CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/cxx-mangling.ll
Expand Up @@ -54,4 +54,7 @@ define void @_start() {
; MANGLE-NEXT: Name: _Z3fooi
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: _start
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
6 changes: 6 additions & 0 deletions lld/test/wasm/data-segment-merging.ll
Expand Up @@ -29,6 +29,9 @@ target triple = "wasm32-unknown-unknown"
; MERGE-NEXT: FunctionNames:
; MERGE-NEXT: - Index: 0
; MERGE-NEXT: Name: __wasm_call_ctors
; MERGE-NEXT: GlobalNames:
; MERGE-NEXT: - Index: 0
; MERGE-NEXT: Name: __stack_pointer
; MERGE-NOT: - Index:

; RUN: wasm-ld -no-gc-sections --no-entry --no-merge-data-segments -o %t.separate.wasm %t.o
Expand Down Expand Up @@ -66,6 +69,9 @@ target triple = "wasm32-unknown-unknown"
; SEPARATE-NEXT: FunctionNames:
; SEPARATE-NEXT: - Index: 0
; SEPARATE-NEXT: Name: __wasm_call_ctors
; SEPARATE-NEXT: GlobalNames:
; SEPARATE-NEXT: - Index: 0
; SEPARATE-NEXT: Name: __stack_pointer
; SEPARATE-NOT: - Index:

; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 -o %t.merged.passive.wasm %t.passive.o
Expand Down
3 changes: 3 additions & 0 deletions lld/test/wasm/function-imports-first.ll
Expand Up @@ -41,4 +41,7 @@ declare i32 @ret32(float) local_unnamed_addr #1
; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: ret32
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/function-imports.ll
Expand Up @@ -37,4 +37,7 @@ declare i32 @ret32(float) local_unnamed_addr #1
; CHECK-NEXT: Name: ret32
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
12 changes: 12 additions & 0 deletions lld/test/wasm/gc-imports.s
Expand Up @@ -42,6 +42,11 @@ _start:
# CHECK-NEXT: Name: _start
# CHECK-NEXT: - Index: 2
# CHECK-NEXT: Name: use_undef_global
# CHECK-NEXT: GlobalNames:
# CHECK-NEXT: - Index: 0
# CHECK-NEXT: Name: used_undef_global
# CHECK-NEXT: - Index: 1
# CHECK-NEXT: Name: __stack_pointer
# CHECK-NEXT: ...

# RUN: wasm-ld --no-gc-sections --allow-undefined \
Expand Down Expand Up @@ -84,4 +89,11 @@ _start:
# NO-GC-NEXT: Name: _start
# NO-GC-NEXT: - Index: 5
# NO-GC-NEXT: Name: use_undef_global
# NO-GC-NEXT: GlobalNames:
# NO-GC-NEXT: - Index: 0
# NO-GC-NEXT: Name: unused_undef_global
# NO-GC-NEXT: - Index: 1
# NO-GC-NEXT: Name: used_undef_global
# NO-GC-NEXT: - Index: 2
# NO-GC-NEXT: Name: __stack_pointer
# NO-GC-NEXT: ...
12 changes: 12 additions & 0 deletions lld/test/wasm/gc-sections.ll
Expand Up @@ -82,6 +82,11 @@ entry:
; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: use_global
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: used_global
; CHECK-NEXT: ...

; RUN: wasm-ld -print-gc-sections --no-gc-sections -o %t1.no-gc.wasm \
Expand Down Expand Up @@ -150,6 +155,13 @@ entry:
; NO-GC-NEXT: Name: _start
; NO-GC-NEXT: - Index: 4
; NO-GC-NEXT: Name: use_global
; NO-GC-NEXT: GlobalNames:
; NO-GC-NEXT: - Index: 0
; NO-GC-NEXT: Name: __stack_pointer
; NO-GC-NEXT: - Index: 1
; NO-GC-NEXT: Name: unused_global
; NO-GC-NEXT: - Index: 2
; NO-GC-NEXT: Name: used_global
; NO-GC-NEXT: ...

; RUN: not wasm-ld --gc-sections --relocatable -o %t1.no-gc.wasm %t.o 2>&1 | FileCheck %s -check-prefix=CHECK-ERROR
Expand Down
3 changes: 3 additions & 0 deletions lld/test/wasm/init-fini.ll
Expand Up @@ -127,6 +127,9 @@ entry:
; CHECK-NEXT: Name: .Lcall_dtors.2002
; CHECK-NEXT: - Index: 22
; CHECK-NEXT: Name: .Lregister_call_dtors.2002
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...

; RUN: wasm-ld -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm
Expand Down
6 changes: 6 additions & 0 deletions lld/test/wasm/load-undefined.test
Expand Up @@ -21,6 +21,9 @@
; CHECK-NEXT: Name: ret64
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: ret32
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...

; NO-LOAD: Name: name
Expand All @@ -31,6 +34,9 @@
; NO-LOAD-NEXT: Name: _start
; NO-LOAD-NEXT: - Index: 2
; NO-LOAD-NEXT: Name: ret64
; NO-LOAD-NEXT: GlobalNames:
; NO-LOAD-NEXT: - Index: 0
; NO-LOAD-NEXT: Name: __stack_pointer
; NO-LOAD-NEXT: ...

; Verify that referencing a symbol that is not found doesn't result in a link
Expand Down
3 changes: 3 additions & 0 deletions lld/test/wasm/local-symbols.ll
Expand Up @@ -94,4 +94,7 @@ entry:
; CHECK-NEXT: Name: baz
; CHECK-NEXT: - Index: 1
; CHECK-NEXT: Name: _start
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/locals-duplicate.test
Expand Up @@ -209,6 +209,9 @@
; CHECK-NEXT: Name: get_func2B
; CHECK-NEXT: - Index: 17
; CHECK-NEXT: Name: get_func3B
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...


Expand Down
2 changes: 1 addition & 1 deletion lld/test/wasm/map-file.s
Expand Up @@ -40,7 +40,7 @@ somedata:
# CHECK-NEXT: 400 5a 4 {{.*}}{{/|\\}}map-file.s.tmp1.o:(.data.somedata)
# CHECK-NEXT: 400 5a 4 somedata
# CHECK-NEXT: - 60 12 CUSTOM(.debug_info)
# CHECK-NEXT: - 72 17 CUSTOM(name)
# CHECK-NEXT: - 72 2b CUSTOM(name)

# RUN: not wasm-ld %t1.o -o /dev/null -Map=/ 2>&1 \
# RUN: | FileCheck -check-prefix=FAIL %s
Expand Down
3 changes: 3 additions & 0 deletions lld/test/wasm/signature-mismatch-export.ll
Expand Up @@ -27,4 +27,7 @@ entry:
; CHECK-NEXT: Name: _start
; CHECK-NEXT: - Index: 2
; CHECK-NEXT: Name: ret32
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/signature-mismatch.ll
Expand Up @@ -52,6 +52,9 @@ declare i32 @ret32(i32, i64, i32) local_unnamed_addr
; YAML-NEXT: Name: ret32
; YAML-NEXT: - Index: 3
; YAML-NEXT: Name: call_ret32
; YAML-NEXT: GlobalNames:
; YAML-NEXT: - Index: 0
; YAML-NEXT: Name: __stack_pointer
; YAML-NEXT: ...

; RELOC: Name: linking
Expand Down
3 changes: 3 additions & 0 deletions lld/test/wasm/stack-pointer.ll
Expand Up @@ -69,4 +69,7 @@ entry:
; CHECK-NEXT: FunctionNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: _start
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
8 changes: 4 additions & 4 deletions lld/test/wasm/target-feature-disallowed.yaml
Expand Up @@ -36,7 +36,7 @@ Sections:
...

# SPECIFIED: - Type: CUSTOM
# SPECIFIED-NEXT: Name: target_features
# SPECIFIED: Name: target_features
# SPECIFIED-NEXT: Features:
# SPECIFIED-NEXT: - Prefix: USED
# SPECIFIED-NEXT: Name: bar
Expand All @@ -47,7 +47,7 @@ Sections:
# SPECIFIED-NEXT: ...

# UNSPECIFIED: - Type: CUSTOM
# UNSPECIFIED-NEXT: Name: target_features
# UNSPECIFIED: Name: target_features
# UNSPECIFIED-NEXT: Features:
# UNSPECIFIED-NEXT: - Prefix: USED
# UNSPECIFIED-NEXT: Name: bar
Expand All @@ -58,14 +58,14 @@ Sections:
# UNSPECIFIED-NEXT: ...

# DISALLOWED: - Type: CUSTOM
# DISALLOWED-NEXT: Name: target_features
# DISALLOWED: Name: target_features
# DISALLOWED-NEXT: Features:
# DISALLOWED-NEXT: - Prefix: USED
# DISALLOWED-NEXT: Name: bar
# DISALLOWED-NEXT: ...

# NONE: - Type: CUSTOM
# NONE-NEXT: Name: target_features
# NONE: Name: target_features
# NONE-NEXT: Features:
# NONE-NEXT: - Prefix: USED
# NONE-NEXT: Name: bar
Expand Down
2 changes: 1 addition & 1 deletion lld/test/wasm/target-feature-none.yaml
Expand Up @@ -22,7 +22,7 @@ Sections:
# EMPTY-NOT: target_features

# SPECIFIED: - Type: CUSTOM
# SPECIFIED-NEXT: Name: target_features
# SPECIFIED: Name: target_features
# SPECIFIED-NEXT: Features:
# SPECIFIED-NEXT: - Prefix: USED
# SPECIFIED-NEXT: Name: bar
Expand Down
10 changes: 5 additions & 5 deletions lld/test/wasm/target-feature-required.yaml
Expand Up @@ -41,7 +41,7 @@ Sections:
...

# SPECIFIED: - Type: CUSTOM
# SPECIFIED-NEXT: Name: target_features
# SPECIFIED: Name: target_features
# SPECIFIED-NEXT: Features:
# SPECIFIED-NEXT: - Prefix: USED
# SPECIFIED-NEXT: Name: bar
Expand All @@ -54,7 +54,7 @@ Sections:
# UNSPECIFIED: Target feature 'foo' used by {{.*}}target-feature-required.yaml.tmp1.o is not allowed.{{$}}

# UNSPECIFIED-NOCHECK: - Type: CUSTOM
# UNSPECIFIED-NOCHECK-NEXT: Name: target_features
# UNSPECIFIED-NOCHECK: Name: target_features
# UNSPECIFIED-NOCHECK-NEXT: Features:
# UNSPECIFIED-NOCHECK-NEXT: - Prefix: USED
# UNSPECIFIED-NOCHECK-NEXT: Name: bar
Expand All @@ -65,7 +65,7 @@ Sections:
# UNSPECIFIED-NOCHECK-NEXT: ...

# REQUIRED: - Type: CUSTOM
# REQUIRED-NEXT: Name: target_features
# REQUIRED: Name: target_features
# REQUIRED-NEXT: Features:
# REQUIRED-NEXT: - Prefix: USED
# REQUIRED-NEXT: Name: foo
Expand All @@ -74,7 +74,7 @@ Sections:
# DISALLOWED: Target feature 'foo' used in {{.*}}target-feature-required.yaml.tmp1.o is disallowed by {{.*}}target-feature-required.yaml.tmp.disallowed.o. Use --no-check-features to suppress.{{$}}

# DISALLOWED-NOCHECK: - Type: CUSTOM
# DISALLOWED-NOCHECK-NEXT: Name: target_features
# DISALLOWED-NOCHECK: Name: target_features
# DISALLOWED-NOCHECK-NEXT: Features:
# DISALLOWED-NOCHECK-NEXT: - Prefix: USED
# DISALLOWED-NOCHECK-NEXT: Name: foo
Expand All @@ -83,7 +83,7 @@ Sections:
# NONE: Missing target feature 'foo' in {{.*}}target-feature-required.yaml.tmp.none.o, required by {{.*}}target-feature-required.yaml.tmp1.o. Use --no-check-features to suppress.{{$}}

# NONE-NOCHECK: - Type: CUSTOM
# NONE-NOCHECK-NEXT: Name: target_features
# NONE-NOCHECK: Name: target_features
# NONE-NOCHECK-NEXT: Features:
# NONE-NOCHECK-NEXT: - Prefix: USED
# NONE-NOCHECK-NEXT: Name: foo
Expand Down
12 changes: 6 additions & 6 deletions lld/test/wasm/target-feature-used.yaml
Expand Up @@ -43,7 +43,7 @@ Sections:
...

# SPECIFIED: - Type: CUSTOM
# SPECIFIED-NEXT: Name: target_features
# SPECIFIED: Name: target_features
# SPECIFIED-NEXT: Features:
# SPECIFIED-NEXT: - Prefix: USED
# SPECIFIED-NEXT: Name: bar
Expand All @@ -56,7 +56,7 @@ Sections:
# UNSPECIFIED: Target feature 'foo' used by {{.*}}target-feature-used.yaml.tmp1.o is not allowed.{{$}}

# UNSPECIFIED-NOCHECK: - Type: CUSTOM
# UNSPECIFIED-NOCHECK-NEXT: Name: target_features
# UNSPECIFIED-NOCHECK: Name: target_features
# UNSPECIFIED-NOCHECK-NEXT: Features:
# UNSPECIFIED-NOCHECK-NEXT: - Prefix: USED
# UNSPECIFIED-NOCHECK-NEXT: Name: bar
Expand All @@ -67,14 +67,14 @@ Sections:
# UNSPECIFIED-NOCHECK-NEXT: ...

# USED: - Type: CUSTOM
# USED-NEXT: Name: target_features
# USED: Name: target_features
# USED-NEXT: Features:
# USED-NEXT: - Prefix: USED
# USED-NEXT: Name: foo
# USED-NEXT: ...

# REQUIRED: - Type: CUSTOM
# REQUIRED-NEXT: Name: target_features
# REQUIRED: Name: target_features
# REQUIRED-NEXT: Features:
# REQUIRED-NEXT: - Prefix: USED
# REQUIRED-NEXT: Name: foo
Expand All @@ -83,14 +83,14 @@ Sections:
# DISALLOWED: Target feature 'foo' used in {{.*}}target-feature-used.yaml.tmp1.o is disallowed by {{.*}}target-feature-used.yaml.tmp.disallowed.o. Use --no-check-features to suppress.{{$}}

# DISALLOWED-NOCHECK: - Type: CUSTOM
# DISALLOWED-NOCHECK-NEXT: Name: target_features
# DISALLOWED-NOCHECK: Name: target_features
# DISALLOWED-NOCHECK-NEXT: Features:
# DISALLOWED-NOCHECK-NEXT: - Prefix: USED
# DISALLOWED-NOCHECK-NEXT: Name: foo
# DISALLOWED-NOCHECK-NEXT: ...

# NONE: - Type: CUSTOM
# NONE-NEXT: Name: target_features
# NONE: Name: target_features
# NONE-NEXT: Features:
# NONE-NEXT: - Prefix: USED
# NONE-NEXT: Name: foo
Expand Down
3 changes: 3 additions & 0 deletions lld/test/wasm/undefined-weak-call.ll
Expand Up @@ -96,4 +96,7 @@ define i32 @callWeakFuncs() {
; CHECK-NEXT: Name: 'undefined_weak:weakFunc3'
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: callWeakFuncs
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/weak-alias-overide.ll
Expand Up @@ -129,4 +129,7 @@ entry:
; CHECK-NEXT: Name: call_alias_ptr
; CHECK-NEXT: - Index: 6
; CHECK-NEXT: Name: call_direct_ptr
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...
6 changes: 6 additions & 0 deletions lld/test/wasm/weak-alias.ll
Expand Up @@ -121,6 +121,9 @@ entry:
; CHECK-NEXT: Name: call_alias_ptr
; CHECK-NEXT: - Index: 5
; CHECK-NEXT: Name: call_direct_ptr
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...

; RUN: wasm-ld --relocatable %t.o %t2.o -o %t.reloc.o
Expand Down Expand Up @@ -288,4 +291,7 @@ entry:
; RELOC-NEXT: Name: call_alias_ptr
; RELOC-NEXT: - Index: 5
; RELOC-NEXT: Name: call_direct_ptr
; RELOC-NEXT: GlobalNames:
; RELOC-NEXT: - Index: 0
; RELOC-NEXT: Name: __stack_pointer
; RELOC-NEXT: ...
3 changes: 3 additions & 0 deletions lld/test/wasm/weak-symbols.ll
Expand Up @@ -115,4 +115,7 @@ entry:
; CHECK-NEXT: Name: exportWeak1
; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Name: exportWeak2
; CHECK-NEXT: GlobalNames:
; CHECK-NEXT: - Index: 0
; CHECK-NEXT: Name: __stack_pointer
; CHECK-NEXT: ...

0 comments on commit 1827005

Please sign in to comment.