Revision 48733d19

b/linux-user/elfload.c
334 334

  
335 335
#endif
336 336

  
337
#ifdef TARGET_CRIS
338

  
339
#define ELF_START_MMAP 0x80000000
340

  
341
#define elf_check_arch(x) ( (x) == EM_CRIS )
342

  
343
#define ELF_CLASS ELFCLASS32
344
#define ELF_DATA  ELFDATA2LSB
345
#define ELF_ARCH  EM_CRIS
346

  
347
static inline void init_thread(struct target_pt_regs *regs, struct image_info *infop)
348
{
349
  regs->erp = infop->entry;
350
}
351

  
352
#define USE_ELF_CORE_DUMP
353
#define ELF_EXEC_PAGESIZE        8192
354

  
355
#endif
356

  
337 357
#ifdef TARGET_M68K
338 358

  
339 359
#define ELF_START_MMAP 0x80000000
b/linux-user/main.c
1601 1601
}
1602 1602
#endif
1603 1603

  
1604
#ifdef TARGET_CRIS
1605
void cpu_loop (CPUState *env)
1606
{
1607
    int trapnr, ret;
1608
    target_siginfo_t info;
1609
    
1610
    while (1) {
1611
        trapnr = cpu_cris_exec (env);
1612
        switch (trapnr) {
1613
        case 0xaa:
1614
            {
1615
                info.si_signo = SIGSEGV;
1616
                info.si_errno = 0;
1617
                /* XXX: check env->error_code */
1618
                info.si_code = TARGET_SEGV_MAPERR;
1619
                info._sifields._sigfault._addr = env->debug1;
1620
                queue_signal(info.si_signo, &info);
1621
            }
1622
            break;
1623
        case EXCP_BREAK:
1624
            ret = do_syscall(env, 
1625
                             env->regs[9], 
1626
                             env->regs[10], 
1627
                             env->regs[11], 
1628
                             env->regs[12], 
1629
                             env->regs[13], 
1630
                             env->pregs[7], 
1631
                             env->pregs[11]);
1632
            env->regs[10] = ret;
1633
            env->pc += 2;
1634
            break;
1635
        case EXCP_DEBUG:
1636
            {
1637
                int sig;
1638

  
1639
                sig = gdb_handlesig (env, TARGET_SIGTRAP);
1640
                if (sig)
1641
                  {
1642
                    info.si_signo = sig;
1643
                    info.si_errno = 0;
1644
                    info.si_code = TARGET_TRAP_BRKPT;
1645
                    queue_signal(info.si_signo, &info);
1646
                  }
1647
            }
1648
            break;
1649
        default:
1650
            printf ("Unhandled trap: 0x%x\n", trapnr);
1651
            cpu_dump_state(env, stderr, fprintf, 0);
1652
            exit (1);
1653
        }
1654
        process_pending_signals (env);
1655
    }
1656
}
1657
#endif
1658

  
1604 1659
#ifdef TARGET_M68K
1605 1660

  
1606 1661
void cpu_loop(CPUM68KState *env)
......
2195 2250
        env->pc = regs->pc;
2196 2251
        env->unique = regs->unique;
2197 2252
    }
2253
#elif defined(TARGET_CRIS)
2254
    {
2255
	    env->regs[0] = regs->r0;
2256
	    env->regs[1] = regs->r1;
2257
	    env->regs[2] = regs->r2;
2258
	    env->regs[3] = regs->r3;
2259
	    env->regs[4] = regs->r4;
2260
	    env->regs[5] = regs->r5;
2261
	    env->regs[6] = regs->r6;
2262
	    env->regs[7] = regs->r7;
2263
	    env->regs[8] = regs->r8;
2264
	    env->regs[9] = regs->r9;
2265
	    env->regs[10] = regs->r10;
2266
	    env->regs[11] = regs->r11;
2267
	    env->regs[12] = regs->r12;
2268
	    env->regs[13] = regs->r13;
2269
	    env->regs[14] = info->start_stack;
2270
	    env->regs[15] = regs->acr;	    
2271
	    env->pc = regs->erp;
2272
    }
2198 2273
#else
2199 2274
#error unsupported target CPU
2200 2275
#endif
b/linux-user/syscall.c
74 74
//#define DEBUG
75 75

  
76 76
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
77
    || defined(TARGET_M68K) || defined(TARGET_SH4)
77
    || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
78 78
/* 16 bit uid wrappers emulation */
79 79
#define USE_UID16
80 80
#endif
......
2286 2286
            for (i = 7; i < 30; i++)
2287 2287
                new_env->ir[i] = 0;
2288 2288
        }
2289
#elif defined(TARGET_CRIS)
2290
	if (!newsp)
2291
	  newsp = env->regs[14];
2292
	new_env->regs[14] = newsp;
2289 2293
#else
2290 2294
#error unsupported target CPU
2291 2295
#endif
......
3502 3506
#endif
3503 3507
#ifdef TARGET_NR_mmap
3504 3508
    case TARGET_NR_mmap:
3505
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_M68K)
3509
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_CRIS)
3506 3510
        {
3507 3511
            target_ulong *v;
3508 3512
            target_ulong v1, v2, v3, v4, v5, v6;
b/linux-user/syscall_defs.h
49 49
#define TARGET_IOC_TYPEBITS	8
50 50

  
51 51
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SH4) \
52
    || defined(TARGET_M68K) || defined(TARGET_ALPHA)
52
    || defined(TARGET_M68K) || defined(TARGET_ALPHA) || defined(TARGET_CRIS)
53 53

  
54 54
#define TARGET_IOC_SIZEBITS	14
55 55
#define TARGET_IOC_DIRBITS	2
......
289 289
int do_sigaction(int sig, const struct target_sigaction *act,
290 290
                 struct target_sigaction *oact);
291 291

  
292
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_MIPS) || defined (TARGET_SH4) || defined(TARGET_M68K) || defined(TARGET_ALPHA)
292
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) || defined(TARGET_PPC) || defined(TARGET_MIPS) || defined (TARGET_SH4) || defined(TARGET_M68K) || defined(TARGET_ALPHA) || defined(TARGET_CRIS)
293 293

  
294 294
#if defined(TARGET_SPARC)
295 295
#define TARGET_SA_NOCLDSTOP    8u
......
884 884
#define TARGET_MAP_NONBLOCK	0x10000		/* do not block on IO */
885 885
#endif
886 886

  
887
#if defined(TARGET_I386) || defined(TARGET_ARM)
887
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_CRIS)
888 888
struct target_stat {
889 889
	unsigned short st_dev;
890 890
	unsigned short __pad1;

Also available in: Unified diff