Branimir Karadžić 7 年之前
父節點
當前提交
7a10c90e1a
共有 1 個文件被更改,包括 43 次插入20 次删除
  1. 43 20
      src/crtnone.cpp

+ 43 - 20
src/crtnone.cpp

@@ -430,12 +430,51 @@ extern "C" int execvp(const char* _file, char* const _argv[])
 	return -1;
 	return -1;
 }
 }
 
 
+typedef int32_t clockid_t;
+
+inline void toTimespecNs(timespec& _ts, int64_t _nsecs)
+{
+	_ts.tv_sec  = _nsecs/INT64_C(1000000000);
+	_ts.tv_nsec = _nsecs%INT64_C(1000000000);
+}
+
+extern "C" int clock_gettime(clockid_t _clock, struct timespec* _ts)
+{
+	BX_UNUSED(_clock);
+	int64_t now = crt0::getHPCounter();
+	toTimespecNs(*_ts, now);
+	return 0;
+}
+
 extern "C" long syscall(long _num, ...)
 extern "C" long syscall(long _num, ...)
 {
 {
-	BX_UNUSED(_num);
-	bx::debugPrintf("syscall %d\n", _num);
-//	NOT_IMPLEMENTED();
-	return -1;
+	va_list argList;
+	va_start(argList, _num);
+
+	long result = -1;
+
+	switch (_num)
+	{
+	case 39:
+		result = crt0::processGetId();
+		break;
+
+	case 228:
+		{
+			clockid_t arg0 = va_arg(argList, clockid_t);
+			timespec* arg1 = va_arg(argList, timespec*);
+			result = clock_gettime(arg0, arg1);
+		}
+		break;
+
+	default:
+		bx::debugPrintf("? syscall %d\n", _num);
+		break;
+	}
+
+	va_end(argList);
+
+	return result;
 }
 }
 
 
 extern "C" long sysconf(int name)
 extern "C" long sysconf(int name)
@@ -513,22 +552,6 @@ struct timespec
 };
 };
 #endif //
 #endif //
 
 
-typedef int32_t clockid_t;
-
-inline void toTimespecNs(timespec& _ts, int64_t _nsecs)
-{
-	_ts.tv_sec  = _nsecs/INT64_C(1000000000);
-	_ts.tv_nsec = _nsecs%INT64_C(1000000000);
-}
-
-extern "C" int clock_gettime(clockid_t _clock, struct timespec* _ts)
-{
-	BX_UNUSED(_clock);
-	int64_t now = crt0::getHPCounter();
-	toTimespecNs(*_ts, now);
-	return 0;
-}
-
 extern "C" int gettimeofday(struct timeval* _tv, struct timezone* _tz)
 extern "C" int gettimeofday(struct timeval* _tv, struct timezone* _tz)
 {
 {
 	BX_UNUSED(_tz);
 	BX_UNUSED(_tz);