Revision 48e515d4

b/linux-user/syscall.c
580 580
extern int setfsgid(int);
581 581
extern int setgroups(int, gid_t *);
582 582

  
583
/* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */
584
#ifdef TARGET_ARM 
585
static inline int regpairs_aligned(void *cpu_env) {
586
    return ((((CPUARMState *)cpu_env)->eabi) == 1) ;
587
}
588
#elif defined(TARGET_MIPS)
589
static inline int regpairs_aligned(void *cpu_env) { return 1; }
590
#else
591
static inline int regpairs_aligned(void *cpu_env) { return 0; }
592
#endif
593

  
583 594
#define ERRNO_TABLE_SIZE 1200
584 595

  
585 596
/* target_to_host_errno_table[] is initialized from
......
4375 4386
                                         abi_long arg3,
4376 4387
                                         abi_long arg4)
4377 4388
{
4378
#ifdef TARGET_ARM
4379
    if (((CPUARMState *)cpu_env)->eabi)
4380
      {
4389
    if (regpairs_aligned(cpu_env)) {
4381 4390
        arg2 = arg3;
4382 4391
        arg3 = arg4;
4383
      }
4384
#endif
4392
    }
4385 4393
    return get_errno(truncate64(arg1, target_offset64(arg2, arg3)));
4386 4394
}
4387 4395
#endif
......
4392 4400
                                          abi_long arg3,
4393 4401
                                          abi_long arg4)
4394 4402
{
4395
#ifdef TARGET_ARM
4396
    if (((CPUARMState *)cpu_env)->eabi)
4397
      {
4403
    if (regpairs_aligned(cpu_env)) {
4398 4404
        arg2 = arg3;
4399 4405
        arg3 = arg4;
4400
      }
4401
#endif
4406
    }
4402 4407
    return get_errno(ftruncate64(arg1, target_offset64(arg2, arg3)));
4403 4408
}
4404 4409
#endif
......
6857 6862
#endif
6858 6863
#ifdef TARGET_NR_pread
6859 6864
    case TARGET_NR_pread:
6860
#ifdef TARGET_ARM
6861
        if (((CPUARMState *)cpu_env)->eabi)
6865
        if (regpairs_aligned(cpu_env))
6862 6866
            arg4 = arg5;
6863
#endif
6864 6867
        if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
6865 6868
            goto efault;
6866 6869
        ret = get_errno(pread(arg1, p, arg3, arg4));
6867 6870
        unlock_user(p, arg2, ret);
6868 6871
        break;
6869 6872
    case TARGET_NR_pwrite:
6870
#ifdef TARGET_ARM
6871
        if (((CPUARMState *)cpu_env)->eabi)
6873
        if (regpairs_aligned(cpu_env))
6872 6874
            arg4 = arg5;
6873
#endif
6874 6875
        if (!(p = lock_user(VERIFY_READ, arg2, arg3, 1)))
6875 6876
            goto efault;
6876 6877
        ret = get_errno(pwrite(arg1, p, arg3, arg4));
......
7621 7622
#ifdef TARGET_NR_readahead
7622 7623
    case TARGET_NR_readahead:
7623 7624
#if TARGET_ABI_BITS == 32
7624
#ifdef TARGET_ARM
7625
        if (((CPUARMState *)cpu_env)->eabi)
7626
        {
7625
        if (regpairs_aligned(cpu_env)) {
7627 7626
            arg2 = arg3;
7628 7627
            arg3 = arg4;
7629 7628
            arg4 = arg5;
7630 7629
        }
7631
#endif
7632 7630
        ret = get_errno(readahead(arg1, ((off64_t)arg3 << 32) | arg2, arg4));
7633 7631
#else
7634 7632
        ret = get_errno(readahead(arg1, arg2, arg3));

Also available in: Unified diff