Add support for running on the Windows 10 Kernel (resend)

André Hentschel nerv at dawncrow.de
Fri Apr 1 12:08:15 CDT 2016


---
 dlls/kernel32/heap.c       |  4 ++--
 dlls/ntdll/cdrom.c         | 28 ++++++++++++++--------------
 dlls/ntdll/directory.c     |  6 +++---
 dlls/ntdll/file.c          |  4 ++--
 dlls/ntdll/nt.c            |  2 +-
 dlls/ntdll/signal_arm.c    |  2 +-
 dlls/ntdll/signal_arm64.c  |  4 ++++
 dlls/ntdll/signal_i386.c   |  4 ++--
 dlls/ntdll/signal_x86_64.c |  4 ++--
 dlls/ws2_32/socket.c       |  2 +-
 libs/wine/ldt.c            |  8 ++++----
 libs/wine/mmap.c           |  4 ++--
 loader/main.c              |  2 +-
 server/fd.c                |  2 +-
 server/ptrace.c            |  4 ++--
 tools/winebuild/main.c     |  2 +-
 16 files changed, 43 insertions(+), 39 deletions(-)

diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index eeed785..12e31e2 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -1150,7 +1150,7 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
     SYSTEM_INFO si;
 #ifdef linux
     FILE *f;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
     DWORDLONG total;
 #ifdef __APPLE__
     unsigned int val;
@@ -1229,7 +1229,7 @@ BOOL WINAPI GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpmemex )
         }
         fclose( f );
     }
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
     total = 0;
     lpmemex->ullAvailPhys = 0;
 
diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c
index ee36045..ad03759 100644
--- a/dlls/ntdll/cdrom.c
+++ b/dlls/ntdll/cdrom.c
@@ -473,7 +473,7 @@ static NTSTATUS CDROM_SyncCache(int dev, int fd)
    cdrom_cache[dev].toc_good = 1;
    return STATUS_SUCCESS;
 
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
 
    int i, tsz;
    struct ioc_toc_header hdr;
@@ -783,7 +783,7 @@ static NTSTATUS CDROM_ResetAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMRESET));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCRESET, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -800,7 +800,7 @@ static NTSTATUS CDROM_SetTray(int fd, BOOL doEject)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, doEject ? CDROMEJECT : CDROMCLOSETRAY));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode((ioctl(fd, CDIOCALLOW, NULL)) ||
                                (ioctl(fd, doEject ? CDIOCEJECT : CDIOCCLOSE, NULL)) ||
                                (ioctl(fd, CDIOCPREVENT, NULL)));
@@ -822,7 +822,7 @@ static NTSTATUS CDROM_ControlEjection(int fd, const PREVENT_MEDIA_REMOVAL* rmv)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROM_LOCKDOOR, rmv->PreventMediaRemoval));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, (rmv->PreventMediaRemoval) ? CDIOCPREVENT : CDIOCALLOW, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -977,7 +977,7 @@ static NTSTATUS CDROM_ReadQChannel(int dev, int fd, const CDROM_SUB_Q_DATA_FORMA
 
  end:
     ret = CDROM_GetStatusCode(io);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     SUB_Q_HEADER*       hdr = (SUB_Q_HEADER*)data;
     int                 io;
     struct ioc_read_subchannel	read_sc;
@@ -1134,7 +1134,7 @@ static NTSTATUS CDROM_Verify(int dev, int fd)
         return STATUS_SUCCESS;
     else
         return STATUS_NO_MEDIA_IN_DEVICE;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     int ret;
     ret = ioctl(fd, CDIOCSTART, NULL);
     if(ret == 0)
@@ -1187,7 +1187,7 @@ static NTSTATUS CDROM_PlayAudioMSF(int fd, const CDROM_PLAY_AUDIO_MSF* audio_msf
 	  msf.cdmsf_min1, msf.cdmsf_sec1, msf.cdmsf_frame1);
  end:
     ret = CDROM_GetStatusCode(io);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     struct	ioc_play_msf	msf;
     int         io;
 
@@ -1232,7 +1232,7 @@ static NTSTATUS CDROM_SeekAudioMSF(int dev, int fd, const CDROM_SEEK_AUDIO_MSF*
 #if defined(linux)
     struct cdrom_msf0	msf;
     struct cdrom_subchnl sc;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     struct ioc_play_msf	msf;
     struct ioc_read_subchannel	read_sc;
     struct cd_sub_channel_info	sc;
@@ -1285,7 +1285,7 @@ static NTSTATUS CDROM_SeekAudioMSF(int dev, int fd, const CDROM_SEEK_AUDIO_MSF*
       return CDROM_GetStatusCode(ioctl(fd, CDROMSEEK, &msf));
     }
     return STATUS_SUCCESS;
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     read_sc.address_format = CD_MSF_FORMAT;
     read_sc.track          = 0;
     read_sc.data_len       = sizeof(sc);
@@ -1326,7 +1326,7 @@ static NTSTATUS CDROM_PauseAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMPAUSE));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCPAUSE, NULL));
 #else
     FIXME(": not supported on this O/S\n");
@@ -1343,7 +1343,7 @@ static NTSTATUS CDROM_ResumeAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMRESUME));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCRESUME, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -1360,7 +1360,7 @@ static NTSTATUS CDROM_StopAudio(int fd)
 {
 #if defined(linux)
     return CDROM_GetStatusCode(ioctl(fd, CDROMSTOP));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     return CDROM_GetStatusCode(ioctl(fd, CDIOCSTOP, NULL));
 #else
     FIXME("not supported on this O/S\n");
@@ -1388,7 +1388,7 @@ static NTSTATUS CDROM_GetVolume(int fd, VOLUME_CONTROL* vc)
         vc->PortVolume[3] = volc.channel3;
     }
     return CDROM_GetStatusCode(io);
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     struct  ioc_vol     volc;
     int io;
 
@@ -1423,7 +1423,7 @@ static NTSTATUS CDROM_SetVolume(int fd, const VOLUME_CONTROL* vc)
     volc.channel3 = vc->PortVolume[3];
 
     return CDROM_GetStatusCode(ioctl(fd, CDROMVOLCTRL, &volc));
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__DragonFly__)
     struct  ioc_vol     volc;
 
     volc.vol[0] = vc->PortVolume[0];
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
index 93fe594..626a75b 100644
--- a/dlls/ntdll/directory.c
+++ b/dlls/ntdll/directory.c
@@ -336,7 +336,7 @@ static char *get_default_com_device( int num )
     ret = RtlAllocateHeap( GetProcessHeap(), 0, sizeof("/dev/ttyS256") );
     if (!ret) return NULL;
     sprintf( ret, "/dev/ttyS%d", num - 1 );
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
     ret = RtlAllocateHeap( GetProcessHeap(), 0, sizeof("/dev/cuau256") );
     if (!ret) return NULL;
     sprintf( ret, "/dev/cuau%d", num - 1 );
@@ -608,7 +608,7 @@ static char *parse_mount_entries( FILE *f, dev_t dev, ino_t ino )
 }
 #endif
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__)
 #include <fstab.h>
 static char *parse_mount_entries( FILE *f, dev_t dev, ino_t ino )
 {
@@ -1054,7 +1054,7 @@ static int get_dir_case_sensitivity_attr( const char *dir )
  */
 static BOOLEAN get_dir_case_sensitivity_stat( const char *dir )
 {
-#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
     struct statfs stfs;
 
     if (statfs( dir, &stfs ) == -1) return FALSE;
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 46fea51..351c756 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2968,7 +2968,7 @@ NTSTATUS WINAPI NtQueryAttributesFile( const OBJECT_ATTRIBUTES *attr, FILE_BASIC
 }
 
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
 /* helper for FILE_GetDeviceInfo to hide some platform differences in fstatfs */
 static inline void get_device_info_fstatfs( FILE_FS_DEVICE_INFORMATION *info, const char *fstypename,
                                             unsigned int flags )
@@ -3089,7 +3089,7 @@ static NTSTATUS get_device_info( int fd, FILE_FS_DEVICE_INFORMATION *info )
             info->DeviceType = FILE_DEVICE_DISK_FILE_SYSTEM;
             break;
         }
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__)
         struct statfs stfs;
 
         if (fstatfs( fd, &stfs ) < 0)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c
index 47d7b31..6cfdc5f 100644
--- a/dlls/ntdll/nt.c
+++ b/dlls/ntdll/nt.c
@@ -2621,7 +2621,7 @@ NTSTATUS WINAPI NtPowerInformation(
 					cpu_power[i].CurrentIdleState = 0; /* FIXME */
 				}
 			}
-#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__)
 			{
 				int num;
 				size_t valSize = sizeof(num);
diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c
index cb5f67d..c3bd6fd 100644
--- a/dlls/ntdll/signal_arm.c
+++ b/dlls/ntdll/signal_arm.c
@@ -98,7 +98,7 @@ typedef struct ucontext
 # define ERROR_sig(context)         REG_sig(error_code, context)
 # define TRAP_sig(context)          REG_sig(trap_no, context)
 
-#elif defined(__FreeBSD__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
 
 /* All Registers access - only for local access */
 # define REGn_sig(reg_num, context) ((context)->uc_mcontext.__gregs[reg_num])
diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c
index 14c5260..32dfdc3 100644
--- a/dlls/ntdll/signal_arm64.c
+++ b/dlls/ntdll/signal_arm64.c
@@ -81,6 +81,10 @@ static pthread_key_t teb_key;
 /* Exceptions */
 # define FAULT_sig(context)         REG_sig(fault_address, context)
 
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
+
+#error Please define registers for those platforms
+
 #endif /* linux */
 
 static const size_t teb_size = 0x2000;  /* we reserve two pages for the TEB */
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 59dca6c..d677fc8 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -260,7 +260,7 @@ typedef struct trapframe ucontext_t;
 #define FPU_sig(context)     NULL  /* FIXME */
 #define FPUX_sig(context)    NULL  /* FIXME */
 
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__)
 
 #include <machine/trap.h>
 
@@ -485,7 +485,7 @@ extern void DECLSPEC_NORETURN __wine_restore_regs( const CONTEXT *context );
 enum i386_trap_code
 {
     TRAP_x86_UNKNOWN    = -1,  /* Unknown fault (TRAP_sig not defined) */
-#if defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
     TRAP_x86_DIVIDE     = T_DIVIDE,     /* Division by zero exception */
     TRAP_x86_TRCTRAP    = T_TRCTRAP,    /* Single-step exception */
     TRAP_x86_NMI        = T_NMI,        /* NMI interrupt */
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index a79fd6e..2fc95af 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -172,7 +172,7 @@ static inline int arch_prctl( int func, void *ptr ) { return syscall( __NR_arch_
 
 #define FPU_sig(context)     ((XMM_SAVE_AREA32 *)((context)->uc_mcontext.fpregs))
 
-#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
 
 #define RAX_sig(context)     ((context)->uc_mcontext.mc_rax)
 #define RBX_sig(context)     ((context)->uc_mcontext.mc_rbx)
@@ -2837,7 +2837,7 @@ void signal_init_thread( TEB *teb )
 
 #if defined __linux__
     arch_prctl( ARCH_SET_GS, teb );
-#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__)
+#elif defined (__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
     amd64_set_gsbase( teb );
 #elif defined(__NetBSD__)
     sysarch( X86_64_SET_GSBASE, &teb );
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index f62c9cd..a891a11 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -163,7 +163,7 @@
 #define IP_UNICAST_IF 50
 #endif
 
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)  || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)  || defined(__DragonFly__)
 # define sipx_network    sipx_addr.x_net
 # define sipx_node       sipx_addr.x_host.c_host
 #endif  /* __FreeBSD__ */
diff --git a/libs/wine/ldt.c b/libs/wine/ldt.c
index 0946407..29d1d2c 100644
--- a/libs/wine/ldt.c
+++ b/libs/wine/ldt.c
@@ -87,7 +87,7 @@ static inline int set_thread_area( struct modify_ldt_s *ptr )
 #endif
 #endif
 
-#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)
 #include <machine/segments.h>
 #include <machine/sysarch.h>
 #endif  /* __NetBSD__ || __FreeBSD__ || __OpenBSD__ */
@@ -180,7 +180,7 @@ static int internal_set_entry( unsigned short sel, const LDT_ENTRY *entry )
         if ((ret = modify_ldt(0x11, &ldt_info, sizeof(ldt_info))) < 0)
             perror( "modify_ldt" );
     }
-#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)
+#elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)
     {
 	LDT_ENTRY entry_copy = *entry;
 	/* The kernel will only let us set LDTs with user priority level */
@@ -392,7 +392,7 @@ unsigned short wine_ldt_alloc_fs(void)
             if (errno != ENOSYS) perror( "set_thread_area" );
         }
         else global_fs_sel = (ldt_info.entry_number << 3) | 3;
-#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__)
         global_fs_sel = GSEL( GUFS_SEL, SEL_UPL );
 #endif
     }
@@ -420,7 +420,7 @@ void wine_ldt_init_fs( unsigned short sel, const LDT_ENTRY *entry )
         ldt_info.entry_number = sel >> 3;
         fill_modify_ldt_struct( &ldt_info, entry );
         if ((ret = set_thread_area( &ldt_info ) < 0)) perror( "set_thread_area" );
-#elif defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__)
         i386_set_fsbase( wine_ldt_get_base( entry ));
 #endif
     }
diff --git a/libs/wine/mmap.c b/libs/wine/mmap.c
index 1a3ca59..02ab05f 100644
--- a/libs/wine/mmap.c
+++ b/libs/wine/mmap.c
@@ -205,7 +205,7 @@ void *wine_anon_mmap( void *start, size_t size, int prot, int flags )
 
     if (!(flags & MAP_FIXED))
     {
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__)
         /* Even FreeBSD 5.3 does not properly support NULL here. */
         if( start == NULL ) start = (void *)0x110000;
 #endif
@@ -379,7 +379,7 @@ void mmap_init(void)
         char *base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) - (granularity_mask + 1);
         if (base > user_space_limit) reserve_area( user_space_limit, base );
         base = stack_ptr - ((unsigned int)stack_ptr & granularity_mask) + (granularity_mask + 1);
-#if defined(linux) || defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__)
+#if defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__)
         /* Heuristic: assume the stack is near the end of the address */
         /* space, this avoids a lot of futile allocation attempts */
         end = (char *)(((unsigned long)base + 0x0fffffff) & 0xf0000000);
diff --git a/loader/main.c b/loader/main.c
index bb752b5..e8a3827 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -191,7 +191,7 @@ static int pre_exec(void)
     return 1;  /* we have a preloader on x86-64 */
 }
 
-#elif (defined(__FreeBSD__) || defined (__FreeBSD_kernel__) || defined(__DragonFly__))
+#elif (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__))
 
 static int pre_exec(void)
 {
diff --git a/server/fd.c b/server/fd.c
index 1fd1ce7..22fd694 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -933,7 +933,7 @@ static int is_device_removable( dev_t dev, int unix_fd )
     return (stfs.f_type == 0x9660 ||    /* iso9660 */
             stfs.f_type == 0x9fa1 ||    /* supermount */
             stfs.f_type == 0x15013346); /* udf */
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__DragonFly__) || defined(__APPLE__)
     struct statfs stfs;
 
     if (fstatfs( unix_fd, &stfs ) == -1) return 0;
diff --git a/server/ptrace.c b/server/ptrace.c
index cb436b6..5792f8f 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -204,7 +204,7 @@ static int waitpid_thread( struct thread *thread, int signal )
 /* send a signal to a specific thread */
 static inline int tkill( int tgid, int pid, int sig )
 {
-#ifdef __linux__
+#if defined(__linux__) || defined(__WinNT_kernel__)
     int ret = syscall( __NR_tgkill, tgid, pid, sig );
     if (ret < 0 && errno == ENOSYS) ret = syscall( __NR_tkill, pid, sig );
     return ret;
@@ -648,7 +648,7 @@ void set_thread_context( struct thread *thread, const context_t *context, unsign
 }
 
 #elif defined(__i386__) && defined(PTRACE_GETDBREGS) && defined(PTRACE_SETDBREGS) && \
-    (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__))
+    (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__WinNT_kernel__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__))
 
 #include <machine/reg.h>
 
diff --git a/tools/winebuild/main.c b/tools/winebuild/main.c
index 09ebb34..1bd6556 100644
--- a/tools/winebuild/main.c
+++ b/tools/winebuild/main.c
@@ -67,7 +67,7 @@ enum target_platform target_platform = PLATFORM_APPLE;
 enum target_platform target_platform = PLATFORM_FREEBSD;
 #elif defined(__sun)
 enum target_platform target_platform = PLATFORM_SOLARIS;
-#elif defined(_WIN32)
+#elif defined(_WIN32) || defined(__WinNT_kernel__)
 enum target_platform target_platform = PLATFORM_WINDOWS;
 #else
 enum target_platform target_platform = PLATFORM_UNSPECIFIED;
-- 
1.9.1




More information about the wine-patches mailing list