* [Qemu-devel] QEMU 0.2 is out
@ 2003-05-28 0:58 Fabrice Bellard
2003-06-01 18:19 ` Falk Hueffner
0 siblings, 1 reply; 8+ messages in thread
From: Fabrice Bellard @ 2003-05-28 0:58 UTC (permalink / raw)
To: qemu-devel
Most of the QEMU architecture is now finished. There are still
complicated issues regarding thread locking. My main issue is that I
would like to avoid locking the cpu emulator while doing 'tb_find()'.
DOSEMU is now working better (I was able to launch DOS Navigator and a
small VGA demonstration). The speed seems reasonnable althought QEMU has
to emulate both the DOS code _and_ the dosemu code itself !
About the Sparc code: is it possible to move the prolog and epilog
generation from dyngen_code() to the cpu main loop ? It would ease a lot
the precise exception handling and the direct block chaining.
For Alpha and Sparc, if someone has an account that I can use, I could
make some debug to fix the last issues.
Fabrice.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] QEMU 0.2 is out
2003-05-28 0:58 [Qemu-devel] QEMU 0.2 is out Fabrice Bellard
@ 2003-06-01 18:19 ` Falk Hueffner
2003-06-02 22:52 ` Fabrice Bellard
0 siblings, 1 reply; 8+ messages in thread
From: Falk Hueffner @ 2003-06-01 18:19 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 592 bytes --]
> For Alpha and Sparc, if someone has an account that I can use, I
> could make some debug to fix the last issues.
You can get an account on Alpha Linux from HP at
http://www.testdrive.compaq.com/, or I can give you one on my machine
if you send me a ssh key.
I've attached a patch with all my changes, it doesn't seem to work at
all though, I get sig11 on all tests. It used to work "mostly" about
two weeks ago. I don't have time right now to look into it...
I think the fault address reporting was only introduced in 2.4.20 on
Alpha, so it might not work on older kernels.
--
Falk
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: qemu-alpha-2003.06.01.patch --]
[-- Type: text/x-patch, Size: 3781 bytes --]
Index: dyngen.c
===================================================================
RCS file: /cvsroot/qemu/qemu/dyngen.c,v
retrieving revision 1.16
diff -u -p -r1.16 dyngen.c
--- dyngen.c 29 May 2003 20:05:18 -0000 1.16
+++ dyngen.c 1 Jun 2003 18:15:02 -0000
@@ -691,7 +691,7 @@ void gen_code(const char *name, host_ulo
case R_ALPHA_BRSGP:
/* PC-relative jump. Tweak offset to skip the two instructions that try to
set up the gp from the pv. */
- fprintf(outfile, " fix_bsr(gen_code_ptr + %ld, (uint8_t *) &%s - (gen_code_ptr + %ld) + 4);\n",
+ fprintf(outfile, " fix_bsr(gen_code_ptr + %ld, (uint8_t *) &%s - (gen_code_ptr + %ld + 4) + 8);\n",
rel->r_offset - start_offset, sym_name, rel->r_offset - start_offset);
break;
default:
Index: exec-i386.c
===================================================================
RCS file: /cvsroot/qemu/qemu/exec-i386.c,v
retrieving revision 1.26
diff -u -p -r1.26 exec-i386.c
--- exec-i386.c 29 May 2003 20:04:28 -0000 1.26
+++ exec-i386.c 1 Jun 2003 18:15:03 -0000
@@ -447,6 +447,34 @@ int cpu_x86_signal_handler(int host_sign
is_write, &uc->uc_sigmask);
}
+#elif defined(__alpha__)
+
+int cpu_x86_signal_handler(int host_signum, struct siginfo *info,
+ void *puc)
+{
+ struct ucontext *uc = puc;
+ uint32_t *pc = uc->uc_mcontext.sc_pc;
+ uint32_t insn = *pc;
+ int is_write = 0;
+
+ switch (insn >> 26) {
+ case 0x0d: // stw
+ case 0x0e: // stb
+ case 0x0f: // stq_u
+ case 0x24: // stf
+ case 0x25: // stg
+ case 0x26: // sts
+ case 0x27: // stt
+ case 0x2c: // stl
+ case 0x2d: // stq
+ case 0x2e: // stl_c
+ case 0x2f: // stq_c
+ is_write = 1;
+ }
+
+ return handle_cpu_signal(pc, (unsigned long)info->si_addr,
+ is_write, &uc->uc_sigmask);
+}
#else
#error CPU specific signal handler needed
Index: exec-i386.h
===================================================================
RCS file: /cvsroot/qemu/qemu/exec-i386.h,v
retrieving revision 1.17
diff -u -p -r1.17 exec-i386.h
--- exec-i386.h 29 May 2003 20:04:28 -0000 1.17
+++ exec-i386.h 1 Jun 2003 18:15:03 -0000
@@ -124,6 +124,8 @@ register unsigned int A0 asm("$11");
register unsigned int EAX asm("$12");
register unsigned int ESP asm("$13");
register unsigned int EBP asm("$14");
+/* Note $15 is the frame pointer, so anything in op-i386.c that would
+ require a frame pointer, like alloca, would probably loose. */
register struct CPUX86State *env asm("$15");
#define reg_EAX
#define reg_ESP
Index: exec.h
===================================================================
RCS file: /cvsroot/qemu/qemu/exec.h,v
retrieving revision 1.3
diff -u -p -r1.3 exec.h
--- exec.h 27 May 2003 23:29:24 -0000 1.3
+++ exec.h 1 Jun 2003 18:15:03 -0000
@@ -214,7 +214,7 @@ static inline int testandset (int *p)
#endif
#ifdef __alpha__
-int testandset (int *p)
+static inline int testandset (int *p)
{
int ret;
unsigned long one;
Index: op-i386.c
===================================================================
RCS file: /cvsroot/qemu/qemu/op-i386.c,v
retrieving revision 1.31
diff -u -p -r1.31 op-i386.c
--- op-i386.c 29 May 2003 20:04:27 -0000 1.31
+++ op-i386.c 1 Jun 2003 18:15:05 -0000
@@ -1762,16 +1762,16 @@ typedef union {
double d;
#ifndef WORDS_BIGENDIAN
struct {
- unsigned long lower;
- long upper;
+ uint32_t lower;
+ int32_t upper;
} l;
#else
struct {
- long upper;
- unsigned long lower;
+ int32_t upper;
+ uint32_t lower;
} l;
#endif
- long long ll;
+ int64_t ll;
} CPU86_LDoubleU;
/* the following deal with IEEE double-precision numbers */
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] QEMU 0.2 is out
2003-06-01 18:19 ` Falk Hueffner
@ 2003-06-02 22:52 ` Fabrice Bellard
2003-06-02 23:20 ` Falk Hueffner
0 siblings, 1 reply; 8+ messages in thread
From: Fabrice Bellard @ 2003-06-02 22:52 UTC (permalink / raw)
To: qemu-devel
Falk Hueffner wrote:
>>For Alpha and Sparc, if someone has an account that I can use, I
>>could make some debug to fix the last issues.
>
>
> You can get an account on Alpha Linux from HP at
> http://www.testdrive.compaq.com/, or I can give you one on my machine
> if you send me a ssh key.
>
> I've attached a patch with all my changes, it doesn't seem to work at
> all though, I get sig11 on all tests. It used to work "mostly" about
> two weeks ago. I don't have time right now to look into it...
>
> I think the fault address reporting was only introduced in 2.4.20 on
> Alpha, so it might not work on older kernels.
I have now access to an Alpha and a Sparc computer.
For Alpha: I am using gcc 3.2.3 and '-msmall-text' is not supported. Is
it really necessary ?
Fabrice.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] QEMU 0.2 is out
2003-06-02 22:52 ` Fabrice Bellard
@ 2003-06-02 23:20 ` Falk Hueffner
2003-06-03 0:49 ` Fabrice Bellard
0 siblings, 1 reply; 8+ messages in thread
From: Falk Hueffner @ 2003-06-02 23:20 UTC (permalink / raw)
To: qemu-devel
Fabrice Bellard <fabrice.bellard@free.fr> writes:
> For Alpha: I am using gcc 3.2.3 and '-msmall-text' is not
> supported. Is it really necessary ?
Not really, I was just hoping to avoid a few gp readjustments with it,
however it doesn't really seem to have that effect, since for
non-static functions, that cannot be done, and for static functions,
gcc already knows to avoid gp restoring.
--
Falk
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] QEMU 0.2 is out
2003-06-02 23:20 ` Falk Hueffner
@ 2003-06-03 0:49 ` Fabrice Bellard
2003-06-03 13:18 ` Falk Hueffner
0 siblings, 1 reply; 8+ messages in thread
From: Fabrice Bellard @ 2003-06-03 0:49 UTC (permalink / raw)
To: qemu-devel
Falk Hueffner wrote:
> Fabrice Bellard <fabrice.bellard@free.fr> writes:
>
>
>>For Alpha: I am using gcc 3.2.3 and '-msmall-text' is not
>>supported. Is it really necessary ?
>
>
> Not really, I was just hoping to avoid a few gp readjustments with it,
> however it doesn't really seem to have that effect, since for
> non-static functions, that cannot be done, and for static functions,
> gcc already knows to avoid gp restoring.
Which version of gcc are you using ? Do you use a patched gcc ? Can you
give me your spec file and the gcc -v log when you compile op-i386.c ?
I am totally unable to get correct code. In particular, I cannot make
gcc 3.2.3 generate R_ALPHA_BRADDR relocations. Currently, to get correct
code, I must do the following:
--
int __op_param1;
#define PARAM1 ({ int _r; asm("ldah %0,__op_param1($29) !gprelhigh\n" \
"lda %0,__op_param1(%0) !gprellow" :
"=r"(_r) ); _r; })
#define CALL(x) asm volatile ("bsr $26, %0" : : "i" (x))
--
and use the macro CALL to call a function!
Fabrice.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] QEMU 0.2 is out
2003-06-03 0:49 ` Fabrice Bellard
@ 2003-06-03 13:18 ` Falk Hueffner
2003-06-04 22:43 ` Fabrice Bellard
2003-06-05 1:12 ` [Qemu-devel] QEMU on Alpha Fabrice Bellard
0 siblings, 2 replies; 8+ messages in thread
From: Falk Hueffner @ 2003-06-03 13:18 UTC (permalink / raw)
To: qemu-devel
Fabrice Bellard <fabrice.bellard@free.fr> writes:
> Which version of gcc are you using ? Do you use a patched gcc ? Can
> you give me your spec file and the gcc -v log when you compile
> op-i386.c ?
I use gcc 3.3 or 3.4 snapshots usually.
> I am totally unable to get correct code. In particular, I cannot make
> gcc 3.2.3 generate R_ALPHA_BRADDR relocations. Currently, to get
> correct code, I must do the following:
>
> --
> int __op_param1;
> #define PARAM1 ({ int _r; asm("ldah %0,__op_param1($29) !gprelhigh\n" \
> "lda %0,__op_param1(%0) !gprellow" :
> "=r"(_r) ); _r; })
Ah yes, this is because gcc 3.2.3 doesn't support visibility("hidden")
yet. If a symbol has global visibility, gcc cannot know it is accessed
with the same gp, since it might be provided by libc for example. I
don't think there's any better way do this with 3.2.3.
> #define CALL(x) asm volatile ("bsr $26, %0" : : "i" (x))
> --
> and use the macro CALL to call a function!
This seems to works for me even with 3.2.3. What happens if you don't
use the macro? Maybe your binutils is too old? I have 2.14.90.0.4-0.1.
Also, concerning the signal handler, siginfo is only filled in with
2.4.20 and newer kernels...
--
Falk
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] QEMU 0.2 is out
2003-06-03 13:18 ` Falk Hueffner
@ 2003-06-04 22:43 ` Fabrice Bellard
2003-06-05 1:12 ` [Qemu-devel] QEMU on Alpha Fabrice Bellard
1 sibling, 0 replies; 8+ messages in thread
From: Fabrice Bellard @ 2003-06-04 22:43 UTC (permalink / raw)
To: qemu-devel
With gcc 3.3 and binutils 2.14.90.0.4 it is better. I fixed some bugs
related to the new jump optimisation I introduced. But there is a big
problem: no relocations are generated for calls to global functions if
they are in the same file as the function call. I am trying various
patches for this.
Fabrice.
Falk Hueffner wrote:
> Fabrice Bellard <fabrice.bellard@free.fr> writes:
>
>
>>Which version of gcc are you using ? Do you use a patched gcc ? Can
>>you give me your spec file and the gcc -v log when you compile
>>op-i386.c ?
>
>
> I use gcc 3.3 or 3.4 snapshots usually.
>
>
>>I am totally unable to get correct code. In particular, I cannot make
>>gcc 3.2.3 generate R_ALPHA_BRADDR relocations. Currently, to get
>>correct code, I must do the following:
>>
>>--
>>int __op_param1;
>>#define PARAM1 ({ int _r; asm("ldah %0,__op_param1($29) !gprelhigh\n" \
>> "lda %0,__op_param1(%0) !gprellow" :
>> "=r"(_r) ); _r; })
>
>
> Ah yes, this is because gcc 3.2.3 doesn't support visibility("hidden")
> yet. If a symbol has global visibility, gcc cannot know it is accessed
> with the same gp, since it might be provided by libc for example. I
> don't think there's any better way do this with 3.2.3.
>
>
>>#define CALL(x) asm volatile ("bsr $26, %0" : : "i" (x))
>>--
>>and use the macro CALL to call a function!
>
>
> This seems to works for me even with 3.2.3. What happens if you don't
> use the macro? Maybe your binutils is too old? I have 2.14.90.0.4-0.1.
>
> Also, concerning the signal handler, siginfo is only filled in with
> 2.4.20 and newer kernels...
>
--
Fabrice.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Qemu-devel] QEMU on Alpha
2003-06-03 13:18 ` Falk Hueffner
2003-06-04 22:43 ` Fabrice Bellard
@ 2003-06-05 1:12 ` Fabrice Bellard
1 sibling, 0 replies; 8+ messages in thread
From: Fabrice Bellard @ 2003-06-05 1:12 UTC (permalink / raw)
To: qemu-devel
Hi,
The CVS version of QEMU should now launch test-i386 successfully on
Alpha. If you want to try it, read the README file to know what are the
tested tools (gcc 3.3 is _required_). I tested it only with a 2.2 Linux
kernel, so I was not able to test the precise exception support which
requires a 2.4.20 kernel.
The remaining issues (in particular with ls) should only be related to
bad syscall emulation, which is easier to fix.
Fabrice.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-06-05 1:13 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-28 0:58 [Qemu-devel] QEMU 0.2 is out Fabrice Bellard
2003-06-01 18:19 ` Falk Hueffner
2003-06-02 22:52 ` Fabrice Bellard
2003-06-02 23:20 ` Falk Hueffner
2003-06-03 0:49 ` Fabrice Bellard
2003-06-03 13:18 ` Falk Hueffner
2003-06-04 22:43 ` Fabrice Bellard
2003-06-05 1:12 ` [Qemu-devel] QEMU on Alpha Fabrice Bellard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).