Revision 6e68e076 linux-user/syscall.c

b/linux-user/syscall.c
2744 2744
        first_task_state = ts;
2745 2745
        /* we create a new CPU instance. */
2746 2746
        new_env = cpu_copy(env);
2747
#if defined(TARGET_I386)
2748
        if (!newsp)
2749
            newsp = env->regs[R_ESP];
2750
        new_env->regs[R_ESP] = newsp;
2751
        new_env->regs[R_EAX] = 0;
2752
#elif defined(TARGET_ARM)
2753
        if (!newsp)
2754
            newsp = env->regs[13];
2755
        new_env->regs[13] = newsp;
2756
        new_env->regs[0] = 0;
2757
#elif defined(TARGET_SPARC)
2758
        if (!newsp)
2759
            newsp = env->regwptr[22];
2760
        new_env->regwptr[22] = newsp;
2761
        new_env->regwptr[0] = 0;
2762
	/* XXXXX */
2763
        printf ("HELPME: %s:%d\n", __FILE__, __LINE__);
2764
#elif defined(TARGET_M68K)
2765
        if (!newsp)
2766
            newsp = env->aregs[7];
2767
        new_env->aregs[7] = newsp;
2768
        new_env->dregs[0] = 0;
2769
        /* ??? is this sufficient?  */
2770
#elif defined(TARGET_MIPS)
2771
        if (!newsp)
2772
            newsp = env->gpr[env->current_tc][29];
2773
        new_env->gpr[env->current_tc][29] = newsp;
2774
#elif defined(TARGET_PPC)
2775
        if (!newsp)
2776
            newsp = env->gpr[1];
2777
        new_env->gpr[1] = newsp;
2778
        {
2779
            int i;
2780
            for (i = 7; i < 32; i++)
2781
                new_env->gpr[i] = 0;
2782
        }
2783
#elif defined(TARGET_SH4)
2784
	if (!newsp)
2785
	  newsp = env->gregs[15];
2786
	new_env->gregs[15] = newsp;
2787
	/* XXXXX */
2788
#elif defined(TARGET_ALPHA)
2789
       if (!newsp)
2790
         newsp = env->ir[30];
2791
       new_env->ir[30] = newsp;
2792
        /* ? */
2793
        {
2794
            int i;
2795
            for (i = 7; i < 30; i++)
2796
                new_env->ir[i] = 0;
2797
        }
2798
#elif defined(TARGET_CRIS)
2799
	if (!newsp)
2800
	  newsp = env->regs[14];
2801
	new_env->regs[14] = newsp;
2802
#else
2803
#error unsupported target CPU
2804
#endif
2747
        /* Init regs that differ from the parent.  */
2748
        cpu_clone_regs(new_env, newsp);
2805 2749
        new_env->opaque = ts;
2806 2750
#ifdef __ia64__
2807 2751
        ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
......
2813 2757
        if ((flags & ~CSIGNAL) != 0)
2814 2758
            return -EINVAL;
2815 2759
        ret = fork();
2760
        if (ret == 0) {
2761
            cpu_clone_regs(env, newsp);
2762
        }
2816 2763
    }
2817 2764
    return ret;
2818 2765
}

Also available in: Unified diff