Compare commits

..

4 commits

Author SHA1 Message Date
Imbus
9d0123f43e Moving header include inside __ASSEMBLER__ guard to fix assembler error 2024-08-07 07:11:35 +02:00
Imbus
11b52f63c1 Trace syscall WIP 2024-08-07 06:39:09 +02:00
Imbus
a14ba848b3 Header guards (#pragma once) for all kernel headers 2024-08-07 06:35:06 +02:00
Imbus
ada9625a1b Clearer syscall array in syscall.c 2024-08-07 05:54:40 +02:00
20 changed files with 85 additions and 7 deletions

View file

@ -1,3 +1,9 @@
#pragma once
#include "types.h"
#include "sleeplock.h"
#include "fs.h"
struct buf { struct buf {
int valid; // has data been read from disk? int valid; // has data been read from disk?
int disk; // does disk "own" buf? int disk; // does disk "own" buf?

View file

@ -1,3 +1,8 @@
#pragma once
#include "riscv.h"
#include "types.h"
struct buf; struct buf;
struct context; struct context;
struct file; struct file;

View file

@ -1,3 +1,7 @@
#pragma once
#include "types.h"
// Format of an ELF executable file // Format of an ELF executable file
#define ELF_MAGIC 0x464C457FU // "\x7FELF" in little endian #define ELF_MAGIC 0x464C457FU // "\x7FELF" in little endian

View file

@ -1,3 +1,5 @@
#pragma once
#define O_RDONLY 0x000 #define O_RDONLY 0x000
#define O_WRONLY 0x001 #define O_WRONLY 0x001
#define O_RDWR 0x002 #define O_RDWR 0x002

View file

@ -1,3 +1,9 @@
#pragma once
#include "types.h"
#include "sleeplock.h"
#include "fs.h"
struct file { struct file {
enum { FD_NONE, FD_PIPE, FD_INODE, FD_DEVICE } type; enum { FD_NONE, FD_PIPE, FD_INODE, FD_DEVICE } type;
int ref; // reference count int ref; // reference count

View file

@ -1,3 +1,7 @@
#pragma once
#include "types.h"
// On-disk file system format. // On-disk file system format.
// Both the kernel and user programs use this header file. // Both the kernel and user programs use this header file.

View file

@ -1,3 +1,5 @@
#pragma once
// Physical memory layout // Physical memory layout
// qemu -machine virt is set up like this, // qemu -machine virt is set up like this,

View file

@ -1,3 +1,5 @@
#pragma once
#define NPROC 64 // maximum number of processes #define NPROC 64 // maximum number of processes
#define NCPU 8 // maximum number of CPUs #define NCPU 8 // maximum number of CPUs
#define NOFILE 16 // open files per process #define NOFILE 16 // open files per process

View file

@ -1,3 +1,10 @@
#pragma once
#include "types.h"
#include "param.h"
#include "riscv.h"
#include "spinlock.h"
// Saved registers for kernel context switches. // Saved registers for kernel context switches.
struct context { struct context {
u64 ra; u64 ra;
@ -104,4 +111,5 @@ struct proc {
struct file *ofile[NOFILE]; // Open files struct file *ofile[NOFILE]; // Open files
struct inode *cwd; // Current directory struct inode *cwd; // Current directory
char name[16]; // Process name (debugging) char name[16]; // Process name (debugging)
int mask; // Process mask
}; };

View file

@ -1,5 +1,9 @@
#pragma once
#ifndef __ASSEMBLER__ #ifndef __ASSEMBLER__
#include "types.h"
// which hart (core) is this? // which hart (core) is this?
static inline u64 static inline u64
r_mhartid() r_mhartid()

View file

@ -1,3 +1,8 @@
#pragma once
#include "types.h"
#include "spinlock.h"
// Long-term locks for processes // Long-term locks for processes
struct sleeplock { struct sleeplock {
u32 locked; // Is the lock held? u32 locked; // Is the lock held?

View file

@ -1,3 +1,7 @@
#pragma once
#include "types.h"
// Mutual exclusion lock. // Mutual exclusion lock.
struct spinlock { struct spinlock {
u32 locked; // Is the lock held? u32 locked; // Is the lock held?

View file

@ -1,3 +1,7 @@
#pragma once
#include "types.h"
#define T_DIR 1 // Directory #define T_DIR 1 // Directory
#define T_FILE 2 // File #define T_FILE 2 // File
#define T_DEVICE 3 // Device #define T_DEVICE 3 // Device

View file

@ -101,16 +101,17 @@ extern u64 sys_unlink(void);
extern u64 sys_link(void); extern u64 sys_link(void);
extern u64 sys_mkdir(void); extern u64 sys_mkdir(void);
extern u64 sys_close(void); extern u64 sys_close(void);
extern u64 sys_trace(void);
// An array mapping syscall numbers from syscall.h // An array mapping syscall numbers from syscall.h
// to the function that handles the system call. // to the function that handles the system call.
static u64 (*syscalls[])(void) = { static u64 (*syscalls[])(void) = {
[SYS_fork] sys_fork, [SYS_exit] sys_exit, [SYS_wait] sys_wait, [SYS_pipe] sys_pipe, [SYS_fork] = sys_fork, [SYS_exit] = sys_exit, [SYS_wait] = sys_wait, [SYS_pipe] = sys_pipe,
[SYS_read] sys_read, [SYS_kill] sys_kill, [SYS_exec] sys_exec, [SYS_fstat] sys_fstat, [SYS_read] = sys_read, [SYS_kill] = sys_kill, [SYS_exec] = sys_exec, [SYS_fstat] = sys_fstat,
[SYS_chdir] sys_chdir, [SYS_dup] sys_dup, [SYS_getpid] sys_getpid, [SYS_sbrk] sys_sbrk, [SYS_chdir] = sys_chdir, [SYS_dup] = sys_dup, [SYS_getpid] = sys_getpid, [SYS_sbrk] = sys_sbrk,
[SYS_sleep] sys_sleep, [SYS_uptime] sys_uptime, [SYS_open] sys_open, [SYS_write] sys_write, [SYS_sleep] = sys_sleep, [SYS_uptime] = sys_uptime, [SYS_open] = sys_open, [SYS_write] = sys_write,
[SYS_mknod] sys_mknod, [SYS_unlink] sys_unlink, [SYS_link] sys_link, [SYS_mkdir] sys_mkdir, [SYS_mknod] = sys_mknod, [SYS_unlink] = sys_unlink, [SYS_link] = sys_link, [SYS_mkdir] = sys_mkdir,
[SYS_close] sys_close, [SYS_close] = sys_close, [SYS_trace] = sys_trace,
}; };
void void

View file

@ -1,3 +1,5 @@
#pragma once
// System call numbers // System call numbers
#define SYS_fork 1 #define SYS_fork 1
#define SYS_exit 2 #define SYS_exit 2
@ -20,3 +22,4 @@
#define SYS_link 19 #define SYS_link 19
#define SYS_mkdir 20 #define SYS_mkdir 20
#define SYS_close 21 #define SYS_close 21
#define SYS_trace 22

View file

@ -89,3 +89,10 @@ sys_uptime(void)
release(&tickslock); release(&tickslock);
return xticks; return xticks;
} }
u64
sys_trace(void)
{
/* TODO: Implement sys_trace */
return 0;
}

View file

@ -1,3 +1,5 @@
#pragma once
typedef unsigned char u8; typedef unsigned char u8;
typedef unsigned short u16; typedef unsigned short u16;
typedef unsigned int u32; typedef unsigned int u32;

View file

@ -1,4 +1,7 @@
// #pragma once
#include "types.h"
// virtio device definitions. // virtio device definitions.
// for both the mmio interface, and virtio descriptors. // for both the mmio interface, and virtio descriptors.
// only tested with qemu. // only tested with qemu.

View file

@ -1,3 +1,7 @@
#pragma once
#include "../kernel/types.h"
struct stat; struct stat;
// system calls // system calls
@ -22,6 +26,7 @@ int getpid(void);
char *sbrk(int); char *sbrk(int);
int sleep(int); int sleep(int);
int uptime(void); int uptime(void);
int trace(int);
// ulib.c // ulib.c
int stat(const char *, struct stat *); int stat(const char *, struct stat *);

View file

@ -36,3 +36,4 @@ entry("getpid");
entry("sbrk"); entry("sbrk");
entry("sleep"); entry("sleep");
entry("uptime"); entry("uptime");
entry("trace");