# HG changeset patch # User cslag # Date 1471724867 -7200 # Node ID 63892f03e493802fb894d72fe3ac78e3e931b811 # Parent 5fa2d7d5de100c8a5f181108bd0ff81c8da9483b - minix fix for callbacks (floats are also returned via eax/edx on minix) diff -r 5fa2d7d5de10 -r 63892f03e493 ToDo --- a/ToDo Sat Aug 20 15:57:20 2016 +0200 +++ b/ToDo Sat Aug 20 22:27:47 2016 +0200 @@ -25,7 +25,6 @@ - ellipsis (might be test itself, not respecting fixed part of args) - callback_plain retval, see above under ARM - callf -- fix Minix/x86 callbacks (see callback_suite) - armhf ellipsis: fix weirdness with long long as first ... arg - support Solaris11 CFLAGS with -D_FILE_OFFSET_BITS=64 - make sure selinux works (esp. regarding NX bits, asm might need (or similar): .section .note.GNU-stack,"",@progbits) diff -r 5fa2d7d5de10 -r 63892f03e493 doc/manual/callconvs/callconv_x86.tex --- a/doc/manual/callconvs/callconv_x86.tex Sat Aug 20 15:57:20 2016 +0200 +++ b/doc/manual/callconvs/callconv_x86.tex Sat Aug 20 22:27:47 2016 +0200 @@ -79,7 +79,7 @@ \begin{itemize} \item return values of pointer or integral type (\textless=\ 32 bits) are returned via the eax register \item integers \textgreater\ 32 bits are returned via the eax and edx registers -\item floating point types are returned via the st0 register +\item floating point types are returned via the st0 register (except on Minix, where they are returned as integers are) \end{itemize} diff -r 5fa2d7d5de10 -r 63892f03e493 dyncallback/dyncall_callback_x86.S --- a/dyncallback/dyncall_callback_x86.S Sat Aug 20 15:57:20 2016 +0200 +++ b/dyncallback/dyncall_callback_x86.S Sat Aug 20 22:27:47 2016 +0200 @@ -24,6 +24,8 @@ #include "../portasm/portasm-x86.S" +#include "../dyncall/dyncall_macros.h" + BEGIN_ASM DCThunk_size = 16 DCArgs_size = 20 @@ -85,11 +87,13 @@ LEA(DWORD(EBP,frame_DCValue), EDX) MOVL(DWORD(EBP,0), EBP) /* EBP = parent frame */ /* handle return value */ - + +#if !defined(DC__OS_Minix) CMP(LIT(ASCII_f),AL) JE(LOCAL(return_f32)) CMP(LIT(ASCII_d),AL) JE(LOCAL(return_f64)) +#endif /* All int cases (+ pointer & string cases) fall in the return_i64 case, here */ LOCAL(return_i64): diff -r 5fa2d7d5de10 -r 63892f03e493 dyncallback/dyncall_thunk.h --- a/dyncallback/dyncall_thunk.h Sat Aug 20 15:57:20 2016 +0200 +++ b/dyncallback/dyncall_thunk.h Sat Aug 20 22:27:47 2016 +0200 @@ -51,7 +51,7 @@ ** **/ -#include "dyncall_macros.h" +#include "../dyncall/dyncall_macros.h" typedef struct DCThunk_ DCThunk;