xref: /llvm-project/bolt/test/X86/linux-static-calls.s (revision 6e8a1a45a783c13e4cd19bfd20b7a56cab6f7d81)
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