From: Sam Clegg Date: Sat, 5 May 2018 01:23:07 +0000 (+0000) Subject: [WebAssembly] Check function signatures by default X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=752494bfe3f04c8d329dfa8ac671b26e0115069c;p=platform%2Fupstream%2Fllvm.git [WebAssembly] Check function signatures by default But only produce a warning (for now) unless --fatal-warnings is passed. Differential Revision: https://reviews.llvm.org/D46484 llvm-svn: 331574 --- diff --git a/lld/test/wasm/alias.ll b/lld/test/wasm/alias.ll index c12ef2d..af2f87b 100644 --- a/lld/test/wasm/alias.ll +++ b/lld/test/wasm/alias.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj -o %t.o %s -; RUN: wasm-ld --check-signatures %t.o -o %t.wasm +; RUN: wasm-ld %t.o -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/archive.ll b/lld/test/wasm/archive.ll index 78daff0..8a7ddf4 100644 --- a/lld/test/wasm/archive.ll +++ b/lld/test/wasm/archive.ll @@ -4,12 +4,12 @@ ; RUN: llc -filetype=obj %S/Inputs/hello.ll -o %t.a3.o ; RUN: llvm-ar rcs %t.a %t.a1.o %t.a2.o %t.a3.o ; RUN: rm -f %t.imports -; RUN: not wasm-ld --check-signatures %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED %s +; RUN: not wasm-ld %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED %s ; CHECK-UNDEFINED: undefined symbol: missing_func ; RUN: echo 'missing_func' > %t.imports -; RUN: wasm-ld --check-signatures -r %t.a %t.o -o %t.wasm +; RUN: wasm-ld -r %t.a %t.o -o %t.wasm ; RUN: llvm-nm -a %t.wasm | FileCheck %s @@ -40,4 +40,4 @@ entry: ; CHECK-NOT: hello ; Specifying the same archive twice is allowed. -; RUN: wasm-ld --check-signatures %t.a %t.a %t.o -o %t.wasm +; RUN: wasm-ld %t.a %t.a %t.o -o %t.wasm diff --git a/lld/test/wasm/call-indirect.ll b/lld/test/wasm/call-indirect.ll index 9a6d64f..39f0560 100644 --- a/lld/test/wasm/call-indirect.ll +++ b/lld/test/wasm/call-indirect.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %p/Inputs/call-indirect.ll -o %t2.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -o %t.wasm %t2.o %t.o +; RUN: wasm-ld -o %t.wasm %t2.o %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s ; bitcode generated from the following C code: diff --git a/lld/test/wasm/comdats.ll b/lld/test/wasm/comdats.ll index d737132..64ad0f2 100644 --- a/lld/test/wasm/comdats.ll +++ b/lld/test/wasm/comdats.ll @@ -1,7 +1,7 @@ ; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %p/Inputs/comdat1.ll -o %t1.o ; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %p/Inputs/comdat2.ll -o %t2.o ; RUN: llc -filetype=obj -mtriple=wasm32-unknown-uknown-wasm %s -o %t.o -; RUN: wasm-ld --check-signatures -o %t.wasm %t.o %t1.o %t2.o +; RUN: wasm-ld -o %t.wasm %t.o %t1.o %t2.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/conflict.test b/lld/test/wasm/conflict.test index c869802..9adc92e 100644 --- a/lld/test/wasm/conflict.test +++ b/lld/test/wasm/conflict.test @@ -1,5 +1,5 @@ # RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o -# RUN: not wasm-ld --check-signatures -o %t.wasm %t.ret32.o %t.ret32.o 2>&1 | FileCheck %s +# RUN: not wasm-ld -o %t.wasm %t.ret32.o %t.ret32.o 2>&1 | FileCheck %s # CHECK: duplicate symbol: ret32 # CHECK-NEXT: >>> defined in {{.*}}conflict.test.tmp.ret32.o diff --git a/lld/test/wasm/custom-sections.ll b/lld/test/wasm/custom-sections.ll index 201653c..b9a9f35 100644 --- a/lld/test/wasm/custom-sections.ll +++ b/lld/test/wasm/custom-sections.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %s -o %t1.o ; RUN: llc -filetype=obj %S/Inputs/custom.ll -o %t2.o -; RUN: wasm-ld --check-signatures --relocatable -o %t.wasm %t1.o %t2.o +; RUN: wasm-ld --relocatable -o %t.wasm %t1.o %t2.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/cxx-mangling.ll b/lld/test/wasm/cxx-mangling.ll index 8b73ca9..9fa51fc 100644 --- a/lld/test/wasm/cxx-mangling.ll +++ b/lld/test/wasm/cxx-mangling.ll @@ -1,7 +1,7 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --demangle --check-signatures -o %t_demangle.wasm %t.o +; RUN: wasm-ld --demangle -o %t_demangle.wasm %t.o ; RUN: obj2yaml %t_demangle.wasm | FileCheck %s -; RUN: wasm-ld --no-demangle --check-signatures -o %t_nodemangle.wasm %t.o +; RUN: wasm-ld --no-demangle -o %t_nodemangle.wasm %t.o ; RUN: obj2yaml %t_nodemangle.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/data-layout.ll b/lld/test/wasm/data-layout.ll index df7177c..a42b72a 100644 --- a/lld/test/wasm/data-layout.ll +++ b/lld/test/wasm/data-layout.ll @@ -13,7 +13,7 @@ target triple = "wasm32-unknown-unknown-wasm" @local_struct = hidden global %struct.s zeroinitializer, align 4 @local_struct_internal_ptr = hidden local_unnamed_addr global i32* getelementptr inbounds (%struct.s, %struct.s* @local_struct, i32 0, i32 1), align 4 -; RUN: wasm-ld -no-gc-sections --check-signatures --allow-undefined -o %t.wasm %t.o %t.hello.o +; RUN: wasm-ld -no-gc-sections --allow-undefined -o %t.wasm %t.o %t.hello.o ; RUN: obj2yaml %t.wasm | FileCheck %s ; CHECK: - Type: MEMORY @@ -57,7 +57,7 @@ target triple = "wasm32-unknown-unknown-wasm" ; CHECK-NEXT: - Type: CUSTOM -; RUN: wasm-ld -no-gc-sections --check-signatures --allow-undefined \ +; RUN: wasm-ld -no-gc-sections --allow-undefined \ ; RUN: --initial-memory=131072 --max-memory=131072 -o %t_max.wasm %t.o \ ; RUN: %t.hello.o ; RUN: obj2yaml %t_max.wasm | FileCheck %s -check-prefix=CHECK-MAX @@ -69,7 +69,7 @@ target triple = "wasm32-unknown-unknown-wasm" ; CHECK-MAX-NEXT: Maximum: 0x00000002 -; RUN: wasm-ld --check-signatures --relocatable -o %t_reloc.wasm %t.o %t.hello.o +; RUN: wasm-ld --relocatable -o %t_reloc.wasm %t.o %t.hello.o ; RUN: obj2yaml %t_reloc.wasm | FileCheck %s -check-prefix=RELOC ; RELOC: - Type: DATA diff --git a/lld/test/wasm/demangle.ll b/lld/test/wasm/demangle.ll index 07f9927..9a9741b 100644 --- a/lld/test/wasm/demangle.ll +++ b/lld/test/wasm/demangle.ll @@ -1,10 +1,10 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: not wasm-ld --check-signatures --undefined _Z3fooi \ +; RUN: not wasm-ld --undefined _Z3fooi \ ; RUN: -o %t.wasm %t.o 2>&1 | FileCheck %s ; CHECK: error: undefined symbol: foo(int) -; RUN: not wasm-ld --check-signatures --no-demangle --undefined _Z3fooi \ +; RUN: not wasm-ld --no-demangle --undefined _Z3fooi \ ; RUN: -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-NODEMANGLE %s ; CHECK-NODEMANGLE: error: undefined symbol: _Z3fooi diff --git a/lld/test/wasm/entry.ll b/lld/test/wasm/entry.ll index 083bf97..ea45e13 100644 --- a/lld/test/wasm/entry.ll +++ b/lld/test/wasm/entry.ll @@ -7,9 +7,9 @@ entry: ret void } -; RUN: wasm-ld --check-signatures -e entry -o %t1.wasm %t.o +; RUN: wasm-ld -e entry -o %t1.wasm %t.o ; RUN: obj2yaml %t1.wasm | FileCheck %s -; RUN: wasm-ld --check-signatures --entry=entry -o %t2.wasm %t.o +; RUN: wasm-ld --entry=entry -o %t2.wasm %t.o ; RUN: obj2yaml %t2.wasm | FileCheck %s ; CHECK: - Type: EXPORT @@ -30,7 +30,7 @@ entry: ; The __wasm_call_ctors is somewhat special. Make sure we can use it ; as the entry point if we choose -; RUN: wasm-ld --check-signatures --entry=__wasm_call_ctors -o %t3.wasm %t.o +; RUN: wasm-ld --entry=__wasm_call_ctors -o %t3.wasm %t.o ; RUN: obj2yaml %t3.wasm | FileCheck %s -check-prefix=CHECK-CTOR ; CHECK-CTOR: - Type: EXPORT diff --git a/lld/test/wasm/export-table.test b/lld/test/wasm/export-table.test index 0923af6..58775b9 100644 --- a/lld/test/wasm/export-table.test +++ b/lld/test/wasm/export-table.test @@ -1,5 +1,5 @@ # RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.start.o -# RUN: wasm-ld --check-signatures --export-table -o %t.wasm %t.start.o +# RUN: wasm-ld --export-table -o %t.wasm %t.start.o # RUN: obj2yaml %t.wasm | FileCheck %s # Verify the --export-table flag creates a table export diff --git a/lld/test/wasm/export.ll b/lld/test/wasm/export.ll index f2a4fff..9e3606d 100644 --- a/lld/test/wasm/export.ll +++ b/lld/test/wasm/export.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: not wasm-ld --check-signatures --export=missing -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s -; RUN: wasm-ld --check-signatures --export=hidden_function -o %t.wasm %t.o +; RUN: not wasm-ld --export=missing -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s +; RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/fatal-warnings.ll b/lld/test/wasm/fatal-warnings.ll new file mode 100644 index 0000000..f3f1d3b --- /dev/null +++ b/lld/test/wasm/fatal-warnings.ll @@ -0,0 +1,14 @@ +; RUN: llc -filetype=obj %s -o %t.main.o +; RUN: lld -flavor wasm -o %t.wasm %t.main.o 2>&1 | FileCheck %s -check-prefix=CHECK-WARN +; RUN: not lld -flavor wasm --fatal-warnings -o %t.wasm %t.main.o 2>&1 | FileCheck %s -check-prefix=CHECK-FATAL + +; CHECK-WARN: warning: Function type mismatch: _start +; CHECK-FATAL: error: Function type mismatch: _start + +target triple = "wasm32-unknown-unknown-wasm" + +define hidden i32 @_start(i32 %arg) local_unnamed_addr { +entry: + ret i32 %arg +} + diff --git a/lld/test/wasm/function-imports-first.ll b/lld/test/wasm/function-imports-first.ll index be71d7c..ec8bd4e 100644 --- a/lld/test/wasm/function-imports-first.ll +++ b/lld/test/wasm/function-imports-first.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -o %t.wasm %t.o %t.ret32.o +; RUN: wasm-ld -o %t.wasm %t.o %t.ret32.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/function-imports.ll b/lld/test/wasm/function-imports.ll index 742cec2..ec509e6 100644 --- a/lld/test/wasm/function-imports.ll +++ b/lld/test/wasm/function-imports.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -o %t.wasm %t.ret32.o %t.o +; RUN: wasm-ld -o %t.wasm %t.ret32.o %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/function-index.test b/lld/test/wasm/function-index.test index 8784271..82f5d0c 100644 --- a/lld/test/wasm/function-index.test +++ b/lld/test/wasm/function-index.test @@ -1,6 +1,6 @@ # RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o # RUN: llc -filetype=obj %p/Inputs/ret64.ll -o %t.ret64.o -# RUN: wasm-ld --check-signatures -r -o %t.wasm %t.ret32.o %t.ret64.o +# RUN: wasm-ld -r -o %t.wasm %t.ret32.o %t.ret64.o # RUN: obj2yaml %t.wasm | FileCheck %s CHECK: Sections: diff --git a/lld/test/wasm/import-memory.test b/lld/test/wasm/import-memory.test index 955d2df..49bf06b 100644 --- a/lld/test/wasm/import-memory.test +++ b/lld/test/wasm/import-memory.test @@ -1,5 +1,5 @@ # RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.start.o -# RUN: wasm-ld --check-signatures --import-memory -o %t.wasm %t.start.o +# RUN: wasm-ld --import-memory -o %t.wasm %t.start.o # RUN: obj2yaml %t.wasm | FileCheck %s # Verify the --import-memory flag creates a memory import @@ -15,7 +15,7 @@ -# RUN: wasm-ld --check-signatures --import-memory --initial-memory=262144 \ +# RUN: wasm-ld --import-memory --initial-memory=262144 \ # RUN: --max-memory=327680 -o %t.max.wasm %t.start.o # RUN: obj2yaml %t.max.wasm | FileCheck -check-prefix=CHECK-MAX %s diff --git a/lld/test/wasm/import-table.test b/lld/test/wasm/import-table.test index 98e0749..eb76709 100644 --- a/lld/test/wasm/import-table.test +++ b/lld/test/wasm/import-table.test @@ -1,5 +1,5 @@ # RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.start.o -# RUN: wasm-ld --check-signatures --import-table -o %t.wasm %t.start.o +# RUN: wasm-ld --import-table -o %t.wasm %t.start.o # RUN: obj2yaml %t.wasm | FileCheck %s # Verify the --import-table flag creates a table import diff --git a/lld/test/wasm/init-fini.ll b/lld/test/wasm/init-fini.ll index c93314c..966e679 100644 --- a/lld/test/wasm/init-fini.ll +++ b/lld/test/wasm/init-fini.ll @@ -49,7 +49,7 @@ entry: { i32, void ()*, i8* } { i32 4000, void ()* @externDtor, i8* null } ] -; RUN: wasm-ld --check-signatures --allow-undefined %t.o %t.global-ctor-dtor.o -o %t.wasm +; RUN: wasm-ld --allow-undefined %t.o %t.global-ctor-dtor.o -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s ; CHECK: - Type: IMPORT @@ -128,7 +128,7 @@ entry: ; CHECK-NEXT: ... -; RUN: wasm-ld --check-signatures -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm +; RUN: wasm-ld -r %t.o %t.global-ctor-dtor.o -o %t.reloc.wasm ; RUN: obj2yaml %t.reloc.wasm | FileCheck -check-prefix=RELOC %s ; RELOC: SymbolTable: diff --git a/lld/test/wasm/invalid-stack-size.test b/lld/test/wasm/invalid-stack-size.test index da47c68..90c9fda 100644 --- a/lld/test/wasm/invalid-stack-size.test +++ b/lld/test/wasm/invalid-stack-size.test @@ -1,4 +1,4 @@ ; RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.o -; RUN: not wasm-ld --check-signatures -o %t.wasm -z stack-size=1 %t.o 2>&1 | FileCheck %s +; RUN: not wasm-ld -o %t.wasm -z stack-size=1 %t.o 2>&1 | FileCheck %s ; CHECK: error: stack size must be 16-byte aligned diff --git a/lld/test/wasm/load-undefined.test b/lld/test/wasm/load-undefined.test index 7e78bf0..afa5b00 100644 --- a/lld/test/wasm/load-undefined.test +++ b/lld/test/wasm/load-undefined.test @@ -5,7 +5,7 @@ ; RUN: llc -filetype=obj %S/Inputs/ret32.ll -o %t2.o ; RUN: llc -filetype=obj %S/Inputs/start.ll -o %t.start.o ; RUN: llvm-ar rcs %t2.a %t2.o -; RUN: wasm-ld --check-signatures %t.start.o %t2.a %t.o -o %t.wasm -u ret32 --undefined ret64 +; RUN: wasm-ld %t.start.o %t2.a %t.o -o %t.wasm -u ret32 --undefined ret64 ; RUN: obj2yaml %t.wasm | FileCheck %s ; CHECK: - Type: EXPORT @@ -32,8 +32,8 @@ ; Verify that referencing a symbol that doesn't exist won't work -; RUN: not wasm-ld --check-signatures %t.start.o -o %t.wasm -u symboldoesnotexist 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED1 %s +; RUN: not wasm-ld %t.start.o -o %t.wasm -u symboldoesnotexist 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED1 %s ; CHECK-UNDEFINED1: error: undefined symbol: symboldoesnotexist -; RUN: not wasm-ld --check-signatures %t.start.o -o %t.wasm --undefined symboldoesnotexist --allow-undefined 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED2 %s +; RUN: not wasm-ld %t.start.o -o %t.wasm --undefined symboldoesnotexist --allow-undefined 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED2 %s ; CHECK-UNDEFINED2: function forced with --undefined not found: symboldoesnotexist diff --git a/lld/test/wasm/local-symbols.ll b/lld/test/wasm/local-symbols.ll index fcb3c42..d7778cf 100644 --- a/lld/test/wasm/local-symbols.ll +++ b/lld/test/wasm/local-symbols.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -o %t.wasm %t.o +; RUN: wasm-ld -o %t.wasm %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/locals-duplicate.test b/lld/test/wasm/locals-duplicate.test index 00a8dc1..3c67cdd 100644 --- a/lld/test/wasm/locals-duplicate.test +++ b/lld/test/wasm/locals-duplicate.test @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %p/Inputs/locals-duplicate1.ll -o %t1.o ; RUN: llc -filetype=obj %p/Inputs/locals-duplicate2.ll -o %t2.o -; RUN: wasm-ld --check-signatures --no-entry -o %t.wasm %t1.o %t2.o +; RUN: wasm-ld --no-entry -o %t.wasm %t1.o %t2.o ; RUN: obj2yaml %t.wasm | FileCheck %s ; CHECK: --- !WASM @@ -236,7 +236,7 @@ ; CHECK-NEXT: ... -; RUN: wasm-ld --check-signatures -r --no-entry -o %t.reloc.wasm %t1.o %t2.o +; RUN: wasm-ld -r --no-entry -o %t.reloc.wasm %t1.o %t2.o ; RUN: obj2yaml %t.reloc.wasm | FileCheck -check-prefix=RELOC %s ; RELOC: --- !WASM diff --git a/lld/test/wasm/many-functions.ll b/lld/test/wasm/many-functions.ll index 4116c47..43e7cfa 100644 --- a/lld/test/wasm/many-functions.ll +++ b/lld/test/wasm/many-functions.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %p/Inputs/many-funcs.ll -o %t.many.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -r -o %t.wasm %t.many.o %t.o +; RUN: wasm-ld -r -o %t.wasm %t.many.o %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s ; Test that relocations within the CODE section correctly handle diff --git a/lld/test/wasm/reloc-addend.ll b/lld/test/wasm/reloc-addend.ll index 630bd86..ceca9a6 100644 --- a/lld/test/wasm/reloc-addend.ll +++ b/lld/test/wasm/reloc-addend.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -r -o %t.wasm %t.o +; RUN: wasm-ld -r -o %t.wasm %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/relocatable.ll b/lld/test/wasm/relocatable.ll index bcbeca2..b732306 100644 --- a/lld/test/wasm/relocatable.ll +++ b/lld/test/wasm/relocatable.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %p/Inputs/hello.ll -o %t.hello.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -r -o %t.wasm %t.hello.o %t.o +; RUN: wasm-ld -r -o %t.wasm %t.hello.o %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/signature-mismatch-weak.ll b/lld/test/wasm/signature-mismatch-weak.ll index fcf9646..a4148a2b 100644 --- a/lld/test/wasm/signature-mismatch-weak.ll +++ b/lld/test/wasm/signature-mismatch-weak.ll @@ -1,8 +1,7 @@ ; RUN: llc -filetype=obj %p/Inputs/weak-symbol1.ll -o %t.weak.o ; RUN: llc -filetype=obj %p/Inputs/strong-symbol.ll -o %t.strong.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: not wasm-ld --check-signatures -o %t.wasm %t.o %t.strong.o %t.weak.o 2>&1 | FileCheck %s -; RUN: wasm-ld -o %t.wasm %t.o %t.strong.o %t.weak.o +; RUN: wasm-ld -o %t.wasm %t.o %t.strong.o %t.weak.o 2>&1 | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" @@ -14,6 +13,6 @@ entry: ret void } -; CHECK: error: Function type mismatch: weakFn +; CHECK: warning: Function type mismatch: weakFn ; CHECK-NEXT: >>> defined as () -> I32 in {{.*}}signature-mismatch-weak.ll.tmp.o ; CHECK-NEXT: >>> defined as () -> I64 in {{.*}}signature-mismatch-weak.ll.tmp.strong.o diff --git a/lld/test/wasm/signature-mismatch.ll b/lld/test/wasm/signature-mismatch.ll index 602239d..e7874c3 100644 --- a/lld/test/wasm/signature-mismatch.ll +++ b/lld/test/wasm/signature-mismatch.ll @@ -1,10 +1,10 @@ ; RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o ; RUN: llc -filetype=obj %s -o %t.main.o -; RUN: not wasm-ld --check-signatures -o %t.wasm %t.main.o %t.ret32.o 2>&1 | FileCheck %s +; RUN: not wasm-ld --fatal-warnings -o %t.wasm %t.main.o %t.ret32.o 2>&1 | FileCheck %s ; Run the test again by with the object files in the other order to verify ; the check works when the undefined symbol is resolved by an existing defined ; one. -; RUN: not wasm-ld --check-signatures -o %t.wasm %t.ret32.o %t.main.o 2>&1 | FileCheck %s -check-prefix=REVERSE +; RUN: not wasm-ld --fatal-warnings -o %t.wasm %t.ret32.o %t.main.o 2>&1 | FileCheck %s -check-prefix=REVERSE target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/stack-first.test b/lld/test/wasm/stack-first.test index c0e186c..71d1e9d 100644 --- a/lld/test/wasm/stack-first.test +++ b/lld/test/wasm/stack-first.test @@ -5,7 +5,7 @@ RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.o -RUN: wasm-ld --check-signatures -z stack-size=512 --stack-first --allow-undefined -o %t.wasm %t.o +RUN: wasm-ld -z stack-size=512 --stack-first --allow-undefined -o %t.wasm %t.o RUN: obj2yaml %t.wasm | FileCheck %s CHECK: - Type: GLOBAL diff --git a/lld/test/wasm/stack-pointer.ll b/lld/test/wasm/stack-pointer.ll index 808f626..ed366d6 100644 --- a/lld/test/wasm/stack-pointer.ll +++ b/lld/test/wasm/stack-pointer.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures --relocatable -o %t.wasm %t.o +; RUN: wasm-ld --relocatable -o %t.wasm %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/strip-debug.test b/lld/test/wasm/strip-debug.test index 5a74ac8..be5ba70 100644 --- a/lld/test/wasm/strip-debug.test +++ b/lld/test/wasm/strip-debug.test @@ -1,5 +1,5 @@ RUN: llc -filetype=obj %p/Inputs/start.ll -o %t.start.o -RUN: wasm-ld --check-signatures --strip-debug -o %t.wasm %t.start.o +RUN: wasm-ld --strip-debug -o %t.wasm %t.start.o RUN: obj2yaml %t.wasm | FileCheck %s # Check that there is no name section diff --git a/lld/test/wasm/symbol-type-mismatch.ll b/lld/test/wasm/symbol-type-mismatch.ll index 16e0f4d..641782d 100644 --- a/lld/test/wasm/symbol-type-mismatch.ll +++ b/lld/test/wasm/symbol-type-mismatch.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj %s -o %t.o ; RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o -; RUN: not wasm-ld --check-signatures -o %t.wasm %t.o %t.ret32.o 2>&1 | FileCheck %s +; RUN: not wasm-ld -o %t.wasm %t.o %t.ret32.o 2>&1 | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/undefined-entry.test b/lld/test/wasm/undefined-entry.test index 7906ec9..3adb785 100644 --- a/lld/test/wasm/undefined-entry.test +++ b/lld/test/wasm/undefined-entry.test @@ -1,10 +1,10 @@ RUN: llc -filetype=obj %p/Inputs/ret32.ll -o %t.ret32.o -RUN: not wasm-ld --check-signatures -o %t.wasm %t.ret32.o 2>&1 | FileCheck %s +RUN: not wasm-ld -o %t.wasm %t.ret32.o 2>&1 | FileCheck %s CHECK: error: undefined symbol: _start -RUN: not wasm-ld --check-signatures -entry=foo -o %t.wasm %t.ret32.o 2>&1 | FileCheck %s -check-prefix=CHECK-CUSTOM +RUN: not wasm-ld -entry=foo -o %t.wasm %t.ret32.o 2>&1 | FileCheck %s -check-prefix=CHECK-CUSTOM CHECK-CUSTOM: error: undefined symbol: foo -RUN: wasm-ld --check-signatures -entry=foo --allow-undefined -o %t.wasm %t.ret32.o +RUN: wasm-ld -entry=foo --allow-undefined -o %t.wasm %t.ret32.o diff --git a/lld/test/wasm/undefined-weak-call.ll b/lld/test/wasm/undefined-weak-call.ll index fed3ecc..96073e6 100644 --- a/lld/test/wasm/undefined-weak-call.ll +++ b/lld/test/wasm/undefined-weak-call.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures --no-entry --print-gc-sections %t.o \ +; RUN: wasm-ld --no-entry --print-gc-sections %t.o \ ; RUN: -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-GC %s ; RUN: obj2yaml %t.wasm | FileCheck %s diff --git a/lld/test/wasm/undefined.ll b/lld/test/wasm/undefined.ll index a74dd6d..bdbb11c 100644 --- a/lld/test/wasm/undefined.ll +++ b/lld/test/wasm/undefined.ll @@ -1,17 +1,17 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures --allow-undefined -o %t.wasm %t.o +; RUN: wasm-ld --allow-undefined -o %t.wasm %t.o ; Fails due to undefined 'foo' and also 'baz' -; RUN: not wasm-ld --check-signatures --undefined=baz -o %t.wasm %t.o 2>&1 | FileCheck %s +; RUN: not wasm-ld --undefined=baz -o %t.wasm %t.o 2>&1 | FileCheck %s ; CHECK: error: {{.*}}.o: undefined symbol: foo ; CHECK: error: undefined symbol: baz ; Succeeds if we pass a file containing 'foo' as --allow-undefined-file. ; RUN: echo 'foo' > %t.txt -; RUN: wasm-ld --check-signatures --allow-undefined-file=%t.txt -o %t.wasm %t.o +; RUN: wasm-ld --allow-undefined-file=%t.txt -o %t.wasm %t.o ; Succeeds even if a missing symbol is added via --export -; RUN: wasm-ld --check-signatures --allow-undefined --export=xxx -o %t.wasm %t.o +; RUN: wasm-ld --allow-undefined --export=xxx -o %t.wasm %t.o target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/version.ll b/lld/test/wasm/version.ll index 3b20b39..ffa2654 100644 --- a/lld/test/wasm/version.ll +++ b/lld/test/wasm/version.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld --check-signatures -o %t.wasm %t.o +; RUN: wasm-ld -o %t.wasm %t.o ; RUN: llvm-readobj -file-headers %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/visibility-hidden.ll b/lld/test/wasm/visibility-hidden.ll index 530649b..30f87b3 100644 --- a/lld/test/wasm/visibility-hidden.ll +++ b/lld/test/wasm/visibility-hidden.ll @@ -1,7 +1,7 @@ ; RUN: llc -filetype=obj -o %t.o %s ; RUN: llc -filetype=obj %S/Inputs/hidden.ll -o %t2.o ; RUN: llvm-ar rcs %t2.a %t2.o -; RUN: wasm-ld --check-signatures %t.o %t2.a -o %t.wasm +; RUN: wasm-ld %t.o %t2.a -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s ; Test that hidden symbols are not exported, whether pulled in from an archive diff --git a/lld/test/wasm/weak-alias-overide.ll b/lld/test/wasm/weak-alias-overide.ll index 2252298..a4021fb 100644 --- a/lld/test/wasm/weak-alias-overide.ll +++ b/lld/test/wasm/weak-alias-overide.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj -o %t.o %s ; RUN: llc -filetype=obj %S/Inputs/weak-alias.ll -o %t2.o -; RUN: wasm-ld --check-signatures %t.o %t2.o -o %t.wasm +; RUN: wasm-ld %t.o %t2.o -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s ; Test that the strongly defined alias_fn from this file is used both here diff --git a/lld/test/wasm/weak-alias.ll b/lld/test/wasm/weak-alias.ll index d59f0e1..0cc5a07 100644 --- a/lld/test/wasm/weak-alias.ll +++ b/lld/test/wasm/weak-alias.ll @@ -1,6 +1,6 @@ ; RUN: llc -filetype=obj -o %t.o %s ; RUN: llc -filetype=obj %S/Inputs/weak-alias.ll -o %t2.o -; RUN: wasm-ld --check-signatures %t.o %t2.o -o %t.wasm +; RUN: wasm-ld %t.o %t2.o -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s ; Test that weak aliases (alias_fn is a weak alias of direct_fn) are linked correctly @@ -144,7 +144,7 @@ entry: ; CHECK-NEXT: Name: call_direct_ptr ; CHECK-NEXT: ... -; RUN: wasm-ld --check-signatures --relocatable %t.o %t2.o -o %t.reloc.o +; RUN: wasm-ld --relocatable %t.o %t2.o -o %t.reloc.o ; RUN: obj2yaml %t.reloc.o | FileCheck %s -check-prefix=RELOC ; RELOC: --- !WASM diff --git a/lld/test/wasm/weak-symbols.ll b/lld/test/wasm/weak-symbols.ll index 7ecb900..c1a5a0c 100644 --- a/lld/test/wasm/weak-symbols.ll +++ b/lld/test/wasm/weak-symbols.ll @@ -1,7 +1,7 @@ ; RUN: llc -filetype=obj %p/Inputs/weak-symbol1.ll -o %t1.o ; RUN: llc -filetype=obj %p/Inputs/weak-symbol2.ll -o %t2.o ; RUN: llc -filetype=obj %s -o %t.o -; RUN: wasm-ld -no-gc-sections --check-signatures -o %t.wasm %t.o %t1.o %t2.o +; RUN: wasm-ld -no-gc-sections -o %t.wasm %t.o %t1.o %t2.o ; RUN: obj2yaml %t.wasm | FileCheck %s target triple = "wasm32-unknown-unknown-wasm" diff --git a/lld/test/wasm/weak-undefined.ll b/lld/test/wasm/weak-undefined.ll index ce68e54..98c6d26 100644 --- a/lld/test/wasm/weak-undefined.ll +++ b/lld/test/wasm/weak-undefined.ll @@ -1,5 +1,5 @@ ; RUN: llc -filetype=obj -o %t.o %s -; RUN: wasm-ld --check-signatures -strip-debug %t.o -o %t.wasm +; RUN: wasm-ld -strip-debug %t.o -o %t.wasm ; RUN: obj2yaml %t.wasm | FileCheck %s ; Test that undefined weak externals (global_var) and (foo) don't cause diff --git a/lld/wasm/Config.h b/lld/wasm/Config.h index 115acea..3ade61c 100644 --- a/lld/wasm/Config.h +++ b/lld/wasm/Config.h @@ -19,7 +19,6 @@ namespace wasm { struct Configuration { bool AllowUndefined; - bool CheckSignatures; bool Demangle; bool ExportTable; bool GcSections; diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp index 60bd71c..deaa95c 100644 --- a/lld/wasm/Driver.cpp +++ b/lld/wasm/Driver.cpp @@ -282,11 +282,11 @@ void LinkerDriver::link(ArrayRef ArgsArr) { errorHandler().ErrorLimit = args::getInteger(Args, OPT_error_limit, 20); Config->AllowUndefined = Args.hasArg(OPT_allow_undefined); - Config->CheckSignatures = - Args.hasFlag(OPT_check_signatures, OPT_no_check_signatures, false); Config->Demangle = Args.hasFlag(OPT_demangle, OPT_no_demangle, true); Config->Entry = getEntry(Args, Args.hasArg(OPT_relocatable) ? "" : "_start"); Config->ExportTable = Args.hasArg(OPT_export_table); + errorHandler().FatalWarnings = + Args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false); Config->ImportMemory = Args.hasArg(OPT_import_memory); Config->ImportTable = Args.hasArg(OPT_import_table); Config->OutputFile = Args.getLastArgValue(OPT_o); diff --git a/lld/wasm/Options.td b/lld/wasm/Options.td index d1810bf..1a39648 100644 --- a/lld/wasm/Options.td +++ b/lld/wasm/Options.td @@ -96,10 +96,6 @@ def allow_undefined_file: J<"allow-undefined-file=">, def allow_undefined_file_s: Separate<["-"], "allow-undefined-file">, Alias; -defm check_signatures: B<"check-signatures", - "Check function signatures", - "Don't check function signatures">; - defm export: Eq<"export">, HelpText<"Force a symbol to be exported">; diff --git a/lld/wasm/SymbolTable.cpp b/lld/wasm/SymbolTable.cpp index 153b507..54e04ab 100644 --- a/lld/wasm/SymbolTable.cpp +++ b/lld/wasm/SymbolTable.cpp @@ -83,16 +83,13 @@ static void checkFunctionType(const Symbol *Existing, const InputFile *File, return; } - if (!Config->CheckSignatures) - return; - const WasmSignature *OldSig = cast(Existing)->getFunctionType(); if (OldSig && *NewSig != *OldSig) { - error("Function type mismatch: " + Existing->getName() + - "\n>>> defined as " + toString(*OldSig) + " in " + - toString(Existing->getFile()) + "\n>>> defined as " + - toString(*NewSig) + " in " + toString(File)); + warn("Function type mismatch: " + Existing->getName() + + "\n>>> defined as " + toString(*OldSig) + " in " + + toString(Existing->getFile()) + "\n>>> defined as " + + toString(*NewSig) + " in " + toString(File)); } }