brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 12ac4c3 Raw
122 lines · plain
1; Test that PIC code can be linked into static binaries.2; In this case the GOT entries will end up as internalized wasm globals with3; fixed values.4; RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/ret32.s -o %t.ret32.o5; RUN: llc -relocation-model=pic -filetype=obj %s -o %t.o6; RUN: wasm-ld --allow-undefined --export-all -o %t.wasm %t.o %t.ret32.o7; RUN: obj2yaml %t.wasm | FileCheck %s8 9target triple = "wasm32-unknown-emscripten"10 11declare i32 @ret32(float)12declare i32 @missing_function(float)13@global_float = global float 1.014@hidden_float = hidden global float 2.015@missing_float = extern_weak global float16 17@ret32_ptr = global ptr @ret32, align 418 19define ptr @getaddr_external() {20  ret ptr @ret32;21}22 23define ptr @getaddr_missing_function() {24  ret ptr @missing_function;25}26 27define ptr @getaddr_hidden() {28  ret ptr @hidden_func;29}30 31define ptr @getaddr_missing_float() {32  ret ptr @missing_float33}34 35define hidden i32 @hidden_func() {36  ret i32 137}38 39define void @_start() {40entry:41  %f = load float, ptr @hidden_float, align 442  %addr = load ptr, ptr @ret32_ptr, align 443  %arg = load float, ptr @global_float, align 444  call i32 %addr(float %arg)45 46  %addr2 = call ptr @getaddr_external()47  %arg2 = load float, ptr @hidden_float, align 448  call i32 %addr2(float %arg2)49 50  %addr3 = call ptr @getaddr_hidden()51  call i32 %addr3()52 53  ret void54}55 56; CHECK:        - Type:            GLOBAL57; CHECK-NEXT:     Globals:58 59; __stack_pointer60; CHECK-NEXT:       - Index:           061; CHECK-NEXT:         Type:            I3262; CHECK-NEXT:         Mutable:         true63; CHECK-NEXT:         InitExpr:64; CHECK-NEXT:           Opcode:          I32_CONST65; CHECK-NEXT:           Value:           6553666 67; GOT.func.ret3268; CHECK-NEXT:       - Index:           169; CHECK-NEXT:         Type:            I3270; CHECK-NEXT:         Mutable:         false71; CHECK-NEXT:         InitExpr:72; CHECK-NEXT:           Opcode:          I32_CONST73; CHECK-NEXT: Value: 174 75; GOT.func.missing_function76; CHECK-NEXT:       - Index:           277; CHECK-NEXT:         Type:            I3278; CHECK-NEXT:         Mutable:         false79; CHECK-NEXT:         InitExpr:80; CHECK-NEXT:           Opcode:          I32_CONST81; CHECK-NEXT:           Value:           282 83; __table_base84; CHECK-NEXT:       - Index:           385; CHECK-NEXT:         Type:            I3286; CHECK-NEXT:         Mutable:         false87; CHECK-NEXT:         InitExpr:88; CHECK-NEXT:           Opcode:          I32_CONST89; CHECK-NEXT:           Value:           190 91; GOT.mem.missing_float92; CHECK-NEXT:       - Index:           493; CHECK-NEXT:         Type:            I3294; CHECK-NEXT:         Mutable:         false95; CHECK-NEXT:         InitExpr:96; CHECK-NEXT:           Opcode:          I32_CONST97; CHECK-NEXT:           Value:           098 99; GOT.mem.global_float100; CHECK-NEXT:       - Index:           5101; CHECK-NEXT:         Type:            I32102; CHECK-NEXT:         Mutable:         false103; CHECK-NEXT:         InitExpr:104; CHECK-NEXT:           Opcode:          I32_CONST105; CHECK-NEXT:           Value:           65536106 107; GOT.mem.ret32_ptr108; CHECK-NEXT:       - Index:           6109; CHECK-NEXT:         Type:            I32110; CHECK-NEXT:         Mutable:         false111; CHECK-NEXT:         InitExpr:112; CHECK-NEXT:           Opcode:          I32_CONST113; CHECK-NEXT:           Value:           65544114 115; __memory_base116; CHECK-NEXT:       - Index:           7117; CHECK-NEXT:         Type:            I32118; CHECK-NEXT:         Mutable:         false119; CHECK-NEXT:         InitExpr:120; CHECK-NEXT:           Opcode:          I32_CONST121; CHECK-NEXT:           Value:           0122