196 lines
3.6 KiB
ArmAsm
196 lines
3.6 KiB
ArmAsm
# Source (tiny.cc):
|
|
# void a() {}
|
|
# void b() {}
|
|
# int main(int argc, char** argv) {
|
|
# void(*ptr)();
|
|
# if (argc == 1)
|
|
# ptr = &a;
|
|
# else
|
|
# ptr = &b;
|
|
# ptr();
|
|
# }
|
|
# Compile with (output is in tiny.s.0):
|
|
# clang++ -flto -fsanitize=cfi -fvisibility=hidden -c tiny.cc -o tiny.o -gmlt
|
|
# clang++ tiny.o -o tiny -flto -fuse-ld=gold -Wl,-plugin-opt,save-temps
|
|
# clang++ -fsanitize=cfi -flto -fvisibility=hidden -c tiny.cc -o tiny.o -gmlt
|
|
# llvm-lto2 run @tiny.resolution.txt -o tiny.s -filetype=asm
|
|
|
|
.text
|
|
.file "ld-temp.o"
|
|
.p2align 4, 0x90
|
|
.type _Z1av.cfi,@function
|
|
_Z1av.cfi:
|
|
.Lfunc_begin0:
|
|
.file 1 "tiny.cc"
|
|
.loc 1 1 0
|
|
.cfi_startproc
|
|
pushq %rbp
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset %rbp, -16
|
|
movq %rsp, %rbp
|
|
.cfi_def_cfa_register %rbp
|
|
.Ltmp0:
|
|
.loc 1 1 11 prologue_end
|
|
popq %rbp
|
|
retq
|
|
.Ltmp1:
|
|
.Lfunc_end0:
|
|
.size _Z1av.cfi, .Lfunc_end0-_Z1av.cfi
|
|
.cfi_endproc
|
|
|
|
.p2align 4, 0x90
|
|
.type _Z1bv.cfi,@function
|
|
_Z1bv.cfi:
|
|
.Lfunc_begin1:
|
|
.loc 1 2 0
|
|
.cfi_startproc
|
|
pushq %rbp
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset %rbp, -16
|
|
movq %rsp, %rbp
|
|
.cfi_def_cfa_register %rbp
|
|
.Ltmp2:
|
|
.loc 1 2 11 prologue_end
|
|
popq %rbp
|
|
retq
|
|
.Ltmp3:
|
|
.Lfunc_end1:
|
|
.size _Z1bv.cfi, .Lfunc_end1-_Z1bv.cfi
|
|
.cfi_endproc
|
|
|
|
.hidden main
|
|
.globl main
|
|
.p2align 4, 0x90
|
|
.type main,@function
|
|
main:
|
|
.Lfunc_begin2:
|
|
.loc 1 4 0
|
|
.cfi_startproc
|
|
pushq %rbp
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset %rbp, -16
|
|
movq %rsp, %rbp
|
|
.cfi_def_cfa_register %rbp
|
|
subq $32, %rsp
|
|
movl $0, -8(%rbp)
|
|
movl %edi, -4(%rbp)
|
|
movq %rsi, -24(%rbp)
|
|
.Ltmp4:
|
|
.loc 1 6 12 prologue_end
|
|
cmpl $1, -4(%rbp)
|
|
.loc 1 6 7 is_stmt 0
|
|
jne .LBB2_2
|
|
.loc 1 0 7
|
|
leaq _Z1av(%rip), %rax
|
|
.loc 1 7 9 is_stmt 1
|
|
movq %rax, -16(%rbp)
|
|
.loc 1 7 5 is_stmt 0
|
|
jmp .LBB2_3
|
|
.LBB2_2:
|
|
.loc 1 0 5
|
|
leaq _Z1bv(%rip), %rax
|
|
.loc 1 9 9 is_stmt 1
|
|
movq %rax, -16(%rbp)
|
|
.LBB2_3:
|
|
.loc 1 0 9 is_stmt 0
|
|
leaq .L.cfi.jumptable(%rip), %rcx
|
|
.loc 1 11 3 is_stmt 1
|
|
movq -16(%rbp), %rax
|
|
movq %rax, %rdx
|
|
subq %rcx, %rdx
|
|
movq %rdx, %rcx
|
|
shrq $3, %rcx
|
|
shlq $61, %rdx
|
|
orq %rcx, %rdx
|
|
cmpq $1, %rdx
|
|
jbe .LBB2_5
|
|
ud2
|
|
.LBB2_5:
|
|
callq *%rax
|
|
.loc 1 12 1
|
|
movl -8(%rbp), %eax
|
|
addq $32, %rsp
|
|
popq %rbp
|
|
retq
|
|
.Ltmp5:
|
|
.Lfunc_end2:
|
|
.size main, .Lfunc_end2-main
|
|
.cfi_endproc
|
|
|
|
.p2align 3, 0x90
|
|
.type .L.cfi.jumptable,@function
|
|
.L.cfi.jumptable:
|
|
.Lfunc_begin3:
|
|
.cfi_startproc
|
|
#APP
|
|
jmp _Z1av.cfi@PLT
|
|
int3
|
|
int3
|
|
int3
|
|
jmp _Z1bv.cfi@PLT
|
|
int3
|
|
int3
|
|
int3
|
|
|
|
#NO_APP
|
|
.Lfunc_end3:
|
|
.size .L.cfi.jumptable, .Lfunc_end3-.L.cfi.jumptable
|
|
.cfi_endproc
|
|
|
|
.section .debug_str,"MS",@progbits,1
|
|
.Linfo_string0:
|
|
.asciz "clang version 6.0.0 (trunk 316774)"
|
|
.Linfo_string1:
|
|
.asciz "tiny.cc"
|
|
.Linfo_string2:
|
|
.asciz ""
|
|
.section .debug_abbrev,"",@progbits
|
|
.byte 1
|
|
.byte 17
|
|
.byte 0
|
|
.byte 37
|
|
.byte 14
|
|
.byte 19
|
|
.byte 5
|
|
.byte 3
|
|
.byte 14
|
|
.byte 16
|
|
.byte 23
|
|
.byte 27
|
|
.byte 14
|
|
.byte 17
|
|
.byte 1
|
|
.byte 18
|
|
.byte 6
|
|
.byte 0
|
|
.byte 0
|
|
.byte 0
|
|
.section .debug_info,"",@progbits
|
|
.Lcu_begin0:
|
|
.long 38
|
|
.short 4
|
|
.long .debug_abbrev
|
|
.byte 8
|
|
.byte 1
|
|
.long .Linfo_string0
|
|
.short 4
|
|
.long .Linfo_string1
|
|
.long .Lline_table_start0
|
|
.long .Linfo_string2
|
|
.quad .Lfunc_begin0
|
|
.long .Lfunc_end2-.Lfunc_begin0
|
|
.section .debug_ranges,"",@progbits
|
|
.section .debug_macinfo,"",@progbits
|
|
.Lcu_macro_begin0:
|
|
.byte 0
|
|
|
|
.type _Z1av,@function
|
|
_Z1av = .L.cfi.jumptable
|
|
.type _Z1bv,@function
|
|
_Z1bv = .L.cfi.jumptable+8
|
|
.ident "clang version 6.0.0 (trunk 316774)"
|
|
.section ".note.GNU-stack","",@progbits
|
|
.section .debug_line,"",@progbits
|
|
.Lline_table_start0:
|
|
|