12646dccaSMaksim Panchenko# REQUIRES: system-linux 22646dccaSMaksim Panchenko 32646dccaSMaksim Panchenko## Check that BOLT correctly updates the Linux kernel static calls table. 42646dccaSMaksim Panchenko 52646dccaSMaksim Panchenko# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o 62646dccaSMaksim Panchenko# RUN: %clang %cflags -nostdlib %t.o -o %t.exe \ 72646dccaSMaksim Panchenko# RUN: -Wl,--image-base=0xffffffff80000000,--no-dynamic-linker,--no-eh-frame-hdr 82646dccaSMaksim Panchenko 92646dccaSMaksim Panchenko## Verify static calls bindings to instructions. 102646dccaSMaksim Panchenko 112646dccaSMaksim Panchenko# RUN: llvm-bolt %t.exe --print-normalized -o %t.out --keep-nops=0 \ 12887f7002SConnie# RUN: --bolt-info=0 2>&1 | FileCheck %s 132646dccaSMaksim Panchenko 142646dccaSMaksim Panchenko## Verify the bindings again on the rewritten binary with nops removed. 152646dccaSMaksim Panchenko 16887f7002SConnie# RUN: llvm-bolt %t.out -o %t.out.1 --print-normalized 2>&1 | FileCheck %s 172646dccaSMaksim Panchenko 182646dccaSMaksim Panchenko# CHECK: BOLT-INFO: Linux kernel binary detected 192646dccaSMaksim Panchenko# CHECK: BOLT-INFO: parsed 2 static call entries 202646dccaSMaksim Panchenko 212646dccaSMaksim Panchenko .text 222646dccaSMaksim Panchenko .globl _start 232646dccaSMaksim Panchenko .type _start, %function 242646dccaSMaksim Panchenko_start: 252646dccaSMaksim Panchenko# CHECK: Binary Function "_start" 262646dccaSMaksim Panchenko nop 272646dccaSMaksim Panchenko.L0: 282646dccaSMaksim Panchenko call foo 292646dccaSMaksim Panchenko# CHECK: callq foo # {{.*}} StaticCall: 1 302646dccaSMaksim Panchenko nop 312646dccaSMaksim Panchenko.L1: 322646dccaSMaksim Panchenko jmp foo 332646dccaSMaksim Panchenko# CHECK: jmp foo # {{.*}} StaticCall: 2 342646dccaSMaksim Panchenko .size _start, .-_start 352646dccaSMaksim Panchenko 362646dccaSMaksim Panchenko .globl foo 372646dccaSMaksim Panchenko .type foo, %function 382646dccaSMaksim Panchenkofoo: 392646dccaSMaksim Panchenko ret 402646dccaSMaksim Panchenko .size foo, .-foo 412646dccaSMaksim Panchenko 422646dccaSMaksim Panchenko 432646dccaSMaksim Panchenko## Static call table. 442646dccaSMaksim Panchenko .rodata 452646dccaSMaksim Panchenko .globl __start_static_call_sites 462646dccaSMaksim Panchenko .type __start_static_call_sites, %object 472646dccaSMaksim Panchenko__start_static_call_sites: 482646dccaSMaksim Panchenko .long .L0 - . 492646dccaSMaksim Panchenko .long 0 502646dccaSMaksim Panchenko .long .L1 - . 512646dccaSMaksim Panchenko .long 0 522646dccaSMaksim Panchenko 532646dccaSMaksim Panchenko .globl __stop_static_call_sites 542646dccaSMaksim Panchenko .type __stop_static_call_sites, %object 552646dccaSMaksim Panchenko__stop_static_call_sites: 562646dccaSMaksim Panchenko 57*6e8a1a45SFranklin## Linux kernel version 58*6e8a1a45SFranklin .rodata 59*6e8a1a45SFranklin .align 16 60*6e8a1a45SFranklin .globl linux_banner 61*6e8a1a45SFranklin .type linux_banner, @object 62*6e8a1a45SFranklinlinux_banner: 63*6e8a1a45SFranklin .string "Linux version 6.6.61\n" 64*6e8a1a45SFranklin .size linux_banner, . - linux_banner 65*6e8a1a45SFranklin 662646dccaSMaksim Panchenko## Fake Linux Kernel sections. 672646dccaSMaksim Panchenko .section __ksymtab,"a",@progbits 682646dccaSMaksim Panchenko .section __ksymtab_gpl,"a",@progbits 69