endian fixes and compiles on mac os x
arch/alpha/alpha_linux_process.cc:
add endian conversions for fstat functions
arch/alpha/alpha_tru64_process.cc:
add endian conversions for various functions
sim/byteswap.hh:
for some reason gcc on macos really wants long and unsigned long
Why int32_t and uint32_t isn't sufficient I don't know.
sim/process.cc:
sim/syscall_emul.hh:
endian fixes
--HG--
extra : convert_revision : ce625d5660b70867c43c74fbed856149c0d8cd36
This commit is contained in:
@@ -79,7 +79,11 @@ static inline uint64_t swap_byte(uint64_t x) {return swap_byte64(x);}
|
||||
static inline int64_t swap_byte(int64_t x) {return swap_byte64((uint64_t)x);}
|
||||
static inline uint32_t swap_byte(uint32_t x) {return swap_byte32(x);}
|
||||
static inline int32_t swap_byte(int32_t x) {return swap_byte32((uint32_t)x);}
|
||||
static inline int32_t swap_byte(long x) {return swap_byte32((long)x);}
|
||||
#if defined(__APPLE__)
|
||||
static inline long swap_byte(long x) {return swap_byte32((long)x);}
|
||||
static inline unsigned long swap_byte(unsigned long x)
|
||||
{ return swap_byte32((unsigned long)x);}
|
||||
#endif
|
||||
static inline uint16_t swap_byte(uint16_t x) {return swap_byte32(x);}
|
||||
static inline int16_t swap_byte(int16_t x) {return swap_byte16((uint16_t)x);}
|
||||
static inline uint8_t swap_byte(uint8_t x) {return x;}
|
||||
|
||||
@@ -251,8 +251,10 @@ static void
|
||||
copyStringArray(vector<string> &strings, Addr array_ptr, Addr data_ptr,
|
||||
FunctionalMemory *memory)
|
||||
{
|
||||
Addr data_ptr_swap;
|
||||
for (int i = 0; i < strings.size(); ++i) {
|
||||
memory->access(Write, array_ptr, &data_ptr, sizeof(Addr));
|
||||
data_ptr_swap = htog(data_ptr);
|
||||
memory->access(Write, array_ptr, &data_ptr_swap, sizeof(Addr));
|
||||
memory->writeString(data_ptr, strings[i].c_str());
|
||||
array_ptr += sizeof(Addr);
|
||||
data_ptr += strings[i].size() + 1;
|
||||
@@ -334,6 +336,7 @@ LiveProcess::LiveProcess(const string &nm, ObjectFile *objFile,
|
||||
|
||||
// write contents to stack
|
||||
uint64_t argc = argv.size();
|
||||
argc = htog(argc);
|
||||
memory->access(Write, stack_min, &argc, sizeof(uint64_t));
|
||||
|
||||
copyStringArray(argv, argv_array_base, arg_data_base, memory);
|
||||
|
||||
@@ -455,7 +455,7 @@ fstat64Func(SyscallDesc *desc, int callnum, Process *process,
|
||||
if (result < 0)
|
||||
return errno;
|
||||
|
||||
OS::copyOutStat64Buf(xc->mem, xc->getSyscallArg(1), &hostBuf);
|
||||
OS::copyOutStat64Buf(xc->mem, fd, xc->getSyscallArg(1), &hostBuf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -505,7 +505,7 @@ lstat64Func(SyscallDesc *desc, int callnum, Process *process,
|
||||
if (result < 0)
|
||||
return -errno;
|
||||
|
||||
OS::copyOutStat64Buf(xc->mem, xc->getSyscallArg(1), &hostBuf);
|
||||
OS::copyOutStat64Buf(xc->mem, -1, xc->getSyscallArg(1), &hostBuf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -600,9 +600,9 @@ writevFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
typename OS::tgt_iovec tiov;
|
||||
xc->mem->access(Read, tiov_base + i*sizeof(typename OS::tgt_iovec),
|
||||
&tiov, sizeof(typename OS::tgt_iovec));
|
||||
hiov[i].iov_len = tiov.iov_len;
|
||||
hiov[i].iov_len = gtoh(tiov.iov_len);
|
||||
hiov[i].iov_base = new char [hiov[i].iov_len];
|
||||
xc->mem->access(Read, tiov.iov_base,
|
||||
xc->mem->access(Read, gtoh(tiov.iov_base),
|
||||
hiov[i].iov_base, hiov[i].iov_len);
|
||||
}
|
||||
|
||||
@@ -674,6 +674,8 @@ getrlimitFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
case OS::TGT_RLIMIT_STACK:
|
||||
// max stack size in bytes: make up a number (2MB for now)
|
||||
rlp->rlim_cur = rlp->rlim_max = 8 * 1024 * 1024;
|
||||
rlp->rlim_cur = htog(rlp->rlim_cur);
|
||||
rlp->rlim_max = htog(rlp->rlim_max);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -697,6 +699,8 @@ gettimeofdayFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
|
||||
getElapsedTime(tp->tv_sec, tp->tv_usec);
|
||||
tp->tv_sec += seconds_since_epoch;
|
||||
tp->tv_sec = htog(tp->tv_sec);
|
||||
tp->tv_usec = htog(tp->tv_usec);
|
||||
|
||||
tp.copyOut(xc->mem);
|
||||
|
||||
@@ -721,8 +725,8 @@ utimesFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
struct timeval hostTimeval[2];
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
hostTimeval[i].tv_sec = (*tp)[i].tv_sec;
|
||||
hostTimeval[i].tv_usec = (*tp)[i].tv_usec;
|
||||
hostTimeval[i].tv_sec = gtoh((*tp)[i].tv_sec);
|
||||
hostTimeval[i].tv_usec = gtoh((*tp)[i].tv_usec);
|
||||
}
|
||||
int result = utimes(path.c_str(), hostTimeval);
|
||||
|
||||
@@ -748,6 +752,9 @@ getrusageFunc(SyscallDesc *desc, int callnum, Process *process,
|
||||
}
|
||||
|
||||
getElapsedTime(rup->ru_utime.tv_sec, rup->ru_utime.tv_usec);
|
||||
rup->ru_utime.tv_sec = htog(rup->ru_utime.tv_sec);
|
||||
rup->ru_utime.tv_usec = htog(rup->ru_utime.tv_usec);
|
||||
|
||||
rup->ru_stime.tv_sec = 0;
|
||||
rup->ru_stime.tv_usec = 0;
|
||||
rup->ru_maxrss = 0;
|
||||
|
||||
Reference in New Issue
Block a user