| ## Based on lld/test/ELF/shared-lazy.s |
| |
| # RUN: rm -rf %t && split-file %s %t && cd %t |
| # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-emscripten a.s -o a.o |
| # RUN: wasm-ld a.o --experimental-pic -shared -o a.so |
| # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-emscripten b.s -o b.o |
| # RUN: wasm-ld b.o --experimental-pic -shared -o b.so |
| # RUN: llvm-ar rc a.a a.o |
| # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-emscripten ref.s -o ref.o |
| # RUN: wasm-ld a.a b.so ref.o --experimental-pic -shared -o 1.so |
| # RUN: obj2yaml 1.so | FileCheck %s |
| # RUN: wasm-ld a.so a.a ref.o --experimental-pic -shared -o 1.so |
| # RUN: obj2yaml 1.so | FileCheck %s |
| |
| ## The definitions from a.so are used and we don't extract a member from the |
| ## archive. |
| |
| # CHECK: - Type: IMPORT |
| # CHECK: - Module: GOT.mem |
| # CHECK-NEXT: Field: x1 |
| # CHECK-NEXT: Kind: GLOBAL |
| # CHECK-NEXT: GlobalType: I32 |
| # CHECK-NEXT: GlobalMutable: true |
| # CHECK-NEXT: - Module: GOT.mem |
| # CHECK-NEXT: Field: x2 |
| # CHECK-NEXT: Kind: GLOBAL |
| # CHECK-NEXT: GlobalType: I32 |
| # CHECK-NEXT: GlobalMutable: true |
| |
| ## The extracted x1 is defined as STB_GLOBAL. |
| # RUN: wasm-ld ref.o a.a b.so -o 2.so --experimental-pic -shared |
| # RUN: obj2yaml 2.so | FileCheck %s --check-prefix=CHECK2 |
| # RUN: wasm-ld a.a ref.o b.so -o 2.so --experimental-pic -shared |
| # RUN: obj2yaml 2.so | FileCheck %s --check-prefix=CHECK2 |
| |
| # CHECK2: - Type: EXPORT |
| # CHECK2-NEXT: Exports: |
| # CHECK2-NEXT: - Name: __wasm_call_ctors |
| # CHECK2-NEXT: Kind: FUNCTION |
| # CHECK2-NEXT: Index: |
| # CHECK2-NEXT: - Name: x1 |
| # CHECK2-NEXT: Kind: GLOBAL |
| # CHECK2-NEXT: Index: |
| # CHECK2-NEXT: - Name: x2 |
| # CHECK2-NEXT: Kind: GLOBAL |
| |
| #--- a.s |
| .section .data.x1,"",@ |
| .global x1 |
| x1: |
| .byte 0 |
| .size x1, 1 |
| |
| .section .data.x2,"",@ |
| .weak x2 |
| x2: |
| .byte 0 |
| .size x2, 1 |
| #--- b.s |
| .section .data.x1,"",@ |
| .globl x1 |
| x1: |
| .byte 0 |
| .size x1, 1 |
| |
| .section .data.x2,"",@ |
| .globl x2 |
| x2: |
| .byte 0 |
| .size x2, 1 |
| #--- ref.s |
| .globl x1 |
| .globl x2 |
| .globl d |
| .section .data.d,"",@ |
| d: |
| .int x1 |
| .int x2 |
| .size d, 8 |