From bc060e3e1165b711b6daeb924e606056349d57ed Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Sun, 9 Jul 2023 19:32:46 -0400 Subject: [PATCH 1/2] simx86: rename asmlinkage to ASMLINKAGE(x,y,z) and add asm("") For compatibility with macOS --- src/base/emu-i386/simx86/codegen-x86.c | 6 ++---- src/base/emu-i386/simx86/cpatch.c | 18 +++++++++--------- src/base/emu-i386/simx86/cpatch.h | 22 +++++++++++----------- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/base/emu-i386/simx86/codegen-x86.c b/src/base/emu-i386/simx86/codegen-x86.c index f45487f72..1f49701ac 100644 --- a/src/base/emu-i386/simx86/codegen-x86.c +++ b/src/base/emu-i386/simx86/codegen-x86.c @@ -116,6 +116,7 @@ #include "mapping.h" #ifdef HOST_ARCH_X86 #include "codegen-x86.h" +#include "cpatch.h" static void Gen_x86(int op, int mode, ...); static void AddrGen_x86(int op, int mode, ...); @@ -3329,10 +3330,7 @@ asm(".text\n" "do_seq_start:\n" "push "R_REG(dx)"\n" "jmp *"R_REG(ax)"\n"); -#ifdef __cplusplus -extern "C" -#endif -void do_seq_start(void); +ASMLINKAGE(void,do_seq_start,(void)); static unsigned Exec_x86_asm(unsigned *mem_ref, unsigned long *flg, unsigned char *ecpu, unsigned char *SeqStart) { diff --git a/src/base/emu-i386/simx86/cpatch.c b/src/base/emu-i386/simx86/cpatch.c index adfd70a74..bd672436d 100644 --- a/src/base/emu-i386/simx86/cpatch.c +++ b/src/base/emu-i386/simx86/cpatch.c @@ -92,7 +92,7 @@ struct rep_stack { } __attribute__((packed)); -asmlinkage void rep_movs_stos(struct rep_stack *stack) +void rep_movs_stos(struct rep_stack *stack) { unsigned char *paddr = stack->edi; unsigned int ecx = stack->ecx; @@ -217,7 +217,7 @@ asmlinkage void rep_movs_stos(struct rep_stack *stack) /* ======================================================================= */ -asmlinkage void stk_16(dosaddr_t addr, Bit16u value) +void stk_16(dosaddr_t addr, Bit16u value) { in_cpatch++; assert(InCompiledCode); @@ -228,7 +228,7 @@ asmlinkage void stk_16(dosaddr_t addr, Bit16u value) in_cpatch--; } -asmlinkage void stk_32(dosaddr_t addr, Bit32u value) +void stk_32(dosaddr_t addr, Bit32u value) { in_cpatch++; assert(InCompiledCode); @@ -239,7 +239,7 @@ asmlinkage void stk_32(dosaddr_t addr, Bit32u value) in_cpatch--; } -asmlinkage void wri_8(dosaddr_t addr, Bit8u value, unsigned char *eip) +void wri_8(dosaddr_t addr, Bit8u value, unsigned char *eip) { in_cpatch++; assert(InCompiledCode); @@ -255,7 +255,7 @@ asmlinkage void wri_8(dosaddr_t addr, Bit8u value, unsigned char *eip) in_cpatch--; } -asmlinkage void wri_16(dosaddr_t addr, Bit16u value, unsigned char *eip) +void wri_16(dosaddr_t addr, Bit16u value, unsigned char *eip) { in_cpatch++; assert(InCompiledCode); @@ -271,7 +271,7 @@ asmlinkage void wri_16(dosaddr_t addr, Bit16u value, unsigned char *eip) in_cpatch--; } -asmlinkage void wri_32(dosaddr_t addr, Bit32u value, unsigned char *eip) +void wri_32(dosaddr_t addr, Bit32u value, unsigned char *eip) { in_cpatch++; assert(InCompiledCode); @@ -287,17 +287,17 @@ asmlinkage void wri_32(dosaddr_t addr, Bit32u value, unsigned char *eip) in_cpatch--; } -asmlinkage Bit8u read_8(dosaddr_t addr) +Bit8u read_8(dosaddr_t addr) { return vga_read_access(addr) ? vga_read(addr) : READ_BYTE(addr); } -asmlinkage Bit16u read_16(dosaddr_t addr) +Bit16u read_16(dosaddr_t addr) { return vga_read_access(addr) ? vga_read_word(addr) : READ_WORD(addr); } -asmlinkage Bit32u read_32(dosaddr_t addr) +Bit32u read_32(dosaddr_t addr) { return vga_read_access(addr) ? vga_read_dword(addr) : READ_DWORD(addr); } diff --git a/src/base/emu-i386/simx86/cpatch.h b/src/base/emu-i386/simx86/cpatch.h index d285ca351..bbcf2bd08 100644 --- a/src/base/emu-i386/simx86/cpatch.h +++ b/src/base/emu-i386/simx86/cpatch.h @@ -4,19 +4,19 @@ #define EXTERN extern #endif #ifdef __i386__ -#define asmlinkage EXTERN __attribute__((cdecl)) +#define ASMLINKAGE(x,y,z) EXTERN __attribute__((cdecl)) x y z asm(#y) #else -#define asmlinkage EXTERN +#define ASMLINKAGE(x,y,z) EXTERN x y z asm(#y) #endif struct rep_stack; -asmlinkage void rep_movs_stos(struct rep_stack *stack); -asmlinkage void stk_16(dosaddr_t addr, Bit16u value); -asmlinkage void stk_32(dosaddr_t addr, Bit32u value); -asmlinkage void wri_8(dosaddr_t addr, Bit8u value, unsigned char *eip); -asmlinkage void wri_16(dosaddr_t addr, Bit16u value, unsigned char *eip); -asmlinkage void wri_32(dosaddr_t addr, Bit32u value, unsigned char *eip); -asmlinkage Bit8u read_8(dosaddr_t addr); -asmlinkage Bit16u read_16(dosaddr_t addr); -asmlinkage Bit32u read_32(dosaddr_t addr); +ASMLINKAGE(void,rep_movs_stos,(struct rep_stack *stack)); +ASMLINKAGE(void,stk_16,(dosaddr_t addr, Bit16u value)); +ASMLINKAGE(void,stk_32,(dosaddr_t addr, Bit32u value)); +ASMLINKAGE(void,wri_8,(dosaddr_t addr, Bit8u value, unsigned char *eip)); +ASMLINKAGE(void,wri_16,(dosaddr_t addr, Bit16u value, unsigned char *eip)); +ASMLINKAGE(void,wri_32,(dosaddr_t addr, Bit32u value, unsigned char *eip)); +ASMLINKAGE(Bit8u,read_8,(dosaddr_t addr)); +ASMLINKAGE(Bit16u,read_16,(dosaddr_t addr)); +ASMLINKAGE(Bit32u,read_32,(dosaddr_t addr)); From 8424ecf3ce19255d9d554b54869266d25ea66c37 Mon Sep 17 00:00:00 2001 From: Bart Oldeman Date: Sun, 9 Jul 2023 22:25:08 -0400 Subject: [PATCH 2/2] mcontext: Correct _getcontext asm symbol for macOS --- src/base/lib/mcontext/asm.SS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base/lib/mcontext/asm.SS b/src/base/lib/mcontext/asm.SS index e27ca3f64..fefe87760 100644 --- a/src/base/lib/mcontext/asm.SS +++ b/src/base/lib/mcontext/asm.SS @@ -25,8 +25,8 @@ #define GET _getmcontext #elif defined(__x86_64__) #define NEEDAMD64CONTEXT 1 -#define SET _setmcontext -#define GET _getmcontext +#define SET __setmcontext +#define GET __getmcontext #elif defined(__arm__) #define NEEDARMCONTEXT 1 #define SET _setmcontext