[BOLT][TEST] Imported small tests

Summary:
Imported small internal tests:
- shared_object.test
- shrinkwrapping.test
- static_exe.test
- tailcall.test
- vararg.test

(cherry picked from FBD31523478)
This commit is contained in:
Amir Ayupov 2021-10-08 18:23:32 -07:00 committed by Maksim Panchenko
parent 44e08ead30
commit 01a81dca41
11 changed files with 1756 additions and 0 deletions

View File

@ -0,0 +1,493 @@
// Generated from g++ exception4.cpp -fomit-frame-pointer -S -O3
// Manually modified to trigger shrink-wrapping in function main
.text
.p2align 4,,15
.globl _Z3fooi
.type _Z3fooi, @function
_Z3fooi:
.LFB12:
.cfi_startproc
subq $8, %rsp
.cfi_def_cfa_offset 16
cmpl $1, %edi
movl $1, %edi
jle .L2
call __cxa_allocate_exception
xorl %edx, %edx
movl $_ZTI4ExcG, %esi
movq %rax, %rdi
call __cxa_throw
.L2:
call __cxa_allocate_exception
xorl %edx, %edx
movl $_ZTI4ExcC, %esi
movq %rax, %rdi
call __cxa_throw
.cfi_endproc
.LFE12:
.size _Z3fooi, .-_Z3fooi
.p2align 4,,15
.globl _Z11filter_onlyi
.type _Z11filter_onlyi, @function
_Z11filter_onlyi:
.LFB13:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
.cfi_lsda 0x3,.LLSDA13
subq $8, %rsp
.cfi_def_cfa_offset 16
.LEHB0:
call _Z3fooi
.LEHE0:
.L8:
addq $1, %rdx
movq %rax, %rdi
je .L7
.LEHB1:
call _Unwind_Resume
.L7:
call __cxa_call_unexpected
.LEHE1:
.cfi_endproc
.LFE13:
.globl __gxx_personality_v0
.section .gcc_except_table,"a",@progbits
.align 4
.LLSDA13:
.byte 0xff
.byte 0x3
.uleb128 .LLSDATT13-.LLSDATTD13
.LLSDATTD13:
.byte 0x1
.uleb128 .LLSDACSE13-.LLSDACSB13
.LLSDACSB13:
.uleb128 .LEHB0-.LFB13
.uleb128 .LEHE0-.LEHB0
.uleb128 .L8-.LFB13
.uleb128 0x1
.uleb128 .LEHB1-.LFB13
.uleb128 .LEHE1-.LEHB1
.uleb128 0
.uleb128 0
.LLSDACSE13:
.byte 0x7f
.byte 0
.align 4
.long _ZTI4ExcA
.long _ZTI4ExcB
.long _ZTI4ExcC
.long _ZTI4ExcD
.long _ZTI4ExcE
.long _ZTI4ExcF
.LLSDATT13:
.byte 0x1
.byte 0x2
.byte 0x3
.byte 0x4
.byte 0x5
.byte 0x6
.byte 0
.text
.size _Z11filter_onlyi, .-_Z11filter_onlyi
.section .rodata.str1.8,"aMS",@progbits,1
.align 8
.LC0:
.string "this statement is cold and should be outlined"
.text
.p2align 4,,15
.globl _Z12never_throwsv
.type _Z12never_throwsv, @function
_Z12never_throwsv:
.LFB14:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
.cfi_lsda 0x3,.LLSDA14
subq $8, %rsp
.cfi_def_cfa_offset 16
movl $.LC0, %edi
.LEHB2:
call puts
.LEHE2:
addq $8, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.L13:
.cfi_restore_state
addq $1, %rdx
movq %rax, %rdi
je .L12
.LEHB3:
call _Unwind_Resume
.L12:
call __cxa_call_unexpected
.LEHE3:
.cfi_endproc
.LFE14:
.section .gcc_except_table
.align 4
.LLSDA14:
.byte 0xff
.byte 0x3
.uleb128 .LLSDATT14-.LLSDATTD14
.LLSDATTD14:
.byte 0x1
.uleb128 .LLSDACSE14-.LLSDACSB14
.LLSDACSB14:
.uleb128 .LEHB2-.LFB14
.uleb128 .LEHE2-.LEHB2
.uleb128 .L13-.LFB14
.uleb128 0x1
.uleb128 .LEHB3-.LFB14
.uleb128 .LEHE3-.LEHB3
.uleb128 0
.uleb128 0
.LLSDACSE14:
.byte 0x7f
.byte 0
.align 4
.LLSDATT14:
.byte 0
.text
.size _Z12never_throwsv, .-_Z12never_throwsv
.section .rodata.str1.1,"aMS",@progbits,1
.LC1:
.string "catch 2"
.LC2:
.string "catch 1"
.LC3:
.string "caught ExcC"
.LC4:
.string "caught ExcG"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB15:
.cfi_startproc
.cfi_personality 0x3,__gxx_personality_v0
.cfi_lsda 0x3,.LLSDA15
pushq %r13
.cfi_def_cfa_offset 16
.cfi_offset 13, -16
pushq %r12
.cfi_def_cfa_offset 24
.cfi_offset 12, -24
pushq %rbp
.cfi_def_cfa_offset 32
.cfi_offset 6, -32
movl $10, %ebp
pushq %rbx
.cfi_def_cfa_offset 40
.cfi_offset 3, -40
movl %edi, %ebx
subq $8, %rsp
.cfi_def_cfa_offset 48
.Lcheck:
cmpl $2, %ebx
je .Lmyexit
.Lloop_pre_header:
movl $10, %ebp
jmp .L18
.L18:
cmpl $2, %ebx
je .Lmyexit
.L17:
movl $1, %edi
call __cxa_allocate_exception
xorl %edx, %edx
movl $_ZTI4ExcA, %esi
movq %rax, %rdi
.LEHB4:
call __cxa_throw
.LEHE4:
.L47:
call _Z12never_throwsv
call _Z12never_throwsv
.p2align 4,,5
jmp .L17
.L37:
cmpq $2, %rdx
movq %rax, %rdi
jne .L22
call __cxa_begin_catch
movl $.LC1, %edi
.LEHB5:
call puts
.LEHE5:
movl $8, %edi
call __cxa_allocate_exception
movl $4, %edi
movq %rax, %r12
.LEHB6:
call _Znwm
.LEHE6:
movl $0, (%rax)
xorl %edx, %edx
movq %rax, (%r12)
movl $_ZTIPi, %esi
movq %r12, %rdi
.LEHB7:
call __cxa_throw
.LEHE7:
.L39:
movq %rax, %r13
movq %r12, %rdi
movq %r13, %r12
call __cxa_free_exception
.L24:
call __cxa_end_catch
movq %r12, %rdi
.L22:
call __cxa_begin_catch
movl $.LC2, %edi
.LEHB8:
call puts
.LEHE8:
.LEHB9:
call __cxa_end_catch
.LEHE9:
movl %ebx, %edi
.LEHB10:
call _Z11filter_onlyi
.LEHE10:
.L38:
movq %rax, %r12
jmp .L24
.L41:
cmpq $4, %rdx
movq %rax, %rdi
movq %rdx, %rax
jne .L29
call __cxa_begin_catch
movl $.LC3, %edi
.LEHB11:
call puts
.LEHE11:
.L35:
call __cxa_end_catch
subl $1, %ebp
jne .L18
.Lmyexit:
popq %rdx
.cfi_remember_state
.cfi_def_cfa_offset 40
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
xorl %eax, %eax
popq %r13
.cfi_def_cfa_offset 8
ret
.L40:
.cfi_restore_state
movq %rax, %rbx
call __cxa_end_catch
movq %rbx, %rdi
.LEHB12:
call _Unwind_Resume
.LEHE12:
.L42:
movq %rax, %r13
movq %rdx, %r12
call __cxa_end_catch
movq %r13, %rdi
movq %r12, %rax
.L29:
cmpq $3, %rax
jne .L46
call __cxa_begin_catch
movl $.LC4, %edi
.LEHB13:
call puts
.LEHE13:
jmp .L35
.L43:
movq %rax, %rbx
call __cxa_end_catch
movq %rbx, %rdi
.L46:
.LEHB14:
call _Unwind_Resume
jmp .L43
.LEHE14:
.cfi_endproc
.LFE15:
.section .gcc_except_table
.align 4
.LLSDA15:
.byte 0xff
.byte 0x3
.uleb128 .LLSDATT15-.LLSDATTD15
.LLSDATTD15:
.byte 0x1
.uleb128 .LLSDACSE15-.LLSDACSB15
.LLSDACSB15:
.uleb128 .LEHB4-.LFB15
.uleb128 .LEHE4-.LEHB4
.uleb128 .L37-.LFB15
.uleb128 0x3
.uleb128 .LEHB5-.LFB15
.uleb128 .LEHE5-.LEHB5
.uleb128 .L38-.LFB15
.uleb128 0x5
.uleb128 .LEHB6-.LFB15
.uleb128 .LEHE6-.LEHB6
.uleb128 .L39-.LFB15
.uleb128 0x5
.uleb128 .LEHB7-.LFB15
.uleb128 .LEHE7-.LEHB7
.uleb128 .L38-.LFB15
.uleb128 0x5
.uleb128 .LEHB8-.LFB15
.uleb128 .LEHE8-.LEHB8
.uleb128 .L40-.LFB15
.uleb128 0
.uleb128 .LEHB9-.LFB15
.uleb128 .LEHE9-.LEHB9
.uleb128 0
.uleb128 0
.uleb128 .LEHB10-.LFB15
.uleb128 .LEHE10-.LEHB10
.uleb128 .L41-.LFB15
.uleb128 0x9
.uleb128 .LEHB11-.LFB15
.uleb128 .LEHE11-.LEHB11
.uleb128 .L42-.LFB15
.uleb128 0xb
.uleb128 .LEHB12-.LFB15
.uleb128 .LEHE12-.LEHB12
.uleb128 0
.uleb128 0
.uleb128 .LEHB13-.LFB15
.uleb128 .LEHE13-.LEHB13
.uleb128 .L43-.LFB15
.uleb128 0
.uleb128 .LEHB14-.LFB15
.uleb128 .LEHE14-.LEHB14
.uleb128 0
.uleb128 0
.LLSDACSE15:
.byte 0x1
.byte 0
.byte 0x2
.byte 0x7d
.byte 0
.byte 0x7b
.byte 0x3
.byte 0
.byte 0x4
.byte 0x7d
.byte 0
.byte 0x7b
.align 4
.long _ZTI4ExcC
.long _ZTI4ExcG
.long _ZTI4ExcA
.long 0
.LLSDATT15:
.section .text.startup
.size main, .-main
.weak _ZTI4ExcG
.section .rodata._ZTI4ExcG,"aG",@progbits,_ZTI4ExcG,comdat
.align 16
.type _ZTI4ExcG, @object
.size _ZTI4ExcG, 16
_ZTI4ExcG:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcG
.weak _ZTS4ExcG
.section .rodata._ZTS4ExcG,"aG",@progbits,_ZTS4ExcG,comdat
.type _ZTS4ExcG, @object
.size _ZTS4ExcG, 6
_ZTS4ExcG:
.string "4ExcG"
.weak _ZTI4ExcC
.section .rodata._ZTI4ExcC,"aG",@progbits,_ZTI4ExcC,comdat
.align 16
.type _ZTI4ExcC, @object
.size _ZTI4ExcC, 16
_ZTI4ExcC:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcC
.weak _ZTS4ExcC
.section .rodata._ZTS4ExcC,"aG",@progbits,_ZTS4ExcC,comdat
.type _ZTS4ExcC, @object
.size _ZTS4ExcC, 6
_ZTS4ExcC:
.string "4ExcC"
.weak _ZTI4ExcA
.section .rodata._ZTI4ExcA,"aG",@progbits,_ZTI4ExcA,comdat
.align 16
.type _ZTI4ExcA, @object
.size _ZTI4ExcA, 16
_ZTI4ExcA:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcA
.weak _ZTS4ExcA
.section .rodata._ZTS4ExcA,"aG",@progbits,_ZTS4ExcA,comdat
.type _ZTS4ExcA, @object
.size _ZTS4ExcA, 6
_ZTS4ExcA:
.string "4ExcA"
.weak _ZTI4ExcB
.section .rodata._ZTI4ExcB,"aG",@progbits,_ZTI4ExcB,comdat
.align 16
.type _ZTI4ExcB, @object
.size _ZTI4ExcB, 16
_ZTI4ExcB:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcB
.weak _ZTS4ExcB
.section .rodata._ZTS4ExcB,"aG",@progbits,_ZTS4ExcB,comdat
.type _ZTS4ExcB, @object
.size _ZTS4ExcB, 6
_ZTS4ExcB:
.string "4ExcB"
.weak _ZTI4ExcD
.section .rodata._ZTI4ExcD,"aG",@progbits,_ZTI4ExcD,comdat
.align 16
.type _ZTI4ExcD, @object
.size _ZTI4ExcD, 16
_ZTI4ExcD:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcD
.weak _ZTS4ExcD
.section .rodata._ZTS4ExcD,"aG",@progbits,_ZTS4ExcD,comdat
.type _ZTS4ExcD, @object
.size _ZTS4ExcD, 6
_ZTS4ExcD:
.string "4ExcD"
.weak _ZTI4ExcE
.section .rodata._ZTI4ExcE,"aG",@progbits,_ZTI4ExcE,comdat
.align 16
.type _ZTI4ExcE, @object
.size _ZTI4ExcE, 16
_ZTI4ExcE:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcE
.weak _ZTS4ExcE
.section .rodata._ZTS4ExcE,"aG",@progbits,_ZTS4ExcE,comdat
.type _ZTS4ExcE, @object
.size _ZTS4ExcE, 6
_ZTS4ExcE:
.string "4ExcE"
.weak _ZTI4ExcF
.section .rodata._ZTI4ExcF,"aG",@progbits,_ZTI4ExcF,comdat
.align 16
.type _ZTI4ExcF, @object
.size _ZTI4ExcF, 16
_ZTI4ExcF:
.quad _ZTVN10__cxxabiv117__class_type_infoE+16
.quad _ZTS4ExcF
.weak _ZTS4ExcF
.section .rodata._ZTS4ExcF,"aG",@progbits,_ZTS4ExcF,comdat
.type _ZTS4ExcF, @object
.size _ZTS4ExcF, 6
_ZTS4ExcF:
.string "4ExcF"

View File

@ -0,0 +1,2 @@
0 xxx 0 1 main 0 0 100
1 main 14 1 main f9 0 100

View File

@ -0,0 +1,10 @@
.globl main
.type main, %function
main:
pushq %rbp
movq %rsp, %rbp
hlt
movl $0x0, %eax
popq %rbp
retq
.size main, .-main

View File

@ -0,0 +1,29 @@
.globl main
.type main, %function
main:
subq $0x8, %rsp
callq foo
movl $0x400638, %edi
callq puts@PLT
xorl %eax, %eax
addq $0x8, %rsp
retq
.size main, .-main
.globl foo
.type foo, %function
foo:
jmp bar
.size foo, .-foo
.globl bar
.type bar, %function
bar:
jmp baz
.size bar, .-bar
.globl baz
.type baz, %function
baz:
retq
.size baz, .-baz

View File

@ -0,0 +1,567 @@
.file "vararg.cpp"
.section .debug_abbrev,"",@progbits
.Ldebug_abbrev0:
.section .debug_info,"",@progbits
.Ldebug_info0:
.section .debug_line,"",@progbits
.Ldebug_line0:
.text
.Ltext0:
.globl _Z8myprintfPKcz
.type _Z8myprintfPKcz, @function
_Z8myprintfPKcz:
.LFB0:
.file 1 "./example.cpp"
.loc 1 3 0
.cfi_startproc
pushq %rbp
.LCFI0:
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.LCFI1:
.cfi_def_cfa_register 6
subq $104, %rsp
movq %rsi, -168(%rbp)
movq %rdx, -160(%rbp)
movq %rcx, -152(%rbp)
movq %r8, -144(%rbp)
movq %r9, -136(%rbp)
movzbl %al, %eax
leaq 0(,%rax,4), %rdx
movl $.L2, %eax
subq %rdx, %rax
leaq -1(%rbp), %rdx
jmp *%rax
movaps %xmm7, -15(%rdx)
movaps %xmm6, -31(%rdx)
movaps %xmm5, -47(%rdx)
movaps %xmm4, -63(%rdx)
movaps %xmm3, -79(%rdx)
movaps %xmm2, -95(%rdx)
movaps %xmm1, -111(%rdx)
movaps %xmm0, -127(%rdx)
.L2:
movq %rdi, -216(%rbp)
.LBB2:
.loc 1 5 0
leaq -208(%rbp), %rax
movl $8, (%rax)
leaq -208(%rbp), %rax
movl $48, 4(%rax)
leaq -208(%rbp), %rax
leaq 16(%rbp), %rdx
movq %rdx, 8(%rax)
leaq -208(%rbp), %rax
leaq -176(%rbp), %rdx
movq %rdx, 16(%rax)
.loc 1 7 0
movl $1, %eax
.LBE2:
.loc 1 8 0
leave
.LCFI2:
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size _Z8myprintfPKcz, .-_Z8myprintfPKcz
.globl main
.type main, @function
main:
.LFB1:
.loc 1 10 0
.cfi_startproc
pushq %rbp
.LCFI3:
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.LCFI4:
.cfi_def_cfa_register 6
.loc 1 11 0
movl $0, %eax
.loc 1 12 0
leave
.LCFI5:
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1:
.size main, .-main
.Letext0:
.section .debug_loc,"",@progbits
.Ldebug_loc0:
.LLST0:
.quad .LFB0-.Ltext0
.quad .LCFI0-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad .LCFI0-.Ltext0
.quad .LCFI1-.Ltext0
.value 0x2
.byte 0x77
.sleb128 16
.quad .LCFI1-.Ltext0
.quad .LCFI2-.Ltext0
.value 0x2
.byte 0x76
.sleb128 16
.quad .LCFI2-.Ltext0
.quad .LFE0-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad 0x0
.quad 0x0
.LLST1:
.quad .LFB1-.Ltext0
.quad .LCFI3-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad .LCFI3-.Ltext0
.quad .LCFI4-.Ltext0
.value 0x2
.byte 0x77
.sleb128 16
.quad .LCFI4-.Ltext0
.quad .LCFI5-.Ltext0
.value 0x2
.byte 0x76
.sleb128 16
.quad .LCFI5-.Ltext0
.quad .LFE1-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad 0x0
.quad 0x0
.file 2 "<built-in>"
.file 3 "/opt/compiler-explorer/gcc-4.5.3/bin/../lib/gcc/x86_64-linux-gnu/4.5.3/include/stdarg.h"
.section .debug_info
.long 0x138
.value 0x2
.long .Ldebug_abbrev0
.byte 0x8
.uleb128 0x1
.long .LASF9
.byte 0x4
.long .LASF10
.long .LASF11
.quad .Ltext0
.quad .Letext0
.long .Ldebug_line0
.uleb128 0x2
.long .LASF6
.byte 0x3
.byte 0x28
.long 0x38
.uleb128 0x3
.long 0x4f
.long 0x48
.uleb128 0x4
.long 0x48
.byte 0x0
.byte 0x0
.uleb128 0x5
.byte 0x8
.byte 0x7
.long .LASF4
.uleb128 0x6
.long .LASF12
.byte 0x18
.byte 0x2
.byte 0x0
.long 0x94
.uleb128 0x7
.long .LASF0
.byte 0x2
.byte 0x0
.long 0x94
.byte 0x2
.byte 0x23
.uleb128 0x0
.uleb128 0x7
.long .LASF1
.byte 0x2
.byte 0x0
.long 0x94
.byte 0x2
.byte 0x23
.uleb128 0x4
.uleb128 0x7
.long .LASF2
.byte 0x2
.byte 0x0
.long 0x9b
.byte 0x2
.byte 0x23
.uleb128 0x8
.uleb128 0x7
.long .LASF3
.byte 0x2
.byte 0x0
.long 0x9b
.byte 0x2
.byte 0x23
.uleb128 0x10
.byte 0x0
.uleb128 0x5
.byte 0x4
.byte 0x7
.long .LASF5
.uleb128 0x8
.byte 0x8
.uleb128 0x2
.long .LASF7
.byte 0x3
.byte 0x66
.long 0x2d
.uleb128 0x9
.byte 0x1
.long .LASF13
.byte 0x1
.byte 0x3
.long .LASF14
.long 0x102
.quad .LFB0
.quad .LFE0
.long .LLST0
.long 0x102
.uleb128 0xa
.long .LASF15
.byte 0x1
.byte 0x3
.long 0x109
.byte 0x3
.byte 0x91
.sleb128 -232
.uleb128 0xb
.uleb128 0xc
.quad .LBB2
.quad .LBE2
.uleb128 0xd
.long .LASF16
.byte 0x1
.byte 0x4
.long 0x9d
.byte 0x3
.byte 0x91
.sleb128 -224
.byte 0x0
.byte 0x0
.uleb128 0xe
.byte 0x4
.byte 0x5
.string "int"
.uleb128 0xf
.byte 0x8
.long 0x10f
.uleb128 0x10
.long 0x114
.uleb128 0x5
.byte 0x1
.byte 0x6
.long .LASF8
.uleb128 0x11
.byte 0x1
.long .LASF17
.byte 0x1
.byte 0xa
.long 0x102
.quad .LFB1
.quad .LFE1
.long .LLST1
.byte 0x0
.section .debug_abbrev
.uleb128 0x1
.uleb128 0x11
.byte 0x1
.uleb128 0x25
.uleb128 0xe
.uleb128 0x13
.uleb128 0xb
.uleb128 0x3
.uleb128 0xe
.uleb128 0x1b
.uleb128 0xe
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x10
.uleb128 0x6
.byte 0x0
.byte 0x0
.uleb128 0x2
.uleb128 0x16
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x3
.uleb128 0x1
.byte 0x1
.uleb128 0x49
.uleb128 0x13
.uleb128 0x1
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x4
.uleb128 0x21
.byte 0x0
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2f
.uleb128 0xb
.byte 0x0
.byte 0x0
.uleb128 0x5
.uleb128 0x24
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3e
.uleb128 0xb
.uleb128 0x3
.uleb128 0xe
.byte 0x0
.byte 0x0
.uleb128 0x6
.uleb128 0x13
.byte 0x1
.uleb128 0x3
.uleb128 0xe
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x1
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x7
.uleb128 0xd
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x38
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0x8
.uleb128 0xf
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.byte 0x0
.byte 0x0
.uleb128 0x9
.uleb128 0x2e
.byte 0x1
.uleb128 0x3f
.uleb128 0xc
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x2007
.uleb128 0xe
.uleb128 0x49
.uleb128 0x13
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x40
.uleb128 0x6
.uleb128 0x1
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0xa
.uleb128 0x5
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0xb
.uleb128 0x18
.byte 0x0
.byte 0x0
.byte 0x0
.uleb128 0xc
.uleb128 0xb
.byte 0x1
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.byte 0x0
.byte 0x0
.uleb128 0xd
.uleb128 0x34
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0xe
.uleb128 0x24
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3e
.uleb128 0xb
.uleb128 0x3
.uleb128 0x8
.byte 0x0
.byte 0x0
.uleb128 0xf
.uleb128 0xf
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x10
.uleb128 0x26
.byte 0x0
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x11
.uleb128 0x2e
.byte 0x0
.uleb128 0x3f
.uleb128 0xc
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x40
.uleb128 0x6
.byte 0x0
.byte 0x0
.byte 0x0
.section .debug_pubnames,"",@progbits
.long 0x24
.value 0x2
.long .Ldebug_info0
.long 0x13c
.long 0xa8
.string "myprintf"
.long 0x11b
.string "main"
.long 0x0
.section .debug_pubtypes,"",@progbits
.long 0x3f
.value 0x2
.long .Ldebug_info0
.long 0x13c
.long 0x4f
.string "__va_list_tag"
.long 0x2d
.string "__gnuc_va_list"
.long 0x9d
.string "va_list"
.long 0x0
.section .debug_aranges,"",@progbits
.long 0x2c
.value 0x2
.long .Ldebug_info0
.byte 0x8
.byte 0x0
.value 0x0
.value 0x0
.quad .Ltext0
.quad .Letext0-.Ltext0
.quad 0x0
.quad 0x0
.section .debug_str,"MS",@progbits,1
.LASF5:
.string "unsigned int"
.LASF12:
.string "typedef __va_list_tag __va_list_tag"
.LASF6:
.string "__gnuc_va_list"
.LASF13:
.string "myprintf"
.LASF0:
.string "gp_offset"
.LASF1:
.string "fp_offset"
.LASF7:
.string "va_list"
.LASF11:
.string "/home/ubuntu"
.LASF3:
.string "reg_save_area"
.LASF15:
.string "format"
.LASF17:
.string "main"
.LASF4:
.string "long unsigned int"
.LASF14:
.string "_Z8myprintfPKcz"
.LASF9:
.string "GNU C++ 4.5.3"
.LASF16:
.string "argp"
.LASF10:
.string "./example.cpp"
.LASF2:
.string "overflow_arg_area"
.LASF8:
.string "char"
.ident "GCC: (GCC-Explorer-Build) 4.5.3"
.section .note.GNU-stack,"",@progbits

View File

@ -0,0 +1,567 @@
.file "example.cpp"
.section .debug_abbrev,"",@progbits
.Ldebug_abbrev0:
.section .debug_info,"",@progbits
.Ldebug_info0:
.section .debug_line,"",@progbits
.Ldebug_line0:
.text
.Ltext0:
.globl _Z8myprintfPKcz
.type _Z8myprintfPKcz, @function
_Z8myprintfPKcz:
.LFB0:
.file 1 "./example.cpp"
.loc 1 3 0
.cfi_startproc
pushq %rbp
.LCFI0:
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.LCFI1:
.cfi_def_cfa_register 6
subq $104, %rsp
movq %rsi, -168(%rbp)
movq %rdx, -160(%rbp)
movq %rcx, -152(%rbp)
movq %r8, -144(%rbp)
movq %r9, -136(%rbp)
movzbl %al, %eax
leaq 0(,%rax,4), %rdx
leaq .L2(%rip), %rax
subq %rdx, %rax
leaq -1(%rbp), %rdx
jmp *%rax
movaps %xmm7, -15(%rdx)
movaps %xmm6, -31(%rdx)
movaps %xmm5, -47(%rdx)
movaps %xmm4, -63(%rdx)
movaps %xmm3, -79(%rdx)
movaps %xmm2, -95(%rdx)
movaps %xmm1, -111(%rdx)
movaps %xmm0, -127(%rdx)
.L2:
movq %rdi, -216(%rbp)
.LBB2:
.loc 1 5 0
leaq -208(%rbp), %rax
movl $8, (%rax)
leaq -208(%rbp), %rax
movl $48, 4(%rax)
leaq -208(%rbp), %rax
leaq 16(%rbp), %rdx
movq %rdx, 8(%rax)
leaq -208(%rbp), %rax
leaq -176(%rbp), %rdx
movq %rdx, 16(%rax)
.loc 1 7 0
movl $1, %eax
.LBE2:
.loc 1 8 0
leave
.LCFI2:
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size _Z8myprintfPKcz, .-_Z8myprintfPKcz
.globl main
.type main, @function
main:
.LFB1:
.loc 1 10 0
.cfi_startproc
pushq %rbp
.LCFI3:
.cfi_def_cfa_offset 16
movq %rsp, %rbp
.cfi_offset 6, -16
.LCFI4:
.cfi_def_cfa_register 6
.loc 1 11 0
movl $0, %eax
.loc 1 12 0
leave
.LCFI5:
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1:
.size main, .-main
.Letext0:
.section .debug_loc,"",@progbits
.Ldebug_loc0:
.LLST0:
.quad .LFB0-.Ltext0
.quad .LCFI0-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad .LCFI0-.Ltext0
.quad .LCFI1-.Ltext0
.value 0x2
.byte 0x77
.sleb128 16
.quad .LCFI1-.Ltext0
.quad .LCFI2-.Ltext0
.value 0x2
.byte 0x76
.sleb128 16
.quad .LCFI2-.Ltext0
.quad .LFE0-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad 0x0
.quad 0x0
.LLST1:
.quad .LFB1-.Ltext0
.quad .LCFI3-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad .LCFI3-.Ltext0
.quad .LCFI4-.Ltext0
.value 0x2
.byte 0x77
.sleb128 16
.quad .LCFI4-.Ltext0
.quad .LCFI5-.Ltext0
.value 0x2
.byte 0x76
.sleb128 16
.quad .LCFI5-.Ltext0
.quad .LFE1-.Ltext0
.value 0x2
.byte 0x77
.sleb128 8
.quad 0x0
.quad 0x0
.file 2 "<built-in>"
.file 3 "/opt/compiler-explorer/gcc-4.5.3/bin/../lib/gcc/x86_64-linux-gnu/4.5.3/include/stdarg.h"
.section .debug_info
.long 0x138
.value 0x2
.long .Ldebug_abbrev0
.byte 0x8
.uleb128 0x1
.long .LASF9
.byte 0x4
.long .LASF10
.long .LASF11
.quad .Ltext0
.quad .Letext0
.long .Ldebug_line0
.uleb128 0x2
.long .LASF6
.byte 0x3
.byte 0x28
.long 0x38
.uleb128 0x3
.long 0x4f
.long 0x48
.uleb128 0x4
.long 0x48
.byte 0x0
.byte 0x0
.uleb128 0x5
.byte 0x8
.byte 0x7
.long .LASF4
.uleb128 0x6
.long .LASF12
.byte 0x18
.byte 0x2
.byte 0x0
.long 0x94
.uleb128 0x7
.long .LASF0
.byte 0x2
.byte 0x0
.long 0x94
.byte 0x2
.byte 0x23
.uleb128 0x0
.uleb128 0x7
.long .LASF1
.byte 0x2
.byte 0x0
.long 0x94
.byte 0x2
.byte 0x23
.uleb128 0x4
.uleb128 0x7
.long .LASF2
.byte 0x2
.byte 0x0
.long 0x9b
.byte 0x2
.byte 0x23
.uleb128 0x8
.uleb128 0x7
.long .LASF3
.byte 0x2
.byte 0x0
.long 0x9b
.byte 0x2
.byte 0x23
.uleb128 0x10
.byte 0x0
.uleb128 0x5
.byte 0x4
.byte 0x7
.long .LASF5
.uleb128 0x8
.byte 0x8
.uleb128 0x2
.long .LASF7
.byte 0x3
.byte 0x66
.long 0x2d
.uleb128 0x9
.byte 0x1
.long .LASF13
.byte 0x1
.byte 0x3
.long .LASF14
.long 0x102
.quad .LFB0
.quad .LFE0
.long .LLST0
.long 0x102
.uleb128 0xa
.long .LASF15
.byte 0x1
.byte 0x3
.long 0x109
.byte 0x3
.byte 0x91
.sleb128 -232
.uleb128 0xb
.uleb128 0xc
.quad .LBB2
.quad .LBE2
.uleb128 0xd
.long .LASF16
.byte 0x1
.byte 0x4
.long 0x9d
.byte 0x3
.byte 0x91
.sleb128 -224
.byte 0x0
.byte 0x0
.uleb128 0xe
.byte 0x4
.byte 0x5
.string "int"
.uleb128 0xf
.byte 0x8
.long 0x10f
.uleb128 0x10
.long 0x114
.uleb128 0x5
.byte 0x1
.byte 0x6
.long .LASF8
.uleb128 0x11
.byte 0x1
.long .LASF17
.byte 0x1
.byte 0xa
.long 0x102
.quad .LFB1
.quad .LFE1
.long .LLST1
.byte 0x0
.section .debug_abbrev
.uleb128 0x1
.uleb128 0x11
.byte 0x1
.uleb128 0x25
.uleb128 0xe
.uleb128 0x13
.uleb128 0xb
.uleb128 0x3
.uleb128 0xe
.uleb128 0x1b
.uleb128 0xe
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x10
.uleb128 0x6
.byte 0x0
.byte 0x0
.uleb128 0x2
.uleb128 0x16
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x3
.uleb128 0x1
.byte 0x1
.uleb128 0x49
.uleb128 0x13
.uleb128 0x1
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x4
.uleb128 0x21
.byte 0x0
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2f
.uleb128 0xb
.byte 0x0
.byte 0x0
.uleb128 0x5
.uleb128 0x24
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3e
.uleb128 0xb
.uleb128 0x3
.uleb128 0xe
.byte 0x0
.byte 0x0
.uleb128 0x6
.uleb128 0x13
.byte 0x1
.uleb128 0x3
.uleb128 0xe
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x1
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x7
.uleb128 0xd
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x38
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0x8
.uleb128 0xf
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.byte 0x0
.byte 0x0
.uleb128 0x9
.uleb128 0x2e
.byte 0x1
.uleb128 0x3f
.uleb128 0xc
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x2007
.uleb128 0xe
.uleb128 0x49
.uleb128 0x13
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x40
.uleb128 0x6
.uleb128 0x1
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0xa
.uleb128 0x5
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0xb
.uleb128 0x18
.byte 0x0
.byte 0x0
.byte 0x0
.uleb128 0xc
.uleb128 0xb
.byte 0x1
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.byte 0x0
.byte 0x0
.uleb128 0xd
.uleb128 0x34
.byte 0x0
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x2
.uleb128 0xa
.byte 0x0
.byte 0x0
.uleb128 0xe
.uleb128 0x24
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x3e
.uleb128 0xb
.uleb128 0x3
.uleb128 0x8
.byte 0x0
.byte 0x0
.uleb128 0xf
.uleb128 0xf
.byte 0x0
.uleb128 0xb
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x10
.uleb128 0x26
.byte 0x0
.uleb128 0x49
.uleb128 0x13
.byte 0x0
.byte 0x0
.uleb128 0x11
.uleb128 0x2e
.byte 0x0
.uleb128 0x3f
.uleb128 0xc
.uleb128 0x3
.uleb128 0xe
.uleb128 0x3a
.uleb128 0xb
.uleb128 0x3b
.uleb128 0xb
.uleb128 0x49
.uleb128 0x13
.uleb128 0x11
.uleb128 0x1
.uleb128 0x12
.uleb128 0x1
.uleb128 0x40
.uleb128 0x6
.byte 0x0
.byte 0x0
.byte 0x0
.section .debug_pubnames,"",@progbits
.long 0x24
.value 0x2
.long .Ldebug_info0
.long 0x13c
.long 0xa8
.string "myprintf"
.long 0x11b
.string "main"
.long 0x0
.section .debug_pubtypes,"",@progbits
.long 0x3f
.value 0x2
.long .Ldebug_info0
.long 0x13c
.long 0x4f
.string "__va_list_tag"
.long 0x2d
.string "__gnuc_va_list"
.long 0x9d
.string "va_list"
.long 0x0
.section .debug_aranges,"",@progbits
.long 0x2c
.value 0x2
.long .Ldebug_info0
.byte 0x8
.byte 0x0
.value 0x0
.value 0x0
.quad .Ltext0
.quad .Letext0-.Ltext0
.quad 0x0
.quad 0x0
.section .debug_str,"MS",@progbits,1
.LASF5:
.string "unsigned int"
.LASF12:
.string "typedef __va_list_tag __va_list_tag"
.LASF6:
.string "__gnuc_va_list"
.LASF13:
.string "myprintf"
.LASF0:
.string "gp_offset"
.LASF1:
.string "fp_offset"
.LASF7:
.string "va_list"
.LASF11:
.string "/home/ubuntu"
.LASF3:
.string "reg_save_area"
.LASF15:
.string "format"
.LASF17:
.string "main"
.LASF4:
.string "long unsigned int"
.LASF14:
.string "_Z8myprintfPKcz"
.LASF9:
.string "GNU C++ 4.5.3"
.LASF16:
.string "argp"
.LASF10:
.string "./example.cpp"
.LASF2:
.string "overflow_arg_area"
.LASF8:
.string "char"
.ident "GCC: (GCC-Explorer-Build) 4.5.3"
.section .note.GNU-stack,"",@progbits

View File

@ -0,0 +1,5 @@
# Test that llvm-bolt processes *.so without a failure
RUN: %clang %S/Inputs/icf-jump-tables.c -o %t.so -shared -fPIC -Wl,--build-id
RUN: llvm-bolt %t.so -o %t | FileCheck %s
CHECK: patched build-id

View File

@ -0,0 +1,45 @@
# Verifies that llvm-bolt updates CFI correctly after
# shrink-wrapping when optimizing a function without
# frame pointers.
RUN: %clangxx -O3 %S/Inputs/exc4sw.S -o %t.exe -Wl,-q
RUN: llvm-bolt %t.exe -o %t -relocs -frame-opt=all \
RUN: -data=%p/Inputs/exc4sw.fdata -reorder-blocks=cache 2>&1 | \
RUN: FileCheck %s --check-prefix=CHECK-BOLT
RUN: llvm-objdump --dwarf=frames %t.exe | grep -A20 -e \
RUN: `llvm-nm --numeric-sort %t.exe | grep main | tail -n 1 | \
RUN: cut -f1 -d' ' | tail -c9` 2>&1 | FileCheck %s --check-prefix=CHECK-INPUT
RUN: llvm-objdump --dwarf=frames %t | grep -A20 -e \
RUN: `llvm-nm --numeric-sort %t | grep main | tail -n 1 | cut -f1 -d' ' | \
RUN: tail -c9` 2>&1 | FileCheck %s --check-prefix=CHECK-OUTPUT
CHECK-BOLT: Shrink wrapping moved 2 spills inserting load/stores and 0 spills inserting push/pops
CHECK-INPUT: DW_CFA_advance_loc: 2
CHECK-INPUT-NEXT: DW_CFA_def_cfa_offset: +16
CHECK-INPUT-NEXT: DW_CFA_offset: reg13 -16
CHECK-INPUT-NEXT: DW_CFA_advance_loc: 2
CHECK-INPUT-NEXT: DW_CFA_def_cfa_offset: +24
CHECK-INPUT-NEXT: DW_CFA_offset: reg12 -24
CHECK-INPUT-NEXT: DW_CFA_advance_loc: 1
CHECK-INPUT-NEXT: DW_CFA_def_cfa_offset: +32
CHECK-INPUT-NEXT: DW_CFA_offset: reg6 -32
CHECK-INPUT-NEXT: DW_CFA_advance_loc: 6
CHECK-INPUT-NEXT: DW_CFA_def_cfa_offset: +40
CHECK-INPUT-NEXT: DW_CFA_offset: reg3 -40
CHECK-INPUT-NEXT: DW_CFA_advance_loc: 6
CHECK-INPUT-NEXT: DW_CFA_def_cfa_offset: +48
CHECK-OUTPUT: DW_CFA_advance_loc: 4
CHECK-OUTPUT-NEXT: DW_CFA_def_cfa_offset: +16
CHECK-OUTPUT-NEXT: DW_CFA_def_cfa_offset: +24
CHECK-OUTPUT-NEXT: DW_CFA_advance_loc: 1
CHECK-OUTPUT-NEXT: DW_CFA_def_cfa_offset: +32
CHECK-OUTPUT-NEXT: DW_CFA_offset: reg6 -32
CHECK-OUTPUT-NEXT: DW_CFA_advance_loc: 6
CHECK-OUTPUT-NEXT: DW_CFA_def_cfa_offset: +40
CHECK-OUTPUT-NEXT: DW_CFA_offset: reg3 -40
CHECK-OUTPUT-NEXT: DW_CFA_advance_loc: 6
CHECK-OUTPUT-NEXT: DW_CFA_def_cfa_offset: +48

View File

@ -0,0 +1,6 @@
# Check that llvm-bolt can rewrite static executable
RUN: %clang %S/Inputs/static_exe.s -static -o %t.exe -nostdlib
RUN: llvm-bolt %t.exe -o %t |& FileCheck %s
CHECK: 1 out of 1 functions were overwritten

View File

@ -0,0 +1,13 @@
# Verifies that llvm-bolt recognizes tailcalls and mark them
# in control flow graph.
RUN: %clang %S/Inputs/tailcall.s -o %t.exe
RUN: llvm-bolt %t.exe -o /dev/null -print-cfg 2>&1 | FileCheck %s
CHECK: Binary Function "foo"
CHECK: jmp bar # TAILCALL
CHECK: End of Function "foo"
CHECK: Binary Function "bar"
CHECK: jmp baz # TAILCALL
CHECK: End of Function "bar"

19
bolt/test/X86/vararg.test Normal file
View File

@ -0,0 +1,19 @@
# Check that a function that references a label inside itself,
# as in the case of vararg handling code generated by GCC 4.5
# and earlier, is recognized as multi-entry.
REQUIRES: x86_64-linux
RUN: %clangxx %p/Inputs/vararg.s -o %t -Wl,-q
RUN: llvm-bolt %t -o /dev/null -print-cfg -print-only=.*printf.* |& FileCheck %s
RUN: %clangxx %p/Inputs/vararg_pic.s -o %t.pic -Wl,-q
RUN: llvm-bolt %t.pic -o /dev/null -print-cfg -print-only=.*printf.* \
RUN: |& FileCheck -check-prefix=CHECK-PIC %s
CHECK: IsSimple : 0
CHECK: Entry Point
CHECK: Entry Point
CHECK-PIC: IsSimple : 0
CHECK-PIC: Entry Point
CHECK-PIC: Entry Point