Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lkl tests failed on windows 10 #442

Open
kruglinski opened this issue Jun 20, 2018 · 4 comments
Open

lkl tests failed on windows 10 #442

kruglinski opened this issue Jun 20, 2018 · 4 comments

Comments

@kruglinski
Copy link

H:\idawork\linux-master\tools\lkl\tests>boot.exe
1..33 # boot

  • 1 mutex
    ok 1 mutex

time_us: 0
log: |
...

  • 2 semaphore
    ok 2 semaphore

time_us: 0
log: |
...

  • 3 join
    ok 3 join

time_us: 0
log: |
joined 7664
...

  • 4 start_kernel
    H:\idawork\linux-master\tools\lkl\tests>

tests just quit, no bootlogs out...

@thehajime
Copy link
Member

thanks for the report. our test infra uses wine (and reports no errors), not native win environment. and i have no native win10 environment thus can't try to reproduce the issue.

it would be nice if someone can look at what's going on. cc: @tavip

@kruglinski
Copy link
Author

kruglinski commented Jun 28, 2018

It also fails on win7 x64 sp1 environment, even running under admin privileges.

have a little busy these days, maybe someday I'll dig it out with gdb/gdbserver myself.

@kruglinski
Copy link
Author

by some debug and analysis I found this:
(gdb) bt
#0 0x00940060 in tmp_cmdline ()
#1 0x006d8a62 in div_u64_rem (remainder=,
divisor=, dividend=996147200000000)
at ./include/linux/math64.h:90
#2 div_u64 (divisor=, dividend=)
at ./include/linux/math64.h:126
#3 div64_u64 (dividend=996147200000000, divisor=1000000000)
at lib/div64.c:148
#4 0x0042c7ee in to_ratio (period=1000000000, runtime=996145649863168)
at kernel/sched/core.c:2438
#5 0x004333c6 in init_dl_bw (dl_b=0x8a4760 <runqueues+992>)
at kernel/sched/deadline.c:354
#6 0x004336d2 in init_dl_rq (dl_rq=0x8a4750 <runqueues+976>)
at kernel/sched/deadline.c:371
#7 0x00889c61 in sched_init () at kernel/sched/core.c:5970
#8 0x008877ce in start_kernel () at init/main.c:586
#9 0x00888243 in lkl_run_kernel (arg=0x0) at arch/lkl/kernel/setup.c:48
#10 0x76e7343d in ?? ()
#11 0x77d59832 in ?? ()
#12 0x77d59805 in ?? ()
#13 0x00000000 in ?? ()
(gdb) disas 0x006d8a62
Dump of assembler code for function div64_u64:
0x006d88f0 <+0>: push %ebp
0x006d88f1 <+1>: mov %esp,%ebp
0x006d88f3 <+3>: push %edi
0x006d88f4 <+4>: push %esi
0x006d88f5 <+5>: push %ebx
0x006d88f6 <+6>: sub $0x3c,%esp
0x006d88f9 <+9>: mov 0x14(%ebp),%edx
0x006d88fc <+12>: mov 0x10(%ebp),%eax
0x006d88ff <+15>: mov 0x8(%ebp),%esi
0x006d8902 <+18>: mov 0xc(%ebp),%edi
0x006d8905 <+21>: test %edx,%edx
0x006d8907 <+23>: mov %eax,-0x38(%ebp)
0x006d890a <+26>: mov %edx,-0x34(%ebp)
0x006d890d <+29>: jne 0x6d8940 <div64_u64+80>
0x006d890f <+31>: test %edi,%edi
0x006d8911 <+33>: mov %eax,%ecx
0x006d8913 <+35>: mov %esi,-0x28(%ebp)
0x006d8916 <+38>: mov %edi,-0x24(%ebp)
0x006d8919 <+41>: jne 0x6d8a50 <div64_u64+352>
0x006d891f <+47>: mov %esi,%eax
0x006d8921 <+49>: xor %edx,%edx
0x006d8923 <+51>: movl $0x0,-0x2c(%ebp)
0x006d892a <+58>: div %ecx
0x006d892c <+60>: mov %eax,-0x30(%ebp)
0x006d892f <+63>: mov -0x30(%ebp),%eax
0x006d8932 <+66>: mov -0x2c(%ebp),%edx
0x006d8935 <+69>: add $0x3c,%esp
0x006d8938 <+72>: pop %ebx
0x006d8939 <+73>: pop %esi
0x006d893a <+74>: pop %edi
0x006d893b <+75>: pop %ebp
0x006d893c <+76>: ret
0x006d893d <+77>: lea 0x0(%esi),%esi
0x006d8940 <+80>: mov %edx,%eax
0x006d8942 <+82>: mov $0x20,%ecx
0x006d8947 <+87>: test $0xffff0000,%eax
0x006d894c <+92>: jne 0x6d8956 <div64_u64+102>
0x006d894e <+94>: shl $0x10,%eax
0x006d8951 <+97>: mov $0x10,%ecx
0x006d8956 <+102>: test $0xff000000,%eax
0x006d895b <+107>: jne 0x6d8963 <div64_u64+115>
0x006d895d <+109>: shl $0x8,%eax
0x006d8960 <+112>: sub $0x8,%ecx
0x006d8963 <+115>: test $0xf0000000,%eax
0x006d8968 <+120>: jne 0x6d8970 <div64_u64+128>
0x006d896a <+122>: shl $0x4,%eax
0x006d896d <+125>: sub $0x4,%ecx
0x006d8970 <+128>: test $0xc0000000,%eax
0x006d8975 <+133>: jne 0x6d897d <div64_u64+141>
0x006d8977 <+135>: shl $0x2,%eax
0x006d897a <+138>: sub $0x2,%ecx
0x006d897d <+141>: test %eax,%eax
0x006d897f <+143>: js 0x6d8a40 <div64_u64+336>
0x006d8985 <+149>: mov -0x34(%ebp),%edx
0x006d8988 <+152>: mov -0x38(%ebp),%eax
0x006d898b <+155>: shrd %cl,%edx,%eax
0x006d898e <+158>: shr %cl,%edx
0x006d8990 <+160>: test $0x20,%cl
0x006d8993 <+163>: cmovne %edx,%eax
0x006d8996 <+166>: mov %edi,%edx
0x006d8998 <+168>: mov %eax,%ebx
0x006d899a <+170>: mov %esi,%eax
0x006d899c <+172>: shrd %cl,%edx,%eax
0x006d899f <+175>: shr %cl,%edx
0x006d89a1 <+177>: test $0x20,%cl
0x006d89a4 <+180>: je 0x6d89aa <div64_u64+186>
0x006d89a6 <+182>: mov %edx,%eax
0x006d89a8 <+184>: xor %edx,%edx
0x006d89aa <+186>: mov %edx,%ecx
0x006d89ac <+188>: mov %eax,-0x20(%ebp)
0x006d89af <+191>: mov %eax,%edx
0x006d89b1 <+193>: test %ecx,%ecx
0x006d89b3 <+195>: mov %ecx,-0x1c(%ebp)
0x006d89b6 <+198>: jne 0x6d8a73 <div64_u64+387>
0x006d89bc <+204>: mov %edx,%eax
0x006d89be <+206>: xor %edx,%edx
0x006d89c0 <+208>: div %ebx
0x006d89c2 <+210>: xor %edx,%edx
0x006d89c4 <+212>: mov %edx,%ebx
0x006d89c6 <+214>: movl $0x0,-0x30(%ebp)
0x006d89cd <+221>: movl $0x0,-0x2c(%ebp)
0x006d89d4 <+228>: or %eax,%ebx
0x006d89d6 <+230>: je 0x6d8a02 <div64_u64+274>
0x006d89d8 <+232>: add $0xffffffff,%eax
0x006d89db <+235>: mov -0x34(%ebp),%ebx
0x006d89de <+238>: mov -0x38(%ebp),%ecx
0x006d89e1 <+241>: adc $0xffffffff,%edx
0x006d89e4 <+244>: mov %eax,-0x30(%ebp)
0x006d89e7 <+247>: mov %edx,-0x2c(%ebp)
0x006d89ea <+250>: mov -0x30(%ebp),%edx
0x006d89ed <+253>: mov -0x2c(%ebp),%eax
0x006d89f0 <+256>: imul %ebx,%edx
0x006d89f3 <+259>: imul %ecx,%eax
0x006d89f6 <+262>: add %edx,%eax
0x006d89f8 <+264>: mov %eax,%ebx
0x006d89fa <+266>: mov -0x38(%ebp),%eax
0x006d89fd <+269>: mull -0x30(%ebp)
0x006d8a00 <+272>: add %ebx,%edx
0x006d8a02 <+274>: sub %eax,%esi
0x006d8a04 <+276>: sbb %edx,%edi
0x006d8a06 <+278>: mov %esi,%eax
0x006d8a08 <+280>: mov -0x38(%ebp),%esi
0x006d8a0b <+283>: mov %edi,%edx
0x006d8a0d <+285>: mov -0x34(%ebp),%edi
0x006d8a10 <+288>: cmp %edx,%edi
0x006d8a12 <+290>: ja 0x6d892f <div64_u64+63>
0x006d8a18 <+296>: jae 0x6d8a30 <div64_u64+320>
0x006d8a1a <+298>: addl $0x1,-0x30(%ebp)
0x006d8a1e <+302>: adcl $0x0,-0x2c(%ebp)
0x006d8a22 <+306>: mov -0x30(%ebp),%eax
0x006d8a25 <+309>: mov -0x2c(%ebp),%edx
0x006d8a28 <+312>: add $0x3c,%esp
0x006d8a2b <+315>: pop %ebx
0x006d8a2c <+316>: pop %esi
0x006d8a2d <+317>: pop %edi
0x006d8a2e <+318>: pop %ebp
0x006d8a2f <+319>: ret
0x006d8a30 <+320>: cmp %eax,%esi
0x006d8a32 <+322>: ja 0x6d892f <div64_u64+63>
0x006d8a38 <+328>: jmp 0x6d8a1a <div64_u64+298>
0x006d8a3a <+330>: lea 0x0(%esi),%esi
0x006d8a40 <+336>: add $0x1,%ecx
0x006d8a43 <+339>: jmp 0x6d8985 <div64_u64+149>
0x006d8a48 <+344>: nop
0x006d8a49 <+345>: lea 0x0(%esi,%eiz,1),%esi
0x006d8a50 <+352>: mov -0x38(%ebp),%eax
0x006d8a53 <+355>: mov %eax,0x4(%esp)
0x006d8a57 <+359>: lea -0x28(%ebp),%eax
0x006d8a5a <+362>: mov %eax,(%esp)
0x006d8a5d <+365>: call 0x940060 <tmp_cmdline.44932> <=== crashed here
0x006d8a62 <+370>: mov -0x28(%ebp),%eax
0x006d8a65 <+373>: mov -0x24(%ebp),%edx
0x006d8a68 <+376>: mov %eax,-0x30(%ebp)
0x006d8a6b <+379>: mov %edx,-0x2c(%ebp)
0x006d8a6e <+382>: jmp 0x6d892f <div64_u64+63>
0x006d8a73 <+387>: lea -0x20(%ebp),%eax
0x006d8a76 <+390>: mov %ebx,0x4(%esp)
0x006d8a7a <+394>: mov %eax,(%esp)
0x006d8a7d <+397>: call 0x940060 <tmp_cmdline.44932>
0x006d8a82 <+402>: mov -0x20(%ebp),%eax
0x006d8a85 <+405>: mov -0x1c(%ebp),%edx
0x006d8a88 <+408>: jmp 0x6d89c4 <div64_u64+212>
End of assembler dump.

and I double check the function disassmbly code with ida pro

.text:006D88F0 ; u64 __cdecl div64_u64(u64 dividend, u64 divisor)
.text:006D88F0 _div64_u64 proc near ; CODE XREF: _set_max_threads+2E↑p
.text:006D88F0 ; _to_ratio+49↑p ...
.text:006D88F0
.text:006D88F0 var_38 = qword ptr -38h
.text:006D88F0 var_30 = qword ptr -30h
.text:006D88F0 var_28 = qword ptr -28h
.text:006D88F0 var_20 = qword ptr -20h
.text:006D88F0 dividend = qword ptr 8
.text:006D88F0 divisor = qword ptr 10h
.text:006D88F0
.text:006D88F0 push ebp
.text:006D88F1 mov ebp, esp
.text:006D88F3 push edi
.text:006D88F4 push esi
.text:006D88F5 push ebx
.text:006D88F6 sub esp, 3Ch
.text:006D88F9 ; 14: if ( !HIDWORD(divisor) )
.text:006D88F9 mov edx, dword ptr [ebp+divisor+4]
.text:006D88FC mov eax, dword ptr [ebp+divisor]
.text:006D88FF mov esi, dword ptr [ebp+dividend]
.text:006D8902 mov edi, dword ptr [ebp+dividend+4]
.text:006D8905 test edx, edx
.text:006D8907 mov dword ptr [ebp+var_38], eax
.text:006D890A mov dword ptr [ebp+var_38+4], edx
.text:006D890D jnz short loc_6D8940
.text:006D890F ; 19: (*(void (__fastcall **)(_DWORD))compat_sys_kexec_load)(divisor);
.text:006D890F test edi, edi
.text:006D8911 mov ecx, eax
.text:006D8913 ; 16: v12 = dividend;
.text:006D8913 mov dword ptr [ebp+var_28], esi
.text:006D8916 ; 17: if ( !HIDWORD(dividend) )
.text:006D8916 mov dword ptr [ebp+var_28+4], edi
.text:006D8919 jnz loc_6D8A50
.text:006D891F ; 18: return (unsigned int)dividend / (unsigned int)divisor;
.text:006D891F mov eax, esi
.text:006D8921 xor edx, edx
.text:006D8923 mov dword ptr [ebp+var_30+4], 0
.text:006D892A div ecx
.text:006D892C mov dword ptr [ebp+var_30], eax
.text:006D892F ; 20: return v12;
.text:006D892F
.text:006D892F loc_6D892F: ; CODE XREF: _div64_u64+122↓j
.text:006D892F ; _div64_u64+142↓j ...
.text:006D892F mov eax, dword ptr [ebp+var_30]
.text:006D8932 mov edx, dword ptr [ebp+var_30+4]
.text:006D8935 ; 71: return v11;
.text:006D8935 add esp, 3Ch
.text:006D8938 pop ebx
.text:006D8939 pop esi
.text:006D893A pop edi
.text:006D893B pop ebp
.text:006D893C retn
.text:006D893C ; ---------------------------------------------------------------------------
.text:006D893D align 10h
.text:006D8940 ; 22: v3 = HIDWORD(divisor);
.text:006D8940
.text:006D8940 loc_6D8940: ; CODE XREF: _div64_u64+1D↑j
.text:006D8940 mov eax, edx
.text:006D8942 ; 23: v4 = 32;
.text:006D8942 mov ecx, 20h
.text:006D8947 ; 24: if ( !(divisor & 0xFFFF000000000000LL) )
.text:006D8947 test eax, 0FFFF0000h
.text:006D894C jnz short loc_6D8956
.text:006D894E ; 26: v3 = HIDWORD(divisor) << 16;
.text:006D894E shl eax, 10h
.text:006D8951 ; 27: v4 = 16;
.text:006D8951 mov ecx, 10h
.text:006D8956 ; 29: if ( !(v3 & 0xFF000000) )
.text:006D8956
.text:006D8956 loc_6D8956: ; CODE XREF: _div64_u64+5C↑j
.text:006D8956 test eax, 0FF000000h
.text:006D895B jnz short loc_6D8963
.text:006D895D ; 31: v3 <<= 8;
.text:006D895D shl eax, 8
.text:006D8960 ; 32: v4 -= 8;
.text:006D8960 sub ecx, 8
.text:006D8963 ; 34: if ( !(v3 & 0xF0000000) )
.text:006D8963
.text:006D8963 loc_6D8963: ; CODE XREF: _div64_u64+6B↑j
.text:006D8963 test eax, 0F0000000h
.text:006D8968 jnz short loc_6D8970
.text:006D896A ; 36: v3 *= 16;
.text:006D896A shl eax, 4
.text:006D896D ; 37: v4 -= 4;
.text:006D896D sub ecx, 4
.text:006D8970 ; 39: if ( !(v3 & 0xC0000000) )
.text:006D8970
.text:006D8970 loc_6D8970: ; CODE XREF: _div64_u64+78↑j
.text:006D8970 test eax, 0C0000000h
.text:006D8975 jnz short loc_6D897D
.text:006D8977 ; 41: v3 = 4;
.text:006D8977 shl eax, 2
.text:006D897A ; 42: v4 -= 2;
.text:006D897A sub ecx, 2
.text:006D897D ; 44: if ( v3 < 0 )
.text:006D897D
.text:006D897D loc_6D897D: ; CODE XREF: _div64_u64+85↑j
.text:006D897D test eax, eax
.text:006D897F js loc_6D8A40
.text:006D8985 ; 46: v5 = divisor >> (v4 & 0x1F);
.text:006D8985
.text:006D8985 loc_6D8985: ; CODE XREF: _div64_u64+153↓j
.text:006D8985 mov edx, dword ptr [ebp+var_38+4]
.text:006D8988 mov eax, dword ptr [ebp+var_38]
.text:006D898B shrd eax, edx, cl
.text:006D898E shr edx, cl
.text:006D8990 ; 47: if ( v4 & 0x20 )
.text:006D8990 test cl, 20h
.text:006D8993 ; 48: LODWORD(v5) = divisor >> (v4 & 0x1F) >> 32;
.text:006D8993 cmovnz eax, edx
.text:006D8996 ; 49: v6 = v5;
.text:006D8996 mov edx, edi
.text:006D8998 mov ebx, eax
.text:006D899A ; 52: if ( dividend >> v4 >> 32 )
.text:006D899A mov eax, esi
.text:006D899C shrd eax, edx, cl
.text:006D899F ; 50: v7 = dividend >> v4;
.text:006D899F shr edx, cl
.text:006D89A1 test cl, 20h
.text:006D89A4 jz short loc_6D89AA
.text:006D89A6 mov eax, edx
.text:006D89A8 xor edx, edx
.text:006D89AA ; 54: ((void (__fastcall **)(_DWORD, _DWORD, u64 *, unsigned int))compat_sys_kexec_load)(HIDWORD(v7), v7, &v13, v6);
.text:006D89AA
.text:006D89AA loc_6D89AA: ; CODE XREF: _div64_u64+B4↑j
.text:006D89AA mov ecx, edx
.text:006D89AC ; 51: v13 = dividend >> v4;
.text:006D89AC mov dword ptr [ebp+var_20], eax
.text:006D89AF mov edx, eax
.text:006D89B1 test ecx, ecx
.text:006D89B3 mov dword ptr [ebp+var_20+4], ecx
.text:006D89B6 jnz loc_6D8A73
.text:006D89BC ; 59: v8 = (unsigned int)v7 / v6;
.text:006D89BC mov eax, edx
.text:006D89BE xor edx, edx
.text:006D89C0 div ebx
.text:006D89C2 xor edx, edx
.text:006D89C4 ; 61: v11 = 0LL;
.text:006D89C4
.text:006D89C4 loc_6D89C4: ; CODE XREF: _div64_u64+198↓j
.text:006D89C4 mov ebx, edx
.text:006D89C6 mov dword ptr [ebp+var_30], 0
.text:006D89CD ; 62: if ( v8 )
.text:006D89CD mov dword ptr [ebp+var_30+4], 0
.text:006D89D4 or ebx, eax
.text:006D89D6 jz short loc_6D8A02
.text:006D89D8 ; 64: v11 = v8 - 1;
.text:006D89D8 add eax, 0FFFFFFFFh
.text:006D89DB mov ebx, dword ptr [ebp+var_38+4]
.text:006D89DE mov ecx, dword ptr [ebp+var_38]
.text:006D89E1 adc edx, 0FFFFFFFFh
.text:006D89E4 mov dword ptr [ebp+var_30], eax
.text:006D89E7 ; 65: v9 = HIDWORD(divisor) * (v8 - 1) + divisor * ((v8 - 1) >> 32);
.text:006D89E7 mov dword ptr [ebp+var_30+4], edx
.text:006D89EA mov edx, dword ptr [ebp+var_30]
.text:006D89ED mov eax, dword ptr [ebp+var_30+4]
.text:006D89F0 imul edx, ebx
.text:006D89F3 imul eax, ecx
.text:006D89F6 add eax, edx
.text:006D89F8 mov ebx, eax
.text:006D89FA ; 66: v8 = (unsigned int)(v8 - 1) * (unsigned __int64)(unsigned int)divisor;
.text:006D89FA mov eax, dword ptr [ebp+var_38]
.text:006D89FD mul dword ptr [ebp+var_30]
.text:006D8A00 ; 67: HIDWORD(v8) += v9;
.text:006D8A00 add edx, ebx
.text:006D8A02 ; 69: v10 = dividend - v8;
.text:006D8A02
.text:006D8A02 loc_6D8A02: ; CODE XREF: _div64_u64+E6↑j
.text:006D8A02 sub esi, eax
.text:006D8A04 sbb edi, edx
.text:006D8A06 mov eax, esi
.text:006D8A08 ; 70: if ( HIDWORD(divisor) > HIDWORD(v10) || HIDWORD(divisor) >= HIDWORD(v10) && (unsigned int)divisor > (unsigned int)v10 )
.text:006D8A08 mov esi, dword ptr [ebp+var_38]
.text:006D8A0B mov edx, edi
.text:006D8A0D mov edi, dword ptr [ebp+var_38+4]
.text:006D8A10 cmp edi, edx
.text:006D8A12 ja loc_6D892F
.text:006D8A18 jnb short loc_6D8A30
.text:006D8A1A ; 72: return v11 + 1;
.text:006D8A1A
.text:006D8A1A loc_6D8A1A: ; CODE XREF: _div64_u64+148↓j
.text:006D8A1A add dword ptr [ebp+var_30], 1
.text:006D8A1E adc dword ptr [ebp+var_30+4], 0
.text:006D8A22 mov eax, dword ptr [ebp+var_30]
.text:006D8A25 mov edx, dword ptr [ebp+var_30+4]
.text:006D8A28 add esp, 3Ch
.text:006D8A2B pop ebx
.text:006D8A2C pop esi
.text:006D8A2D pop edi
.text:006D8A2E pop ebp
.text:006D8A2F retn
.text:006D8A30 ; ---------------------------------------------------------------------------
.text:006D8A30
.text:006D8A30 loc_6D8A30: ; CODE XREF: _div64_u64+128↑j
.text:006D8A30 cmp esi, eax
.text:006D8A32 ja loc_6D892F
.text:006D8A38 jmp short loc_6D8A1A
.text:006D8A38 ; ---------------------------------------------------------------------------
.text:006D8A3A align 10h
.text:006D8A40 ; 45: ++v4;
.text:006D8A40
.text:006D8A40 loc_6D8A40: ; CODE XREF: _div64_u64+8F↑j
.text:006D8A40 add ecx, 1
.text:006D8A43 jmp loc_6D8985
.text:006D8A43 ; ---------------------------------------------------------------------------
.text:006D8A48 align 10h
.text:006D8A50
.text:006D8A50 loc_6D8A50: ; CODE XREF: _div64_u64+29↑j
.text:006D8A50 mov eax, dword ptr [ebp+var_38]
.text:006D8A53 mov [esp+4], eax
.text:006D8A57 lea eax, [ebp+var_28]
.text:006D8A5A mov [esp], eax
.text:006D8A5D call near ptr _compat_sys_kexec_load ; <=== crashed here
.text:006D8A62 mov eax, dword ptr [ebp+var_28]
.text:006D8A65 mov edx, dword ptr [ebp+var_28+4]
.text:006D8A68 mov dword ptr [ebp+var_30], eax
.text:006D8A6B mov dword ptr [ebp+var_30+4], edx
.text:006D8A6E jmp loc_6D892F
.text:006D8A73 ; ---------------------------------------------------------------------------
.text:006D8A73
.text:006D8A73 loc_6D8A73: ; CODE XREF: _div64_u64+C6↑j
.text:006D8A73 lea eax, [ebp+var_20]
.text:006D8A76 mov [esp+4], ebx
.text:006D8A7A mov [esp], eax
.text:006D8A7D call near ptr _compat_sys_kexec_load
.text:006D8A82 ; 55: v8 = v13;
.text:006D8A82 mov eax, dword ptr [ebp+var_20]
.text:006D8A85 mov edx, dword ptr [ebp+var_20+4]
.text:006D8A88 jmp loc_6D89C4
.text:006D8A88 _div64_u64 endp
.text:006D8A88
.text:006D8A88 ; ---------------------------------------------------------------------------
.text:006D8A8D align 10h
.text:006D8A90

@kruglinski
Copy link
Author

I am confused with div64_u64, by review include/linux/math64.h, div64_u64 is just a single line function, how can it produced so much opcodes

static inline u64 div64_u64(u64 dividend, u64 divisor)
{
return dividend / divisor;
}

I have no idea about this, please help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants