Merge zizzer.eecs.umich.edu:/bk/newmem
into tpx31.:C:/cygwin/home/stever/bk/newmem --HG-- extra : convert_revision : 81affa14d8d900ccd3d1c44cb160eaecfb8599d1
This commit is contained in:
commit
989562bed9
4 changed files with 25 additions and 27 deletions
|
@ -69,7 +69,7 @@ class Linux {
|
||||||
typedef uint32_t gid_t;
|
typedef uint32_t gid_t;
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
#if BSD_HOST
|
#if NO_STAT64
|
||||||
typedef struct stat hst_stat;
|
typedef struct stat hst_stat;
|
||||||
typedef struct stat hst_stat64;
|
typedef struct stat hst_stat64;
|
||||||
#else
|
#else
|
||||||
|
@ -176,7 +176,7 @@ class Linux {
|
||||||
/// Helper function to convert a host stat buffer to a target stat
|
/// Helper function to convert a host stat buffer to a target stat
|
||||||
/// buffer. Also copies the target buffer out to the simulated
|
/// buffer. Also copies the target buffer out to the simulated
|
||||||
/// memory space. Used by stat(), fstat(), and lstat().
|
/// memory space. Used by stat(), fstat(), and lstat().
|
||||||
#if !BSD_HOST
|
#if !NO_STAT64
|
||||||
static void
|
static void
|
||||||
copyOutStatBuf(TranslatingPort *mem, Addr addr, hst_stat *host)
|
copyOutStatBuf(TranslatingPort *mem, Addr addr, hst_stat *host)
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,7 +74,7 @@ class Solaris {
|
||||||
typedef uint32_t nlink_t;
|
typedef uint32_t nlink_t;
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
#if BSD_HOST
|
#if NO_STAT64
|
||||||
typedef struct stat hst_stat;
|
typedef struct stat hst_stat;
|
||||||
typedef struct stat hst_stat64;
|
typedef struct stat hst_stat64;
|
||||||
#else
|
#else
|
||||||
|
@ -177,7 +177,7 @@ class Solaris {
|
||||||
/// Helper function to convert a host stat buffer to a target stat
|
/// Helper function to convert a host stat buffer to a target stat
|
||||||
/// buffer. Also copies the target buffer out to the simulated
|
/// buffer. Also copies the target buffer out to the simulated
|
||||||
/// memory space. Used by stat(), fstat(), and lstat().
|
/// memory space. Used by stat(), fstat(), and lstat().
|
||||||
#if !BSD_HOST
|
#if !NO_STAT64
|
||||||
static void
|
static void
|
||||||
copyOutStatBuf(TranslatingPort *mem, Addr addr, hst_stat *host)
|
copyOutStatBuf(TranslatingPort *mem, Addr addr, hst_stat *host)
|
||||||
{
|
{
|
||||||
|
|
|
@ -90,25 +90,23 @@ swap_byte16(uint16_t x)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//This lets the compiler figure out how to call the swap_byte functions above
|
// This function lets the compiler figure out how to call the
|
||||||
//for different data types.
|
// swap_byte functions above for different data types. Since the
|
||||||
static inline uint64_t swap_byte(uint64_t x) {return swap_byte64(x);}
|
// sizeof() values are known at compiel time, it should inline to a
|
||||||
static inline int64_t swap_byte(int64_t x) {return swap_byte64((uint64_t)x);}
|
// direct call to the right swap_byteNN() function.
|
||||||
static inline uint32_t swap_byte(uint32_t x) {return swap_byte32(x);}
|
template <typename T>
|
||||||
static inline int32_t swap_byte(int32_t x) {return swap_byte32((uint32_t)x);}
|
static inline T swap_byte(T x) {
|
||||||
//This is to prevent the following two functions from compiling on
|
if (sizeof(T) == 8)
|
||||||
//64bit machines. It won't detect everything, so it should be changed.
|
return swap_byte64((uint64_t)x);
|
||||||
#ifndef __x86_64__
|
else if (sizeof(T) == 4)
|
||||||
static inline long swap_byte(long x) {return swap_byte32((long)x);}
|
return swap_byte32((uint32_t)x);
|
||||||
static inline unsigned long swap_byte(unsigned long x)
|
else if (sizeof(T) == 2)
|
||||||
{ return swap_byte32((unsigned long)x);}
|
return swap_byte16((uint16_t)x);
|
||||||
#endif
|
else if (sizeof(T) == 1)
|
||||||
static inline uint16_t swap_byte(uint16_t x) {return swap_byte32(x);}
|
return x;
|
||||||
static inline int16_t swap_byte(int16_t x) {return swap_byte16((uint16_t)x);}
|
else
|
||||||
static inline uint8_t swap_byte(uint8_t x) {return x;}
|
panic("Can't byte-swap values larger than 64 bits");
|
||||||
static inline int8_t swap_byte(int8_t x) {return x;}
|
}
|
||||||
static inline double swap_byte(double x) {return swap_byte64((uint64_t)x);}
|
|
||||||
static inline float swap_byte(float x) {return swap_byte32((uint32_t)x);}
|
|
||||||
|
|
||||||
//The conversion functions with fixed endianness on both ends don't need to
|
//The conversion functions with fixed endianness on both ends don't need to
|
||||||
//be in a namespace
|
//be in a namespace
|
||||||
|
|
|
@ -33,8 +33,8 @@
|
||||||
#ifndef __SIM_SYSCALL_EMUL_HH__
|
#ifndef __SIM_SYSCALL_EMUL_HH__
|
||||||
#define __SIM_SYSCALL_EMUL_HH__
|
#define __SIM_SYSCALL_EMUL_HH__
|
||||||
|
|
||||||
#define BSD_HOST (defined(__APPLE__) || defined(__OpenBSD__) || \
|
#define NO_STAT64 (defined(__APPLE__) || defined(__OpenBSD__) || \
|
||||||
defined(__FreeBSD__))
|
defined(__FreeBSD__) || defined(__CYGWIN__))
|
||||||
|
|
||||||
///
|
///
|
||||||
/// @file syscall_emul.hh
|
/// @file syscall_emul.hh
|
||||||
|
@ -507,7 +507,7 @@ fstat64Func(SyscallDesc *desc, int callnum, Process *process,
|
||||||
return -EBADF;
|
return -EBADF;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if BSD_HOST
|
#if NO_STAT64
|
||||||
struct stat hostBuf;
|
struct stat hostBuf;
|
||||||
int result = fstat(process->sim_fd(fd), &hostBuf);
|
int result = fstat(process->sim_fd(fd), &hostBuf);
|
||||||
#else
|
#else
|
||||||
|
@ -557,7 +557,7 @@ lstat64Func(SyscallDesc *desc, int callnum, Process *process,
|
||||||
if (!tc->getMemPort()->tryReadString(path, tc->getSyscallArg(0)))
|
if (!tc->getMemPort()->tryReadString(path, tc->getSyscallArg(0)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
#if BSD_HOST
|
#if NO_STAT64
|
||||||
struct stat hostBuf;
|
struct stat hostBuf;
|
||||||
int result = lstat(path.c_str(), &hostBuf);
|
int result = lstat(path.c_str(), &hostBuf);
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in a new issue