Commit ec530c81efea6ddb1f75758658fd6769a29c3ade
1 parent
96b74a02
Solaris port (Ben Taylor)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1855 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
9 changed files
with
134 additions
and
4 deletions
Makefile.target
... | ... | @@ -166,6 +166,9 @@ endif |
166 | 166 | ifdef CONFIG_WIN32 |
167 | 167 | LIBS+=-lwinmm -lws2_32 -liphlpapi |
168 | 168 | endif |
169 | +ifdef CONFIG_SOLARIS | |
170 | +LIBS+=-lsocket -lnsl -lresolv | |
171 | +endif | |
169 | 172 | |
170 | 173 | # profiling code |
171 | 174 | ifdef TARGET_GPROF |
... | ... | @@ -369,9 +372,11 @@ VL_LDFLAGS+=-Wl,-T,$(SRC_PATH)/i386-vl.ld |
369 | 372 | endif |
370 | 373 | ifndef CONFIG_DARWIN |
371 | 374 | ifndef CONFIG_WIN32 |
375 | +ifndef CONFIG_SOLARIS | |
372 | 376 | VL_LIBS=-lutil |
373 | 377 | endif |
374 | 378 | endif |
379 | +endif | |
375 | 380 | ifdef TARGET_GPROF |
376 | 381 | vl.o: CFLAGS+=-p |
377 | 382 | VL_LDFLAGS+=-p | ... | ... |
block.c
... | ... | @@ -44,6 +44,10 @@ |
44 | 44 | #include <CoreFoundation/CoreFoundation.h> |
45 | 45 | #endif |
46 | 46 | |
47 | +#ifdef __sun__ | |
48 | +#include <sys/dkio.h> | |
49 | +#endif | |
50 | + | |
47 | 51 | static BlockDriverState *bdrv_first; |
48 | 52 | static BlockDriver *first_drv; |
49 | 53 | |
... | ... | @@ -648,7 +652,6 @@ void bdrv_info(void) |
648 | 652 | } |
649 | 653 | } |
650 | 654 | |
651 | - | |
652 | 655 | /**************************************************************/ |
653 | 656 | /* RAW block driver */ |
654 | 657 | |
... | ... | @@ -669,6 +672,10 @@ static int raw_open(BlockDriverState *bs, const char *filename) |
669 | 672 | #ifdef _BSD |
670 | 673 | struct stat sb; |
671 | 674 | #endif |
675 | +#ifdef __sun__ | |
676 | + struct dk_minfo minfo; | |
677 | + int rv; | |
678 | +#endif | |
672 | 679 | |
673 | 680 | fd = open(filename, O_RDWR | O_BINARY | O_LARGEFILE); |
674 | 681 | if (fd < 0) { |
... | ... | @@ -689,6 +696,17 @@ static int raw_open(BlockDriverState *bs, const char *filename) |
689 | 696 | #endif |
690 | 697 | } else |
691 | 698 | #endif |
699 | +#ifdef __sun__ | |
700 | + /* | |
701 | + * use the DKIOCGMEDIAINFO ioctl to read the size. | |
702 | + */ | |
703 | + rv = ioctl ( fd, DKIOCGMEDIAINFO, &minfo ); | |
704 | + if ( rv != -1 ) { | |
705 | + size = minfo.dki_lbsize * minfo.dki_capacity; | |
706 | + } else /* there are reports that lseek on some devices | |
707 | + fails, but irc discussion said that contingency | |
708 | + on contingency was overkill */ | |
709 | +#endif | |
692 | 710 | { |
693 | 711 | size = lseek(fd, 0, SEEK_END); |
694 | 712 | } | ... | ... |
configure
... | ... | @@ -125,6 +125,9 @@ Darwin) |
125 | 125 | bsd="yes" |
126 | 126 | darwin="yes" |
127 | 127 | ;; |
128 | +SunOS) | |
129 | +solaris="yes" | |
130 | +;; | |
128 | 131 | *) |
129 | 132 | oss="yes" |
130 | 133 | linux="yes" |
... | ... | @@ -141,6 +144,15 @@ if [ "$bsd" = "yes" ] ; then |
141 | 144 | fi |
142 | 145 | fi |
143 | 146 | |
147 | +if [ "$solaris" = "yes" ] ; then | |
148 | + make="gmake" | |
149 | + install="ginstall" | |
150 | + solarisrev=`uname -r | cut -f2 -d.` | |
151 | + if test $solarisrev -lt 10 ; then | |
152 | + presolaris10="yes" | |
153 | + fi | |
154 | +fi | |
155 | + | |
144 | 156 | # find source path |
145 | 157 | source_path=`dirname "$0"` |
146 | 158 | if [ -z "$source_path" ]; then |
... | ... | @@ -299,6 +311,57 @@ if test "$mingw32" = "yes" ; then |
299 | 311 | fi |
300 | 312 | fi |
301 | 313 | |
314 | +# | |
315 | +# Solaris specific configure tool chain decisions | |
316 | +# | |
317 | +if test "$solaris" = "yes" ; then | |
318 | + # | |
319 | + # gcc for solaris 10/fcs in /usr/sfw/bin doesn't compile qemu correctly | |
320 | + # override the check with --disable-gcc-check | |
321 | + # | |
322 | + if test "$solarisrev" -eq 10 -a "$check_gcc" = "yes" ; then | |
323 | + solgcc=`which $cc` | |
324 | + if test "$solgcc" = "/usr/sfw/bin/gcc" ; then | |
325 | + echo "Solaris 10/FCS gcc in /usr/sfw/bin will not compiled qemu correctly." | |
326 | + echo "please get gcc-3.4.3 or later, from www.blastwave.org using pkg-get -i gcc3" | |
327 | + echo "or get the latest patch from SunSolve for gcc" | |
328 | + exit 1 | |
329 | + fi | |
330 | + fi | |
331 | + solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"` | |
332 | + if test -z "$solinst" ; then | |
333 | + echo "Solaris install program not found. Use --install=/usr/ucb/install or" | |
334 | + echo "install fileutils from www.blastwave.org using pkg-get -i fileutils" | |
335 | + echo "to get ginstall which is used by default (which lives in /opt/csw/bin)" | |
336 | + exit 1 | |
337 | + fi | |
338 | + if test "$solinst" = "/usr/sbin/install" ; then | |
339 | + echo "Error: Solaris /usr/sbin/install is not an appropriate install program." | |
340 | + echo "try ginstall from the GNU fileutils available from www.blastwave.org" | |
341 | + echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install" | |
342 | + exit 1 | |
343 | + fi | |
344 | + soltexi2html=`which texi2html 2> /dev/null | /usr/bin/grep -v "no texi2html in"` | |
345 | + if test -z "$soltexi2html" ; then | |
346 | + echo "Error: No path includes texi2html." | |
347 | + if test -f /usr/sfw/bin/texi2html ; then | |
348 | + echo "Add /usr/sfw/bin to your path and rerun configure" | |
349 | + else | |
350 | + echo "Add the directory holding the texi2html to your path and rerun configure" | |
351 | + fi | |
352 | + exit 1 | |
353 | + fi | |
354 | + sol_ar=`which ar 2> /dev/null | /usr/bin/grep -v "no ar in"` | |
355 | + if test -z "$sol_ar" ; then | |
356 | + echo "Error: No path includes ar" | |
357 | + if test -f /usr/ccs/bin/ar ; then | |
358 | + echo "Add /usr/ccs/bin to your path and rerun configure" | |
359 | + fi | |
360 | + exit 1 | |
361 | + fi | |
362 | +fi | |
363 | + | |
364 | + | |
302 | 365 | if test -z "$target_list" ; then |
303 | 366 | # these targets are portable |
304 | 367 | if [ "$softmmu" = "yes" ] ; then |
... | ... | @@ -585,6 +648,12 @@ if test "$darwin" = "yes" ; then |
585 | 648 | echo "CONFIG_DARWIN=yes" >> $config_mak |
586 | 649 | echo "#define CONFIG_DARWIN 1" >> $config_h |
587 | 650 | fi |
651 | +if test "$solaris" = "yes" ; then | |
652 | + echo "CONFIG_SOLARIS=yes" >> $config_mak | |
653 | + if test "$presolaris10" = "yes" ; then | |
654 | + echo "#define _PRESOLARIS10 1" >> $config_h | |
655 | + fi | |
656 | +fi | |
588 | 657 | if test "$gdbstub" = "yes" ; then |
589 | 658 | echo "CONFIG_GDBSTUB=yes" >> $config_mak |
590 | 659 | echo "#define CONFIG_GDBSTUB 1" >> $config_h |
... | ... | @@ -690,7 +759,12 @@ if test "$target_user_only" = "no" ; then |
690 | 759 | mkdir -p $target_dir/slirp |
691 | 760 | fi |
692 | 761 | |
693 | -ln -sf $source_path/Makefile.target $target_dir/Makefile | |
762 | +# | |
763 | +# don't use ln -sf as not all "ln -sf" over write the file/link | |
764 | +# | |
765 | +rm -f $target_dir/Makefile | |
766 | +ln -s $source_path/Makefile.target $target_dir/Makefile | |
767 | + | |
694 | 768 | |
695 | 769 | echo "# Automatically generated by configure - do not modify" > $config_mak |
696 | 770 | echo "/* Automatically generated by configure - do not modify */" > $config_h |
... | ... | @@ -802,8 +876,10 @@ if test "$source_path_used" = "yes" ; then |
802 | 876 | for dir in $DIRS ; do |
803 | 877 | mkdir -p $dir |
804 | 878 | done |
879 | + # remove the link and recreate it, as not all "ln -sf" overwrite the link | |
805 | 880 | for f in $FILES ; do |
806 | - ln -sf $source_path/$f $f | |
881 | + rm -f $f | |
882 | + ln -s $source_path/$f $f | |
807 | 883 | done |
808 | 884 | fi |
809 | 885 | ... | ... |
dyngen-exec.h
... | ... | @@ -20,6 +20,13 @@ |
20 | 20 | #if !defined(__DYNGEN_EXEC_H__) |
21 | 21 | #define __DYNGEN_EXEC_H__ |
22 | 22 | |
23 | +/* prevent Solaris from trying to typedef FILE in gcc's | |
24 | + include/floatingpoint.h which will conflict with the | |
25 | + definition down below */ | |
26 | +#ifdef __sun__ | |
27 | +#define _FILEDEFED | |
28 | +#endif | |
29 | + | |
23 | 30 | /* NOTE: standard headers should be used with special care at this |
24 | 31 | point because host CPU registers are used as global variables. Some |
25 | 32 | host headers do not allow that. */ |
... | ... | @@ -35,7 +42,12 @@ typedef unsigned long uint64_t; |
35 | 42 | typedef unsigned long long uint64_t; |
36 | 43 | #endif |
37 | 44 | |
45 | +/* if Solaris/__sun__, don't typedef int8_t, as it will be typedef'd | |
46 | + prior to this and will cause an error in compliation, conflicting | |
47 | + with /usr/include/sys/int_types.h, line 75 */ | |
48 | +#ifndef __sun__ | |
38 | 49 | typedef signed char int8_t; |
50 | +#endif | |
39 | 51 | typedef signed short int16_t; |
40 | 52 | typedef signed int int32_t; |
41 | 53 | #if defined (__x86_64__) || defined(__ia64) |
... | ... | @@ -231,6 +243,8 @@ extern int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3; |
231 | 243 | #ifdef __sparc__ |
232 | 244 | #define EXIT_TB() asm volatile ("jmpl %i0 + 8, %g0\n" \ |
233 | 245 | "nop") |
246 | +#define GOTO_LABEL_PARAM(n) asm volatile ( \ | |
247 | + "set " ASM_NAME(__op_gen_label) #n ", %g1; jmp %g1; nop") | |
234 | 248 | #endif |
235 | 249 | #ifdef __arm__ |
236 | 250 | #define EXIT_TB() asm volatile ("b exec_loop") | ... | ... |
fpu/softfloat-native.h
fpu/softfloat.h
... | ... | @@ -177,7 +177,7 @@ void set_floatx80_rounding_precision(int val STATUS_PARAM); |
177 | 177 | | Routine to raise any or all of the software IEC/IEEE floating-point |
178 | 178 | | exception flags. |
179 | 179 | *----------------------------------------------------------------------------*/ |
180 | -void float_raise( signed char STATUS_PARAM); | |
180 | +void float_raise( int8 flags STATUS_PARAM); | |
181 | 181 | |
182 | 182 | /*---------------------------------------------------------------------------- |
183 | 183 | | Software IEC/IEEE integer-to-floating-point conversion routines. | ... | ... |
slirp/slirp_config.h
slirp/socket.c
vl.c
... | ... | @@ -47,6 +47,7 @@ |
47 | 47 | #include <libutil.h> |
48 | 48 | #endif |
49 | 49 | #else |
50 | +#ifndef __sun__ | |
50 | 51 | #include <linux/if.h> |
51 | 52 | #include <linux/if_tun.h> |
52 | 53 | #include <pty.h> |
... | ... | @@ -55,6 +56,7 @@ |
55 | 56 | #include <linux/ppdev.h> |
56 | 57 | #endif |
57 | 58 | #endif |
59 | +#endif | |
58 | 60 | |
59 | 61 | #if defined(CONFIG_SLIRP) |
60 | 62 | #include "libslirp.h" |
... | ... | @@ -2531,6 +2533,12 @@ static int tap_open(char *ifname, int ifname_size) |
2531 | 2533 | fcntl(fd, F_SETFL, O_NONBLOCK); |
2532 | 2534 | return fd; |
2533 | 2535 | } |
2536 | +#elif defined(__sun__) | |
2537 | +static int tap_open(char *ifname, int ifname_size) | |
2538 | +{ | |
2539 | + fprintf(stderr, "warning: tap_open not yet implemented\n"); | |
2540 | + return -1; | |
2541 | +} | |
2534 | 2542 | #else |
2535 | 2543 | static int tap_open(char *ifname, int ifname_size) |
2536 | 2544 | { | ... | ... |