lldiv returns lldiv_t structure (which includes two int64). In such case the address of return structure is implicitly passed as the first parameter.
Signed-off-by: Paul Gofman pgofman@codeweavers.com --- Fixes No Man's Sky crashig with +relay trace.
.../api-ms-win-crt-utility-l1-1-0.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/api-ms-win-crt-utility-l1-1-0/api-ms-win-crt-utility-l1-1-0.spec b/dlls/api-ms-win-crt-utility-l1-1-0/api-ms-win-crt-utility-l1-1-0.spec index c81c3d42127..62e79a35cda 100644 --- a/dlls/api-ms-win-crt-utility-l1-1-0/api-ms-win-crt-utility-l1-1-0.spec +++ b/dlls/api-ms-win-crt-utility-l1-1-0/api-ms-win-crt-utility-l1-1-0.spec @@ -22,7 +22,7 @@ @ cdecl labs(long) ucrtbase.labs @ cdecl -ret64 ldiv(long long) ucrtbase.ldiv @ cdecl -ret64 llabs(int64) ucrtbase.llabs -@ cdecl lldiv(int64 int64) ucrtbase.lldiv +@ cdecl lldiv(ptr int64 int64) ucrtbase.lldiv @ cdecl qsort(ptr long long ptr) ucrtbase.qsort @ cdecl qsort_s(ptr long long ptr ptr) ucrtbase.qsort_s @ cdecl rand() ucrtbase.rand diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index b15a6219c52..e79fa9e3aed 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1733,7 +1733,7 @@ @ cdecl ldexp(double long) @ cdecl -ret64 ldiv(long long) @ cdecl -ret64 llabs(int64) -@ cdecl lldiv(int64 int64) +@ cdecl lldiv(ptr int64 int64) @ cdecl localeconv() @ cdecl log(double) @ cdecl -arch=!i386 logf(float) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index c4782b5977b..8a69cbac82f 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -2091,7 +2091,7 @@ @ cdecl ldexp(double long) @ cdecl -ret64 ldiv(long long) @ cdecl -ret64 llabs(int64) -@ cdecl lldiv(int64 int64) +@ cdecl lldiv(ptr int64 int64) @ cdecl localeconv() @ cdecl log(double) @ cdecl -arch=!i386 logf(float) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b8ba61a2e8c..09a1f99401d 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -2247,7 +2247,7 @@ @ cdecl lgammaf(float) @ cdecl lgammal(double) lgamma @ cdecl -ret64 llabs(int64) -@ cdecl lldiv(int64 int64) +@ cdecl lldiv(ptr int64 int64) @ cdecl -ret64 llrint(double) @ cdecl -ret64 llrintf(float) @ cdecl -ret64 llrintl(double) llrint diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index b99bb2ee614..7e9d096a8eb 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1910,7 +1910,7 @@ @ cdecl lgammaf(float) msvcr120.lgammaf @ cdecl lgammal(double) msvcr120.lgammal @ cdecl -ret64 llabs(int64) msvcr120.llabs -@ cdecl lldiv(int64 int64) msvcr120.lldiv +@ cdecl lldiv(ptr int64 int64) msvcr120.lldiv @ cdecl -ret64 llrint(double) msvcr120.llrint @ cdecl -ret64 llrintf(float) msvcr120.llrintf @ cdecl -ret64 llrintl(double) msvcr120.llrintl diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index b1d6cf992b4..ad6ac73a17e 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2381,7 +2381,7 @@ @ cdecl lgammaf(float) @ cdecl lgammal(double) lgamma @ cdecl -ret64 llabs(int64) -@ cdecl lldiv(int64 int64) +@ cdecl lldiv(ptr int64 int64) @ cdecl -ret64 llrint(double) @ cdecl -ret64 llrintf(float) @ cdecl -ret64 llrintl(double) llrint
Hi Paul,
On 21 Jan 2021, at 22:29, Paul Gofman pgofman@codeweavers.com wrote:
lldiv returns lldiv_t structure (which includes two int64). In such case the address of return structure is implicitly passed as the first parameter.
A patch similar to this one was already sent to wine and rejected (because it’s not correct on all platforms). I guess it’s best to use -norelay here.
Thanks, Piotr
Thanks, maybe in that case we should leave parameter list empty? As this way it is written now it is anyway not correct on most platforms.
On 1/22/21 01:25, Piotr Caban wrote:
Hi Paul,
On 21 Jan 2021, at 22:29, Paul Gofman pgofman@codeweavers.com wrote:
lldiv returns lldiv_t structure (which includes two int64). In such case the address of return structure is implicitly passed as the first parameter.
A patch similar to this one was already sent to wine and rejected (because it’s not correct on all platforms). I guess it’s best to use -norelay here.
Thanks, Piotr
On 1/21/21 11:35 PM, Paul Gofman wrote:
Thanks, maybe in that case we should leave parameter list empty? As this way it is written now it is anyway not correct on most platforms.
AFAICS empty parameters list may also cause a crash when relay is used.
Thanks, Piotr
On 1/25/21 15:40, Piotr Caban wrote:
On 1/21/21 11:35 PM, Paul Gofman wrote:
Thanks, maybe in that case we should leave parameter list empty? As this way it is written now it is anyway not correct on most platforms.
AFAICS empty parameters list may also cause a crash when relay is used.
Yeah, sure, I meant that together with -norelay. But after more consideration I thought that it is probably better to leave that parameters list as is.