arch/alpha/alpha_tru64_process.cc:
getdirent isn't implemented by cygwin. panic if this function is
executed. (It shouldn't be too much to emulate it using opendir,
readdir, etc.)
arch/alpha/pseudo_inst.cc:
Use lseek once and read instead pread.
base/intmath.hh:
we want int, long, and long long variations of FloorLog2 instead
of int32_t, int64_t. Otherwise, we leave one out.
base/socket.cc:
Fix define that seems to be for apple
sim/serialize.cc:
don't use the intXX_t stuff, instead, use the real types
so we're sure that we cover all of them.
--HG--
extra : convert_revision :
9fccaff583100b06bbaafd95a162c4e19beed59e
getdirentriesFunc(SyscallDesc *desc, int callnum, Process *process,
ExecContext *xc)
{
+#ifdef __CYGWIN__
+ panic("getdirent not implemented on cygwin!");
+#else
int fd = process->sim_fd(xc->getSyscallArg(0));
Addr tgt_buf = xc->getSyscallArg(1);
int tgt_nbytes = xc->getSyscallArg(2);
basep.copyOut(xc->mem);
return tgt_buf_ptr - tgt_buf;
+#endif
}
/// Target sigreturn() handler.
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <cstdio>
if (fd < 0)
panic("could not open file %s\n", file);
+ if (::lseek(fd, offset, SEEK_SET) < 0)
+ panic("could not seek: %s", strerror(errno));
+
char *buf = new char[len];
char *p = buf;
while (len > 0) {
- int bytes = ::pread(fd, p, len, offset);
+ int bytes = ::read(fd, p, len);
if (bytes <= 0)
break;
p += bytes;
- offset += bytes;
result += bytes;
len -= bytes;
}
}
inline int
-FloorLog2(uint32_t x)
+FloorLog2(unsigned x)
{
assert(x > 0);
}
inline int
-FloorLog2(uint64_t x)
+FloorLog2(unsigned long x)
+{
+ assert(x > 0);
+
+ int y = 0;
+
+#if defined(__LP64__)
+ if (x & ULL(0xffffffff00000000)) { y += 32; x >>= 32; }
+#endif
+ if (x & 0xffff0000) { y += 16; x >>= 16; }
+ if (x & 0x0000ff00) { y += 8; x >>= 8; }
+ if (x & 0x000000f0) { y += 4; x >>= 4; }
+ if (x & 0x0000000c) { y += 2; x >>= 2; }
+ if (x & 0x00000002) { y += 1; }
+
+ return y;
+}
+
+inline int
+FloorLog2(unsigned long long x)
{
assert(x > 0);
}
inline int
-FloorLog2(int32_t x)
+FloorLog2(int x)
+{
+ assert(x > 0);
+ return FloorLog2((unsigned)x);
+}
+
+inline int
+FloorLog2(long x)
{
assert(x > 0);
- return FloorLog2((uint32_t)x);
+ return FloorLog2((unsigned long)x);
}
inline int
-FloorLog2(int64_t x)
+FloorLog2(long long x)
{
assert(x > 0);
- return FloorLog2((uint64_t)x);
+ return FloorLog2((unsigned long long)x);
}
#if defined(__APPLE__)
return true;
}
-#if !defined(__OpenBSD__) && !defined(linux)
+#if defined(__APPLE__)
typedef int socklen_t;
#endif
arrayParamIn(Checkpoint *cp, const std::string §ion, \
const std::string &name, type *param, int size);
-
-INSTANTIATE_PARAM_TEMPLATES(int8_t)
-INSTANTIATE_PARAM_TEMPLATES(uint8_t)
-INSTANTIATE_PARAM_TEMPLATES(int16_t)
-INSTANTIATE_PARAM_TEMPLATES(uint16_t)
-INSTANTIATE_PARAM_TEMPLATES(int32_t)
-INSTANTIATE_PARAM_TEMPLATES(uint32_t)
-INSTANTIATE_PARAM_TEMPLATES(int64_t)
-INSTANTIATE_PARAM_TEMPLATES(uint64_t)
+INSTANTIATE_PARAM_TEMPLATES(signed char)
+INSTANTIATE_PARAM_TEMPLATES(unsigned char)
+INSTANTIATE_PARAM_TEMPLATES(signed short)
+INSTANTIATE_PARAM_TEMPLATES(unsigned short)
+INSTANTIATE_PARAM_TEMPLATES(signed int)
+INSTANTIATE_PARAM_TEMPLATES(unsigned int)
+INSTANTIATE_PARAM_TEMPLATES(signed long)
+INSTANTIATE_PARAM_TEMPLATES(unsigned long)
+INSTANTIATE_PARAM_TEMPLATES(signed long long)
+INSTANTIATE_PARAM_TEMPLATES(unsigned long long)
INSTANTIATE_PARAM_TEMPLATES(bool)
INSTANTIATE_PARAM_TEMPLATES(string)