qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

qemu_SPARC_HOST_cvs20050309wed.patch_/_Re: [Qemu-devel] actually i have


From: Martin Bochnig
Subject: qemu_SPARC_HOST_cvs20050309wed.patch_/_Re: [Qemu-devel] actually i have a different problem ...
Date: Sat, 12 Mar 2005 20:56:36 +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 file should be attached.
However, I got at least two major compile time errors I'm unable to solve {1.) 
and 2.)} :

*****
0a.)
*****
First, my build environment looks like this:
bash-3.00$ gcc -v
Reading specs from /opt/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.2/specs
Configured with: ../gcc-3.4.2/configure --prefix=/opt/sfw 
--with-ld=/usr/ccs/bin/ld --with-gnu-as --with-as=/opt/sfw/bin/gas 
--enable-shared --disable-libgcj
Thread model: posix
gcc version 3.4.2
bash-3.00$ gmake -v
GNU Make 3.80
Copyright (C) 2002  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
bash-3.00$ uname -a
SunOS mb1x-ws0 5.10 Generic sun4u sparc SUNW,Sun-Blade-1000
bash-3.00$ isainfo -v
64-bit sparcv9 applications
        vis2 vis
32-bit sparc applications
        vis2 vis v8plus div32 mul32
bash-3.00$

*****
0b.)
*****

I configured QEMU with:

./configure --disable-slirp --disable-kqemu --target-list=i386-softmmu

*****
error 1.)
*****

The first problem is:

gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o exec.o 
/tmp/QEMU/qemu_SPARC/exec.c
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o kqemu.o 
/tmp/QEMU/qemu_SPARC/kqemu.c
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-fno-delayed-branch -O6  -fno-reorder-blocks -fno-optimize-sibling-calls 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o op.o 
/tmp/QEMU/qemu_SPARC/target-i386/op.c
In file included from /tmp/QEMU/qemu_SPARC/target-i386/op.c:724:
/tmp/QEMU/qemu_SPARC/target-i386/ops_template.h: In function `op_jb_subb':
/tmp/QEMU/qemu_SPARC/target-i386/ops_template.h:278: warning: implicit 
declaration of function `GOTO_LABEL_PARAM'
../dyngen -o op.h op.o
../dyngen -c -o opc.h op.o
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o translate-all.o 
/tmp/QEMU/qemu_SPARC/translate-all.c
In file included from /tmp/QEMU/qemu_SPARC/translate-all.c:41:
./op.h: In function `dyngen_code':
./op.h:1310: error: `lo' undeclared (first use in this function)
./op.h:1310: error: (Each undeclared identifier is reported only once
./op.h:1310: error: for each function it appears in.)
./op.h:1310: error: parse error before ';' token
./op.h:1318: error: `op_imulb_AL_T0' undeclared (first use in this function)
./op.h:1319: error: parse error before ';' token
./op.h:1327: error: `op_mulw_AX_T0' undeclared (first use in this function)
./op.h:1328: error: parse error before ';' token
./op.h:1336: error: `op_imulw_AX_T0' undeclared (first use in this function)
./op.h:1337: error: parse error before ';' token
./op.h:1345: error: `op_mull_EAX_T0' undeclared (first use in this function)
./op.h:1335: warning: unused variable `__dot_umul'
./op.h:1364: error: parse error before ';' token
./op.h:1372: error: `op_imull_T0_T1' undeclared (first use in this function)
./op.h:1362: warning: unused variable `__dot_umul'
./op.h:1385: error: parse error before ';' token
./op.h:1386: error: parse error before ';' token
./op.h:1396: error: `op_idivb_AL_T0' undeclared (first use in this function)
./op.h:1398: error: parse error before ';' token
./op.h:1399: error: parse error before ';' token
./op.h:1409: error: `op_divw_AX_T0' undeclared (first use in this function)
./op.h:1411: error: parse error before ';' token
./op.h:1412: error: parse error before ';' token
./op.h:1422: error: `op_idivw_AX_T0' undeclared (first use in this function)
./op.h:1424: error: parse error before ';' token
./op.h:1425: error: parse error before ';' token
./op.h:1433: error: `op_divl_EAX_T0' undeclared (first use in this function)
./op.h:1407: warning: unused variable `__dot_udiv'
./op.h:1408: warning: unused variable `__dot_urem'
./op.h:1420: warning: unused variable `__dot_div'
./op.h:1421: warning: unused variable `__dot_rem'
./op.h:5104: error: parse error before ';' token
./op.h:5105: error: parse error before ';' token
./op.h:5114: error: `op_aad' undeclared (first use in this function)
./op.h:5118: error: parse error before ';' token
./op.h:5127: error: `op_aaa' undeclared (first use in this function)
./op.h:5098: warning: unused variable `__dot_div'
./op.h:5099: warning: unused variable `__dot_rem'
./op.h:5113: warning: unused variable `__dot_umul'
./op.h:5931: warning: built-in function 'rint' declared as non-function
./op.h:7242: error: parse error before ';' token
./op.h:7243: error: parse error before ';' token
./op.h:7244: error: parse error before ';' token
./op.h:7245: error: parse error before ';' token
./op.h:7257: error: `op_pmulhuw_mmx' undeclared (first use in this function)
./op.h:7264: error: parse error before ';' token
./op.h:7265: error: parse error before ';' token
./op.h:7266: error: parse error before ';' token
./op.h:7267: error: parse error before ';' token
./op.h:7279: error: `op_pmulhw_mmx' undeclared (first use in this function)
./op.h:7286: error: parse error before ';' token
./op.h:7287: error: parse error before ';' token
./op.h:7288: error: parse error before ';' token
./op.h:7289: error: parse error before ';' token
./op.h:7297: error: `op_pavgb_mmx' undeclared (first use in this function)
./op.h:7278: warning: unused variable `__dot_umul'
./op.h:7350: error: parse error before ';' token
./op.h:7351: error: parse error before ';' token
./op.h:7359: error: `op_psadbw_mmx' undeclared (first use in this function)
./op.h:7342: warning: unused variable `__dot_umul'
./op.h:8176: error: parse error before ';' token
./op.h:8177: error: parse error before ';' token
./op.h:8178: error: parse error before ';' token
./op.h:8179: error: parse error before ';' token
./op.h:8180: error: parse error before ';' token
./op.h:8181: error: parse error before ';' token
./op.h:8182: error: parse error before ';' token
./op.h:8183: error: parse error before ';' token
./op.h:8199: error: `op_pmulhuw_xmm' undeclared (first use in this function)
./op.h:8206: error: parse error before ';' token
./op.h:8207: error: parse error before ';' token
./op.h:8208: error: parse error before ';' token
./op.h:8209: error: parse error before ';' token
./op.h:8210: error: parse error before ';' token
./op.h:8211: error: parse error before ';' token
./op.h:8212: error: parse error before ';' token
./op.h:8213: error: parse error before ';' token
./op.h:8229: error: `op_pmulhw_xmm' undeclared (first use in this function)
./op.h:8236: error: parse error before ';' token
./op.h:8237: error: parse error before ';' token
./op.h:8238: error: parse error before ';' token
./op.h:8239: error: parse error before ';' token
./op.h:8240: error: parse error before ';' token
./op.h:8241: error: parse error before ';' token
./op.h:8242: error: parse error before ';' token
./op.h:8243: error: parse error before ';' token
./op.h:8251: error: `op_pavgb_xmm' undeclared (first use in this function)
./op.h:8228: warning: unused variable `__dot_umul'
./op.h:8306: error: parse error before ';' token
./op.h:8307: error: parse error before ';' token
./op.h:8315: error: `op_psadbw_xmm' undeclared (first use in this function)
./op.h:8298: warning: unused variable `__dot_umul'
gmake[1]: *** [translate-all.o] Error 1
gmake[1]: Leaving directory `/tmp/QEMU/qemu_SPARC/i386-softmmu'
gmake: *** [all] Error 1


*****
error 2.)
*****

The second errors is:


for d in i386-softmmu; do \
gmake -C $d all || exit 1 ; \
        done
gmake[1]: Entering directory `/tmp/QEMU/qemu_SPARC/i386-softmmu'
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o cpu-exec.o 
/tmp/QEMU/qemu_SPARC/cpu-exec.c
../dyngen -g -o gen-op.h op.o
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o translate.o 
/tmp/QEMU/qemu_SPARC/target-i386/translate.c
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:876: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:877: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:882: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:883: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:895: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:896: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:897: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:901: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:902: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:903: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1176: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1177: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1178: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1179: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1181: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1182: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1186: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1187: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1188: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1189: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1191: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1192: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1196: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1197: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1198: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1199: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1201: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1202: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1219: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1220: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1221: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1224: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1225: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1226: warning: initialization from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c: In function `gen_jcc':
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1780: warning: assignment from 
incompatible pointer type
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1819: error: too many arguments to 
function `gen_op_jnz_T0_label'
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:1821: error: too many arguments to 
function `gen_op_jmp_label'
/tmp/QEMU/qemu_SPARC/target-i386/translate.c: In function `disas_insn':
/tmp/QEMU/qemu_SPARC/target-i386/translate.c:5294: error: too many arguments to 
function `gen_op_jmp_label'
gmake[1]: *** [translate.o] Error 1
gmake[1]: Leaving directory `/tmp/QEMU/qemu_SPARC/i386-softmmu'
gmake: *** [all] Error 1
bash-3.00$ 


*****
comments
*****

To error 2.) :
Somebody reported a very similar/related problem ( 
http://lists.gnu.org/archive/html/qemu-devel/2005-03/msg00007.html ).
Unfortunately patching dyngen-exec.h did not help.
I added a line 

#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)

to #ifdef __sparc__ in dyngen-exec.h, did a "gmake distclean;./configure 
--disable-slirp --disable-kqemu --target-list=i386-softmmu;gmake" and got the 
following error:

*****
error 3.)
*****

gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I/opt/sfw/include/SDL 
-D_REENTRANT -c -o sdl.o /tmp/QEMU/qemu_SPARC/sdl.c
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o exec.o 
/tmp/QEMU/qemu_SPARC/exec.c
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o kqemu.o 
/tmp/QEMU/qemu_SPARC/kqemu.c
gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-fno-delayed-branch -O6  -fno-reorder-blocks -fno-optimize-sibling-calls 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o op.o 
/tmp/QEMU/qemu_SPARC/target-i386/op.c
../dyngen -o op.h op.o
dyngen: unsupported sparc relocation (11)
gmake[1]: *** [op.h] Error 1
gmake[1]: Leaving directory `/tmp/QEMU/qemu_SPARC/i386-softmmu'
gmake: *** [all] Error 1
bash-3.00$

*****
*****

So the question is, what needs to be modified in order to avoid the latter 
error, dyngen.c or the line just added to dyngen-exec.h???
As I'm very unshure how to tweak dyngen.c in that aspect, I experimented with 
above line in dyngen-exec.h.
I tried to replace the 'jmp' instruction with some other SPARCv8 assembly 
instruction ('jmpl' and so on - without too much sucess). 
Finally I found that 'call' seems to work instead of 'jmp'. At least it would 
continue the build processs "for now".

I then tried to patch ./i386-softmmu/op.h by hand ("error: parse error before 
';' token ." related trouble).
It seems to me, that the lines in question have either one opening '(' to much 
or one missing closing ')'.
The "best" I could eventually get was the following error message:

gcc -Wall -O2 -g -fno-strict-aliasing -m32 -ffixed-g4 -ffixed-g2 -ffixed-g3 
-DUSE_SB16 -I. -I/tmp/QEMU/qemu_SPARC/target-i386 -I/tmp/QEMU/qemu_SPARC 
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -c -o sparc-dis.o 
/tmp/QEMU/qemu_SPARC/sparc-dis.c
rm -f libqemu.a
ar rcs libqemu.a exec.o kqemu.o translate-all.o cpu-exec.o translate.o op.o  
helper.o helper2.o disas.o  i386-dis.o sparc-dis.o
gcc  -o qemu vl.o osdep.o block.o readline.o monitor.o pci.o console.o 
block-cow.o block-qcow.o aes.o block-vmdk.o block-cloop.o block-dmg.o ide.o 
ne2000.o pckbd.o vga.o sb16.o dma.o audio.o noaudio.o wavaudio.o sdlaudio.o 
fdc.o mc146818rtc.o serial.o i8259.o i8254.o pc.o cirrus_vga.o mixeng.o apic.o 
parallel.o gdbstub.o sdl.o libqemu.a  -lm -lz -lsocket -lnsl -L/opt/sfw/lib 
-R/opt/sfw/lib -lSDL -lpthread -lposix4
Undefined                       first referenced
 symbol                             in file
GOTO_LABEL_PARAM                    libqemu.a(translate-all.o)
ld: fatal: Symbol referencing errors. No output written to qemu
collect2: ld returned 1 exit status
gmake[1]: *** [qemu] Error 1
gmake[1]: Leaving directory `/tmp/QEMU/qemu_SPARC/i386-softmmu'
gmake: *** [all] Error 1
bash-3.00$ 

Please see the followings links as kind of "error reference":

[Qemu-devel] powerpc host trouble
http://lists.gnu.org/archive/html/qemu-devel/2005-01/msg00140.html

and 
Re: [Qemu-devel] Too Many Arguments To Function gen_op_jmp_label
http://lists.gnu.org/archive/html/qemu-devel/2005-03/msg00007.html

It seems that the old SPARC patch doesn't like all the new MMX/SSE extensions 
recently added to the qemu cvs.

Please continue your *great* work.
Or should I say magic?!

Thank You,
Martin Bochnig




Attachment: qemu_SPARC_HOST_cvs20050309wed.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]