aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2014-09-18 08:36:45 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2014-09-18 08:36:45 +0000
commit0a041f3b473b7155dcf80be6906550ea46d9b0e7 (patch)
tree61eb5bb3f31f81fe5a1bfacf9258573e6ba1c63a /sys/amd64
parent5d99eb5926d63948e4cacd8898ba9de34bf7e0b1 (diff)
downloadsrc-0a041f3b473b7155dcf80be6906550ea46d9b0e7.tar.gz
src-0a041f3b473b7155dcf80be6906550ea46d9b0e7.zip
Implement most of timer_{create,settime,gettime,getoverrun,delete}
for amd64/linux32. Fix the entirely bogus (untested) version from r161310 for i386/linux using the same shared code in compat/linux. It is unclear to me if we could support more clock mappings but the current set allows me to successfully run commercial 32bit linux software under linuxolator on amd64. Reviewed by: jhb Differential Revision: D784 MFC after: 3 days Sponsored by: DARPA, AFRL
Notes
Notes: svn path=/head/; revision=271743
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/linux32/linux.h5
-rw-r--r--sys/amd64/linux32/linux32_dummy.c5
-rw-r--r--sys/amd64/linux32/syscalls.master12
3 files changed, 12 insertions, 10 deletions
diff --git a/sys/amd64/linux32/linux.h b/sys/amd64/linux32/linux.h
index 7b52a64cf0eb..39c17c8d2135 100644
--- a/sys/amd64/linux32/linux.h
+++ b/sys/amd64/linux32/linux.h
@@ -61,6 +61,11 @@ MALLOC_DECLARE(M_LINUX);
#define PTRIN(v) (void *)(uintptr_t)(v)
#define PTROUT(v) (l_uintptr_t)(uintptr_t)(v)
+#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0)
+#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0)
+#define PTRIN_CP(src,dst,fld) \
+ do { (dst).fld = PTRIN((src).fld); } while (0)
+
/*
* Provide a separate set of types for the Linux types.
*/
diff --git a/sys/amd64/linux32/linux32_dummy.c b/sys/amd64/linux32/linux32_dummy.c
index 411c4d556fc4..ecf516830811 100644
--- a/sys/amd64/linux32/linux32_dummy.c
+++ b/sys/amd64/linux32/linux32_dummy.c
@@ -73,11 +73,6 @@ DUMMY(epoll_create);
DUMMY(epoll_ctl);
DUMMY(epoll_wait);
DUMMY(remap_file_pages);
-DUMMY(timer_create);
-DUMMY(timer_settime);
-DUMMY(timer_gettime);
-DUMMY(timer_getoverrun);
-DUMMY(timer_delete);
DUMMY(fstatfs64);
DUMMY(mbind);
DUMMY(get_mempolicy);
diff --git a/sys/amd64/linux32/syscalls.master b/sys/amd64/linux32/syscalls.master
index c3a10afeb0a3..00002a40d447 100644
--- a/sys/amd64/linux32/syscalls.master
+++ b/sys/amd64/linux32/syscalls.master
@@ -435,11 +435,13 @@
256 AUE_NULL STD { int linux_epoll_wait(void); }
257 AUE_NULL STD { int linux_remap_file_pages(void); }
258 AUE_NULL STD { int linux_set_tid_address(int *tidptr); }
-259 AUE_NULL STD { int linux_timer_create(void); }
-260 AUE_NULL STD { int linux_timer_settime(void); }
-261 AUE_NULL STD { int linux_timer_gettime(void); }
-262 AUE_NULL STD { int linux_timer_getoverrun(void); }
-263 AUE_NULL STD { int linux_timer_delete(void); }
+259 AUE_NULL STD { int linux_timer_create(clockid_t clock_id, \
+ struct sigevent *evp, l_timer_t *timerid); }
+260 AUE_NULL STD { int linux_timer_settime(l_timer_t timerid, l_int flags, \
+ const struct itimerspec *new, struct itimerspec *old); }
+261 AUE_NULL STD { int linux_timer_gettime(l_timer_t timerid, struct itimerspec *setting); }
+262 AUE_NULL STD { int linux_timer_getoverrun(l_timer_t timerid); }
+263 AUE_NULL STD { int linux_timer_delete(l_timer_t timerid); }
264 AUE_CLOCK_SETTIME STD { int linux_clock_settime(clockid_t which, struct l_timespec *tp); }
265 AUE_NULL STD { int linux_clock_gettime(clockid_t which, struct l_timespec *tp); }
266 AUE_NULL STD { int linux_clock_getres(clockid_t which, struct l_timespec *tp); }