liburing-lto

liburing + LTO

Requirements:

  1. clang version 16
  2. lld version 16
  3. rustc with llvm version 16 rustc --version --verbose ... LLVM version: 16.0.x
  4. libclang(see bindgen)

    Usage:

.cargo/config.toml: [build] rustflags = [ "-Clinker-plugin-lto", "-Clinker=clang", "-Clink-arg=-fuse-ld=lld", ] Cargo.toml: [dependencies] liburing-lto = "*"

Links:

Crates.io

Documentation

Repository

This indicates LTO is enabled:

You can download this file from Github Actions' Artifacts 00000000000c8a60 <liburing_lto_test_nop>: c8a60: 53 push %rbx c8a61: 48 81 ec 70 01 00 00 sub $0x170,%rsp c8a68: 0f 57 c0 xorps %xmm0,%xmm0 c8a6b: 0f 29 84 24 d0 00 00 movaps %xmm0,0xd0(%rsp) c8a72: 00 c8a73: 0f 29 84 24 c0 00 00 movaps %xmm0,0xc0(%rsp) c8a7a: 00 c8a7b: 0f 29 84 24 b0 00 00 movaps %xmm0,0xb0(%rsp) c8a82: 00 c8a83: 0f 29 84 24 a0 00 00 movaps %xmm0,0xa0(%rsp) c8a8a: 00 c8a8b: 0f 29 84 24 90 00 00 movaps %xmm0,0x90(%rsp) c8a92: 00 c8a93: 0f 29 84 24 80 00 00 movaps %xmm0,0x80(%rsp) c8a9a: 00 c8a9b: 0f 29 44 24 70 movaps %xmm0,0x70(%rsp) c8aa0: 0f 29 44 24 60 movaps %xmm0,0x60(%rsp) c8aa5: 0f 29 44 24 50 movaps %xmm0,0x50(%rsp) c8aaa: 0f 29 44 24 40 movaps %xmm0,0x40(%rsp) c8aaf: 0f 29 44 24 30 movaps %xmm0,0x30(%rsp) c8ab4: 0f 29 44 24 20 movaps %xmm0,0x20(%rsp) c8ab9: 0f 29 44 24 10 movaps %xmm0,0x10(%rsp) c8abe: 48 c7 84 24 e0 00 00 movq $0x0,0xe0(%rsp) c8ac5: 00 00 00 00 00 c8aca: 0f 29 84 24 50 01 00 movaps %xmm0,0x150(%rsp) c8ad1: 00 c8ad2: 0f 29 84 24 40 01 00 movaps %xmm0,0x140(%rsp) c8ad9: 00 c8ada: 0f 29 84 24 30 01 00 movaps %xmm0,0x130(%rsp) c8ae1: 00 c8ae2: 0f 29 84 24 20 01 00 movaps %xmm0,0x120(%rsp) c8ae9: 00 c8aea: 0f 29 84 24 10 01 00 movaps %xmm0,0x110(%rsp) c8af1: 00 c8af2: 0f 29 84 24 00 01 00 movaps %xmm0,0x100(%rsp) c8af9: 00 c8afa: 0f 29 84 24 f0 00 00 movaps %xmm0,0xf0(%rsp) c8b01: 00 c8b02: 48 c7 84 24 60 01 00 movq $0x0,0x160(%rsp) c8b09: 00 00 00 00 00 c8b0e: 48 8d 74 24 10 lea 0x10(%rsp),%rsi c8b13: 48 8d 94 24 f0 00 00 lea 0xf0(%rsp),%rdx c8b1a: 00 c8b1b: bf 01 00 00 00 mov $0x1,%edi c8b20: 31 c9 xor %ecx,%ecx c8b22: 45 31 c0 xor %r8d,%r8d c8b25: e8 c6 08 00 00 call c93f0 <__io_uring_queue_init_params.llvm.6876066898393771826> c8b2a: 85 c0 test %eax,%eax c8b2c: 0f 88 89 02 00 00 js c8dbb <liburing_lto_test_nop+0x35b> c8b32: 8b 54 24 54 mov 0x54(%rsp),%edx c8b36: ff c2 inc %edx c8b38: 8b 8c 24 d0 00 00 00 mov 0xd0(%rsp),%ecx c8b3f: 48 8b 44 24 10 mov 0x10(%rsp),%rax c8b44: f6 c1 02 test $0x2,%cl c8b47: 8b 00 mov (%rax),%eax c8b49: 89 d6 mov %edx,%esi c8b4b: 29 c6 sub %eax,%esi c8b4d: 3b 74 24 6c cmp 0x6c(%rsp),%esi c8b51: 0f 87 32 02 00 00 ja c8d89 <liburing_lto_test_nop+0x329> c8b57: 48 8b 44 24 48 mov 0x48(%rsp),%rax c8b5c: 8b 7c 24 54 mov 0x54(%rsp),%edi c8b60: 8b 74 24 68 mov 0x68(%rsp),%esi c8b64: 89 54 24 54 mov %edx,0x54(%rsp) c8b68: 48 85 c0 test %rax,%rax c8b6b: 0f 84 18 02 00 00 je c8d89 <liburing_lto_test_nop+0x329> c8b71: c1 e9 0a shr $0xa,%ecx c8b74: 83 e1 01 and $0x1,%ecx c8b77: 48 bb 42 00 c7 9f 0a movabs $0x10a9fc70042,%rbx c8b7e: 01 00 00 c8b81: 21 fe and %edi,%esi c8b83: d3 e6 shl %cl,%esi c8b85: 48 c1 e6 06 shl $0x6,%rsi c8b89: 48 b9 00 00 00 00 ff movabs $0xffffffff00000000,%rcx c8b90: ff ff ff c8b93: 48 89 0c 30 mov %rcx,(%rax,%rsi,1) c8b97: 0f 57 c0 xorps %xmm0,%xmm0 c8b9a: 0f 11 44 30 28 movups %xmm0,0x28(%rax,%rsi,1) c8b9f: 48 c7 44 30 38 00 00 movq $0x0,0x38(%rax,%rsi,1) c8ba6: 00 00 c8ba8: 0f 11 44 30 08 movups %xmm0,0x8(%rax,%rsi,1) c8bad: 48 c7 44 30 18 00 00 movq $0x0,0x18(%rax,%rsi,1) c8bb4: 00 00 c8bb6: 48 89 5c 30 20 mov %rbx,0x20(%rax,%rsi,1) c8bbb: 8b 74 24 54 mov 0x54(%rsp),%esi c8bbf: 39 74 24 50 cmp %esi,0x50(%rsp) c8bc3: 74 13 je c8bd8 <liburing_lto_test_nop+0x178> c8bc5: 89 74 24 50 mov %esi,0x50(%rsp) c8bc9: f6 84 24 d0 00 00 00 testb $0x2,0xd0(%rsp) c8bd0: 02 c8bd1: 48 8b 44 24 18 mov 0x18(%rsp),%rax c8bd6: 89 30 mov %esi,(%rax) c8bd8: 48 8b 44 24 10 mov 0x10(%rsp),%rax c8bdd: 2b 30 sub (%rax),%esi c8bdf: 8b 94 24 d0 00 00 00 mov 0xd0(%rsp),%edx c8be6: f6 c2 01 test $0x1,%dl c8be9: 75 20 jne c8c0b <liburing_lto_test_nop+0x1ab> c8beb: 48 8b 44 24 30 mov 0x30(%rsp),%rax c8bf0: 8b 08 mov (%rax),%ecx c8bf2: f6 c1 06 test $0x6,%cl c8bf5: 0f 95 c0 setne %al c8bf8: 85 f6 test %esi,%esi c8bfa: 75 17 jne c8c13 <liburing_lto_test_nop+0x1b3> c8bfc: f6 c1 06 test $0x6,%cl c8bff: 0f 84 9d 01 00 00 je c8da2 <liburing_lto_test_nop+0x342> c8c05: 31 c9 xor %ecx,%ecx c8c07: b0 01 mov $0x1,%al c8c09: eb 27 jmp c8c32 <liburing_lto_test_nop+0x1d2> c8c0b: 31 c9 xor %ecx,%ecx c8c0d: b0 01 mov $0x1,%al c8c0f: 85 f6 test %esi,%esi c8c11: 74 1f je c8c32 <liburing_lto_test_nop+0x1d2> c8c13: 31 c9 xor %ecx,%ecx c8c15: f6 c2 02 test $0x2,%dl c8c18: 74 18 je c8c32 <liburing_lto_test_nop+0x1d2> c8c1a: 0f ae f0 mfence c8c1d: 48 8b 4c 24 30 mov 0x30(%rsp),%rcx c8c22: 8b 09 mov (%rcx),%ecx c8c24: 89 ca mov %ecx,%edx c8c26: 08 c2 or %al,%dl c8c28: f6 c2 01 test $0x1,%dl c8c2b: 74 39 je c8c66 <liburing_lto_test_nop+0x206> c8c2d: 83 e1 01 and $0x1,%ecx c8c30: 01 c9 add %ecx,%ecx c8c32: 0f b6 c0 movzbl %al,%eax c8c35: 09 c8 or %ecx,%eax c8c37: 8b bc 24 dc 00 00 00 mov 0xdc(%rsp),%edi c8c3e: 44 8b 94 24 e0 00 00 mov 0xe0(%rsp),%r10d c8c45: 00 c8c46: 41 c1 e2 04 shl $0x4,%r10d c8c4a: 41 83 e2 10 and $0x10,%r10d c8c4e: 41 09 c2 or %eax,%r10d c8c51: 41 b9 08 00 00 00 mov $0x8,%r9d c8c57: b8 aa 01 00 00 mov $0x1aa,%eax c8c5c: 31 d2 xor %edx,%edx c8c5e: 45 31 c0 xor %r8d,%r8d c8c61: 0f 05 syscall c8c63: 48 89 c6 mov %rax,%rsi c8c66: 83 fe 01 cmp $0x1,%esi c8c69: 0f 85 33 01 00 00 jne c8da2 <liburing_lto_test_nop+0x342> c8c6f: 48 c7 44 24 08 00 00 movq $0x0,0x8(%rsp) c8c76: 00 00 c8c78: 8b 84 24 c0 00 00 00 mov 0xc0(%rsp),%eax c8c7f: 8b 8c 24 d0 00 00 00 mov 0xd0(%rsp),%ecx c8c86: c1 e9 0b shr $0xb,%ecx c8c89: 83 e1 01 and $0x1,%ecx c8c8c: 0f 1f 40 00 nopl 0x0(%rax) c8c90: 48 8b 94 24 80 00 00 mov 0x80(%rsp),%rdx c8c97: 00 c8c98: 8b 3a mov (%rdx),%edi c8c9a: 48 8b 54 24 78 mov 0x78(%rsp),%rdx c8c9f: 8b 32 mov (%rdx),%esi c8ca1: 39 f7 cmp %esi,%edi c8ca3: 74 3c je c8ce1 <liburing_lto_test_nop+0x281> c8ca5: 48 8b bc 24 a8 00 00 mov 0xa8(%rsp),%rdi c8cac: 00 c8cad: 41 89 f0 mov %esi,%r8d c8cb0: 41 21 c0 and %eax,%r8d c8cb3: 41 d3 e0 shl %cl,%r8d c8cb6: 49 c1 e0 04 shl $0x4,%r8 c8cba: 4e 8d 0c 07 lea (%rdi,%r8,1),%r9 c8cbe: f6 84 24 d9 00 00 00 testb $0x1,0xd9(%rsp) c8cc5: 01 c8cc6: 75 24 jne c8cec <liburing_lto_test_nop+0x28c> c8cc8: 4d 8b 11 mov (%r9),%r10 c8ccb: 49 83 fa ff cmp $0xffffffffffffffff,%r10 c8ccf: 0f 85 91 00 00 00 jne c8d66 <liburing_lto_test_nop+0x306> c8cd5: ff c6 inc %esi c8cd7: 42 83 7c 07 08 00 cmpl $0x0,0x8(%rdi,%r8,1) c8cdd: 89 32 mov %esi,(%rdx) c8cdf: 79 af jns c8c90 <liburing_lto_test_nop+0x230> c8ce1: 48 c7 44 24 08 00 00 movq $0x0,0x8(%rsp) c8ce8: 00 00 c8cea: eb 0a jmp c8cf6 <liburing_lto_test_nop+0x296> c8cec: 4c 89 4c 24 08 mov %r9,0x8(%rsp) c8cf1: 48 85 ff test %rdi,%rdi c8cf4: 75 4a jne c8d40 <liburing_lto_test_nop+0x2e0> c8cf6: 0f 28 05 53 f4 f4 ff movaps -0xb0bad(%rip),%xmm0 # 18150 <GCC_except_table192+0x684> c8cfd: 0f 29 84 24 f0 00 00 movaps %xmm0,0xf0(%rsp) c8d04: 00 c8d05: c7 84 24 00 01 00 00 movl $0x0,0x100(%rsp) c8d0c: 00 00 00 00 c8d10: 48 c7 84 24 08 01 00 movq $0x0,0x108(%rsp) c8d17: 00 00 00 00 00 c8d1c: 48 8d 7c 24 10 lea 0x10(%rsp),%rdi c8d21: 48 8d 74 24 08 lea 0x8(%rsp),%rsi c8d26: 48 8d 94 24 f0 00 00 lea 0xf0(%rsp),%rdx c8d2d: 00 c8d2e: e8 fd 0c 00 00 call c9a30 <_io_uring_get_cqe.llvm.10540434155917550864> c8d33: 85 c0 test %eax,%eax c8d35: 0f 88 99 00 00 00 js c8dd4 <liburing_lto_test_nop+0x374> c8d3b: 4c 8b 4c 24 08 mov 0x8(%rsp),%r9 c8d40: 4d 8b 11 mov (%r9),%r10 c8d43: 49 39 da cmp %rbx,%r10 c8d46: 75 28 jne c8d70 <liburing_lto_test_nop+0x310> c8d48: 48 8b 44 24 78 mov 0x78(%rsp),%rax c8d4d: 8b 08 mov (%rax),%ecx c8d4f: ff c1 inc %ecx c8d51: 89 08 mov %ecx,(%rax) c8d53: 48 8d 7c 24 10 lea 0x10(%rsp),%rdi c8d58: e8 0c 0c 00 00 call c9969 <io_uring_queue_exit> c8d5d: 48 81 c4 70 01 00 00 add $0x170,%rsp c8d64: 5b pop %rbx c8d65: c3 ret c8d66: 4c 89 4c 24 08 mov %r9,0x8(%rsp) c8d6b: 49 39 da cmp %rbx,%r10 c8d6e: 74 d8 je c8d48 <liburing_lto_test_nop+0x2e8> c8d70: 48 8d 3d 3c d2 f5 ff lea -0xa2dc4(%rip),%rdi # 25fb3 <anon.74a58ae00ccb20ea0878ca889c252c55.9.llvm.8307064127509889395> c8d77: 48 8d 15 ca b2 00 00 lea 0xb2ca(%rip),%rdx # d4048 <anon.74a58ae00ccb20ea0878ca889c252c55.10.llvm.8307064127509889395> c8d7e: be 3e 00 00 00 mov $0x3e,%esi c8d83: 67 e8 97 8b ff ff addr32 call c1920 <_ZN4core9panicking5panic17h65157a6ac7f1357aE> c8d89: 48 8d 3d e8 15 f5 ff lea -0xaea18(%rip),%rdi # 1a378 <anon.74a58ae00ccb20ea0878ca889c252c55.3.llvm.8307064127509889395> c8d90: 48 8d 15 69 b2 00 00 lea 0xb269(%rip),%rdx # d4000 <anon.74a58ae00ccb20ea0878ca889c252c55.4.llvm.8307064127509889395> c8d97: be 20 00 00 00 mov $0x20,%esi c8d9c: 67 e8 7e 8b ff ff addr32 call c1920 <_ZN4core9panicking5panic17h65157a6ac7f1357aE> c8da2: 48 8d 3d 9c d1 f5 ff lea -0xa2e64(%rip),%rdi # 25f45 <anon.74a58ae00ccb20ea0878ca889c252c55.5.llvm.8307064127509889395> c8da9: 48 8d 15 68 b2 00 00 lea 0xb268(%rip),%rdx # d4018 <anon.74a58ae00ccb20ea0878ca889c252c55.6.llvm.8307064127509889395> c8db0: be 31 00 00 00 mov $0x31,%esi c8db5: 67 e8 65 8b ff ff addr32 call c1920 <_ZN4core9panicking5panic17h65157a6ac7f1357aE> c8dbb: 48 8d 3d 3e d1 f5 ff lea -0xa2ec2(%rip),%rdi # 25f00 <anon.74a58ae00ccb20ea0878ca889c252c55.0.llvm.8307064127509889395> c8dc2: 48 8d 15 1f b2 00 00 lea 0xb21f(%rip),%rdx # d3fe8 <anon.74a58ae00ccb20ea0878ca889c252c55.2.llvm.8307064127509889395> c8dc9: be 3b 00 00 00 mov $0x3b,%esi c8dce: 67 e8 4c 8b ff ff addr32 call c1920 <_ZN4core9panicking5panic17h65157a6ac7f1357aE> c8dd4: 48 8d 3d 9b d1 f5 ff lea -0xa2e65(%rip),%rdi # 25f76 <anon.74a58ae00ccb20ea0878ca889c252c55.7.llvm.8307064127509889395> c8ddb: 48 8d 15 4e b2 00 00 lea 0xb24e(%rip),%rdx # d4030 <anon.74a58ae00ccb20ea0878ca889c252c55.8.llvm.8307064127509889395> c8de2: be 3d 00 00 00 mov $0x3d,%esi c8de7: 67 e8 33 8b ff ff addr32 call c1920 <_ZN4core9panicking5panic17h65157a6ac7f1357aE>