In October last year I reported a problem compiling qemu-sparc on FC3
x86_64, for which a fix was then found. Trying to recompile the latest
CVS version on FC4 x86_64 (with compat-gcc-32), I find that the code in
dyngen.c has been overhauled, but that compilation fails at:

make[1]: Entering directory `/home/bob/cvs/qemu/sparc-user'
gcc32 -Wall -O2 -g -fno-strict-aliasing -I.
-I/home/bob/cvs/qemu/target-sparc -I/home/bob/cvs/qemu
-I/home/bob/cvs/qemu/linux-user -I/home/bob/cvs/qemu/linux-user/sparc
-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-I/home/bob/cvs/qemu/fpu -I/home/bob/cvs/qemu/slirp -c -o
translate-op.o /home/bob/cvs/qemu/translate-op.c
In file included from /home/bob/cvs/qemu/translate-op.c:36:
op.h: In function `dyngen_code':
op.h:4631: syntax error before '.' token
op.h:4633: syntax error before '.' token
make[1]: *** [translate-op.o] Error 1

The code from op.h:

case INDEX_op_fnegs: {
    extern void op_fnegs();
extern char .LC96;
    memcpy(gen_code_ptr, (void *)((char *)&op_fnegs+0), 31);
    *(uint32_t *)(gen_code_ptr + 10) = (long)(&.LC96) -
(long)(gen_code_ptr + 10) + -4;
    gen_code_ptr += 31;
}
break;

Unfortunately this time, looking at the relevant section in dyngen.c, I
find at line 1593:

#if defined(HOST_SPARC)
            if (sym_name[0] == '.') {
            fprintf(outfile,
                "extern char __dot_%s __asm__(\"%s\");\n",
                sym_name+1, sym_name);
            continue;
            }
#endif

Extending this to #if defined(HOST_SPARC) || defined(HOST_X86_64)
produces another error, and none of my attempts to fix this seems to
work.

It looks like a working symbol generation in dyngen.c was replaced by
code which regresses to incorrect behavior on x86_64.

Can anyone with more experience please suggest a fix?

Sincerely,

Bob Deblier



_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to