[lld] r368078 - [WebAssembly] Fix null pointer in createInitTLSFunction
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 7 01:51:04 PDT 2019
Merged to release_90 in r368137.
On Tue, Aug 6, 2019 at 10:08 PM Guanzhong Chen via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: quantum
> Date: Tue Aug 6 13:09:04 2019
> New Revision: 368078
>
> URL: http://llvm.org/viewvc/llvm-project?rev=368078&view=rev
> Log:
> [WebAssembly] Fix null pointer in createInitTLSFunction
>
> Summary:
> `createSyntheticSymbols`, which creates `WasmSym::InitTLS`, is only called
> when `!config->relocatable`, but this condition is not checked when calling
> `createInitTLSFunction`.
>
> This diff checks `!config->relocatable` before calling `createInitTLSFunction`.
>
> Fixes https://github.com/emscripten-core/emscripten/issues/9155.
>
> Reviewers: tlively, aheejin, kripken, sbc100
>
> Subscribers: dschuff, jgravelle-google, sunfish, llvm-commits
>
> Tags: #llvm
>
> Differential Revision: https://reviews.llvm.org/D65785
>
> Modified:
> lld/trunk/test/wasm/relocatable.ll
> lld/trunk/wasm/Writer.cpp
>
> Modified: lld/trunk/test/wasm/relocatable.ll
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/relocatable.ll?rev=368078&r1=368077&r2=368078&view=diff
> ==============================================================================
> --- lld/trunk/test/wasm/relocatable.ll (original)
> +++ lld/trunk/test/wasm/relocatable.ll Tue Aug 6 13:09:04 2019
> @@ -1,7 +1,12 @@
> ; RUN: llc -filetype=obj %p/Inputs/hello.ll -o %t.hello.o
> ; RUN: llc -filetype=obj %s -o %t.o
> ; RUN: wasm-ld -r -o %t.wasm %t.hello.o %t.o
> -; RUN: obj2yaml %t.wasm | FileCheck %s
> +; RUN: obj2yaml %t.wasm | FileCheck %s --check-prefixes CHECK,NORMAL
> +
> +; RUN: llc -filetype=obj %p/Inputs/hello.ll -o %t.hello.bm.o -mattr=+bulk-memory
> +; RUN: llc -filetype=obj %s -o %t.bm.o -mattr=+bulk-memory
> +; RUN: wasm-ld -r -o %t.mt.wasm %t.hello.bm.o %t.bm.o --shared-memory --max-memory=131072
> +; RUN: obj2yaml %t.mt.wasm | FileCheck %s --check-prefixes CHECK,SHARED
>
> target triple = "wasm32-unknown-unknown"
>
> @@ -70,13 +75,18 @@ entry:
> ; CHECK-NEXT: Maximum: 0x00000004
> ; CHECK-NEXT: - Type: MEMORY
> ; CHECK-NEXT: Memories:
> -; CHECK-NEXT: - Initial: 0x00000001
> +; NORMAL-NEXT: - Initial: 0x00000001
> +; SHARED-NEXT: - Flags: [ HAS_MAX, IS_SHARED ]
> +; SHARED-NEXT: Initial: 0x00000001
> +; SHARED-NEXT: Maximum: 0x00000002
> ; CHECK-NEXT: - Type: ELEM
> ; CHECK-NEXT: Segments:
> ; CHECK-NEXT: - Offset:
> ; CHECK-NEXT: Opcode: I32_CONST
> ; CHECK-NEXT: Value: 1
> ; CHECK-NEXT: Functions: [ 4, 1, 2 ]
> +; SHARED-NEXT: - Type: DATACOUNT
> +; SHARED-NEXT: Count: 6
> ; CHECK-NEXT: - Type: CODE
> ; CHECK-NEXT: Relocations:
> ; CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_SLEB
> @@ -104,176 +114,176 @@ entry:
> ; CHECK-NEXT: - Index: 5
> ; CHECK-NEXT: Locals:
> ; CHECK-NEXT: Body: 419C808080000B
> -; CHECK-NEXT: - Type: DATA
> -; CHECK-NEXT: Relocations:
> -; CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_I32
> -; CHECK-NEXT: Index: 3
> -; CHECK-NEXT: Offset: 0x00000012
> -; CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_I32
> -; CHECK-NEXT: Index: 4
> -; CHECK-NEXT: Offset: 0x0000001B
> -; CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_I32
> -; CHECK-NEXT: Index: 5
> -; CHECK-NEXT: Offset: 0x00000024
> -; CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_I32
> -; CHECK-NEXT: Index: 12
> -; CHECK-NEXT: Offset: 0x0000002D
> -; CHECK-NEXT: Segments:
> -; CHECK-NEXT: - SectionOffset: 6
> -; CHECK-NEXT: InitFlags: 0
> -; CHECK-NEXT: Offset:
> -; CHECK-NEXT: Opcode: I32_CONST
> -; CHECK-NEXT: Value: 0
> -; CHECK-NEXT: Content: 68656C6C6F0A00
> -; CHECK-NEXT: - SectionOffset: 18
> -; CHECK-NEXT: InitFlags: 0
> -; CHECK-NEXT: Offset:
> -; CHECK-NEXT: Opcode: I32_CONST
> -; CHECK-NEXT: Value: 8
> -; CHECK-NEXT: Content: '01000000'
> -; CHECK-NEXT: - SectionOffset: 27
> -; CHECK-NEXT: InitFlags: 0
> -; CHECK-NEXT: Offset:
> -; CHECK-NEXT: Opcode: I32_CONST
> -; CHECK-NEXT: Value: 12
> -; CHECK-NEXT: Content: '02000000'
> -; CHECK-NEXT: - SectionOffset: 36
> -; CHECK-NEXT: InitFlags: 0
> -; CHECK-NEXT: Offset:
> -; CHECK-NEXT: Opcode: I32_CONST
> -; CHECK-NEXT: Value: 16
> -; CHECK-NEXT: Content: '03000000'
> -; CHECK-NEXT: - SectionOffset: 45
> -; CHECK-NEXT: InitFlags: 0
> -; CHECK-NEXT: Offset:
> -; CHECK-NEXT: Opcode: I32_CONST
> -; CHECK-NEXT: Value: 24
> -; CHECK-NEXT: Content: '00000000'
> -; CHECK-NEXT: - SectionOffset: 54
> -; CHECK-NEXT: InitFlags: 0
> -; CHECK-NEXT: Offset:
> -; CHECK-NEXT: Opcode: I32_CONST
> -; CHECK-NEXT: Value: 28
> -; CHECK-NEXT: Content: '616263'
> -; CHECK-NEXT: - Type: CUSTOM
> -; CHECK-NEXT: Name: linking
> -; CHECK-NEXT: Version: 2
> -; CHECK-NEXT: SymbolTable:
> -; CHECK-NEXT: - Index: 0
> -; CHECK-NEXT: Kind: FUNCTION
> -; CHECK-NEXT: Name: hello
> -; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> -; CHECK-NEXT: Function: 3
> -; CHECK-NEXT: - Index: 1
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: hello_str
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: Segment: 0
> -; CHECK-NEXT: Size: 7
> -; CHECK-NEXT: - Index: 2
> -; CHECK-NEXT: Kind: FUNCTION
> -; CHECK-NEXT: Name: puts
> -; CHECK-NEXT: Flags: [ UNDEFINED ]
> -; CHECK-NEXT: Function: 0
> -; CHECK-NEXT: - Index: 3
> -; CHECK-NEXT: Kind: FUNCTION
> -; CHECK-NEXT: Name: my_func
> -; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> -; CHECK-NEXT: Function: 4
> -; CHECK-NEXT: - Index: 4
> -; CHECK-NEXT: Kind: FUNCTION
> -; CHECK-NEXT: Name: foo_import
> -; CHECK-NEXT: Flags: [ UNDEFINED ]
> -; CHECK-NEXT: Function: 1
> -; CHECK-NEXT: - Index: 5
> -; CHECK-NEXT: Kind: FUNCTION
> -; CHECK-NEXT: Name: bar_import
> -; CHECK-NEXT: Flags: [ BINDING_WEAK, UNDEFINED ]
> -; CHECK-NEXT: Function: 2
> -; CHECK-NEXT: - Index: 6
> -; CHECK-NEXT: Kind: FUNCTION
> -; CHECK-NEXT: Name: func_comdat
> -; CHECK-NEXT: Flags: [ BINDING_WEAK ]
> -; CHECK-NEXT: Function: 5
> -; CHECK-NEXT: - Index: 7
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: data_comdat
> -; CHECK-NEXT: Flags: [ BINDING_WEAK ]
> -; CHECK-NEXT: Segment: 5
> -; CHECK-NEXT: Size: 3
> -; CHECK-NEXT: - Index: 8
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: func_addr1
> -; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> -; CHECK-NEXT: Segment: 1
> -; CHECK-NEXT: Size: 4
> -; CHECK-NEXT: - Index: 9
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: func_addr2
> -; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> -; CHECK-NEXT: Segment: 2
> -; CHECK-NEXT: Size: 4
> -; CHECK-NEXT: - Index: 10
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: func_addr3
> -; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> -; CHECK-NEXT: Segment: 3
> -; CHECK-NEXT: Size: 4
> -; CHECK-NEXT: - Index: 11
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: data_addr1
> -; CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> -; CHECK-NEXT: Segment: 4
> -; CHECK-NEXT: Size: 4
> -; CHECK-NEXT: - Index: 12
> -; CHECK-NEXT: Kind: DATA
> -; CHECK-NEXT: Name: data_import
> -; CHECK-NEXT: Flags: [ UNDEFINED ]
> -; CHECK-NEXT: SegmentInfo:
> -; CHECK-NEXT: - Index: 0
> -; CHECK-NEXT: Name: .rodata.hello_str
> -; CHECK-NEXT: Alignment: 0
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: - Index: 1
> -; CHECK-NEXT: Name: .data.func_addr1
> -; CHECK-NEXT: Alignment: 2
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: - Index: 2
> -; CHECK-NEXT: Name: .data.func_addr2
> -; CHECK-NEXT: Alignment: 2
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: - Index: 3
> -; CHECK-NEXT: Name: .data.func_addr3
> -; CHECK-NEXT: Alignment: 2
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: - Index: 4
> -; CHECK-NEXT: Name: .data.data_addr1
> -; CHECK-NEXT: Alignment: 3
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: - Index: 5
> -; CHECK-NEXT: Name: .rodata.data_comdat
> -; CHECK-NEXT: Alignment: 0
> -; CHECK-NEXT: Flags: [ ]
> -; CHECK-NEXT: Comdats:
> -; CHECK-NEXT: - Name: func_comdat
> -; CHECK-NEXT: Entries:
> -; CHECK-NEXT: - Kind: FUNCTION
> -; CHECK-NEXT: Index: 5
> -; CHECK-NEXT: - Kind: DATA
> -; CHECK-NEXT: Index: 5
> -; CHECK-NEXT: - Type: CUSTOM
> -; CHECK-NEXT: Name: name
> -; CHECK-NEXT: FunctionNames:
> -; CHECK-NEXT: - Index: 0
> -; CHECK-NEXT: Name: puts
> -; CHECK-NEXT: - Index: 1
> -; CHECK-NEXT: Name: foo_import
> -; CHECK-NEXT: - Index: 2
> -; CHECK-NEXT: Name: bar_import
> -; CHECK-NEXT: - Index: 3
> -; CHECK-NEXT: Name: hello
> -; CHECK-NEXT: - Index: 4
> -; CHECK-NEXT: Name: my_func
> -; CHECK-NEXT: - Index: 5
> -; CHECK-NEXT: Name: func_comdat
> -; CHECK-NEXT: ...
> +; NORMAL-NEXT: - Type: DATA
> +; NORMAL-NEXT: Relocations:
> +; NORMAL-NEXT: - Type: R_WASM_TABLE_INDEX_I32
> +; NORMAL-NEXT: Index: 3
> +; NORMAL-NEXT: Offset: 0x00000012
> +; NORMAL-NEXT: - Type: R_WASM_TABLE_INDEX_I32
> +; NORMAL-NEXT: Index: 4
> +; NORMAL-NEXT: Offset: 0x0000001B
> +; NORMAL-NEXT: - Type: R_WASM_TABLE_INDEX_I32
> +; NORMAL-NEXT: Index: 5
> +; NORMAL-NEXT: Offset: 0x00000024
> +; NORMAL-NEXT: - Type: R_WASM_MEMORY_ADDR_I32
> +; NORMAL-NEXT: Index: 12
> +; NORMAL-NEXT: Offset: 0x0000002D
> +; NORMAL-NEXT: Segments:
> +; NORMAL-NEXT: - SectionOffset: 6
> +; NORMAL-NEXT: InitFlags: 0
> +; NORMAL-NEXT: Offset:
> +; NORMAL-NEXT: Opcode: I32_CONST
> +; NORMAL-NEXT: Value: 0
> +; NORMAL-NEXT: Content: 68656C6C6F0A00
> +; NORMAL-NEXT: - SectionOffset: 18
> +; NORMAL-NEXT: InitFlags: 0
> +; NORMAL-NEXT: Offset:
> +; NORMAL-NEXT: Opcode: I32_CONST
> +; NORMAL-NEXT: Value: 8
> +; NORMAL-NEXT: Content: '01000000'
> +; NORMAL-NEXT: - SectionOffset: 27
> +; NORMAL-NEXT: InitFlags: 0
> +; NORMAL-NEXT: Offset:
> +; NORMAL-NEXT: Opcode: I32_CONST
> +; NORMAL-NEXT: Value: 12
> +; NORMAL-NEXT: Content: '02000000'
> +; NORMAL-NEXT: - SectionOffset: 36
> +; NORMAL-NEXT: InitFlags: 0
> +; NORMAL-NEXT: Offset:
> +; NORMAL-NEXT: Opcode: I32_CONST
> +; NORMAL-NEXT: Value: 16
> +; NORMAL-NEXT: Content: '03000000'
> +; NORMAL-NEXT: - SectionOffset: 45
> +; NORMAL-NEXT: InitFlags: 0
> +; NORMAL-NEXT: Offset:
> +; NORMAL-NEXT: Opcode: I32_CONST
> +; NORMAL-NEXT: Value: 24
> +; NORMAL-NEXT: Content: '00000000'
> +; NORMAL-NEXT: - SectionOffset: 54
> +; NORMAL-NEXT: InitFlags: 0
> +; NORMAL-NEXT: Offset:
> +; NORMAL-NEXT: Opcode: I32_CONST
> +; NORMAL-NEXT: Value: 28
> +; NORMAL-NEXT: Content: '616263'
> +; NORMAL-NEXT: - Type: CUSTOM
> +; NORMAL-NEXT: Name: linking
> +; NORMAL-NEXT: Version: 2
> +; NORMAL-NEXT: SymbolTable:
> +; NORMAL-NEXT: - Index: 0
> +; NORMAL-NEXT: Kind: FUNCTION
> +; NORMAL-NEXT: Name: hello
> +; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> +; NORMAL-NEXT: Function: 3
> +; NORMAL-NEXT: - Index: 1
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: hello_str
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: Segment: 0
> +; NORMAL-NEXT: Size: 7
> +; NORMAL-NEXT: - Index: 2
> +; NORMAL-NEXT: Kind: FUNCTION
> +; NORMAL-NEXT: Name: puts
> +; NORMAL-NEXT: Flags: [ UNDEFINED ]
> +; NORMAL-NEXT: Function: 0
> +; NORMAL-NEXT: - Index: 3
> +; NORMAL-NEXT: Kind: FUNCTION
> +; NORMAL-NEXT: Name: my_func
> +; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> +; NORMAL-NEXT: Function: 4
> +; NORMAL-NEXT: - Index: 4
> +; NORMAL-NEXT: Kind: FUNCTION
> +; NORMAL-NEXT: Name: foo_import
> +; NORMAL-NEXT: Flags: [ UNDEFINED ]
> +; NORMAL-NEXT: Function: 1
> +; NORMAL-NEXT: - Index: 5
> +; NORMAL-NEXT: Kind: FUNCTION
> +; NORMAL-NEXT: Name: bar_import
> +; NORMAL-NEXT: Flags: [ BINDING_WEAK, UNDEFINED ]
> +; NORMAL-NEXT: Function: 2
> +; NORMAL-NEXT: - Index: 6
> +; NORMAL-NEXT: Kind: FUNCTION
> +; NORMAL-NEXT: Name: func_comdat
> +; NORMAL-NEXT: Flags: [ BINDING_WEAK ]
> +; NORMAL-NEXT: Function: 5
> +; NORMAL-NEXT: - Index: 7
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: data_comdat
> +; NORMAL-NEXT: Flags: [ BINDING_WEAK ]
> +; NORMAL-NEXT: Segment: 5
> +; NORMAL-NEXT: Size: 3
> +; NORMAL-NEXT: - Index: 8
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: func_addr1
> +; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> +; NORMAL-NEXT: Segment: 1
> +; NORMAL-NEXT: Size: 4
> +; NORMAL-NEXT: - Index: 9
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: func_addr2
> +; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> +; NORMAL-NEXT: Segment: 2
> +; NORMAL-NEXT: Size: 4
> +; NORMAL-NEXT: - Index: 10
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: func_addr3
> +; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> +; NORMAL-NEXT: Segment: 3
> +; NORMAL-NEXT: Size: 4
> +; NORMAL-NEXT: - Index: 11
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: data_addr1
> +; NORMAL-NEXT: Flags: [ VISIBILITY_HIDDEN ]
> +; NORMAL-NEXT: Segment: 4
> +; NORMAL-NEXT: Size: 4
> +; NORMAL-NEXT: - Index: 12
> +; NORMAL-NEXT: Kind: DATA
> +; NORMAL-NEXT: Name: data_import
> +; NORMAL-NEXT: Flags: [ UNDEFINED ]
> +; NORMAL-NEXT: SegmentInfo:
> +; NORMAL-NEXT: - Index: 0
> +; NORMAL-NEXT: Name: .rodata.hello_str
> +; NORMAL-NEXT: Alignment: 0
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: - Index: 1
> +; NORMAL-NEXT: Name: .data.func_addr1
> +; NORMAL-NEXT: Alignment: 2
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: - Index: 2
> +; NORMAL-NEXT: Name: .data.func_addr2
> +; NORMAL-NEXT: Alignment: 2
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: - Index: 3
> +; NORMAL-NEXT: Name: .data.func_addr3
> +; NORMAL-NEXT: Alignment: 2
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: - Index: 4
> +; NORMAL-NEXT: Name: .data.data_addr1
> +; NORMAL-NEXT: Alignment: 3
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: - Index: 5
> +; NORMAL-NEXT: Name: .rodata.data_comdat
> +; NORMAL-NEXT: Alignment: 0
> +; NORMAL-NEXT: Flags: [ ]
> +; NORMAL-NEXT: Comdats:
> +; NORMAL-NEXT: - Name: func_comdat
> +; NORMAL-NEXT: Entries:
> +; NORMAL-NEXT: - Kind: FUNCTION
> +; NORMAL-NEXT: Index: 5
> +; NORMAL-NEXT: - Kind: DATA
> +; NORMAL-NEXT: Index: 5
> +; NORMAL-NEXT: - Type: CUSTOM
> +; NORMAL-NEXT: Name: name
> +; NORMAL-NEXT: FunctionNames:
> +; NORMAL-NEXT: - Index: 0
> +; NORMAL-NEXT: Name: puts
> +; NORMAL-NEXT: - Index: 1
> +; NORMAL-NEXT: Name: foo_import
> +; NORMAL-NEXT: - Index: 2
> +; NORMAL-NEXT: Name: bar_import
> +; NORMAL-NEXT: - Index: 3
> +; NORMAL-NEXT: Name: hello
> +; NORMAL-NEXT: - Index: 4
> +; NORMAL-NEXT: Name: my_func
> +; NORMAL-NEXT: - Index: 5
> +; NORMAL-NEXT: Name: func_comdat
> +; NORMAL-NEXT:...
>
> Modified: lld/trunk/wasm/Writer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/wasm/Writer.cpp?rev=368078&r1=368077&r2=368078&view=diff
> ==============================================================================
> --- lld/trunk/wasm/Writer.cpp (original)
> +++ lld/trunk/wasm/Writer.cpp Tue Aug 6 13:09:04 2019
> @@ -901,7 +901,7 @@ void Writer::run() {
> createCallCtorsFunction();
> }
>
> - if (config->sharedMemory && !config->shared)
> + if (!config->relocatable && config->sharedMemory && !config->shared)
> createInitTLSFunction();
>
> if (errorCount())
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list