| ## Check that BOLT preserves NOP instructions of different sizes correctly. |
| |
| # REQUIRES: system-linux |
| |
| # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-linux %s -o %t.o |
| # RUN: ld.lld %t.o -o %t.exe -q |
| # RUN: llvm-bolt %t.exe -o %t.bolt.exe --keep-nops --relocs --print-finalized \ |
| # RUN: 2>&1 | FileCheck --check-prefix=CHECK-BOLT %s |
| # RUN: llvm-objdump -d %t.bolt.exe | FileCheck %s |
| |
| .text |
| .globl _start |
| .type _start,@function |
| _start: |
| .cfi_startproc |
| .nops 1 |
| .nops 2 |
| .nops 3 |
| .nops 4 |
| .nops 5 |
| .nops 6 |
| .nops 7 |
| .nops 8 |
| .nops 9 |
| .nops 10 |
| .nops 11 |
| .nops 12 |
| .nops 13 |
| .nops 14 |
| .nops 15 |
| |
| # CHECK: <_start>: |
| # CHECK-NEXT: 90 |
| # CHECK-NEXT: 66 90 |
| # CHECK-NEXT: 0f 1f 00 |
| # CHECK-NEXT: 0f 1f 40 00 |
| # CHECK-NEXT: 0f 1f 44 00 00 |
| # CHECK-NEXT: 66 0f 1f 44 00 00 |
| # CHECK-NEXT: 0f 1f 80 00 00 00 00 |
| # CHECK-NEXT: 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 2e 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 66 2e 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 66 66 2e 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 |
| # CHECK-NEXT: 66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 |
| |
| # CHECK-BOLT: Size: 1 |
| # CHECK-BOLT-NEXT: Size: 2 |
| # CHECK-BOLT-NEXT: Size: 3 |
| # CHECK-BOLT-NEXT: Size: 4 |
| # CHECK-BOLT-NEXT: Size: 5 |
| # CHECK-BOLT-NEXT: Size: 6 |
| # CHECK-BOLT-NEXT: Size: 7 |
| # CHECK-BOLT-NEXT: Size: 8 |
| # CHECK-BOLT-NEXT: Size: 9 |
| # CHECK-BOLT-NEXT: Size: 10 |
| # CHECK-BOLT-NEXT: Size: 11 |
| # CHECK-BOLT-NEXT: Size: 12 |
| # CHECK-BOLT-NEXT: Size: 13 |
| # CHECK-BOLT-NEXT: Size: 14 |
| # CHECK-BOLT-NEXT: Size: 15 |
| |
| # Needed for relocation mode. |
| .reloc 0, R_X86_64_NONE |
| |
| .size _start, .-_start |
| .cfi_endproc |