1f51ade25SMaksim Panchenko# REQUIRES: system-linux 2f51ade25SMaksim Panchenko 3f51ade25SMaksim Panchenko## Check that BOLT correctly parses the Linux kernel .parainstructions section. 4f51ade25SMaksim Panchenko 5f51ade25SMaksim Panchenko# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s -o %t.o 6f51ade25SMaksim Panchenko# RUN: %clang %cflags -nostdlib %t.o -o %t.exe \ 7f51ade25SMaksim Panchenko# RUN: -Wl,--image-base=0xffffffff80000000,--no-dynamic-linker,--no-eh-frame-hdr,--no-pie 8f51ade25SMaksim Panchenko 9f51ade25SMaksim Panchenko## Verify paravirtual bindings to instructions. 10f51ade25SMaksim Panchenko 1151268a57SMaksim Panchenko# RUN: llvm-bolt %t.exe --print-normalized -o %t.out --keep-nops=0 | FileCheck %s 12f51ade25SMaksim Panchenko 13f51ade25SMaksim Panchenko# CHECK: BOLT-INFO: Linux kernel binary detected 14f51ade25SMaksim Panchenko# CHECK: BOLT-INFO: parsed 2 paravirtual patch sites 15f51ade25SMaksim Panchenko 16f51ade25SMaksim Panchenko .rodata 17f51ade25SMaksim Panchenkofptr: 18f51ade25SMaksim Panchenko .quad 0 19f51ade25SMaksim Panchenko 20f51ade25SMaksim Panchenko .text 21f51ade25SMaksim Panchenko .globl _start 22f51ade25SMaksim Panchenko .type _start, %function 23f51ade25SMaksim Panchenko_start: 24f51ade25SMaksim Panchenko# CHECK: Binary Function "_start" 25f51ade25SMaksim Panchenko nop 26f51ade25SMaksim Panchenko.L1: 27f51ade25SMaksim Panchenko call *fptr(%rip) 28f51ade25SMaksim Panchenko# CHECK: call 29f51ade25SMaksim Panchenko# CHECK-SAME: ParaSite: 1 30f51ade25SMaksim Panchenko nop 31f51ade25SMaksim Panchenko.L2: 32f51ade25SMaksim Panchenko call *fptr(%rip) 33f51ade25SMaksim Panchenko# CHECK: call 34f51ade25SMaksim Panchenko# CHECK-SAME: ParaSite: 2 35f51ade25SMaksim Panchenko ret 36f51ade25SMaksim Panchenko .size _start, .-_start 37f51ade25SMaksim Panchenko 38f51ade25SMaksim Panchenko 39f51ade25SMaksim Panchenko## Paravirtual patch sites. 40f51ade25SMaksim Panchenko .section .parainstructions,"a",@progbits 41f51ade25SMaksim Panchenko 42f51ade25SMaksim Panchenko .balign 8 43f51ade25SMaksim Panchenko .quad .L1 # instruction 44f51ade25SMaksim Panchenko .byte 1 # type 45f51ade25SMaksim Panchenko .byte 7 # length 46f51ade25SMaksim Panchenko 47f51ade25SMaksim Panchenko .balign 8 48f51ade25SMaksim Panchenko .quad .L2 # instruction 49f51ade25SMaksim Panchenko .byte 1 # type 50f51ade25SMaksim Panchenko .byte 7 # length 51f51ade25SMaksim Panchenko 52*6e8a1a45SFranklin## Linux kernel version 53*6e8a1a45SFranklin .rodata 54*6e8a1a45SFranklin .align 16 55*6e8a1a45SFranklin .globl linux_banner 56*6e8a1a45SFranklin .type linux_banner, @object 57*6e8a1a45SFranklinlinux_banner: 58*6e8a1a45SFranklin .string "Linux version 6.6.61\n" 59*6e8a1a45SFranklin .size linux_banner, . - linux_banner 60*6e8a1a45SFranklin 61f51ade25SMaksim Panchenko## Fake Linux Kernel sections. 62f51ade25SMaksim Panchenko .section __ksymtab,"a",@progbits 63f51ade25SMaksim Panchenko .section __ksymtab_gpl,"a",@progbits 64