changeset 341:ab2d78e48ca2

- gen-masm . fallback on clang if gcc not available . consolidated use of redundant scripts . regen of portasm based masm files - minor symbol name changes for clarity/consistency
author Tassilo Philipp
date Sat, 04 Jan 2020 23:00:02 +0100
parents 6e33db95e724
children b55fec763864
files dyncall/dyncall_call_x64.S dyncall/dyncall_call_x64.h dyncall/dyncall_call_x64_generic_masm.asm dyncall/dyncall_call_x86.S dyncall/dyncall_call_x86.h dyncall/dyncall_call_x86_generic_masm.asm dyncall/dyncall_callvm_x64.c dyncall/dyncall_callvm_x86.c dyncall/gen-masm.sh dyncallback/dyncall_callback_x86_masm.asm dyncallback/gen-masm.sh portasm/README.txt portasm/gen-masm.sh test/gen-masm/gen_masm.sh
diffstat 14 files changed, 98 insertions(+), 85 deletions(-) [+]
line wrap: on
line diff
--- a/dyncall/dyncall_call_x64.S	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_call_x64.S	Sat Jan 04 23:00:02 2020 +0100
@@ -153,8 +153,8 @@
 
 */
 	
-GLOBAL(dcCall_x64_sys_syscall_sysv)
-BEGIN_PROC(dcCall_x64_sys_syscall_sysv)
+GLOBAL(dcCall_x64_syscall_sysv)
+BEGIN_PROC(dcCall_x64_syscall_sysv)
 
 	MOV(RSI,RAX)			/* load system call id. */
 	MOV(QWORD(RDI,40),R9)		/* copy first six int/pointer arguments to RDI, RSI, RDX, R10, R8, R9. */
@@ -166,7 +166,7 @@
 	SYSCALL
 	RET()
 
-END_PROC(dcCall_x64_sys_syscall_sysv)
+END_PROC(dcCall_x64_syscall_sysv)
 
 END_ASM
 
--- a/dyncall/dyncall_call_x64.h	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_call_x64.h	Sat Jan 04 23:00:02 2020 +0100
@@ -54,7 +54,7 @@
 
 void dcCall_x64_sysv(DCsize stacksize, DCpointer stackdata, DCpointer regdata_i, DCpointer regdata_f, DCpointer target);
 void dcCall_x64_win64(DCsize stacksize, DCpointer stackdata, DCpointer regdata, DCpointer target);
-void dcCall_x64_sys_syscall_sysv(DCpointer argdata, DCpointer target);
+void dcCall_x64_syscall_sysv(DCpointer argdata, DCpointer target);
 
 #ifdef __cplusplus
 }
--- a/dyncall/dyncall_call_x64_generic_masm.asm	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_call_x64_generic_masm.asm	Sat Jan 04 23:00:02 2020 +0100
@@ -1,6 +1,5 @@
 ; auto-generated by gen-masm.sh
 .CODE
-
 dcCall_x64_sysv PROC
 OPTION PROLOGUE:NONE, EPILOGUE:NONE
  push RBP
@@ -34,7 +33,7 @@
  pop RBX
  pop RBP
  ret
-dcCALl_x64_sysv ENDP
+dcCall_x64_sysv ENDP
 dcCall_x64_win64 PROC
 OPTION PROLOGUE:NONE, EPILOGUE:NONE
  push RBP
@@ -67,4 +66,16 @@
  pop RBP
  ret
 dcCall_x64_win64 ENDP
+dcCall_x64_syscall_sysv PROC
+OPTION PROLOGUE:NONE, EPILOGUE:NONE
+ mov RAX,RSI
+ mov R9,qword ptr [RDI+40]
+ mov R8,qword ptr [RDI+32]
+ mov R10,qword ptr [RDI+24]
+ mov RDX,qword ptr [RDI+16]
+ mov RSI,qword ptr [RDI+8]
+ mov RDI,qword ptr [RDI+0]
+ SYSCALL
+ ret
+dcCall_x64_syscall_sysv ENDP
 END
--- a/dyncall/dyncall_call_x86.S	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_call_x86.S	Sat Jan 04 23:00:02 2020 +0100
@@ -182,8 +182,8 @@
 
 */
 
-GLOBAL(dcCall_x86_sys_int80h_linux)
-BEGIN_PROC(dcCall_x86_sys_int80h_linux)
+GLOBAL(dcCall_x86_syscall_int80h_linux)
+BEGIN_PROC(dcCall_x86_syscall_int80h_linux)
 	PUSH(EBP)        		/* prolog. */
 	MOVL(ESP,EBP)
 	PUSH(EBX)			/* save preserved. */
@@ -203,7 +203,7 @@
 	MOVL(EBP,ESP)			/* epilog. */
 	POP(EBP)
 	RET()
-END_PROC(dcCall_x86_sys_int80h_linux)
+END_PROC(dcCall_x86_syscall_int80h_linux)
 
 /*--- syscall int80 bsd -----------------------------------------------------
 
@@ -212,8 +212,8 @@
 
 */
 	
-GLOBAL(dcCall_x86_sys_int80h_bsd)
-BEGIN_PROC(dcCall_x86_sys_int80h_bsd)
+GLOBAL(dcCall_x86_syscall_int80h_bsd)
+BEGIN_PROC(dcCall_x86_syscall_int80h_bsd)
 	PUSH(EBP)			/* prolog. */
 	MOVL(ESP,EBP)
 	PUSH(ESI)			/* save preserved. */
@@ -233,7 +233,7 @@
 _do_int:
 	INT(LIT(HEX(80)))
 	RET()
-END_PROC(dcCall_x86_sys_int80h_bsd)
+END_PROC(dcCall_x86_syscall_int80h_bsd)
 
 END_ASM
 
--- a/dyncall/dyncall_call_x86.h	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_call_x86.h	Sat Jan 04 23:00:02 2020 +0100
@@ -53,14 +53,14 @@
 */
 
 #if defined(DC__OS_Plan9) /* No support for other cconvs on Plan9 and vice-versa. */
-void dcCall_x86_plan9        (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_plan9               (DCpointer target, DCpointer stackdata, DCsize size);
 #else
-void dcCall_x86_cdecl        (DCpointer target, DCpointer stackdata, DCsize size);
-void dcCall_x86_win32_std    (DCpointer target, DCpointer stackdata, DCsize size);
-void dcCall_x86_win32_fast   (DCpointer target, DCpointer stackdata, DCsize size);
-void dcCall_x86_win32_msthis (DCpointer target, DCpointer stackdata, DCsize size);
-void dcCall_x86_sys_int80h_linux (DCpointer target, DCpointer stackdata, DCsize size);
-void dcCall_x86_sys_int80h_bsd   (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_cdecl               (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_win32_std           (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_win32_fast          (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_win32_msthis        (DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_syscall_int80h_linux(DCpointer target, DCpointer stackdata, DCsize size);
+void dcCall_x86_syscall_int80h_bsd  (DCpointer target, DCpointer stackdata, DCsize size);
 #endif
 
 #ifdef __cplusplus
--- a/dyncall/dyncall_call_x86_generic_masm.asm	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_call_x86_generic_masm.asm	Sat Jan 04 23:00:02 2020 +0100
@@ -2,7 +2,6 @@
 .386
 .MODEL FLAT
 .CODE
-
 _dcCall_x86_cdecl PROC
 OPTION PROLOGUE:NONE, EPILOGUE:NONE
  push EBP
@@ -89,10 +88,10 @@
  pop EBP
  ret
 _dcCall_x86_win32_fast ENDP
-_dcCall_x86_sys_int80h_linux PROC
+_dcCall_x86_syscall_int80h_linux PROC
 OPTION PROLOGUE:NONE, EPILOGUE:NONE
  push EBP
-  mov EBP,ESP
+ mov EBP,ESP
  push EBX
  push ESI
  push EDI
@@ -110,11 +109,11 @@
  mov ESP,EBP
  pop EBP
  ret
-_dcCall_x86_sys_int80h_linux ENDP
-_dcCall_x86_sys_int80h_bsd PROC
+_dcCall_x86_syscall_int80h_linux ENDP
+_dcCall_x86_syscall_int80h_bsd PROC
 OPTION PROLOGUE:NONE, EPILOGUE:NONE
  push EBP
-  mov EBP,ESP
+ mov EBP,ESP
  push ESI
  push EDI
  mov ESI,dword ptr [EBP+12]
@@ -132,5 +131,5 @@
 _do_int:
  int 80h
  ret
-_dcCall_x86_sys_int80h_bsd ENDP
+_dcCall_x86_syscall_int80h_bsd ENDP
 END
--- a/dyncall/dyncall_callvm_x64.c	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_callvm_x64.c	Sat Jan 04 23:00:02 2020 +0100
@@ -192,17 +192,17 @@
 /* --- syscall ------------------------------------------------------------- */
 
 #include <assert.h>
-void dc_callvm_call_x64_sys_syscall_sysv(DCCallVM* in_self, DCpointer target)
+void dc_callvm_call_x64_syscall_sysv(DCCallVM* in_self, DCpointer target)
 {
   /* syscalls can have up to 6 args, required to be "Only values of class INTEGER or class MEMORY" (from */
   /* SysV manual), so we can use self->mRegData.i directly; verify this holds at least 6 values, though. */
   assert(numIntRegs >= 6);
 
   DCCallVM_x64* self = (DCCallVM_x64*)in_self;
-  dcCall_x64_sys_syscall_sysv(self->mRegData.i, target);
+  dcCall_x64_syscall_sysv(self->mRegData.i, target);
 }
 
-DCCallVM_vt gVT_x64_sys_syscall_sysv =
+DCCallVM_vt gVT_x64_syscall_sysv =
 {
   &dc_callvm_free_x64
 , &dc_callvm_reset_x64
@@ -217,16 +217,16 @@
 , &dc_callvm_argDouble_x64
 , &dc_callvm_argPointer_x64
 , NULL /* argStruct */
-, (DCvoidvmfunc*)       &dc_callvm_call_x64_sys_syscall_sysv
-, (DCboolvmfunc*)       &dc_callvm_call_x64_sys_syscall_sysv
-, (DCcharvmfunc*)       &dc_callvm_call_x64_sys_syscall_sysv
-, (DCshortvmfunc*)      &dc_callvm_call_x64_sys_syscall_sysv
-, (DCintvmfunc*)        &dc_callvm_call_x64_sys_syscall_sysv
-, (DClongvmfunc*)       &dc_callvm_call_x64_sys_syscall_sysv
-, (DClonglongvmfunc*)   &dc_callvm_call_x64_sys_syscall_sysv
-, (DCfloatvmfunc*)      &dc_callvm_call_x64_sys_syscall_sysv
-, (DCdoublevmfunc*)     &dc_callvm_call_x64_sys_syscall_sysv
-, (DCpointervmfunc*)    &dc_callvm_call_x64_sys_syscall_sysv
+, (DCvoidvmfunc*)       &dc_callvm_call_x64_syscall_sysv
+, (DCboolvmfunc*)       &dc_callvm_call_x64_syscall_sysv
+, (DCcharvmfunc*)       &dc_callvm_call_x64_syscall_sysv
+, (DCshortvmfunc*)      &dc_callvm_call_x64_syscall_sysv
+, (DCintvmfunc*)        &dc_callvm_call_x64_syscall_sysv
+, (DClongvmfunc*)       &dc_callvm_call_x64_syscall_sysv
+, (DClonglongvmfunc*)   &dc_callvm_call_x64_syscall_sysv
+, (DCfloatvmfunc*)      &dc_callvm_call_x64_syscall_sysv
+, (DCdoublevmfunc*)     &dc_callvm_call_x64_syscall_sysv
+, (DCpointervmfunc*)    &dc_callvm_call_x64_syscall_sysv
 , NULL /* callStruct */
 };
 
@@ -253,7 +253,7 @@
     case DC_CALL_SYS_DEFAULT:
 # if defined DC_UNIX
     case DC_CALL_SYS_X64_SYSCALL_SYSV:
-      vt = &gVT_x64_sys_syscall_sysv; break;
+      vt = &gVT_x64_syscall_sysv; break;
 # else
       self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
 # endif
--- a/dyncall/dyncall_callvm_x86.c	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/dyncall_callvm_x86.c	Sat Jan 04 23:00:02 2020 +0100
@@ -499,19 +499,19 @@
 
 /* call syscall */
 
-void dc_callvm_call_x86_sys_int80h_linux(DCCallVM* in_self, DCpointer target)
+void dc_callvm_call_x86_syscall_int80h_linux(DCCallVM* in_self, DCpointer target)
 {
   DCCallVM_x86* self = (DCCallVM_x86*) in_self;
-  dcCall_x86_sys_int80h_linux( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+  dcCall_x86_syscall_int80h_linux( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
 }
 
-void dc_callvm_call_x86_sys_int80h_bsd(DCCallVM* in_self, DCpointer target)
+void dc_callvm_call_x86_syscall_int80h_bsd(DCCallVM* in_self, DCpointer target)
 {
   DCCallVM_x86* self = (DCCallVM_x86*) in_self;
-  dcCall_x86_sys_int80h_bsd( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
+  dcCall_x86_syscall_int80h_bsd( target, dcVecData(&self->mVecHead), dcVecSize(&self->mVecHead) );
 }
 
-DCCallVM_vt gVT_x86_sys_int80h_linux =
+DCCallVM_vt gVT_x86_syscall_int80h_linux =
 {
   &dc_callvm_free_x86
 , &dc_callvm_reset_x86
@@ -526,20 +526,20 @@
 , &dc_callvm_argDouble_x86
 , &dc_callvm_argPointer_x86
 , NULL /* argStruct */
-, (DCvoidvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
-, (DCboolvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
-, (DCcharvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
-, (DCshortvmfunc*)      &dc_callvm_call_x86_sys_int80h_linux
-, (DCintvmfunc*)        &dc_callvm_call_x86_sys_int80h_linux
-, (DClongvmfunc*)       &dc_callvm_call_x86_sys_int80h_linux
-, (DClonglongvmfunc*)   &dc_callvm_call_x86_sys_int80h_linux
-, (DCfloatvmfunc*)      &dc_callvm_call_x86_sys_int80h_linux
-, (DCdoublevmfunc*)     &dc_callvm_call_x86_sys_int80h_linux
-, (DCpointervmfunc*)    &dc_callvm_call_x86_sys_int80h_linux
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_syscall_int80h_linux
+, (DCboolvmfunc*)       &dc_callvm_call_x86_syscall_int80h_linux
+, (DCcharvmfunc*)       &dc_callvm_call_x86_syscall_int80h_linux
+, (DCshortvmfunc*)      &dc_callvm_call_x86_syscall_int80h_linux
+, (DCintvmfunc*)        &dc_callvm_call_x86_syscall_int80h_linux
+, (DClongvmfunc*)       &dc_callvm_call_x86_syscall_int80h_linux
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_syscall_int80h_linux
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_syscall_int80h_linux
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_syscall_int80h_linux
+, (DCpointervmfunc*)    &dc_callvm_call_x86_syscall_int80h_linux
 , NULL /* callStruct */
 };
 
-DCCallVM_vt gVT_x86_sys_int80h_bsd =
+DCCallVM_vt gVT_x86_syscall_int80h_bsd =
 {
   &dc_callvm_free_x86
 , &dc_callvm_reset_x86
@@ -554,16 +554,16 @@
 , &dc_callvm_argDouble_x86
 , &dc_callvm_argPointer_x86
 , NULL /* argStruct */
-, (DCvoidvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
-, (DCboolvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
-, (DCcharvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
-, (DCshortvmfunc*)      &dc_callvm_call_x86_sys_int80h_bsd
-, (DCintvmfunc*)        &dc_callvm_call_x86_sys_int80h_bsd
-, (DClongvmfunc*)       &dc_callvm_call_x86_sys_int80h_bsd
-, (DClonglongvmfunc*)   &dc_callvm_call_x86_sys_int80h_bsd
-, (DCfloatvmfunc*)      &dc_callvm_call_x86_sys_int80h_bsd
-, (DCdoublevmfunc*)     &dc_callvm_call_x86_sys_int80h_bsd
-, (DCpointervmfunc*)    &dc_callvm_call_x86_sys_int80h_bsd
+, (DCvoidvmfunc*)       &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCboolvmfunc*)       &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCcharvmfunc*)       &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCshortvmfunc*)      &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCintvmfunc*)        &dc_callvm_call_x86_syscall_int80h_bsd
+, (DClongvmfunc*)       &dc_callvm_call_x86_syscall_int80h_bsd
+, (DClonglongvmfunc*)   &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCfloatvmfunc*)      &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCdoublevmfunc*)     &dc_callvm_call_x86_syscall_int80h_bsd
+, (DCpointervmfunc*)    &dc_callvm_call_x86_syscall_int80h_bsd
 , NULL /* callStruct */
 };
 
@@ -595,15 +595,15 @@
     case DC_CALL_SYS_DEFAULT:
 # if defined DC_UNIX
 #   if defined DC__OS_Linux
-      vt = &gVT_x86_sys_int80h_linux; break;
+      vt = &gVT_x86_syscall_int80h_linux; break;
 #   else
-      vt = &gVT_x86_sys_int80h_bsd;   break;
+      vt = &gVT_x86_syscall_int80h_bsd;   break;
 #   endif
 # else
       self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; return;
 # endif
-    case DC_CALL_SYS_X86_INT80H_LINUX: vt = &gVT_x86_sys_int80h_linux; break;
-    case DC_CALL_SYS_X86_INT80H_BSD:   vt = &gVT_x86_sys_int80h_bsd;   break;
+    case DC_CALL_SYS_X86_INT80H_LINUX: vt = &gVT_x86_syscall_int80h_linux; break;
+    case DC_CALL_SYS_X86_INT80H_BSD:   vt = &gVT_x86_syscall_int80h_bsd;   break;
 #endif
     default: 
       self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE;
--- a/dyncall/gen-masm.sh	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncall/gen-masm.sh	Sat Jan 04 23:00:02 2020 +0100
@@ -1,7 +1,6 @@
 #!/bin/sh
+cd `dirname $0`
 
-# Uses portasm to generates MASM sources for intel platforms.
-printf "; auto-generated by `basename $0`\r\n" > dyncall_call_x86_generic_masm.asm
-printf "; auto-generated by `basename $0`\r\n" > dyncall_call_x64_generic_masm.asm
-gcc -E -P -DGEN_MASM dyncall_call_x86.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x86_generic_masm.asm
-gcc -E -P -DGEN_MASM dyncall_call_x64.S | awk '{printf "%s\r\n", $0}' >> dyncall_call_x64_generic_masm.asm
+../portasm/gen-masm.sh dyncall_call_x86 _generic_masm
+../portasm/gen-masm.sh dyncall_call_x64 _generic_masm
+
--- a/dyncallback/dyncall_callback_x86_masm.asm	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncallback/dyncall_callback_x86_masm.asm	Sat Jan 04 23:00:02 2020 +0100
@@ -2,7 +2,6 @@
 .386
 .MODEL FLAT
 .CODE
-
 DCThunk_size = 16
 DCArgs_size = 20
 DCValue_size = 8
--- a/dyncallback/gen-masm.sh	Sat Jan 04 22:48:51 2020 +0100
+++ b/dyncallback/gen-masm.sh	Sat Jan 04 23:00:02 2020 +0100
@@ -1,8 +1,6 @@
 #!/bin/sh
+cd `dirname $0`
 
-# Uses portasm to generates MASM sources for intel platforms.
-printf "; auto-generated by `basename $0`\r\n" >dyncall_callback_x86_masm.asm
-printf "; auto-generated by `basename $0`\r\n" >dyncall_callback_x64_masm.asm
-gcc -E -P -DGEN_MASM dyncall_callback_x86.S | awk '{printf "%s\r\n", $0}' >> dyncall_callback_x86_masm.asm
-gcc -E -P -DGEN_MASM dyncall_callback_x64.S | awk '{printf "%s\r\n", $0}' >> dyncall_callback_x64_masm.asm
+../portasm/gen-masm.sh dyncall_callback_x86 _masm
+../portasm/gen-masm.sh dyncall_callback_x64 _masm
 
--- a/portasm/README.txt	Sat Jan 04 22:48:51 2020 +0100
+++ b/portasm/README.txt	Sat Jan 04 23:00:02 2020 +0100
@@ -26,7 +26,7 @@
 #include portasm-<ARCH>.S at front
 
 In order to generate MASM files for X86 and X64, run 
-  'gen-masm.sh <name>' script which reads <name>.S and outputs <name>.masm file.
+  'gen-masm.sh <name> [<outsuffix>]' script which reads <name>.S and outputs <name><outsuffix>.masm file.
 
 
 Common Macros:
--- a/portasm/gen-masm.sh	Sat Jan 04 22:48:51 2020 +0100
+++ b/portasm/gen-masm.sh	Sat Jan 04 23:00:02 2020 +0100
@@ -1,3 +1,7 @@
 #!/bin/sh
-gcc -E -P -DGEN_MASM $1.S >$1.asm
+`which gcc || which clang` -E -P -DGEN_MASM ${1:?Usage: $0 <name> [<outsuffix>]}.S \
+	| sed "/^$/d;1i\\
+; auto-generated by `basename $0`
+;s/$/
/" \
+	> $1$2.asm
 
--- a/test/gen-masm/gen_masm.sh	Sat Jan 04 22:48:51 2020 +0100
+++ b/test/gen-masm/gen_masm.sh	Sat Jan 04 23:00:02 2020 +0100
@@ -1,3 +1,6 @@
-gcc -E -P -DGEN_MASM call_x86.S >call_x86.masm
-gcc -E -P -DGEN_MASM call_x64.S >call_x64.masm
+#!/bin/sh
+cd `dirname $0`
 
+../../portasm/gen-masm.sh call_x86
+../../portasm/gen-masm.sh call_x64
+