Revision 6e68e076

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
}
b/target-alpha/cpu.h
311 311
    return (env->ps >> 3) & 3;
312 312
}
313 313

  
314
#if defined(CONFIG_USER_ONLY)
315
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
316
{
317
    if (!newsp)
318
        env->ir[30] = newsp;
319
    /* FIXME: Zero syscall return value.  */
320
}
321
#endif
322

  
314 323
#include "cpu-all.h"
315 324

  
316 325
enum {
b/target-arm/cpu.h
408 408
    return (env->uncached_cpsr & CPSR_M) == ARM_CPU_MODE_USR ? 1 : 0;
409 409
}
410 410

  
411
#if defined(CONFIG_USER_ONLY)
412
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
413
{
414
    if (!newsp)
415
        env->regs[13] = newsp;
416
    env->regs[0] = 0;
417
}
418
#endif
419

  
411 420
#include "cpu-all.h"
412 421

  
413 422
#endif
b/target-cris/cpu.h
218 218
	return !!(env->pregs[PR_CCS] & U_FLAG);
219 219
}
220 220

  
221
#if defined(CONFIG_USER_ONLY)
222
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
223
{
224
    if (!newsp)
225
        env->regs[14] = newsp;
226
    env->regs[10] = 0;
227
}
228
#endif
229

  
221 230
/* Support function regs.  */
222 231
#define SFR_RW_GC_CFG      0][0
223 232
#define SFR_RW_MM_CFG      env->pregs[PR_SRS]][0
b/target-i386/cpu.h
734 734

  
735 735
extern CCTable cc_table[];
736 736

  
737
#if defined(CONFIG_USER_ONLY)
738
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
739
{
740
    if (!newsp)
741
        env->regs[R_ESP] = newsp;
742
    env->regs[R_EAX] = 0;
743
}
744
#endif
745

  
737 746
#include "cpu-all.h"
738 747

  
739 748
#include "svm.h"
b/target-m68k/cpu.h
226 226
    return (env->sr & SR_S) == 0 ? 1 : 0;
227 227
}
228 228

  
229
#if defined(CONFIG_USER_ONLY)
230
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
231
{
232
    if (!newsp)
233
        env->aregs[7] = newsp;
234
    env->dregs[0] = 0;
235
}
236
#endif
237

  
229 238
#include "cpu-all.h"
230 239

  
231 240
#endif
b/target-mips/cpu.h
500 500
    return env->hflags & MIPS_HFLAG_KSU;
501 501
}
502 502

  
503
#if defined(CONFIG_USER_ONLY)
504
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
505
{
506
    if (!newsp)
507
        env->gpr[env->current_tc][29] = newsp;
508
    env->gpr[env->current_tc][7] = 0;
509
    env->gpr[env->current_tc][2] = 0;
510
}
511
#endif
512

  
503 513
#include "cpu-all.h"
504 514

  
505 515
/* Memory access type :
b/target-ppc/cpu.h
822 822
    return env->mmu_idx;
823 823
}
824 824

  
825
#if defined(CONFIG_USER_ONLY)
826
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
827
{
828
    int i;
829
    if (!newsp)
830
        env->gpr[1] = newsp;
831
    for (i = 7; i < 32; i++)
832
        env->gpr[i] = 0;
833
}
834
#endif
835

  
825 836
#include "cpu-all.h"
826 837

  
827 838
/*****************************************************************************/
b/target-sh4/cpu.h
143 143
    return (env->sr & SR_MD) == 0 ? 1 : 0;
144 144
}
145 145

  
146
#if defined(CONFIG_USER_ONLY)
147
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
148
{
149
    if (!newsp)
150
        env->gregs[15] = newsp;
151
    env->gregs[0] = 0;
152
}
153
#endif
154

  
146 155
#include "cpu-all.h"
147 156

  
148 157
/* Memory access type */
b/target-sparc/cpu.h
403 403
#endif
404 404
}
405 405

  
406
#if defined(CONFIG_USER_ONLY)
407
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp)
408
{
409
    if (!newsp)
410
        env->regwptr[22] = newsp;
411
    env->regwptr[0] = 0;
412
    /* FIXME: Do we also need to clear CF?  */
413
    /* XXXXX */
414
    printf ("HELPME: %s:%d\n", __FILE__, __LINE__);
415
}
416
#endif
417

  
406 418
#include "cpu-all.h"
407 419

  
408 420
#endif

Also available in: Unified diff