Commit Graph

770 Commits

Author SHA1 Message Date
2230ebd969 Wrap math.h around builtins 2022-11-06 21:37:00 +01:00
472192bcf2 libc: Define LC_NUMERIC 2022-11-06 20:47:16 +01:00
78ee6ce34a libc: Stub out scanf() 2022-11-06 20:47:07 +01:00
c9e20fd38e Why are there so many errno values 2022-11-06 20:46:34 +01:00
2eeef9581f libc: Add strxfrm() 2022-11-06 19:56:36 +01:00
2e9348181d Tests: Add tests for strcmp() and strncmp() 2022-11-06 19:51:56 +01:00
5d94525c7a Kernel: Figure out why a program is misbehaving 2022-11-06 18:12:25 +01:00
c6ce7a5358 libc: Add bsearch (with a test!!) 2022-11-06 17:34:35 +01:00
1025248cc7 libc: Add qsort (with a test!!) 2022-11-06 17:16:08 +01:00
44815b08c7 Kernel: Use copy_from_user() and copy_to_user() in read/write
This is huge. Finally, we can do proper reads/writes with invalid addresses, or big buffers.
2022-11-06 15:19:23 +01:00
04ae97a6ec libc: Add difftime() 2022-11-06 15:09:38 +01:00
2980ee3973 libc: Make fread() and fwrite() less awkward 2022-11-06 14:53:05 +01:00
88011fc162 init: Use fread() properly 2022-11-06 14:52:50 +01:00
40b078e0a2 libc: Make fread/fwrite return the number of items read/written instead of the number of bytes 2022-11-06 14:46:22 +01:00
d7692a7f59 libc: Rename fold() to lowercase() in strcasecmp and strncasecmp 2022-11-06 14:45:58 +01:00
da182f1c2f libc: Add mktemp() and mkdtemp(), along with a test for mktemp 2022-11-05 18:07:45 +01:00
b2fb740d99 Kernel: Refuse to mkdir any directory named . or .. 2022-11-05 12:09:01 +01:00
b78f6f269d Kernel: Omit displaying KernelHeap's buffer location in the log 2022-11-05 11:59:00 +01:00
cedefaf93d libc: Exit with -errno if we fail initialization 2022-11-05 11:56:31 +01:00
9ab3ab7c40 Kernel: Show init's exit status before restarting 2022-11-05 11:56:16 +01:00
b63a9f5ba9 Kernel: Improve strdup_from_user and add copy to and from user
Still a bit funky, that's why we're not using it in read() and write() yet.
2022-11-05 11:54:55 +01:00
67f536cf91 Kernel: Split number-parsing code into a separate file 2022-11-05 10:50:58 +01:00
d0efc106b0 Kernel: Add UBSAN (Undefined Behaviour Sanitizer) 2022-11-05 10:47:18 +01:00
ffcaac0ca3 Kernel: Add validate_user_write() and validate_user_read()
Not at copy_from_user and copy_to_user yet, but an improvement over blindly using physical memory.
2022-11-04 22:46:48 +01:00
cbc2e76082 Remove the .elf suffix from the kernel filename 2022-11-03 20:44:37 +01:00
e5b2641019 Kernel: Enforce W^X when loading executables
From now on, if an executable contains segments that
want to be loaded as both writable and executable,
we refuse and abort with ENOEXEC.
2022-11-03 20:28:54 +01:00
2c08de044f Kernel, libc: Add support for querying the framebuffer's scanline via ioctl() 2022-11-03 20:20:22 +01:00
71633e264f Kernel: Make the serial port writable for everyone :) 2022-11-03 17:13:32 +01:00
979569eb5a Ports: Refactor the NASM port's package script a bit 2022-11-03 17:06:27 +01:00
3b86f87c76 libc: Support %i in printf()
Which is the same as %d.
2022-11-03 16:53:19 +01:00
2cfefc25cc libc: Stub out rename() 2022-11-03 16:52:41 +01:00
0fd31698b2 Kernel: Accept not opened file descriptors in dup2()
This involves renaming the descriptor_from_fd function to the more appropriately named
open_descriptor_from_fd (since we check if the descriptor was opened and error out otherwise),
and creating a new function that does not verify that the file descriptor was opened.
2022-11-03 16:52:21 +01:00
7afbff08b6 apps: Add a little screen utility
It tells you the resolution of your screen :)
2022-11-02 21:00:23 +01:00
249c79f8a3 Kernel, libc: Add ioctl()
Right now, only the framebuffer supports this system call, to query its dimensions.
2022-11-02 20:59:42 +01:00
feab66c0d3 Kernel: Remove the paint() system call
That was a very old one from back in the old days. Now that the framebuffer is finally a device file,
and it can be memory-mapped by user programs for more performance,
this syscall is MORE than obsolete.
2022-11-02 20:35:06 +01:00
8f2308c80d Kernel: Implement mmap-able device files (regular files are not mmap-able yet) 2022-11-02 20:24:07 +01:00
42a805fd60 Kernel: Move the translated keyboard to /dev/console and make /dev/kbd provide raw scancodes 2022-11-02 19:51:54 +01:00
c604c074a1 Kernel: Rename ASSERT() to ensure()
Doesn't get stripped on release builds, so it shouldn't be named assert.
2022-11-02 19:38:15 +01:00
e5cf32c7b3 Kernel: Introduce page ownership
Some pages, such as framebuffer pages, are not physical memory frames reserved for the current process.
Some, such as the framebuffer, may be shared between all processes.
Yet, on exit() or on exec(), a process frees all frames mapped into its address spaces.
And on fork(), it copies all data between frames. So how could we map framebuffers.

Simple: we use one of the bits in page table entries which are available to the OS, and mark whether that page is owned by the current process.

If it is owned, it will be:
- Freed on address space destruction
- Its data will be copied to a new page owned by the child process on fork()

If it is not owned, it will be:
- Left alone on address space destruction
- On fork(), the child's virtual page will be mapped to the same physical frame as the parent

This still needs a bit more work, such as keeping a reference of how many processes use a page to free it when all processes using it exit/exec.
This should be done for MAP_SHARED mappings, for example, since they are not permanent forever,
unlike the framebuffer for example.
2022-11-02 19:32:28 +01:00
875d971d3b Tools: Make list-ports.sh exit when ports.list does not exist 2022-11-02 18:53:47 +01:00
dfcc827103 libc: Add PROT_EXEC 2022-11-02 18:40:05 +01:00
07e518c38f Kernel: Make sys_mmap log the correct prot value 2022-11-02 18:39:58 +01:00
22740e69bf Kernel: Add support for the NX bit
Not support, actually. We now REQUIRE it.
2022-11-02 18:34:57 +01:00
534500cda0 Implement enough runtime for binutils to compile 2022-10-31 12:29:53 +01:00
497a52dd82 apps: add a little mkdir utility 2022-10-31 09:53:52 +01:00
c2a08060cf VFS: Add support for an implementation-defined value 2022-10-30 20:53:45 +01:00
5eae93bbb0 Bugfix: do not crash if we are blocking for no reason 2022-10-30 20:51:32 +01:00
aabff7a1d3 libc: Add mktime() 2022-10-30 20:46:25 +01:00
45f40a31d6 Remove old FIXME 2022-10-30 20:40:53 +01:00
f83c78bcad libc: Implement gettimeofday() and instantly mark it as deprecated 2022-10-30 20:40:05 +01:00