Solaris port (Ben Taylor)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1855 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2006-04-25 22:36:06 +00:00
parent 96b74a0221
commit ec530c81ef
9 changed files with 134 additions and 4 deletions

View File

@ -166,6 +166,9 @@ endif
ifdef CONFIG_WIN32
LIBS+=-lwinmm -lws2_32 -liphlpapi
endif
ifdef CONFIG_SOLARIS
LIBS+=-lsocket -lnsl -lresolv
endif
# profiling code
ifdef TARGET_GPROF
@ -369,9 +372,11 @@ VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld
endif
ifndef CONFIG_DARWIN
ifndef CONFIG_WIN32
ifndef CONFIG_SOLARIS
VL_LIBS=-lutil
endif
endif
endif
ifdef TARGET_GPROF
vl.o: CFLAGS+=-p
VL_LDFLAGS+=-p

20
block.c
View File

@ -44,6 +44,10 @@
#include <CoreFoundation/CoreFoundation.h>
#endif
#ifdef __sun__
#include <sys/dkio.h>
#endif
static BlockDriverState *bdrv_first;
static BlockDriver *first_drv;
@ -648,7 +652,6 @@ void bdrv_info(void)
}
}
/**************************************************************/
/* RAW block driver */
@ -669,6 +672,10 @@ static int raw_open(BlockDriverState *bs, const char *filename)
#ifdef _BSD
struct stat sb;
#endif
#ifdef __sun__
struct dk_minfo minfo;
int rv;
#endif
fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE);
if (fd < 0) {
@ -688,6 +695,17 @@ static int raw_open(BlockDriverState *bs, const char *filename)
size = lseek(fd, 0LL, SEEK_END);
#endif
} else
#endif
#ifdef __sun__
/*
* use the DKIOCGMEDIAINFO ioctl to read the size.
*/
rv = ioctl ( fd, DKIOCGMEDIAINFO, &minfo );
if ( rv != -1 ) {
size = minfo.dki_lbsize * minfo.dki_capacity;
} else /* there are reports that lseek on some devices
fails, but irc discussion said that contingency
on contingency was overkill */
#endif
{
size = lseek(fd, 0, SEEK_END);

80
configure vendored
View File

@ -125,6 +125,9 @@ Darwin)
bsd="yes"
darwin="yes"
;;
SunOS)
solaris="yes"
;;
*)
oss="yes"
linux="yes"
@ -141,6 +144,15 @@ if [ "$bsd" = "yes" ] ; then
fi
fi
if [ "$solaris" = "yes" ] ; then
make="gmake"
install="ginstall"
solarisrev=`uname -r | cut -f2 -d.`
if test $solarisrev -lt 10 ; then
presolaris10="yes"
fi
fi
# find source path
source_path=`dirname "$0"`
if [ -z "$source_path" ]; then
@ -299,6 +311,57 @@ if test "$mingw32" = "yes" ; then
fi
fi
#
# Solaris specific configure tool chain decisions
#
if test "$solaris" = "yes" ; then
#
# gcc for solaris 10/fcs in /usr/sfw/bin doesn't compile qemu correctly
# override the check with --disable-gcc-check
#
if test "$solarisrev" -eq 10 -a "$check_gcc" = "yes" ; then
solgcc=`which $cc`
if test "$solgcc" = "/usr/sfw/bin/gcc" ; then
echo "Solaris 10/FCS gcc in /usr/sfw/bin will not compiled qemu correctly."
echo "please get gcc-3.4.3 or later, from www.blastwave.org using pkg-get -i gcc3"
echo "or get the latest patch from SunSolve for gcc"
exit 1
fi
fi
solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"`
if test -z "$solinst" ; then
echo "Solaris install program not found. Use --install=/usr/ucb/install or"
echo "install fileutils from www.blastwave.org using pkg-get -i fileutils"
echo "to get ginstall which is used by default (which lives in /opt/csw/bin)"
exit 1
fi
if test "$solinst" = "/usr/sbin/install" ; then
echo "Error: Solaris /usr/sbin/install is not an appropriate install program."
echo "try ginstall from the GNU fileutils available from www.blastwave.org"
echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
exit 1
fi
soltexi2html=`which texi2html 2> /dev/null | /usr/bin/grep -v "no texi2html in"`
if test -z "$soltexi2html" ; then
echo "Error: No path includes texi2html."
if test -f /usr/sfw/bin/texi2html ; then
echo "Add /usr/sfw/bin to your path and rerun configure"
else
echo "Add the directory holding the texi2html to your path and rerun configure"
fi
exit 1
fi
sol_ar=`which ar 2> /dev/null | /usr/bin/grep -v "no ar in"`
if test -z "$sol_ar" ; then
echo "Error: No path includes ar"
if test -f /usr/ccs/bin/ar ; then
echo "Add /usr/ccs/bin to your path and rerun configure"
fi
exit 1
fi
fi
if test -z "$target_list" ; then
# these targets are portable
if [ "$softmmu" = "yes" ] ; then
@ -585,6 +648,12 @@ if test "$darwin" = "yes" ; then
echo "CONFIG_DARWIN=yes" >> $config_mak
echo "#define CONFIG_DARWIN 1" >> $config_h
fi
if test "$solaris" = "yes" ; then
echo "CONFIG_SOLARIS=yes" >> $config_mak
if test "$presolaris10" = "yes" ; then
echo "#define _PRESOLARIS10 1" >> $config_h
fi
fi
if test "$gdbstub" = "yes" ; then
echo "CONFIG_GDBSTUB=yes" >> $config_mak
echo "#define CONFIG_GDBSTUB 1" >> $config_h
@ -690,7 +759,12 @@ if test "$target_user_only" = "no" ; then
mkdir -p $target_dir/slirp
fi
ln -sf $source_path/Makefile.target $target_dir/Makefile
#
# don't use ln -sf as not all "ln -sf" over write the file/link
#
rm -f $target_dir/Makefile
ln -s $source_path/Makefile.target $target_dir/Makefile
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "/* Automatically generated by configure - do not modify */" > $config_h
@ -802,8 +876,10 @@ if test "$source_path_used" = "yes" ; then
for dir in $DIRS ; do
mkdir -p $dir
done
# remove the link and recreate it, as not all "ln -sf" overwrite the link
for f in $FILES ; do
ln -sf $source_path/$f $f
rm -f $f
ln -s $source_path/$f $f
done
fi

View File

@ -20,6 +20,13 @@
#if !defined(__DYNGEN_EXEC_H__)
#define __DYNGEN_EXEC_H__
/* prevent Solaris from trying to typedef FILE in gcc's
include/floatingpoint.h which will conflict with the
definition down below */
#ifdef __sun__
#define _FILEDEFED
#endif
/* NOTE: standard headers should be used with special care at this
point because host CPU registers are used as global variables. Some
host headers do not allow that. */
@ -35,7 +42,12 @@ typedef unsigned long uint64_t;
typedef unsigned long long uint64_t;
#endif
/* if Solaris/__sun__, don't typedef int8_t, as it will be typedef'd
prior to this and will cause an error in compliation, conflicting
with /usr/include/sys/int_types.h, line 75 */
#ifndef __sun__
typedef signed char int8_t;
#endif
typedef signed short int16_t;
typedef signed int int32_t;
#if defined (__x86_64__) || defined(__ia64)
@ -231,6 +243,8 @@ extern int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3;
#ifdef __sparc__
#define EXIT_TB() asm volatile ("jmpl %i0 + 8, %g0\n" \
"nop")
#define GOTO_LABEL_PARAM(n) asm volatile ( \
"set " ASM_NAME(__op_gen_label) #n ", %g1; jmp %g1; nop")
#endif
#ifdef __arm__
#define EXIT_TB() asm volatile ("b exec_loop")

View File

@ -3,8 +3,11 @@
#if defined(_BSD) && !defined(__APPLE__)
#include <ieeefp.h>
#else
#if !defined(_PRESOLARIS10)
#include <fenv.h>
#endif
#endif
#include "gnu-c99-math.h"
typedef float float32;
typedef double float64;

View File

@ -177,7 +177,7 @@ void set_floatx80_rounding_precision(int val STATUS_PARAM);
| Routine to raise any or all of the software IEC/IEEE floating-point
| exception flags.
*----------------------------------------------------------------------------*/
void float_raise( signed char STATUS_PARAM);
void float_raise( int8 flags STATUS_PARAM);
/*----------------------------------------------------------------------------
| Software IEC/IEEE integer-to-floating-point conversion routines.

View File

@ -138,6 +138,9 @@
/* Define if you don't have u_int32_t etc. typedef'd */
#undef NEED_TYPEDEFS
#ifdef __sun__
#define NEED_TYPEDEFS
#endif
/* Define to sizeof(char) */
#define SIZEOF_CHAR 1

View File

@ -9,6 +9,9 @@
#include <slirp.h>
#include "ip_icmp.h"
#include "main.h"
#ifdef __sun__
#include <sys/filio.h>
#endif
void
so_init()

8
vl.c
View File

@ -47,6 +47,7 @@
#include <libutil.h>
#endif
#else
#ifndef __sun__
#include <linux/if.h>
#include <linux/if_tun.h>
#include <pty.h>
@ -55,6 +56,7 @@
#include <linux/ppdev.h>
#endif
#endif
#endif
#if defined(CONFIG_SLIRP)
#include "libslirp.h"
@ -2531,6 +2533,12 @@ static int tap_open(char *ifname, int ifname_size)
fcntl(fd, F_SETFL, O_NONBLOCK);
return fd;
}
#elif defined(__sun__)
static int tap_open(char *ifname, int ifname_size)
{
fprintf(stderr, "warning: tap_open not yet implemented\n");
return -1;
}
#else
static int tap_open(char *ifname, int ifname_size)
{