Skip to content

Instantly share code, notes, and snippets.

@heatd
Created March 2, 2024 17:48
Show Gist options
  • Save heatd/a2c61e208924277b316e6ed7ebe561bc to your computer and use it in GitHub Desktop.
Save heatd/a2c61e208924277b316e6ed7ebe561bc to your computer and use it in GitHub Desktop.
Dump of assembler code for function kmem_cache_alloc(slab_cache*, unsigned int):
0xffffffff811005f0 <+0>: push %rbp
0xffffffff811005f1 <+1>: mov %rsp,%rbp
0xffffffff811005f4 <+4>: push %r15
0xffffffff811005f6 <+6>: push %r14
0xffffffff811005f8 <+8>: mov %esi,%r14d
0xffffffff811005fb <+11>: push %r13
0xffffffff811005fd <+13>: push %r12
0xffffffff811005ff <+15>: push %rbx
0xffffffff81100600 <+16>: mov %rdi,%rbx
0xffffffff81100603 <+19>: sub $0x38,%rsp
0xffffffff81100607 <+23>: mov %gs:0x28,%rax
0xffffffff81100610 <+32>: mov %rax,-0x38(%rbp)
0xffffffff81100614 <+36>: xor %eax,%eax
0xffffffff81100616 <+38>: testb $0x4,0x90(%rdi)
0xffffffff8110061d <+45>: jne 0xffffffff811006e0 <kmem_cache_alloc(slab_cache*, unsigned int)+240>
0xffffffff81100623 <+51>: incq %gs:0x158
0xffffffff8110062c <+60>: mov %gs:0x68,%edx
0xffffffff81100634 <+68>: mov %edx,%edx
0xffffffff81100636 <+70>: mov %rdx,%rax
0xffffffff81100639 <+73>: shl $0x4,%rax
0xffffffff8110063d <+77>: add %rdx,%rax
0xffffffff81100640 <+80>: shl $0x6,%rax
0xffffffff81100644 <+84>: movl $0x1,0x4c4(%rdi,%rax,1)
0xffffffff8110064f <+95>: lea 0xc0(%rdi,%rax,1),%r15
0xffffffff81100657 <+103>: mov 0x4c0(%rdi,%rax,1),%r13d
0xffffffff8110065f <+111>: test %r13d,%r13d
0xffffffff81100662 <+114>: je 0xffffffff81100710 <kmem_cache_alloc(slab_cache*, unsigned int)+288>
0xffffffff81100668 <+120>: mov 0x400(%r15),%eax
0xffffffff8110066f <+127>: sub $0x1,%eax
0xffffffff81100672 <+130>: mov %eax,0x400(%r15)
0xffffffff81100679 <+137>: cltq
0xffffffff8110067b <+139>: mov (%r15,%rax,8),%r12
0xffffffff8110067f <+143>: movl $0x0,0x8(%r12)
0xffffffff81100688 <+152>: movl $0x0,0x404(%r15)
0xffffffff81100693 <+163>: decq %gs:0x158
0xffffffff8110069c <+172>: mov %gs:0x158,%rax
0xffffffff811006a5 <+181>: test %rax,%rax
0xffffffff811006a8 <+184>: je 0xffffffff81100798 <kmem_cache_alloc(slab_cache*, unsigned int)+424>
0xffffffff811006ae <+190>: mov -0x38(%rbp),%rax
0xffffffff811006b2 <+194>: sub %gs:0x28,%rax
0xffffffff811006bb <+203>: jne 0xffffffff811009c8 <kmem_cache_alloc(slab_cache*, unsigned int)+984>
0xffffffff811006c1 <+209>: add $0x38,%rsp
0xffffffff811006c5 <+213>: mov %r12,%rax
0xffffffff811006c8 <+216>: pop %rbx
0xffffffff811006c9 <+217>: pop %r12
0xffffffff811006cb <+219>: pop %r13
0xffffffff811006cd <+221>: pop %r14
0xffffffff811006cf <+223>: pop %r15
0xffffffff811006d1 <+225>: pop %rbp
0xffffffff811006d2 <+226>: jmp 0xffffffff810a0200 <__x86_return_thunk>
0xffffffff811006d7 <+231>: nopw 0x0(%rax,%rax,1)
0xffffffff811006e0 <+240>: mov -0x38(%rbp),%rax
0xffffffff811006e4 <+244>: sub %gs:0x28,%rax
0xffffffff811006ed <+253>: jne 0xffffffff811009c8 <kmem_cache_alloc(slab_cache*, unsigned int)+984>
0xffffffff811006f3 <+259>: add $0x38,%rsp
0xffffffff811006f7 <+263>: pop %rbx
0xffffffff811006f8 <+264>: pop %r12
0xffffffff811006fa <+266>: pop %r13
0xffffffff811006fc <+268>: pop %r14
0xffffffff811006fe <+270>: pop %r15
0xffffffff81100700 <+272>: pop %rbp
0xffffffff81100701 <+273>: jmp 0xffffffff81100460 <_Z23kmem_cache_alloc_nopcpuP10slab_cachej>
0xffffffff81100706 <+278>: cs nopw 0x0(%rax,%rax,1)
0xffffffff81100710 <+288>: lea -0x48(%rbp),%rax
0xffffffff81100714 <+292>: lea 0x94(%rdi),%r12
0xffffffff8110071b <+299>: mov %rax,-0x48(%rbp)
0xffffffff8110071f <+303>: mov %rax,-0x40(%rbp)
0xffffffff81100723 <+307>: mov %r12,-0x60(%rbp)
0xffffffff81100727 <+311>: incq %gs:0x158
0xffffffff81100730 <+320>: mov %r12,%rdi
0xffffffff81100733 <+323>: call 0xffffffff81020a30 <__spin_lock(spinlock*)>
0xffffffff81100738 <+328>: mov %r15,%rsi
0xffffffff8110073b <+331>: mov %rbx,%rdi
0xffffffff8110073e <+334>: call 0xffffffff810ff5e0 <kmem_cache_refill_mag_noalloc(slab_cache*, slab_cache_percpu_context*)>
0xffffffff81100743 <+339>: mov %r12,%rdi
0xffffffff81100746 <+342>: mov %eax,-0x54(%rbp)
0xffffffff81100749 <+345>: call 0xffffffff81020a50 <__spin_unlock(spinlock*)>
0xffffffff8110074e <+350>: decq %gs:0x158
0xffffffff81100757 <+359>: mov %gs:0x158,%rax
0xffffffff81100760 <+368>: test %rax,%rax
0xffffffff81100763 <+371>: je 0xffffffff81100979 <kmem_cache_alloc(slab_cache*, unsigned int)+905>
0xffffffff81100769 <+377>: mov -0x54(%rbp),%ecx
0xffffffff8110076c <+380>: test %ecx,%ecx
0xffffffff8110076e <+382>: jne 0xffffffff811007b8 <kmem_cache_alloc(slab_cache*, unsigned int)+456>
0xffffffff81100770 <+384>: mov %gs:0x68,%edx
0xffffffff81100778 <+392>: mov %edx,%edx
0xffffffff8110077a <+394>: mov %rdx,%rax
0xffffffff8110077d <+397>: shl $0x4,%rax
0xffffffff81100781 <+401>: add %rdx,%rax
0xffffffff81100784 <+404>: shl $0x6,%rax
0xffffffff81100788 <+408>: lea 0xc0(%rbx,%rax,1),%r15
0xffffffff81100790 <+416>: jmp 0xffffffff81100668 <kmem_cache_alloc(slab_cache*, unsigned int)+120>
0xffffffff81100795 <+421>: nopl (%rax)
0xffffffff81100798 <+424>: pushf
0xffffffff81100799 <+425>: pop %rax
0xffffffff8110079a <+426>: test $0x2,%ah
0xffffffff8110079d <+429>: je 0xffffffff811006ae <kmem_cache_alloc(slab_cache*, unsigned int)+190>
0xffffffff811007a3 <+435>: mov $0x1,%edi
0xffffffff811007a8 <+440>: call 0xffffffff81092110 <_Z20sched_handle_preemptb>
0xffffffff811007ad <+445>: jmp 0xffffffff811006ae <kmem_cache_alloc(slab_cache*, unsigned int)+190>
0xffffffff811007b2 <+450>: nopw 0x0(%rax,%rax,1)
0xffffffff811007b8 <+456>: movl $0x0,0x404(%r15)
0xffffffff811007c3 <+467>: decq %gs:0x158
0xffffffff811007cc <+476>: mov %gs:0x158,%rax
0xffffffff811007d5 <+485>: test %rax,%rax
0xffffffff811007d8 <+488>: je 0xffffffff81100993 <kmem_cache_alloc(slab_cache*, unsigned int)+931>
0xffffffff811007de <+494>: mov -0x54(%rbp),%edx
0xffffffff811007e1 <+497>: test %edx,%edx
0xffffffff811007e3 <+499>: jg 0xffffffff81100823 <kmem_cache_alloc(slab_cache*, unsigned int)+563>
0xffffffff811007e5 <+501>: jmp 0xffffffff811009ad <kmem_cache_alloc(slab_cache*, unsigned int)+957>
0xffffffff811007ea <+506>: nopw 0x0(%rax,%rax,1)
0xffffffff811007f0 <+512>: lea 0x18(%rax),%rdx
0xffffffff811007f4 <+516>: mov -0x48(%rbp),%rax
0xffffffff811007f8 <+520>: lea -0x48(%rbp),%rcx
0xffffffff811007fc <+524>: add $0x1,%r13d
0xffffffff81100800 <+528>: mov %rcx,0x20(%r12)
0xffffffff81100805 <+533>: and $0xfffffbff,%r14d
0xffffffff8110080c <+540>: mov %rax,0x18(%r12)
0xffffffff81100811 <+545>: mov %rdx,-0x48(%rbp)
0xffffffff81100815 <+549>: mov %rdx,0x8(%rax)
0xffffffff81100819 <+553>: cmp %r13d,-0x54(%rbp)
0xffffffff8110081d <+557>: je 0xffffffff81100938 <kmem_cache_alloc(slab_cache*, unsigned int)+840>
0xffffffff81100823 <+563>: mov %r14d,%esi
0xffffffff81100826 <+566>: mov %rbx,%rdi
0xffffffff81100829 <+569>: call 0xffffffff811000b0 <kmem_cache_create_slab(slab_cache*, unsigned int, bool)>
0xffffffff8110082e <+574>: mov %rax,%r12
0xffffffff81100831 <+577>: test %rax,%rax
0xffffffff81100834 <+580>: jne 0xffffffff811007f0 <kmem_cache_alloc(slab_cache*, unsigned int)+512>
0xffffffff81100836 <+582>: test %r13d,%r13d
0xffffffff81100839 <+585>: je 0xffffffff81100941 <kmem_cache_alloc(slab_cache*, unsigned int)+849>
0xffffffff8110083f <+591>: movslq %r13d,%r15
0xffffffff81100842 <+594>: incq %gs:0x158
0xffffffff8110084b <+603>: mov %gs:0x68,%r12d
0xffffffff81100854 <+612>: mov %r12d,%r12d
0xffffffff81100857 <+615>: mov %r12,%rax
0xffffffff8110085a <+618>: shl $0x4,%rax
0xffffffff8110085e <+622>: add %r12,%rax
0xffffffff81100861 <+625>: shl $0x6,%rax
0xffffffff81100865 <+629>: movl $0x1,0x4c4(%rbx,%rax,1)
0xffffffff81100870 <+640>: lea 0xc0(%rbx,%rax,1),%r13
0xffffffff81100878 <+648>: incq %gs:0x158
0xffffffff81100881 <+657>: mov -0x60(%rbp),%rdi
0xffffffff81100885 <+661>: call 0xffffffff81020a30 <__spin_lock(spinlock*)>
0xffffffff8110088a <+666>: mov -0x40(%rbp),%rax
0xffffffff8110088e <+670>: lea -0x48(%rbp),%rcx
0xffffffff81100892 <+674>: cmp %rcx,%rax
0xffffffff81100895 <+677>: je 0xffffffff811008b2 <kmem_cache_alloc(slab_cache*, unsigned int)+706>
0xffffffff81100897 <+679>: mov 0x18(%rbx),%rdx
0xffffffff8110089b <+683>: mov -0x48(%rbp),%rcx
0xffffffff8110089f <+687>: lea 0x18(%rbx),%rsi
0xffffffff811008a3 <+691>: mov %rsi,0x8(%rcx)
0xffffffff811008a7 <+695>: mov %rcx,0x18(%rbx)
0xffffffff811008ab <+699>: mov %rdx,(%rax)
0xffffffff811008ae <+702>: mov %rax,0x8(%rdx)
0xffffffff811008b2 <+706>: add %r15,0x70(%rbx)
0xffffffff811008b6 <+710>: mov %r13,%rsi
0xffffffff811008b9 <+713>: mov %rbx,%rdi
0xffffffff811008bc <+716>: call 0xffffffff810ff5e0 <kmem_cache_refill_mag_noalloc(slab_cache*, slab_cache_percpu_context*)>
0xffffffff811008c1 <+721>: mov %r12,%rax
0xffffffff811008c4 <+724>: shl $0x4,%rax
0xffffffff811008c8 <+728>: add %r12,%rax
0xffffffff811008cb <+731>: shl $0x6,%rax
0xffffffff811008cf <+735>: mov 0x4c0(%rbx,%rax,1),%eax
0xffffffff811008d6 <+742>: test %eax,%eax
0xffffffff811008d8 <+744>: jle 0xffffffff811009cd <kmem_cache_alloc(slab_cache*, unsigned int)+989>
0xffffffff811008de <+750>: mov -0x60(%rbp),%rdi
0xffffffff811008e2 <+754>: call 0xffffffff81020a50 <__spin_unlock(spinlock*)>
0xffffffff811008e7 <+759>: decq %gs:0x158
0xffffffff811008f0 <+768>: mov %gs:0x158,%rax
0xffffffff811008f9 <+777>: test %rax,%rax
0xffffffff811008fc <+780>: jne 0xffffffff81100770 <kmem_cache_alloc(slab_cache*, unsigned int)+384>
0xffffffff81100902 <+786>: pushf
0xffffffff81100903 <+787>: pop %rax
0xffffffff81100904 <+788>: test $0x2,%ah
0xffffffff81100907 <+791>: je 0xffffffff81100770 <kmem_cache_alloc(slab_cache*, unsigned int)+384>
0xffffffff8110090d <+797>: mov $0x1,%edi
0xffffffff81100912 <+802>: call 0xffffffff81092110 <_Z20sched_handle_preemptb>
0xffffffff81100917 <+807>: mov %gs:0x68,%eax
0xffffffff8110091f <+815>: mov %eax,%eax
0xffffffff81100921 <+817>: imul $0x440,%rax,%rax
0xffffffff81100928 <+824>: lea 0xc0(%rbx,%rax,1),%r15
0xffffffff81100930 <+832>: jmp 0xffffffff81100668 <kmem_cache_alloc(slab_cache*, unsigned int)+120>
0xffffffff81100935 <+837>: nopl (%rax)
0xffffffff81100938 <+840>: movslq -0x54(%rbp),%r15
0xffffffff8110093c <+844>: jmp 0xffffffff81100842 <kmem_cache_alloc(slab_cache*, unsigned int)+594>
0xffffffff81100941 <+849>: incq %gs:0x158
0xffffffff8110094a <+858>: mov %gs:0x68,%eax
0xffffffff81100952 <+866>: decq %gs:0x158
0xffffffff8110095b <+875>: mov %gs:0x158,%rax
0xffffffff81100964 <+884>: test %rax,%rax
0xffffffff81100967 <+887>: je 0xffffffff811009b5 <kmem_cache_alloc(slab_cache*, unsigned int)+965>
0xffffffff81100969 <+889>: call 0xffffffff81016610 <__errno_location()>
0xffffffff8110096e <+894>: movl $0xc,(%rax)
0xffffffff81100974 <+900>: jmp 0xffffffff811006ae <kmem_cache_alloc(slab_cache*, unsigned int)+190>
0xffffffff81100979 <+905>: pushf
0xffffffff8110097a <+906>: pop %rax
0xffffffff8110097b <+907>: test $0x2,%ah
0xffffffff8110097e <+910>: je 0xffffffff81100769 <kmem_cache_alloc(slab_cache*, unsigned int)+377>
0xffffffff81100984 <+916>: mov $0x1,%edi
0xffffffff81100989 <+921>: call 0xffffffff81092110 <_Z20sched_handle_preemptb>
0xffffffff8110098e <+926>: jmp 0xffffffff81100769 <kmem_cache_alloc(slab_cache*, unsigned int)+377>
0xffffffff81100993 <+931>: pushf
0xffffffff81100994 <+932>: pop %rax
0xffffffff81100995 <+933>: test $0x2,%ah
0xffffffff81100998 <+936>: je 0xffffffff811007de <kmem_cache_alloc(slab_cache*, unsigned int)+494>
0xffffffff8110099e <+942>: mov $0x1,%edi
0xffffffff811009a3 <+947>: call 0xffffffff81092110 <_Z20sched_handle_preemptb>
0xffffffff811009a8 <+952>: jmp 0xffffffff811007de <kmem_cache_alloc(slab_cache*, unsigned int)+494>
0xffffffff811009ad <+957>: xor %r15d,%r15d
0xffffffff811009b0 <+960>: jmp 0xffffffff81100842 <kmem_cache_alloc(slab_cache*, unsigned int)+594>
0xffffffff811009b5 <+965>: pushf
0xffffffff811009b6 <+966>: pop %rax
0xffffffff811009b7 <+967>: test $0x2,%ah
0xffffffff811009ba <+970>: je 0xffffffff81100969 <kmem_cache_alloc(slab_cache*, unsigned int)+889>
0xffffffff811009bc <+972>: mov $0x1,%edi
0xffffffff811009c1 <+977>: call 0xffffffff81092110 <_Z20sched_handle_preemptb>
0xffffffff811009c6 <+982>: jmp 0xffffffff81100969 <kmem_cache_alloc(slab_cache*, unsigned int)+889>
0xffffffff811009c8 <+984>: call 0xffffffff81024840 <__stack_chk_fail()>
0xffffffff811009cd <+989>: mov $0xffffffff81116f29,%rcx
0xffffffff811009d4 <+996>: mov $0x318,%edx
0xffffffff811009d9 <+1001>: mov $0xffffffff81116e75,%rsi
0xffffffff811009e0 <+1008>: mov $0xffffffff81116f45,%rdi
0xffffffff811009e7 <+1015>: call 0xffffffff810165e0 <__assert_fail(char const*, char const*, int, char const*)>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment