Fixes to compile under Cygwin.

src/kern/linux/linux.hh:
src/kern/solaris/solaris.hh:
    Rename BSD_HOST to the more specific NO_STAT64.
src/sim/byteswap.hh:
    Replace set of swap_byte functions with a single
    templated version.  Hope this fixes compiler issues
    with e.g. int32_t vs int disambiguation.
src/sim/syscall_emul.hh:
    Rename BSD_HOST to the more specific NO_STAT64.
    Set this for __CYGWIN__.

--HG--
extra : convert_revision : 86a63b4b60d2445a566321333381d79ba8ab63c4
This commit is contained in:
Steve Reinhardt 2006-06-17 18:27:28 -04:00
parent d96d28e56d
commit c698c03705
4 changed files with 25 additions and 27 deletions

View file

@ -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)
{ {

View file

@ -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)
{ {

View file

@ -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

View file

@ -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