Get rid of user_mode_only
[qemu] / bsd-user / main.c
index d2129cc..45f0bc5 100644 (file)
@@ -15,7 +15,8 @@
  *
  *  You should have received a copy of the GNU General Public License
  *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *  Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
  */
 #include <stdlib.h>
 #include <stdio.h>
@@ -180,11 +181,12 @@ void cpu_loop(CPUSPARCState *env, enum BSDType bsd_type)
         trapnr = cpu_sparc_exec (env);
 
         switch (trapnr) {
+#ifndef TARGET_SPARC64
+        case 0x80:
+#else
         case 0x100:
-            syscall_nr = env->gregs[1];
-#if defined(TARGET_SPARC)
-            syscall_nr &= ~(SYSCALL_G7RFLAG | SYSCALL_G2RFLAG);
 #endif
+            syscall_nr = env->gregs[1];
             if (bsd_type == target_freebsd)
                 ret = do_freebsd_syscall(env, syscall_nr,
                                          env->regwptr[0], env->regwptr[1],
@@ -195,11 +197,16 @@ void cpu_loop(CPUSPARCState *env, enum BSDType bsd_type)
                                         env->regwptr[0], env->regwptr[1],
                                         env->regwptr[2], env->regwptr[3],
                                         env->regwptr[4], env->regwptr[5]);
-            else //if (bsd_type == target_openbsd)
+            else { //if (bsd_type == target_openbsd)
+#if defined(TARGET_SPARC64)
+                syscall_nr &= ~(TARGET_OPENBSD_SYSCALL_G7RFLAG |
+                                TARGET_OPENBSD_SYSCALL_G2RFLAG);
+#endif
                 ret = do_openbsd_syscall(env, syscall_nr,
                                          env->regwptr[0], env->regwptr[1],
                                          env->regwptr[2], env->regwptr[3],
                                          env->regwptr[4], env->regwptr[5]);
+            }
             if ((unsigned int)ret >= (unsigned int)(-515)) {
 #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
                 env->xcc |= PSR_CARRY;
@@ -215,11 +222,13 @@ void cpu_loop(CPUSPARCState *env, enum BSDType bsd_type)
             }
             env->regwptr[0] = ret;
             /* next instruction */
-#if defined(TARGET_SPARC)
-            if (env->gregs[1] & SYSCALL_G2RFLAG) {
+#if defined(TARGET_SPARC64)
+            if (bsd_type == target_openbsd &&
+                env->gregs[1] & TARGET_OPENBSD_SYSCALL_G2RFLAG) {
                 env->pc = env->gregs[2];
                 env->npc = env->pc + 4;
-            } else if (env->gregs[1] & SYSCALL_G7RFLAG) {
+            } else if (bsd_type == target_openbsd &&
+                       env->gregs[1] & TARGET_OPENBSD_SYSCALL_G7RFLAG) {
                 env->pc = env->gregs[7];
                 env->npc = env->pc + 4;
             } else {
@@ -549,7 +558,6 @@ int main(int argc, char **argv)
     init_task_state(ts);
     ts->info = info;
     env->opaque = ts;
-    env->user_mode_only = 1;
 
 #if defined(TARGET_SPARC)
     {