You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.3 KiB
86 lines
2.3 KiB
4 months ago
|
# RUN: llvm-mc -triple=i686-linux -filetype=obj %s -o - | \
|
||
|
# RUN: llvm-objdump -d --no-show-raw-insn -r - | FileCheck %s
|
||
|
# RUN: llvm-mc -triple=i686-nacl -filetype=obj %s -o - | \
|
||
|
# RUN: llvm-objdump -d --no-show-raw-insn -r - | FileCheck %s
|
||
|
# RUN: llvm-mc -triple=i686-nacl -filetype=obj -mc-relax-all %s -o - | \
|
||
|
# RUN: llvm-objdump -d --no-show-raw-insn -r - | FileCheck %s
|
||
|
|
||
|
.bundle_align_mode 5
|
||
|
.text
|
||
|
.globl main
|
||
|
.align 32, 0x90
|
||
|
.type main,@function
|
||
|
main: # @main
|
||
|
# CHECK-LABEL: <main>:
|
||
|
# Call + pop sequence for determining the PIC base.
|
||
|
.bundle_lock align_to_end
|
||
|
calll .L0$pb
|
||
|
.bundle_unlock
|
||
|
.L0$pb:
|
||
|
popl %eax
|
||
|
# CHECK: 20: popl
|
||
|
# 26 bytes of instructions between the pop and the use of the pic base symbol.
|
||
|
movl $3, 2(%ebx, %ebx)
|
||
|
movl $3, 2(%ebx, %ebx)
|
||
|
movl $3, 2(%ebx, %ebx)
|
||
|
hlt
|
||
|
hlt
|
||
|
# CHECK: nop
|
||
|
.Ltmp0:
|
||
|
addl (.Ltmp0-.L0$pb), %eax
|
||
|
# The addl has bundle padding to push it from 0x3b to 0x40.
|
||
|
# The difference between the labels should be 0x20 (0x40-0x20) not 0x1b
|
||
|
# (0x3b-0x20)
|
||
|
# CHECK: 40: addl 32, %eax
|
||
|
popl %ecx
|
||
|
jmp *%ecx
|
||
|
|
||
|
|
||
|
# Also make sure it works with a non-relaxable instruction (cmp vs add)
|
||
|
# and for 2 adjacent labels that both point to the correct instruction
|
||
|
.section .text.bar, "ax"
|
||
|
.globl bar
|
||
|
.align 32, 0x90
|
||
|
.type bar,@function
|
||
|
bar:
|
||
|
# CHECK-LABEL: bar:
|
||
|
.bundle_lock align_to_end
|
||
|
calll .L1$pb
|
||
|
.bundle_unlock
|
||
|
.L1$pb:
|
||
|
popl %eax
|
||
|
# CHECK: 20: popl
|
||
|
# 26 bytes of instructions between the pop and the use of the pic base symbol.
|
||
|
movl $3, 2(%ebx, %ebx)
|
||
|
movl $3, 2(%ebx, %ebx)
|
||
|
movl $3, 2(%ebx, %ebx)
|
||
|
hlt
|
||
|
hlt
|
||
|
# CHECK: nop
|
||
|
.Ltmp1:
|
||
|
.Ltmp2:
|
||
|
cmpl %eax, .Ltmp1
|
||
|
# CHECK: 40: cmpl %eax, 64
|
||
|
cmpl %eax, (.Ltmp2-.L1$pb)
|
||
|
# CHECK: 46: cmpl %eax, 32
|
||
|
popl %ecx
|
||
|
jmp *%ecx
|
||
|
|
||
|
|
||
|
# Switch sections in the middle of a function
|
||
|
.section .text.foo, "ax"
|
||
|
.globl foo
|
||
|
.align 32, 0x90
|
||
|
.type foo,@function
|
||
|
# CHECK-LABEL: foo:
|
||
|
foo:
|
||
|
inc %eax
|
||
|
tmp3:
|
||
|
.rodata
|
||
|
.type obj,@object
|
||
|
.comm obj,4,4
|
||
|
.section .text.foo
|
||
|
inc %eax
|
||
|
# CHECK: <tmp3>:
|
||
|
# CHECK-NEXT: 1: incl
|