[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Again <<qemu_SPARC_HOST_cvs20050309wed.patch>>. This time i
From: |
Martin Bochnig |
Subject: |
[Qemu-devel] Again <<qemu_SPARC_HOST_cvs20050309wed.patch>>. This time inline for redundance. |
Date: |
Sat, 12 Mar 2005 21:25:43 +0100 |
Hi,
On Wed, 2005-01-19 at 03:56, Johannes Schindelin wrote:
> Hi,
>
> you might want to try to comment out the offending definition of int64_t
> in dyngen...
>
> Please note that there's much more to getting QEmu to run on sparc than
> getting it to compile.
Indeed -
you really did a great job, thanks again!
(Beeing a very happy user of QEMU_cvs2004nov14 on a Solaris_10__03/05 SPARC
host :))
> You might want to work with the SPARC host patch
> (which you can get from http://libvncserver.sf.net/qemu/). It is a bit of
> work to apply it to the current CVS, though. If you beat me to it, I will
> try to adapt it.
I tried my best to do that part - the resulting patch is here:
diff -Nur qemu_cvs2005mar09wed/Makefile qemu_SPARC/Makefile
--- qemu_cvs2005mar09wed/Makefile 2005-02-10 22:48:51.000000000 +0100
+++ qemu_SPARC/Makefile 2005-03-10 00:37:52.000000000 +0100
@@ -86,11 +86,13 @@
qemu.1: qemu-doc.texi
./texi2pod.pl $< qemu.pod
- pod2man --section=1 --center=" " --release=" " qemu.pod > $@
+# pod2man --section=1 --center=" " --release=" " qemu.pod > $@
+ true --section=1 --center=" " --release=" " qemu.pod > $@
qemu-img.1: qemu-img.texi
./texi2pod.pl $< qemu-img.pod
- pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@
+# pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@
+ true --section=1 --center=" " --release=" " qemu-img.pod > $@
FILE=qemu-$(shell cat VERSION)
diff -Nur qemu_cvs2005mar09wed/Makefile.target qemu_SPARC/Makefile.target
--- qemu_cvs2005mar09wed/Makefile.target 2005-03-01 22:37:28.000000000
+0100
+++ qemu_SPARC/Makefile.target 2005-03-10 01:12:08.000000000 +0100
@@ -160,9 +160,9 @@
endif
ifeq ($(ARCH),sparc)
-CFLAGS+=-m32 -ffixed-g1 -ffixed-g2 -ffixed-g3 -ffixed-g6
+CFLAGS+=-m32 -ffixed-g4 -ffixed-g2 -ffixed-g3
LDFLAGS+=-m32
-OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -ffixed-i0
+OP_CFLAGS=$(CFLAGS) -fno-delayed-branch -O6
HELPER_CFLAGS=$(CFLAGS) -ffixed-i0 -mflat
# -static is used to avoid g1/g3 usage by the dynamic linker
LDFLAGS+=-Wl,-T,$(SRC_PATH)/sparc.ld -static
@@ -217,6 +217,9 @@
ifdef CONFIG_WIN32
LIBS+=-lwinmm -lws2_32 -liphlpapi
endif
+ifdef CONFIG_SVR4
+LIBS+=-lsocket -lnsl
+endif
# profiling code
ifdef TARGET_GPROF
@@ -314,7 +317,7 @@
AUDIODRV += ossaudio.o
endif
-pc.o: DEFINES := -DUSE_SB16 $(DEFINES)
+DEFINES := -DUSE_SB16 $(DEFINES)
ifdef CONFIG_ADLIB
SOUND_HW += fmopl.o adlib.o
@@ -368,9 +371,11 @@
endif
ifndef CONFIG_DARWIN
ifndef CONFIG_WIN32
+ifndef CONFIG_SVR4
VL_LIBS=-lutil
endif
endif
+endif
ifdef TARGET_GPROF
vl.o: CFLAGS+=-p
VL_LDFLAGS+=-p
diff -Nur qemu_cvs2005mar09wed/configure qemu_SPARC/configure
--- qemu_cvs2005mar09wed/configure 2005-03-01 23:30:41.000000000 +0100
+++ qemu_SPARC/configure 2005-03-09 22:54:36.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# qemu configure script (c) 2003 Fabrice Bellard
#
@@ -50,7 +50,7 @@
s390)
cpu="s390"
;;
- sparc)
+ sparc|sun4u)
cpu="sparc"
;;
sparc64)
@@ -107,6 +107,10 @@
bsd="yes"
darwin="yes"
;;
+SunOS)
+solaris="yes"
+svr4="yes"
+;;
*)
oss="yes"
linux="yes"
@@ -116,7 +120,7 @@
;;
esac
-if [ "$bsd" = "yes" ] ; then
+if [ "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
if [ ! "$darwin" = "yes" ] ; then
make="gmake"
fi
@@ -499,7 +503,7 @@
echo "ARCH=m68k" >> $config_mak
echo "#define HOST_M68K 1" >> $config_h
else
- echo "Unsupported CPU"
+ echo "Unsupported CPU ($cpu)"
exit 1
fi
if test "$bigendian" = "yes" ; then
@@ -512,10 +516,17 @@
elif test -f "/usr/include/byteswap.h" ; then
echo "#define HAVE_BYTESWAP_H 1" >> $config_h
fi
+if test "$solaris" = "yes" ; then
+ echo "CONFIG_SOLARIS=yes" >> $config_mak
+fi
if test "$darwin" = "yes" ; then
echo "CONFIG_DARWIN=yes" >> $config_mak
echo "#define CONFIG_DARWIN 1" >> $config_h
fi
+if test "$svr4" = "yes" ; then
+ echo "CONFIG_SVR4=yes" >> $config_mak
+ echo "#define CONFIG_SVR4 1" >> $config_h
+fi
if test "$gdbstub" = "yes" ; then
echo "CONFIG_GDBSTUB=yes" >> $config_mak
echo "#define CONFIG_GDBSTUB 1" >> $config_h
@@ -569,6 +580,13 @@
echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h
echo "#define _BSD 1" >> $config_h
fi
+if [ "$solaris" = "yes" ] ; then
+ echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h
+ echo "#define _SOLARIS 1" >> $config_h
+fi
+if [ "$svr4" = yes ] ; then
+ echo "#define _SVR4 1" >> $config_h
+fi
for target in $target_list; do
@@ -600,7 +618,8 @@
mkdir -p $target_dir/slirp
fi
-ln -sf $source_path/Makefile.target $target_dir/Makefile
+test -f $target_dir/Makefile && 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
@@ -697,7 +716,8 @@
mkdir -p $dir
done
for f in $FILES ; do
- ln -sf $source_path/$f $f
+ test -f $source_path/$f && rm -f $source_path/$f
+ ln -s $source_path/$f $f
done
fi
diff -Nur qemu_cvs2005mar09wed/cpu-exec.c qemu_SPARC/cpu-exec.c
--- qemu_cvs2005mar09wed/cpu-exec.c 2005-02-22 20:27:14.000000000 +0100
+++ qemu_SPARC/cpu-exec.c 2005-03-09 23:10:42.000000000 +0100
@@ -482,7 +482,8 @@
"mov %%o7,%%i0"
: /* no outputs */
: "r" (gen_func)
- : "i0", "i1", "i2", "i3", "i4", "i5");
+ : "g0", "i0", "i1", "i2", "i3", "i4",
"i5", "i7",
+ "l0", "l1", "l2", "l3", "l4", "l5",
"l6", "l7");
#elif defined(__arm__)
asm volatile ("mov pc, %0\n\t"
".global exec_loop\n\t"
diff -Nur qemu_cvs2005mar09wed/dyngen-exec.h qemu_SPARC/dyngen-exec.h
--- qemu_cvs2005mar09wed/dyngen-exec.h 2005-03-01 23:30:59.000000000 +0100
+++ qemu_SPARC/dyngen-exec.h 2005-03-09 23:56:47.000000000 +0100
@@ -25,6 +25,11 @@
host headers do not allow that. */
#include <stddef.h>
+#ifdef _SVR4
+#include <stdio.h>
+#include <sys/types.h>
+#else
+
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
@@ -62,7 +67,10 @@
extern int printf(const char *, ...);
#undef NULL
#define NULL 0
-#if defined(_BSD) && !defined(__APPLE__)
+
+#endif /* !_SVR4 */
+
+#if defined(_BSD) && !defined(__APPLE__) || defined(_SVR4)
#include <ieeefp.h>
#define FE_TONEAREST FP_RN
@@ -70,6 +78,7 @@
#define FE_UPWARD FP_RP
#define FE_TOWARDZERO FP_RZ
#define fesetround(x) fpsetround(x)
+#define fegetround() fpgetround()
#else
#include <fenv.h>
#endif
@@ -120,18 +129,19 @@
#define AREG3 "s2"
#endif
#ifdef __sparc__
-#define AREG0 "g6"
-#define AREG1 "g1"
-#define AREG2 "g2"
-#define AREG3 "g3"
-#define AREG4 "l0"
-#define AREG5 "l1"
-#define AREG6 "l2"
-#define AREG7 "l3"
-#define AREG8 "l4"
-#define AREG9 "l5"
-#define AREG10 "l6"
-#define AREG11 "l7"
+#define AREG0 "g4"
+#define AREG1 "g2"
+#define AREG2 "g3"
+#define AREG3 "l0"
+#if 0
+#define AREG4 "l1"
+#define AREG5 "l2"
+#define AREG6 "l3"
+#define AREG7 "l4"
+#define AREG8 "l5"
+#define AREG9 "l6"
+#define AREG10 "l7"
+#endif
#define USE_FP_CONVERT
#endif
#ifdef __s390__
diff -Nur qemu_cvs2005mar09wed/dyngen.c qemu_SPARC/dyngen.c
--- qemu_cvs2005mar09wed/dyngen.c 2005-02-21 20:53:34.000000000 +0100
+++ qemu_SPARC/dyngen.c 2005-03-09 23:28:16.000000000 +0100
@@ -1407,12 +1407,14 @@
if ((start_insn & ~0x1fff) == 0x9de3a000) {
p_start += 0x4;
start_offset += 0x4;
- if ((int)(start_insn | ~0x1fff) < -128)
+ if ((int)(start_insn | ~0x1fff) < -256)
error("Found bogus save at the start of %s", name);
if (end_insn1 != 0x81c7e008 || end_insn2 != 0x81e80000)
error("ret; restore; not found at end of %s", name);
} else {
- error("No save at the beginning of %s", name);
+ //error("No save at the beginning of %s", name);
+ if (end_insn1 != 0x81c3e008 || end_insn2 != 0x01000000)
+ error("ret; nop; not found at end of %s (no save)", name);
}
#if 0
/* Skip a preceeding nop, if present. */
diff -Nur qemu_cvs2005mar09wed/hw/ide.c qemu_SPARC/hw/ide.c
--- qemu_cvs2005mar09wed/hw/ide.c 2004-12-02 21:20:21.000000000 +0100
+++ qemu_SPARC/hw/ide.c 2005-03-10 00:10:57.000000000 +0100
@@ -500,6 +500,10 @@
static inline void ide_set_irq(IDEState *s)
{
if (!(s->cmd & IDE_CMD_DISABLE_IRQ)) {
+ BMDMAState *bm = s->bmdma;
+ if(bm)
+ bm->status |= BM_STATUS_INT;
+
#ifdef TARGET_PPC
if (s->openpic)
openpic_set_irq(s->openpic, s->irq, 1);
@@ -2163,6 +2167,7 @@
pci_conf[0x01] = 0x80;
pci_conf[0x02] = 0x00; // fake
pci_conf[0x03] = 0x01; // fake
+ pci_conf[0x09] = 0x8a; // programming interface = PCI_IDE bus master is
supported
pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE
pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage
pci_conf[0x0e] = 0x80; // header_type = PCI_multifunction, generic
diff -Nur qemu_cvs2005mar09wed/linux-user/main.c qemu_SPARC/linux-user/main.c
--- qemu_cvs2005mar09wed/linux-user/main.c 2005-02-19 18:25:31.000000000
+0100
+++ qemu_SPARC/linux-user/main.c 2005-03-10 00:15:49.000000000 +0100
@@ -33,6 +33,10 @@
# define environ (*_NSGetEnviron())
#endif
+#if defined(unix) && !defined(linux)
+extern char **environ;
+#endif
+
static const char *interp_prefix = CONFIG_QEMU_PREFIX;
#if defined(__i386__) && !defined(CONFIG_STATIC)
diff -Nur qemu_cvs2005mar09wed/linux-user/syscall.c
qemu_SPARC/linux-user/syscall.c
--- qemu_cvs2005mar09wed/linux-user/syscall.c 2005-03-01 23:32:06.000000000
+0100
+++ qemu_SPARC/linux-user/syscall.c 2005-03-10 00:27:26.000000000 +0100
@@ -22,7 +22,9 @@
#include <stdarg.h>
#include <string.h>
#include <elf.h>
+#ifdef linux
#include <endian.h>
+#endif
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
@@ -55,6 +57,7 @@
#define tchars host_tchars /* same as target */
#define ltchars host_ltchars /* same as target */
+#ifdef linux
#include <linux/termios.h>
#include <linux/unistd.h>
#include <linux/utsname.h>
@@ -63,6 +66,7 @@
#include <linux/soundcard.h>
#include <linux/dirent.h>
#include <linux/kd.h>
+#endif
#include "qemu.h"
diff -Nur qemu_cvs2005mar09wed/sdl.c qemu_SPARC/sdl.c
--- qemu_cvs2005mar09wed/sdl.c 2005-01-17 23:32:23.000000000 +0100
+++ qemu_SPARC/sdl.c 2005-03-10 01:22:18.000000000 +0100
@@ -29,6 +29,10 @@
#include <signal.h>
#endif
+#if defined(_SVR4)
+#define CONFIG_SDL_GENERIC_KBD
+#endif
+
static SDL_Surface *screen;
static int gui_grab; /* if true, all keyboard/mouse events are grabbed */
static int last_vm_running;
diff -Nur qemu_cvs2005mar09wed/slirp/misc.c qemu_SPARC/slirp/misc.c
--- qemu_cvs2005mar09wed/slirp/misc.c 2004-12-12 12:45:10.000000000 +0100
+++ qemu_SPARC/slirp/misc.c 2005-03-10 01:27:42.000000000 +0100
@@ -67,6 +67,10 @@
}
#endif
+#ifdef _SVR4
+#undef HAVE_INET_ATON
+#endif
+
#ifndef HAVE_INET_ATON
int
inet_aton(cp, ia)
diff -Nur qemu_cvs2005mar09wed/slirp/slirp.h qemu_SPARC/slirp/slirp.h
--- qemu_cvs2005mar09wed/slirp/slirp.h 2005-01-11 00:19:34.000000000 +0100
+++ qemu_SPARC/slirp/slirp.h 2005-03-10 01:32:01.000000000 +0100
@@ -73,6 +73,12 @@
# endif
#endif /* NEED_TYPEDEFS */
+#ifdef _SVR4
+typedef uint8_t u_int8_t;
+typedef uint16_t u_int16_t;
+typedef uint32_t u_int32_t;
+#endif
+
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
diff -Nur qemu_cvs2005mar09wed/slirp/socket.c qemu_SPARC/slirp/socket.c
--- qemu_cvs2005mar09wed/slirp/socket.c 2004-11-24 21:39:26.000000000 +0100
+++ qemu_SPARC/slirp/socket.c 2005-03-10 01:35:38.000000000 +0100
@@ -10,6 +10,10 @@
#include "ip_icmp.h"
#include "main.h"
+#ifdef _SVR4
+#include <sys/filio.h>
+#endif
+
void
so_init()
{
diff -Nur qemu_cvs2005mar09wed/target-i386/cpu.h qemu_SPARC/target-i386/cpu.h
--- qemu_cvs2005mar09wed/target-i386/cpu.h 2005-02-12 19:58:00.000000000
+0100
+++ qemu_SPARC/target-i386/cpu.h 2005-03-10 01:40:36.000000000 +0100
@@ -332,7 +332,7 @@
CC_OP_NB,
};
-#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD)
+#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD) &&
!defined(_SVR4)
#define USE_X86LDOUBLE
#endif
diff -Nur qemu_cvs2005mar09wed/target-i386/exec.h qemu_SPARC/target-i386/exec.h
--- qemu_cvs2005mar09wed/target-i386/exec.h 2005-03-01 23:33:39.000000000
+0100
+++ qemu_SPARC/target-i386/exec.h 2005-03-10 01:54:37.000000000 +0100
@@ -20,6 +20,10 @@
#include "config.h"
#include "dyngen-exec.h"
+#ifdef _SVR4
+#include <sys/types.h>
+#endif
+
/* XXX: factorize this mess */
#ifdef TARGET_X86_64
#define TARGET_LONG_BITS 64
@@ -373,7 +377,7 @@
#define rint rintl
#endif
-#if !defined(_BSD)
+#if !defined(_BSD) && !defined(_SVR4)
extern int lrint(CPU86_LDouble x);
extern int64_t llrint(CPU86_LDouble x);
#else
diff -Nur qemu_cvs2005mar09wed/target-i386/op.c qemu_SPARC/target-i386/op.c
--- qemu_cvs2005mar09wed/target-i386/op.c 2005-03-03 02:14:55.000000000
+0100
+++ qemu_SPARC/target-i386/op.c 2005-03-10 02:06:33.000000000 +0100
@@ -1858,10 +1858,11 @@
{
#if defined(__sparc__) && !defined(__sparc_v9__)
register CPU86_LDouble d asm("o0");
+ int64_t val;
#else
CPU86_LDouble d;
-#endif
int val;
+#endif
d = ST0;
val = lrint(d);
diff -Nur qemu_cvs2005mar09wed/target-i386/translate.c
qemu_SPARC/target-i386/translate.c
--- qemu_cvs2005mar09wed/target-i386/translate.c 2005-03-03
02:14:55.000000000 +0100
+++ qemu_SPARC/target-i386/translate.c 2005-03-10 02:15:33.000000000 +0100
@@ -6265,7 +6265,7 @@
/* if irq were inhibited with HF_INHIBIT_IRQ_MASK, we clear
the flag and abort the translation to give the irqs a
change to be happen */
- if (dc->tf || dc->singlestep_enabled ||
+ if (1||dc->tf || dc->singlestep_enabled ||
(flags & HF_INHIBIT_IRQ_MASK) ||
(cflags & CF_SINGLE_INSN)) {
gen_jmp_im(pc_ptr - dc->cs_base);
diff -Nur qemu_cvs2005mar09wed/target-ppc/exec.h qemu_SPARC/target-ppc/exec.h
--- qemu_cvs2005mar09wed/target-ppc/exec.h 2005-01-04 00:42:39.000000000
+0100
+++ qemu_SPARC/target-ppc/exec.h 2005-03-10 02:19:07.000000000 +0100
@@ -22,6 +22,10 @@
#include "dyngen-exec.h"
+#ifdef _SVR4
+#include <sys/types.h>
+#endif
+
register struct CPUPPCState *env asm(AREG0);
register uint32_t T0 asm(AREG1);
register uint32_t T1 asm(AREG2);
diff -Nur qemu_cvs2005mar09wed/target-ppc/helper.c
qemu_SPARC/target-ppc/helper.c
--- qemu_cvs2005mar09wed/target-ppc/helper.c 2005-02-16 00:06:19.000000000
+0100
+++ qemu_SPARC/target-ppc/helper.c 2005-03-10 02:22:19.000000000 +0100
@@ -17,6 +17,7 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include "config.h"
#include "exec.h"
//#define DEBUG_MMU
diff -Nur qemu_cvs2005mar09wed/target-ppc/op_helper.c
qemu_SPARC/target-ppc/op_helper.c
--- qemu_cvs2005mar09wed/target-ppc/op_helper.c 2005-02-16 00:06:19.000000000
+0100
+++ qemu_SPARC/target-ppc/op_helper.c 2005-03-10 02:25:29.000000000 +0100
@@ -17,6 +17,7 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include "config.h"
#include <math.h>
#include "exec.h"
diff -Nur qemu_cvs2005mar09wed/vl.c qemu_SPARC/vl.c
--- qemu_cvs2005mar09wed/vl.c 2005-03-01 22:37:28.000000000 +0100
+++ qemu_SPARC/vl.c 2005-03-10 02:47:49.000000000 +0100
@@ -46,6 +46,9 @@
#include <libutil.h>
#endif
#else
+#if defined(_SVR4) || defined(_SOLARIS)
+#include <sys/stat.h>
+#else
#include <linux/if.h>
#include <linux/if_tun.h>
#include <pty.h>
@@ -53,6 +56,7 @@
#include <linux/rtc.h>
#endif
#endif
+#endif
#if defined(CONFIG_SLIRP)
#include "libslirp.h"
@@ -515,7 +519,30 @@
}
#else
-#error unsupported CPU
+
+ /* Derived from: "m68k updates #2" by Richard Zidlicky
+ "crude hack to get some sort of rdtsc support" */
+
+#include <sys/time.h>
+static int64_t cputicks=0;
+static struct timeval lastcptcall={0,0};
+
+// assume 550 MHz Pentium, min 80 ticks between rdtsc calls
+
+int64_t cpu_get_real_ticks(void)
+{
+ struct timeval tp;
+ gettimeofday(&tp,(void*)0);
+ if (tp.tv_sec == lastcptcall.tv_sec &&
+ tp.tv_usec == lastcptcall.tv_usec ){
+ cputicks += 1;
+ } else {
+ cputicks=0;
+ lastcptcall=tp;
+ }
+ return ((int64_t)tp.tv_sec*1000000+tp.tv_usec)*550+cputicks;
+}
+
#endif
static int64_t cpu_ticks_offset;
@@ -1596,6 +1623,12 @@
fcntl(fd, F_SETFL, O_NONBLOCK);
return fd;
}
+#elif defined(_SVR4)
+static int tun_open(char *ifname, int ifname_size)
+{
+ fprintf(stderr, "warning: tun_open not yet implemented\n");
+ return -1;
+}
#else
static int tun_open(char *ifname, int ifname_size)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] Again <<qemu_SPARC_HOST_cvs20050309wed.patch>>. This time inline for redundance.,
Martin Bochnig <=