PATCH: Make PowerPC simulator compile on MinGW

Mark Mitchell
2005-11-17T00:34:24Z

This patch makes it possible to build the PowerPC simulator on MinGW
-- with the exception of the recurring SIGTRAP issue. Daniel is
coaching me on how to fix that correctly, so that is not included
here.

OK?

--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com

2005-11-16 Mark Mitchell <mark@codesourcery.com>

* configure.ac (USE_WIN32API): Define it.
(sys/errno.h): Add it to AC_CHECK_HEADERS list.
* configure.in: Regenerate.
* config.in: Likewise.
* emul_netbsd.c (sys/errno.h): Guard with HAVE_SYS_ERRNO_H.
(write_timezone): Guard with HAVE_GETTIMEOFDAY.
* emul_unix.c (do_unix_mkdir): Handle Win32 1-argument mkdir.

Index: configure.ac
===================================================================
RCS file: /cvs/src/src/sim/ppc/configure.ac,v
retrieving revision 1.3
diff -c -5 -p -r1.3 configure.ac
*** configure.ac 20 Apr 2005 14:43:55 -0000 1.3
--- configure.ac 17 Nov 2005 00:29:24 -0000
*************** fi],[sim_xor_endian=""])dnl
*** 565,574 ****
--- 565,584 ----
AC_CANONICAL_SYSTEM
AC_ARG_PROGRAM

. ${srcdir}/../../bfd/configure.host

+ case ${host} in
+ *mingw32*)
+ AC_DEFINE(USE_WIN32API, 1,
+ [Define if we should use the Windows API, instead of the
+ POSIX API. On Windows, we use the Windows API when
+ building for MinGW, but the POSIX API when building
+ for Cygwin.])
+ ;;
+ esac
+
AC_CONFIG_HEADER(config.h:config.in)

AC_STRUCT_ST_BLKSIZE
AC_STRUCT_ST_BLOCKS
AC_STRUCT_ST_RDEV
*************** AC_TYPE_SIGNAL
*** 582,592 ****
AC_TYPE_SIZE_T
AC_TYPE_UID_T

AC_CHECK_FUNCS(access cfgetispeed cfgetospeed cfsetispeed cfsetospeed chdir chmod chown dup dup2 fchmod fchown fcntl fstat fstatfs getdirentries getegid geteuid getgid getpid getppid getrusage gettimeofday getuid ioctl kill link lseek lstat mkdir pipe readlink rmdir setreuid setregid stat sigprocmask stat symlink tcgetattr tcsetattr tcsendbreak tcdrain tcflush tcflow tcgetpgrp tcsetpgrp time umask unlink)

! AC_CHECK_HEADERS(fcntl.h stdlib.h string.h strings.h sys/ioctl.h sys/mount.h sys/param.h sys/resource.h sys/stat.h sys/termio.h sys/termios.h sys/time.h sys/times.h sys/types.h time.h unistd.h sys/vfs.h sys/statfs.h)
AC_HEADER_DIRENT

dnl Figure out what type of termio/termios support there is
sim_termio=""
AC_MSG_CHECKING(for struct termios)
--- 592,602 ----
AC_TYPE_SIZE_T
AC_TYPE_UID_T

AC_CHECK_FUNCS(access cfgetispeed cfgetospeed cfsetispeed cfsetospeed chdir chmod chown dup dup2 fchmod fchown fcntl fstat fstatfs getdirentries getegid geteuid getgid getpid getppid getrusage gettimeofday getuid ioctl kill link lseek lstat mkdir pipe readlink rmdir setreuid setregid stat sigprocmask stat symlink tcgetattr tcsetattr tcsendbreak tcdrain tcflush tcflow tcgetpgrp tcsetpgrp time umask unlink)

! AC_CHECK_HEADERS(fcntl.h stdlib.h string.h strings.h sys/ioctl.h sys/mount.h sys/param.h sys/resource.h sys/stat.h sys/termio.h sys/termios.h sys/time.h sys/times.h sys/types.h time.h unistd.h sys/vfs.h sys/statfs.h sys/errno.h)
AC_HEADER_DIRENT

dnl Figure out what type of termio/termios support there is
sim_termio=""
AC_MSG_CHECKING(for struct termios)
Index: emul_netbsd.c
===================================================================
RCS file: /cvs/src/src/sim/ppc/emul_netbsd.c,v
retrieving revision 1.5
diff -c -5 -p -r1.5 emul_netbsd.c
*** emul_netbsd.c 24 Sep 2004 18:39:41 -0000 1.5
--- emul_netbsd.c 17 Nov 2005 00:29:24 -0000
***************
*** 41,51 ****
--- 41,53 ----
#include <sys/stat.h>
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <errno.h>
+ #ifdef HAVE_SYS_ERRNO_H
#include <sys/errno.h>
+ #endif
#include <sys/param.h>
#include <sys/time.h>

#ifdef HAVE_GETRUSAGE
#ifndef HAVE_SYS_RESOURCE_H
*************** write_timeval(unsigned_word addr,
*** 222,243 ****
H2T(t.tv_sec);
H2T(t.tv_usec);
emul_write_buffer(&t, addr, sizeof(t), processor, cia);
}

!
STATIC_INLINE_EMUL_NETBSD void
write_timezone(unsigned_word addr,
struct timezone tz,
cpu *processor,
unsigned_word cia)
{
H2T(tz.tz_minuteswest);
H2T(tz.tz_dsttime);
emul_write_buffer(&tz, addr, sizeof(tz), processor, cia);
}
!

#ifdef HAVE_GETDIRENTRIES
STATIC_INLINE_EMUL_NETBSD void
write_direntries(unsigned_word addr,
char *buf,
--- 224,245 ----
H2T(t.tv_sec);
H2T(t.tv_usec);
emul_write_buffer(&t, addr, sizeof(t), processor, cia);
}

! #ifdef HAVE_GETTIMEOFDAY
STATIC_INLINE_EMUL_NETBSD void
write_timezone(unsigned_word addr,
struct timezone tz,
cpu *processor,
unsigned_word cia)
{
H2T(tz.tz_minuteswest);
H2T(tz.tz_dsttime);
emul_write_buffer(&tz, addr, sizeof(tz), processor, cia);
}
! #endif

#ifdef HAVE_GETDIRENTRIES
STATIC_INLINE_EMUL_NETBSD void
write_direntries(unsigned_word addr,
char *buf,
Index: emul_unix.c
===================================================================
RCS file: /cvs/src/src/sim/ppc/emul_unix.c,v
retrieving revision 1.1.1.1
diff -c -5 -p -r1.1.1.1 emul_unix.c
*** emul_unix.c 16 Apr 1999 01:35:09 -0000 1.1.1.1
--- emul_unix.c 17 Nov 2005 00:29:24 -0000
*************** do_unix_mkdir(os_emul_data *emul,
*** 728,738 ****
--- 728,742 ----
int status;

if (WITH_TRACE && ppc_trace[trace_os_emul])
printf_filtered ("0x%lx [%s], 0%3o", (long)path_addr, path, mode);

+ #ifdef USE_WIN32API
+ status = mkdir(path);
+ #else
status = mkdir(path, mode);
+ #endif
emul_write_status(processor, status, errno);
}
#endif

#ifndef HAVE_RMDIR