https://bugs.winehq.org/show_bug.cgi?id=48861
--- Comment #3 from Anastasius Focht focht@gmx.net --- Hello folks,
the situation has improved with recent changes. As already mentioned in my comment #0 it still doesn't work in all cases (compilers and optimization strategies).
* https://source.winehq.org/git/wine.git/commitdiff/d01d3b749d7d99c75f29396fd7... ("kernelbase: Use command_lineW for GetCommandLineW.")
* https://source.winehq.org/git/wine.git/commitdiff/8a1933bbe40b67d22d919861de... ("kernelbase: Remove DECLSPEC_HOTPATCH for GetCommandLine[AW].")
Thanks Myah
===
GCC 10.2 (Fedora 32):
32-bit works (-gdwarf-2 -gstrict-dwarf -fno-omit-frame-pointer -g -O2)
--- snip -- $ gdb mainline-install-x86_64/lib/wine/kernelbase.dll.so -batch -ex 'disassemble GetCommandLineA'
Dump of assembler code for function GetCommandLineA: 0x7b070ff0 <+0>: mov 0x7b0f3708,%eax 0x7b070ff5 <+5>: ret
$ gdb mainline-install-x86_64/lib/wine/kernelbase.dll.so -batch -ex 'disassemble GetCommandLineW'
Dump of assembler code for function GetCommandLineW: 0x7b071000 <+0>: mov 0x7b0f3704,%eax 0x7b071005 <+5>: ret --- snip --
64-bit doesn't work (-gdwarf-2 -gstrict-dwarf -g -O2)
It generates standard function prologue with frame pointer.
--- snip --- $ gdb mainline-install-x86_64/lib64/wine/kernelbase.dll.so -batch -ex 'disassemble GetCommandLineA'
Dump of assembler code for function GetCommandLineA: 0x000000007b06e520 <+0>: push %rbp 0x000000007b06e521 <+1>: mov 0x80f68(%rip),%rax # 0x7b0ef490 <command_lineA> 0x000000007b06e528 <+8>: mov %rsp,%rbp 0x000000007b06e52b <+11>: and $0xfffffffffffffff0,%rsp 0x000000007b06e52f <+15>: leaveq 0x000000007b06e530 <+16>: retq
$ gdb mainline-install-x86_64/lib64/wine/kernelbase.dll.so -batch -ex 'disassemble GetCommandLineW'
Dump of assembler code for function GetCommandLineW: 0x000000007b06e540 <+0>: push %rbp 0x000000007b06e541 <+1>: mov 0x80f40(%rip),%rax # 0x7b0ef488 <command_lineW> 0x000000007b06e548 <+8>: mov %rsp,%rbp 0x000000007b06e54b <+11>: and $0xfffffffffffffff0,%rsp 0x000000007b06e54f <+15>: leaveq 0x000000007b06e550 <+16>: retq --- snip ---
===
LLVM MinGW 10.x (PE)
32-bit doesn't work (-fno-omit-frame-pointer -gcodeview -g -O2)
It generates standard function prologue with frame pointer, even though there is no stack usage at all.
--- snip --- $ gdb mainline-install-x86_64/lib/wine/kernelbase.dll -batch -ex 'disassemble GetCommandLineW' Dump of assembler code for function kernelbase!GetCommandLineW: 0x7b037830 <+0>: push %ebp 0x7b037831 <+1>: mov %esp,%ebp 0x7b037833 <+3>: mov 0x7b082de0,%eax 0x7b037838 <+8>: pop %ebp 0x7b037839 <+9>: ret
$ gdb mainline-install-x86_64/lib/wine/kernelbase.dll -batch -ex 'disassemble GetCommandLineA' Dump of assembler code for function kernelbase!GetCommandLineA: 0x7b037820 <+0>: push %ebp 0x7b037821 <+1>: mov %esp,%ebp 0x7b037823 <+3>: mov 0x7b082de4,%eax 0x7b037828 <+8>: pop %ebp 0x7b037829 <+9>: ret --- snip ---
64-bit works (-gcodeview -g -O2)
--- snip --- $ gdb mainline-install-x86_64/lib64/wine/kernelbase.dll -batch -ex 'disassemble GetCommandLineA'
Dump of assembler code for function kernelbase!GetCommandLineA: 0x000000007b040940 <+0>: mov 0x550d9(%rip),%rax # 0x7b095a20 0x000000007b040947 <+7>: retq 0x000000007b040948 <+8>: nopl 0x0(%rax,%rax,1)
$ gdb mainline-install-x86_64/lib64/wine/kernelbase.dll -batch -ex 'disassemble GetCommandLineW'
Dump of assembler code for function kernelbase!GetCommandLineW: 0x000000007b040950 <+0>: mov 0x550c1(%rip),%rax # 0x7b095a18 0x000000007b040957 <+7>: retq 0x000000007b040958 <+8>: nopl 0x0(%rax,%rax,1) --- snip ---
$ wine --version wine-5.19-123-ge909986e6ea
Regards