[PATCH] wdscore: Implement CurrentIP.

Mohamad Al-Jaf mohamadaljaf at gmail.com
Wed Jan 12 20:25:02 CST 2022


Hi Zebediah,

Thanks for the feedback.

Not sure how to quote in Gmail but I'll add > for each line I reply to.

>This debug channel is unused, and should generate a warning.

I can remove it but I plan on adding stub functions to the dll. CurrentIP
is the first function the Microsoft Media Creation tool calls upon,
ConstructPartialMsgVW after. Not sure how many others it will try to call.
Based on your method, I think ConstructPartialMsgVW takes 3 arguments, but
I checked it a few weeks ago so I don't remember if this is the exact
number.

In any case, the debug channel would be used for those arguments. While
we're on this subject, is there a method to determine the function return
type, argument types and possibly names? I see DWORD and sometimes void is
used for undocumented functions, would this be appropriate?

>No reason to make this a separate function; you can use
__ASM_STDCALL_FUNC() to declare it.

Thanks, is this correct so far?

__ASM_STDCALL_FUNC(CurrentIP, 0,
    "mov 0(%esp), %eax\n\t"
    "ret\n\t" )

>Please try to avoid whitespace errors.

I see a lot of files have a newline at the end, I'm assuming a newline
avoids whitespace errors?

>Giovanni points out that this also won't compile on anything other than
i386. You'll need to use #ifdef guards to handle separate architectures.

I see, I'm not really sure what to do for the other architectures or which
ones are appropriate in this context. I'm not familiar with arm assembly. I
looked at the assembly code in kernelbase/thread.c for reference and this
is what I have so far:

#ifdef __i386__
__ASM_STDCALL_FUNC(CurrentIP, 0,
    "movl 0(%esp), %eax\n\t"
    "ret" )
#elif defined(__x86_64__)
__ASM_STDCALL_FUNC(CurrentIP, 0,
    "movq 0(%rsp), %rax\n\t"
    "ret" )
#elif defined(__arm__)
__ASM_STDCALL_FUNC(CurrentIP, 0,
    "mov r13, r0\n\t"
    "ret" )
#elif defined(__aarch64__)
__ASM_STDCALL_FUNC(CurrentIP, 0,
    "mov sp, x0\n\t"
    "ret" )
#else
int WINAPI CurrentIP()
{
    FIXME( "not implemented\n" );
    return 0;
}
#endif

Is this a good start? What parts are incorrect?

On Wed, Jan 12, 2022 at 11:14 AM Zebediah Figura (she/her) <
zfigura at codeweavers.com> wrote:

> On 1/12/22 10:00, Zebediah Figura (she/her) wrote:
> > Hello Mohammed, thanks for the patch! I have a few comments inlined
> below.
> >
> > On 1/12/22 05:03, Mohamad Al-Jaf wrote:
> >> +#include <stdarg.h>
> >> +#include <stdint.h>
> >> +
> >> +#include "windef.h"
> >> +#include "winbase.h"
> >> +
> >> +#include "wine/asm.h"
> >> +#include "wine/debug.h"
> >> +
> >> +WINE_DEFAULT_DEBUG_CHANNEL(wdscore);
> >
> > This debug channel is unused, and should generate a warning.
> >
> >> +
> >> +uint32_t get_ip();
> >> +__ASM_GLOBAL_FUNC( get_ip,
> >> +    "mov 0(%esp), %eax\n\t"
> >> +    "ret\n\t" )
> >
> > No reason to make this a separate function; you can use
> > __ASM_STDCALL_FUNC() to declare it.
>
> Giovanni points out that this also won't compile on anything other than
> i386. You'll need to use #ifdef guards to handle separate architectures.
>
> >
> >> +
> >> +
> >>
> +/***********************************************************************
> >> + *           CurrentIP (wdscore.@)
> >> + */
> >> +int WINAPI CurrentIP()
> >> +{
> >> +    uint32_t ip;
> >> +
> >> +    ip = get_ip();
> >> +    return ip;
> >> +}
> >> \ No newline at end of file
> >
> > Please try to avoid whitespace errors.
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20220112/ac784741/attachment.htm>


More information about the wine-devel mailing list