| ; RUN: llc -mtriple wasm32-unknown-unknown-wasm -O2 -filetype=obj %s -o - | llvm-readobj -r -s -expand-relocs | FileCheck %s |
| |
| declare i32 @import1() |
| declare i32 @import2() |
| declare i32 @import3() |
| |
| ; call the imports to make sure they are included in the imports section |
| define hidden void @call_imports() #0 { |
| entry: |
| %call = call i32 @import1() |
| %call1 = call i32 @import2() |
| ret void |
| } |
| |
| ; take the address of the third import. This should generate a TABLE_INDEX |
| ; relocation with index of 0 since its the first and only address taken |
| ; function. |
| define hidden void @call_indirect() #0 { |
| entry: |
| %adr = alloca i32 ()*, align 4 |
| store i32 ()* @import3, i32 ()** %adr, align 4 |
| ret void |
| } |
| |
| ; CHECK: Section { |
| ; CHECK: Type: ELEM (0x9) |
| ; CHECK: Size: 7 |
| ; CHECK: } |
| |
| ; CHECK: Relocations [ |
| ; CHECK: Section (8) CODE { |
| ; CHECK: Relocation { |
| ; CHECK: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0) |
| ; CHECK: Offset: 0x4 |
| ; CHECK: Index: 0x0 |
| ; CHECK: } |
| ; CHECK: Relocation { |
| ; CHECK: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0) |
| ; CHECK: Offset: 0xB |
| ; CHECK: Index: 0x1 |
| ; CHECK: } |
| ; CHECK: Relocation { |
| ; CHECK: Type: R_WEBASSEMBLY_TABLE_INDEX_SLEB (1) |
| ; CHECK: Offset: 0x1E |
| ; CHECK: Index: 0x0 |
| ; CHECK: } |
| ; CHECK: } |