]> git.ameliathe1st.gay Git - voyage-au-centre-des-fichiers.git/commitdiff
Fixed code and doc a tiny bit
authorAmelia Coutard <eliottulio.coutard@gmail.com>
Tue, 1 Aug 2023 22:21:36 +0000 (00:21 +0200)
committerAmelia Coutard <eliottulio.coutard@gmail.com>
Tue, 1 Aug 2023 22:21:36 +0000 (00:21 +0200)
doc.txt
kernel/src/elf64.cpp
kernel/src/ring3.hpp

diff --git a/doc.txt b/doc.txt
index 307d7f890b40728c8a95db576931d76768eb17fb..142373f5c86c1e6b792a6d6b5dabc4e826b932f8 100644 (file)
--- a/doc.txt
+++ b/doc.txt
@@ -41,9 +41,10 @@ struct handler {
 
 The system calls:
 
-Input and output registers in order: %rdi, %rsi, %rdx, %r10, %r8, %r9.
+Input registers in order: %rdi, %rsi, %rdx, %r10, %r8, %r9.
 In %rax, the syscall id is specified.
 If the operation succeeds, %rax contains the result (think SystemV ABI) (≥ 0). If it fails, %rax contains the opposite of the error code. (< 0)
+The only registers clobbered are %rcx, %r11, %rax, %rdx. (The last two are the return registers.)
 
 sport_t make_sport();
        Creates a server port, with no associated clients.
index c129d075677a1cca90b512fb7494ea5090d23f57..88fbf299e5624d62c5b581ed2d29ff1dab13d746 100644 (file)
@@ -36,8 +36,17 @@ void os::elf::load_elf(os::process& result, std::byte* start, std::size_t length
        result.PML4T = phys_ptr<paging::PML4T>(os::paging::page_allocator.allocate(1).ptr.get_phys_addr());
        result.rip = std::uint64_t(elf_header.entry);
        result.rsp = std::uint64_t(stack + stack_size);
+       result.rax = 0;
        result.rbx = 0;
+       result.rcx = 0;
+       result.rdx = 0;
        result.rbp = 0;
+       result.rsi = 0;
+       result.rdi = 0;
+       result.r8 = 0;
+       result.r9 = 0;
+       result.r10 = 0;
+       result.r11 = 0;
        result.r12 = 0;
        result.r13 = 0;
        result.r14 = 0;
index 49069bfff03326c3bb19086ce3179165e5c869eb..32e17ed4304218f80fd7962c9372e497eefbc8a4 100644 (file)
@@ -80,9 +80,7 @@ struct process {
        std::uint64_t r15;
        std::uint64_t rip;
        port ports[2043];
-       char padding[16];
 };
-static_assert(sizeof(process) == 4096 * 16);
 static_assert(0xFFFF'C000'0000'0000 + sizeof(process) * 2048 < 0xFFFF'FFFF'8000'0000);
 
 extern "C" process& get_process(std::uint64_t pid);