Automatically generate the system call wrappers
authorcoderain <coderain@sdf.org>
Sun, 24 Dec 2017 15:35:55 +0000 (16:35 +0100)
committercoderain <coderain@sdf.org>
Sun, 24 Dec 2017 15:35:55 +0000 (16:35 +0100)
kernel/include/clock.h
kernel/include/timer.h
library/.gitignore
library/Makefile
library/gen_wrappers.awk [new file with mode: 0644]
library/src/wrappers.c [deleted file]
sdk/clock.h
sdk/monolithium.h
sdk/timer.h [new file with mode: 0644]

index d323f859dcb0f047c7c4a064aaefda3372f985cf..f0f4b5f42d1bba44190f10e8faa0b5e7e3bbfe5e 100644 (file)
@@ -48,8 +48,6 @@
 #define CMOS_RTC_STC_REG 0x0C
 
 void clock_init();
-sysret_t syscall_clock_get_time(clock_time_t *time);
 bool_t clock_check_time(clock_time_t *time);
-sysret_t syscall_clock_set_time(clock_time_t *time);
 
 #endif
index 5acbcb3dc7e3dd54199d0af034caf7e548488c1d..939706e71fe2f4d957a23c59040ea898a2721444 100644 (file)
@@ -20,6 +20,7 @@
 #ifndef _TIMER_H_
 #define _TIMER_H_
 
+#include <sdk/timer.h>
 #include <irq.h>
 
 #define TIMER_IRQ 0
@@ -31,8 +32,6 @@
 #define TIMER_RATE_GENERATOR(x) (((x) << 6) | 0x34)
 #define TIMER_SQUARE_WAVE(x) (((x) << 6) | 0x36)
 
-sysret_t syscall_get_milliseconds(void);
-sysret_t syscall_get_nanoseconds(void);
 void timer_init(void);
 
 #endif
index 96a0a6a4a003f945e080788db48424ece9946191..1d95067dd0b9c0b700ba702c3563447fba735869 100644 (file)
@@ -3,6 +3,8 @@
 # Include the following files:
 !.gitignore
 !Makefile
-!gen_syscalls.sh
+!gen_wrappers.awk
 !src
 !src/*
+
+src/wrappers.c
\ No newline at end of file
index f3033dafc90ff43497d97cb5e0941867d0a383af..7fd43577920b433dbcc0e733e2a27cc359dd1095 100644 (file)
@@ -40,7 +40,10 @@ else
 endif
 
 # Input and output files
+WRAPPERS = $(SRCDIR)/wrappers.c
+
 SOURCES =  $(wildcard $(SRCDIR)/*.c)
+SOURCES += $(WRAPPERS)
 SOURCES += $(wildcard $(SRCDIR)/*.asm)
 
 DEPENDS = $(shell find $(DEPDIR) -type f -name \*.d)
@@ -48,7 +51,7 @@ OBJECTS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(patsubst $(SRCDIR)/%.asm, $
 
 .PHONY: all clean
 
-all: $(OBJDIR) $(DEPDIR) libmlsys.a
+all: $(WRAPPERS) $(OBJDIR) $(DEPDIR) libmlsys.a
 
 -include $(DEPENDS)
 
@@ -58,6 +61,9 @@ $(OBJDIR):
 $(DEPDIR):
        mkdir -p $(DEPDIR)
 
+$(WRAPPERS): $(wildcard ../sdk/*.h)
+       sort $^ | awk -f gen_wrappers.awk > $@
+
 $(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
        mkdir -p $(dir $@)
        mkdir -p $(dir $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d))
@@ -71,5 +77,6 @@ libmlsys.a: $(OBJECTS)
 
 clean:
        rm -f libmlsys.a
+       rm -f $(SRCDIR)/wrappers.c
        find $(OBJDIR) -name \*.o -delete
        find $(DEPDIR) -name \*.d -delete
diff --git a/library/gen_wrappers.awk b/library/gen_wrappers.awk
new file mode 100644 (file)
index 0000000..d7846ee
--- /dev/null
@@ -0,0 +1,46 @@
+BEGIN {
+    FS = ",[ ]*";
+
+    print "/*";
+    print " * wrappers.c (Automatically generated)";
+    print " *";
+    print " * Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>";
+    print " *";
+    print " * This program is free software: you can redistribute it and/or modify";
+    print " * it under the terms of the GNU Affero General Public License as";
+    print " * published by the Free Software Foundation, either version 3 of the";
+    print " * License, or (at your option) any later version.";
+    print " *";
+    print " * This program is distributed in the hope that it will be useful,";
+    print " * but WITHOUT ANY WARRANTY; without even the implied warranty of";
+    print " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the";
+    print " * GNU Affero General Public License for more details.";
+    print " *";
+    print " * You should have received a copy of the GNU Affero General Public License";
+    print " * along with this program.  If not, see <http://www.gnu.org/licenses/>.";
+    print " */";
+    print "";
+    print "#include <sdk/monolithium.h>";
+    print "";
+}
+
+/sysret_t syscall_[a-zA-Z0-9_]+\(.*\);/ {
+    print substr($0, 1, length - 1);
+    print "{";
+
+    match($0, /\(.*\)/);
+    printf "    return syscall(" toupper(substr($0, 10, RSTART - 10));
+
+    $0 = substr($0, RSTART + 1, RLENGTH - 2);
+
+    if ($0 != "void") {
+        for (i = 1; i <= NF; i++) {
+            match($i, /[a-zA-Z0-9_]*$/);
+            printf ", " substr($i, RSTART);
+        }
+    }
+
+    print ");";
+    print "}";
+    print "";
+}
diff --git a/library/src/wrappers.c b/library/src/wrappers.c
deleted file mode 100644 (file)
index 85a30b6..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * wrappers.c (Automatically generated)
- *
- * Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <sdk/monolithium.h>
-
-sysret_t syscall_alloc_memory(handle_t process, void **address, size_t size, dword_t block_flags)
-{
-    return syscall(SYSCALL_ALLOC_MEMORY, process, address, size, block_flags);
-}
-
-sysret_t syscall_clock_get_time(clock_time_t *time)
-{
-    return syscall(SYSCALL_CLOCK_GET_TIME, time);
-}
-
-sysret_t syscall_clock_set_time(clock_time_t *time)
-{
-    return syscall(SYSCALL_CLOCK_SET_TIME, time);
-}
-
-sysret_t syscall_close_object(handle_t handle)
-{
-    return syscall(SYSCALL_CLOSE_OBJECT, handle);
-}
-
-sysret_t syscall_commit_memory(handle_t process, void *address, dword_t size)
-{
-    return syscall(SYSCALL_COMMIT_MEMORY, process, address, size);
-}
-
-sysret_t syscall_connect_pipeline(handle_t handle, access_flags_t access, pipe_connection_t *connection)
-{
-    return syscall(SYSCALL_CONNECT_PIPELINE, handle, access, connection);
-}
-
-sysret_t syscall_create_memory_section(const char *name, handle_t file, size_t size, dword_t flags, handle_t *handle)
-{
-    return syscall(SYSCALL_CREATE_MEMORY_SECTION, name, file, size, flags, handle);
-}
-
-sysret_t syscall_create_pipeline(const char *name, dword_t flags,access_flags_t access,  handle_t *handle)
-{
-    return syscall(SYSCALL_CREATE_PIPELINE, name, flags, access, handle);
-}
-
-sysret_t syscall_create_process(const char *path, dword_t flags, process_params_t *parameters, handle_t *process_handle, handle_t *thread_handle)
-{
-    return syscall(SYSCALL_CREATE_PROCESS, path, flags, parameters, process_handle, thread_handle);
-}
-
-sysret_t syscall_create_semaphore(const char *name, dword_t init_count, dword_t max_count, handle_t *handle)
-{
-    return syscall(SYSCALL_CREATE_SEMAPHORE, name, init_count, max_count, handle);
-}
-
-sysret_t syscall_create_thread(handle_t process, thread_state_t *initial_state, dword_t flags, priority_t priority, handle_t *new_thread)
-{
-    return syscall(SYSCALL_CREATE_THREAD, process, initial_state, flags, priority, new_thread);
-}
-
-sysret_t syscall_create_user(dword_t uid, const char *name, dword_t *password_hash, qword_t privileges)
-{
-    return syscall(SYSCALL_CREATE_USER, uid, name, password_hash, privileges);
-}
-
-sysret_t syscall_delete_file(const char *path)
-{
-    return syscall(SYSCALL_DELETE_FILE, path);
-}
-
-sysret_t syscall_delete_user(dword_t uid)
-{
-    return syscall(SYSCALL_DELETE_USER, uid);
-}
-
-sysret_t syscall_device_ioctl(handle_t device, dword_t control_code, const void *in_buffer, size_t in_length, void *out_buffer, size_t out_length)
-{
-    return syscall(SYSCALL_DEVICE_IOCTL, device, control_code, in_buffer, in_length, out_buffer, out_length);
-}
-
-sysret_t syscall_duplicate_handle(handle_t source_process, handle_t handle, handle_t dest_process, handle_t *duplicate)
-{
-    return syscall(SYSCALL_DUPLICATE_HANDLE, source_process, handle, dest_process, duplicate);
-}
-
-sysret_t syscall_enum_processes(dword_t *pid_array, dword_t *count)
-{
-    return syscall(SYSCALL_ENUM_PROCESSES, pid_array, count);
-}
-
-sysret_t syscall_flush_memory_section(handle_t process, void *address)
-{
-    return syscall(SYSCALL_FLUSH_MEMORY_SECTION, process, address);
-}
-
-sysret_t syscall_free_memory(handle_t process, void *address)
-{
-    return syscall(SYSCALL_FREE_MEMORY, process, address);
-}
-
-sysret_t syscall_freeze_thread(handle_t handle)
-{
-    return syscall(SYSCALL_FREEZE_THREAD, handle);
-}
-
-sysret_t syscall_get_exception_info(exception_info_t *info)
-{
-    return syscall(SYSCALL_GET_EXCEPTION_INFO, info);
-}
-
-sysret_t syscall_get_milliseconds(void)
-{
-    return syscall(SYSCALL_GET_MILLISECONDS);
-}
-
-sysret_t syscall_get_nanoseconds(void)
-{
-    return syscall(SYSCALL_GET_NANOSECONDS);
-}
-
-sysret_t syscall_list_directory(handle_t handle, char *filename, bool_t continue_scan)
-{
-    return syscall(SYSCALL_LIST_DIRECTORY, handle, filename, continue_scan);
-}
-
-sysret_t syscall_listen_pipeline(handle_t handle, dword_t timeout, pipe_connection_t *connection)
-{
-    return syscall(SYSCALL_LISTEN_PIPELINE, handle, timeout, connection);
-}
-
-sysret_t syscall_logon_user(dword_t uid, const char *password)
-{
-    return syscall(SYSCALL_LOGON_USER, uid, password);
-}
-
-sysret_t syscall_map_memory_section(handle_t process, handle_t section, void **address, qword_t offset, size_t size, dword_t flags)
-{
-    return syscall(SYSCALL_MAP_MEMORY_SECTION, process, section, address, offset, size, flags);
-}
-
-sysret_t syscall_mount(const char *device, const char *mountpoint, const char *filesystem, dword_t flags)
-{
-    return syscall(SYSCALL_MOUNT, device, mountpoint, filesystem, flags);
-}
-
-sysret_t syscall_open_file(const char *path, handle_t *handle, dword_t mode, dword_t attributes)
-{
-    return syscall(SYSCALL_OPEN_FILE, path, handle, mode, attributes);
-}
-
-sysret_t syscall_open_memory_section(const char *name, handle_t *handle)
-{
-    return syscall(SYSCALL_OPEN_MEMORY_SECTION, name, handle);
-}
-
-sysret_t syscall_open_pipeline(const char *name, access_flags_t access, handle_t *handle)
-{
-    return syscall(SYSCALL_OPEN_PIPELINE, name, access, handle);
-}
-
-sysret_t syscall_open_process(dword_t pid, handle_t *handle)
-{
-    return syscall(SYSCALL_OPEN_PROCESS, pid, handle);
-}
-
-sysret_t syscall_open_semaphore(const char *name, handle_t *handle)
-{
-    return syscall(SYSCALL_OPEN_SEMAPHORE, name, handle);
-}
-
-sysret_t syscall_open_thread(dword_t tid, handle_t *handle)
-{
-    return syscall(SYSCALL_OPEN_THREAD, tid, handle);
-}
-
-sysret_t syscall_power_control(power_command_t command)
-{
-    return syscall(SYSCALL_POWER_CONTROL, command);
-}
-
-sysret_t syscall_query_file(handle_t handle, file_info_type_t info_type, void *buffer, size_t size)
-{
-    return syscall(SYSCALL_QUERY_FILE, handle, info_type, buffer, size);
-}
-
-sysret_t syscall_query_handle(handle_t handle, handle_info_type_t type, void *buffer, size_t size)
-{
-    return syscall(SYSCALL_QUERY_HANDLE, handle, type, buffer, size);
-}
-
-sysret_t syscall_query_memory(handle_t process, void *address, memory_block_info_t *info)
-{
-    return syscall(SYSCALL_QUERY_MEMORY, process, address, info);
-}
-
-sysret_t syscall_query_process(handle_t handle, process_info_t info_type, void *buffer, dword_t size)
-{
-    return syscall(SYSCALL_QUERY_PROCESS, handle, info_type, buffer, size);
-}
-
-sysret_t syscall_query_thread(handle_t handle, thread_info_t info_type, void *buffer, size_t size)
-{
-    return syscall(SYSCALL_QUERY_THREAD, handle, info_type, buffer, size);
-}
-
-sysret_t syscall_query_user(dword_t uid, user_info_t info_type, void *buffer, dword_t size)
-{
-    return syscall(SYSCALL_QUERY_USER, uid, info_type, buffer, size);
-}
-
-sysret_t syscall_raise_exception(exception_info_t *info)
-{
-    return syscall(SYSCALL_RAISE_EXCEPTION, info);
-}
-
-sysret_t syscall_read_file(handle_t handle, void *buffer, qword_t offset, size_t size, size_t *bytes_read)
-{
-    return syscall(SYSCALL_READ_FILE, handle, buffer, offset, size, bytes_read);
-}
-
-sysret_t syscall_read_memory(handle_t process, void *address, void *buffer, dword_t size)
-{
-    return syscall(SYSCALL_READ_MEMORY, process, address, buffer, size);
-}
-
-sysret_t syscall_read_pipe(handle_t handle, void *buffer, dword_t size, dword_t timeout)
-{
-    return syscall(SYSCALL_READ_PIPE, handle, buffer, size, timeout);
-}
-
-sysret_t syscall_release_semaphore(handle_t semaphore, dword_t count)
-{
-    return syscall(SYSCALL_RELEASE_SEMAPHORE, semaphore, count);
-}
-
-sysret_t syscall_restore_exception_handler(exception_handler_t *old_handler)
-{
-    return syscall(SYSCALL_RESTORE_EXCEPTION_HANDLER, old_handler);
-}
-
-sysret_t syscall_revert_user(void)
-{
-    return syscall(SYSCALL_REVERT_USER);
-}
-
-sysret_t syscall_save_exception_handler(exception_handler_t *old_handler)
-{
-    return syscall(SYSCALL_SAVE_EXCEPTION_HANDLER, old_handler);
-}
-
-sysret_t syscall_set_file(handle_t handle, file_info_type_t set_type, void *buffer, size_t size)
-{
-    return syscall(SYSCALL_SET_FILE, handle, set_type, buffer, size);
-}
-
-sysret_t syscall_set_memory_flags(handle_t process, void *address, dword_t flags)
-{
-    return syscall(SYSCALL_SET_MEMORY_FLAGS, process, address, flags);
-}
-
-sysret_t syscall_set_thread(handle_t handle, thread_info_t info_type, const void *buffer, size_t size)
-{
-    return syscall(SYSCALL_SET_THREAD, handle, info_type, buffer, size);
-}
-
-sysret_t syscall_set_user_id(dword_t uid)
-{
-    return syscall(SYSCALL_SET_USER_ID, uid);
-}
-
-sysret_t syscall_sleep(qword_t milliseconds)
-{
-    return syscall(SYSCALL_SLEEP, milliseconds);
-}
-
-sysret_t syscall_terminate(handle_t handle, dword_t exit_code)
-{
-    return syscall(SYSCALL_TERMINATE, handle, exit_code);
-}
-
-sysret_t syscall_terminate_thread(handle_t thread, dword_t return_value)
-{
-    return syscall(SYSCALL_TERMINATE_THREAD, thread, return_value);
-}
-
-sysret_t syscall_thaw_thread(handle_t handle)
-{
-    return syscall(SYSCALL_THAW_THREAD, handle);
-}
-
-sysret_t syscall_uncommit_memory(handle_t process, void *address, dword_t size)
-{
-    return syscall(SYSCALL_UNCOMMIT_MEMORY, process, address, size);
-}
-
-sysret_t syscall_unmount(const char *device)
-{
-    return syscall(SYSCALL_UNMOUNT, device);
-}
-
-sysret_t syscall_wait_directory_event(handle_t handle, dword_t event_mask, file_event_t *buffer, size_t size, dword_t timeout)
-{
-    return syscall(SYSCALL_WAIT_DIRECTORY_EVENT, handle, event_mask, buffer, size, timeout);
-}
-
-sysret_t syscall_wait_process(handle_t handle, dword_t timeout)
-{
-    return syscall(SYSCALL_WAIT_PROCESS, handle, timeout);
-}
-
-sysret_t syscall_wait_semaphore(handle_t semaphore, dword_t count, dword_t timeout)
-{
-    return syscall(SYSCALL_WAIT_SEMAPHORE, semaphore, count, timeout);
-}
-
-sysret_t syscall_wait_thread(handle_t handle, dword_t timeout)
-{
-    return syscall(SYSCALL_WAIT_THREAD, handle, timeout);
-}
-
-sysret_t syscall_write_file(handle_t handle, const void *buffer, qword_t offset, size_t size, size_t *bytes_written)
-{
-    return syscall(SYSCALL_WRITE_FILE, handle, buffer, offset, size, bytes_written);
-}
-
-sysret_t syscall_write_memory(handle_t process, void *address, void *buffer, dword_t size)
-{
-    return syscall(SYSCALL_WRITE_MEMORY, process, address, buffer, size);
-}
-
-sysret_t syscall_write_pipe(handle_t handle, void *buffer, dword_t size)
-{
-    return syscall(SYSCALL_WRITE_PIPE, handle, buffer, size);
-}
-
-sysret_t syscall_yield_quantum(void)
-{
-    return syscall(SYSCALL_YIELD_QUANTUM);
-}
-
index e4b838f98713e8789cbe9ecd5811ac13745a3cb3..d3113df9e7da10afbc7011304b6bbe0beb15e05a 100644 (file)
@@ -28,4 +28,7 @@ typedef struct
     byte_t day, month, hours, minutes, seconds;
 } clock_time_t;
 
+sysret_t syscall_clock_get_time(clock_time_t *time);
+sysret_t syscall_clock_set_time(clock_time_t *time);
+
 #endif
index 00f1fee188c35dee36a7a8e9ccdafa198a5b7ce8..a72310932f3dff80e504b97f8b7a9d8418b44af3 100644 (file)
 #include "list.h"
 #include "memory.h"
 #include "object.h"
+#include "pipe.h"
 #include "power.h"
 #include "process.h"
 #include "sync.h"
 #include "syscalls.h"
 #include "thread.h"
+#include "timer.h"
 #include "user.h"
diff --git a/sdk/timer.h b/sdk/timer.h
new file mode 100644 (file)
index 0000000..23c8662
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * timer.h
+ *
+ * Copyright 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __MONOLITIHUM_TIMER_H__
+#define __MONOLITIHUM_TIMER_H__
+
+#include "defs.h"
+
+sysret_t syscall_get_milliseconds(void);
+sysret_t syscall_get_nanoseconds(void);
+
+#endif