129 lines · plain
1# REQUIRES: riscv2# RUN: rm -rf %t && split-file %s %t && cd %t3 4# RUN: llvm-mc -filetype=obj -triple=riscv64 1.s -o 1.o5# RUN: ld.lld 1.o --shared -o 1.so6# RUN: llvm-readelf -d -s 1.so | FileCheck --check-prefix=CHECK1 %s7 8# CHECK1: Symbol table '.dynsym'9# CHECK1: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] [[#]] func_global_def10# CHECK1: Symbol table '.symtab'11# CHECK1: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] [[#]] func_global_def12 13# RUN: llvm-mc -filetype=obj -triple=riscv64 2.s -o 2.o14# RUN: ld.lld 2.o --shared -o 2.so15# RUN: llvm-readelf -d -s 2.so | FileCheck --check-prefix=CHECK2 %s16 17# CHECK2: 0x0000000070000001 (RISCV_VARIANT_CC) 0x018# CHECK2: Symbol table '.dynsym'19# CHECK2: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] [[#]] func_global_def20# CHECK2: Symbol table '.symtab'21# CHECK2: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] [[#]] func_global_def22 23# RUN: llvm-mc -filetype=obj -triple=riscv32 3.s -o 3.o24# RUN: ld.lld 3.o --shared -o 3.so25# RUN: llvm-readelf -d -s 3.so | FileCheck --check-prefix=CHECK3 %s26 27# CHECK3: 0x70000001 (RISCV_VARIANT_CC) 0x028# CHECK3: Symbol table '.dynsym'29# CHECK3: 0 IFUNC GLOBAL DEFAULT [VARIANT_CC] UND ifunc_global_def30# CHECK3: 0 NOTYPE GLOBAL DEFAULT [[#]] func_global_def31 32# RUN: llvm-mc -filetype=obj -triple=riscv32 4.s -o 4.o33# RUN: ld.lld 4.o --shared -o 4.so34# RUN: llvm-readelf -d -s 4.so | FileCheck --check-prefix=CHECK4 %s35 36# CHECK4-NOT: (RISCV_VARIANT_CC)37# CHECK4: Symbol table '.dynsym'38# CHECK4: 0 IFUNC GLOBAL DEFAULT [VARIANT_CC] [[#]] ifunc_global_def39 40# RUN: llvm-mc -filetype=obj -triple=riscv64 5.s -o 5.o41# RUN: ld.lld 5.o --shared -o 5.so42# RUN: llvm-readelf -d -s 5.so | FileCheck --check-prefix=CHECK5 %s43 44# CHECK5: Symbol table '.dynsym' contains 4 entries:45# CHECK5: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] UND func_global_undef46# CHECK5-NEXT: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] [[#]] func_global_def47# CHECK5-NEXT: 0 IFUNC GLOBAL DEFAULT [VARIANT_CC] [[#]] ifunc_global_def48# CHECK5: Symbol table '.symtab' contains 10 entries:49# CHECK5: 0 NOTYPE LOCAL DEFAULT [VARIANT_CC] [[#]] func_local50# CHECK5-NEXT: 0 IFUNC LOCAL DEFAULT [VARIANT_CC] [[#]] ifunc_local51# CHECK5: 0 NOTYPE LOCAL HIDDEN [VARIANT_CC] [[#]] func_global_hidden52# CHECK5-NEXT: 0 IFUNC LOCAL HIDDEN [VARIANT_CC] [[#]] ifunc_global_hidden53# CHECK5: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] [[#]] func_global_def54# CHECK5-NEXT: 0 NOTYPE GLOBAL DEFAULT [VARIANT_CC] UND func_global_undef55# CHECK5-NEXT: 0 IFUNC GLOBAL DEFAULT [VARIANT_CC] [[#]] ifunc_global_def56 57#--- 1.s58## An object with a variant_pcs symbol but without a R_RISCV_JMP_SLOT59## should not generate a DT_RISCV_VARIANT_CC.60.text61.global func_global_def62.variant_cc func_global_def63 64func_global_def:65 ret66 67#--- 2.s68## An object with a variant_cc symbol and with a R_RISCV_JMP_SLOT69## should generate a DT_RISCV_VARIANT_CC.70.text71.global func_global_def72.variant_cc func_global_def73 74func_global_def:75 call func_global_def76 77#--- 3.s78## Same as before, but targeting a GNU IFUNC.79.text80.global ifunc_global_def81.global func_global_def82.variant_cc ifunc_global_def83.type ifunc_global_def, %gnu_indirect_function84 85func_global_def:86 call ifunc_global_def87 88#--- 4.s89## An object with a variant_cc symbol and with a R_RISCV_IRELATIVE90## should not generate a DT_RISCV_VARIANT_CC.91.text92.global ifunc_global_def93.global func_global_def94.variant_cc ifunc_global_def95.type ifunc_global_def, %gnu_indirect_function96 97ifunc_global_def:98 call func_global_def99 100#--- 5.s101## Check if STO_RISCV_VARIANT_CC is kept on symbol st_other for both undef,102## local, and hidden visibility.103.text104.global func_global_def, func_global_undef, func_global_hidden105.global ifunc_global_def, ifunc_global_hidden106.local func_local107 108.hidden func_global_hidden, ifunc_global_hidden109 110.type ifunc_global_def, %gnu_indirect_function111.type ifunc_global_hidden, %gnu_indirect_function112.type ifunc_local, %gnu_indirect_function113 114.variant_cc func_global_def115.variant_cc func_global_undef116.variant_cc func_global_hidden117.variant_cc func_local118.variant_cc ifunc_global_def119.variant_cc ifunc_global_hidden120.variant_cc ifunc_local121 122func_global_def:123func_global_hidden:124func_local:125ifunc_global_def:126ifunc_global_hidden:127ifunc_local:128 ret129