summaryrefslogtreecommitdiffstats
path: root/sys/compat/freebsd32/freebsd32_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/compat/freebsd32/freebsd32_util.h')
-rw-r--r--sys/compat/freebsd32/freebsd32_util.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/sys/compat/freebsd32/freebsd32_util.h b/sys/compat/freebsd32/freebsd32_util.h
index 5a4477f..6536b2c 100644
--- a/sys/compat/freebsd32/freebsd32_util.h
+++ b/sys/compat/freebsd32/freebsd32_util.h
@@ -53,4 +53,34 @@ struct freebsd32_ps_strings {
#define FREEBSD32_PS_STRINGS \
(FREEBSD32_USRSTACK - sizeof(struct freebsd32_ps_strings))
+extern struct sysent freebsd32_sysent[];
+
+#define SYSCALL32_MODULE(name, offset, new_sysent, evh, arg) \
+static struct syscall_module_data name##_syscall32_mod = { \
+ evh, arg, offset, new_sysent, { 0, NULL } \
+}; \
+ \
+static moduledata_t name##32_mod = { \
+ #name, \
+ syscall32_module_handler, \
+ &name##_syscall32_mod \
+}; \
+DECLARE_MODULE(name##32, name##32_mod, SI_SUB_SYSCALLS, SI_ORDER_MIDDLE)
+
+#define SYSCALL32_MODULE_HELPER(syscallname) \
+static int syscallname##_syscall32 = FREEBSD32_SYS_##syscallname; \
+static struct sysent syscallname##_sysent32 = { \
+ (sizeof(struct syscallname ## _args ) \
+ / sizeof(register_t)), \
+ (sy_call_t *)& syscallname \
+}; \
+SYSCALL32_MODULE(syscallname, \
+ & syscallname##_syscall32, & syscallname##_sysent32,\
+ NULL, NULL);
+
+int syscall32_register(int *offset, struct sysent *new_sysent,
+ struct sysent *old_sysent);
+int syscall32_deregister(int *offset, struct sysent *old_sysent);
+int syscall32_module_handler(struct module *mod, int what, void *arg);
+
#endif /* !_COMPAT_FREEBSD32_FREEBSD32_UTIL_H_ */
OpenPOWER on IntegriCloud