1 # RUN: llvm-mc -triple=i686-linux -filetype=obj %s -o - | \ 2 # RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s 3 # RUN: llvm-mc -triple=i686-nacl -filetype=obj %s -o - | \ 4 # RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s 5 # RUN: llvm-mc -triple=i686-nacl -filetype=obj -mc-relax-all %s -o - | \ 6 # RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s 7 8 .bundle_align_mode 5 9 .text 10 .globl main 11 .align 32, 0x90 12 .type main,@function 13 main: # @main 14 # CHECK-LABEL: main: 15 # Call + pop sequence for determining the PIC base. 16 .bundle_lock align_to_end 17 calll .L0$pb 18 .bundle_unlock 19 .L0$pb: 20 popl %eax 21 # CHECK: 20: popl 22 # 26 bytes of instructions between the pop and the use of the pic base symbol. 23 movl $3, 2(%ebx, %ebx) 24 movl $3, 2(%ebx, %ebx) 25 movl $3, 2(%ebx, %ebx) 26 hlt 27 hlt 28 # CHECK: nop 29 .Ltmp0: 30 addl (.Ltmp0-.L0$pb), %eax 31 # The addl has bundle padding to push it from 0x3b to 0x40. 32 # The difference between the labels should be 0x20 (0x40-0x20) not 0x1b 33 # (0x3b-0x20) 34 # CHECK: 40: addl 32, %eax 35 popl %ecx 36 jmp *%ecx 37 38 39 # Also make sure it works with a non-relaxable instruction (cmp vs add) 40 # and for 2 adjacent labels that both point to the correct instruction 41 .section .text.bar, "ax" 42 .globl bar 43 .align 32, 0x90 44 .type bar,@function 45 bar: 46 # CHECK-LABEL: bar: 47 .bundle_lock align_to_end 48 calll .L1$pb 49 .bundle_unlock 50 .L1$pb: 51 popl %eax 52 # CHECK: 20: popl 53 # 26 bytes of instructions between the pop and the use of the pic base symbol. 54 movl $3, 2(%ebx, %ebx) 55 movl $3, 2(%ebx, %ebx) 56 movl $3, 2(%ebx, %ebx) 57 hlt 58 hlt 59 # CHECK: nop 60 .Ltmp1: 61 .Ltmp2: 62 cmpl %eax, .Ltmp1 63 # CHECK: 40: cmpl %eax, 64 64 cmpl %eax, (.Ltmp2-.L1$pb) 65 # CHECK: 46: cmpl %eax, 32 66 popl %ecx 67 jmp *%ecx 68 69 70 # Switch sections in the middle of a function 71 .section .text.foo, "ax" 72 .globl foo 73 .align 32, 0x90 74 .type foo,@function 75 # CHECK-LABEL: foo: 76 foo: 77 inc %eax 78 tmp3: 79 .rodata 80 .type obj,@object 81 .comm obj,4,4 82 .section .text.foo 83 inc %eax 84 # CHECK: tmp3: 85 # CHECK-NEXT: 1: incl 86