* [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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.