pkgsrc-Changes-HG archive

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

[pkgsrc/trunk]: pkgsrc/emulators/gxemul - try to enable big-endian mips suppo...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/5a749e56ac25
branches:  trunk
changeset: 590670:5a749e56ac25
user:      mrg <mrg%pkgsrc.org@localhost>
date:      Sun Jul 17 12:49:17 2011 +0000

description:
- try to enable big-endian mips support (from matt@)
- add sh kernel-address-in-user-mode exception support (seems to work
  for me, but XXX: some sh person should really look at this.)

diffstat:

 emulators/gxemul/distinfo         |   5 +++-
 emulators/gxemul/patches/patch-ad |  40 +++++++++++++++++++++++++++++++++++++++
 emulators/gxemul/patches/patch-ae |  32 +++++++++++++++++++++++++++++++
 emulators/gxemul/patches/patch-af |  26 +++++++++++++++++++++++++
 4 files changed, 102 insertions(+), 1 deletions(-)

diffs (124 lines):

diff -r 2b00aa3ce010 -r 5a749e56ac25 emulators/gxemul/distinfo
--- a/emulators/gxemul/distinfo Sun Jul 17 12:31:46 2011 +0000
+++ b/emulators/gxemul/distinfo Sun Jul 17 12:49:17 2011 +0000
@@ -1,6 +1,9 @@
-$NetBSD: distinfo,v 1.31 2010/07/02 14:41:50 joerg Exp $
+$NetBSD: distinfo,v 1.32 2011/07/17 12:49:17 mrg Exp $
 
 SHA1 (gxemul-0.6.0.tar.gz) = aa37ad5f200eee045b1da2b1d3f651401cf474af
 RMD160 (gxemul-0.6.0.tar.gz) = ac6291a5f8bc9c0d1988d3ce39750339fe90a8ce
 Size (gxemul-0.6.0.tar.gz) = 3598795 bytes
 SHA1 (patch-aa) = 6f2c0dc94606ba213bcc73527ea4bef997c89c45
+SHA1 (patch-ad) = a8757e7397ec3cc301d02bdf93654f55d558d29f
+SHA1 (patch-ae) = 19ef822c16f0f6dd50aea719e0bc797c39d1f9c0
+SHA1 (patch-af) = 8304ff5d8f779ac60f8d416d27e0a183e0e47d94
diff -r 2b00aa3ce010 -r 5a749e56ac25 emulators/gxemul/patches/patch-ad
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/emulators/gxemul/patches/patch-ad Sun Jul 17 12:49:17 2011 +0000
@@ -0,0 +1,40 @@
+$NetBSD: patch-ad,v 1.1 2011/07/17 12:49:17 mrg Exp $
+
+patch to fix big-endian mips support from matt%netbsd.org@localhost
+
+
+diff -rup src/cpus/cpu_mips_coproc.cc src/cpus/cpu_mips_coproc.cc
+--- src/cpus/cpu_mips_coproc.cc        2009-06-21 09:03:48.000000000 -0700
++++ src/cpus/cpu_mips_coproc.cc        2009-11-12 12:22:12.000000000 -0800
+@@ -1987,6 +1987,13 @@ void coproc_function(struct cpu *cpu, st
+ 
+       if (cpnr < 2 && (((function & 0x03e007f8) == (COPz_MTCz << 21))
+                     || ((function & 0x03e007f8) == (COPz_DMTCz << 21)))) {
++              tmpvalue = cpu->cd.mips.gpr[rt];
++              if (copz == COPz_MTCz) {
++                      /*  Sign-extend:  */
++                      tmpvalue &= 0xffffffffULL;
++                      if (tmpvalue & 0x80000000ULL)
++                              tmpvalue |= 0xffffffff00000000ULL;
++              }
+               if (unassemble_only) {
+                       debug("%s%i\t%s,", copz==COPz_DMTCz? "dmtc" : "mtc",
+                           cpnr, regnames[rt]);
+@@ -1996,16 +2003,10 @@ void coproc_function(struct cpu *cpu, st
+                               debug("r%i", rd);
+                       if (function & 7)
+                               debug(",%i", (int)(function & 7));
++                      debug(" [%016llx]", (long long)tmpvalue);
+                       debug("\n");
+                       return;
+               }
+-              tmpvalue = cpu->cd.mips.gpr[rt];
+-              if (copz == COPz_MTCz) {
+-                      /*  Sign-extend:  */
+-                      tmpvalue &= 0xffffffffULL;
+-                      if (tmpvalue & 0x80000000ULL)
+-                              tmpvalue |= 0xffffffff00000000ULL;
+-              }
+               coproc_register_write(cpu, cpu->cd.mips.coproc[cpnr], rd,
+                   &tmpvalue, copz == COPz_DMTCz, function & 7);
+               return;
diff -r 2b00aa3ce010 -r 5a749e56ac25 emulators/gxemul/patches/patch-ae
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/emulators/gxemul/patches/patch-ae Sun Jul 17 12:49:17 2011 +0000
@@ -0,0 +1,32 @@
+$NetBSD: patch-ae,v 1.1 2011/07/17 12:49:17 mrg Exp $
+
+patch to enable big-endian mips support from matt%netbsd.org@localhost
+
+
+diff -rup src/devices/dev_gt.cc src/devices/dev_gt.cc
+--- src/devices/dev_gt.cc      2009-06-21 09:03:48.000000000 -0700
++++ src/devices/dev_gt.cc      2009-11-12 11:55:32.000000000 -0800
+@@ -172,19 +172,23 @@ DEVICE_ACCESS(gt)
+               break;
+ 
+       case GT_PCI0_CFG_ADDR:
++#if 0
+               if (cpu->byte_order != EMUL_LITTLE_ENDIAN) {
+                       fatal("[ gt: TODO: big endian PCI access ]\n");
+                       exit(1);
+               }
++#endif
+               bus_pci_decompose_1(idata, &bus, &dev, &func, &reg);
+               bus_pci_setaddr(cpu, d->pci_data, bus, dev, func, reg);
+               break;
+ 
+       case GT_PCI0_CFG_DATA:
++#if 0
+               if (cpu->byte_order != EMUL_LITTLE_ENDIAN) {
+                       fatal("[ gt: TODO: big endian PCI access ]\n");
+                       exit(1);
+               }
++#endif
+               bus_pci_data_access(cpu, d->pci_data, writeflag == MEM_READ?
+                   &odata : &idata, len, writeflag);
+               break;
diff -r 2b00aa3ce010 -r 5a749e56ac25 emulators/gxemul/patches/patch-af
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/emulators/gxemul/patches/patch-af Sun Jul 17 12:49:17 2011 +0000
@@ -0,0 +1,26 @@
+$NetBSD: patch-af,v 1.1 2011/07/17 12:49:17 mrg Exp $
+
+--- src/cpus/memory_sh.cc.orig 2010-02-14 01:33:54.000000000 -0800
++++ src/cpus/memory_sh.cc      2011-07-15 01:12:18.000000000 -0700
+@@ -273,15 +273,17 @@
+       }
+ 
+       if (user) {
++              int expevt;
++              int wf = flags & FLAG_WRITEFLAG;
++
+               if (flags & FLAG_NOEXCEPTIONS) {
+                       *return_paddr = 0;
+                       return 2;
+               }
+ 
+-              fatal("Userspace tried to access non-user space memory."
+-                  " TODO: cause exception! (vaddr=0x%08"PRIx32"\n",
+-                  (uint32_t) vaddr);
+-              exit(1);
++              expevt = wf? EXPEVT_TLB_PROT_ST : EXPEVT_TLB_PROT_LD;
++              sh_exception(cpu, expevt, 0, (uint32_t)vaddr);
++              return 0;
+       }
+ 
+       /*  P1,P2: Direct-mapped physical memory.  */



Home | Main Index | Thread Index | Old Index