summaryrefslogtreecommitdiff
path: root/src/kernel/arch/i386/registers.h
diff options
context:
space:
mode:
authordzwdz2022-05-05 22:12:55 +0200
committerdzwdz2022-05-05 22:12:55 +0200
commit9900cc737988f25db30b5876f066a78e73389205 (patch)
tree1bba6cfbe118855ba3d338aa3d881da3aa15ca9e /src/kernel/arch/i386/registers.h
parent740cacba5befeba212935b00f8ae95008f564293 (diff)
kernel: syscalls now have to explicitly save the return value
thus they can opt out of doing that so the calls which might return immediately but can return later don't have to both regs_savereturn and return to the caller. and because of that, the return values of a lot of VFS things have just got way saner
Diffstat (limited to 'src/kernel/arch/i386/registers.h')
-rw-r--r--src/kernel/arch/i386/registers.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/kernel/arch/i386/registers.h b/src/kernel/arch/i386/registers.h
index 8bd090d..9f481d3 100644
--- a/src/kernel/arch/i386/registers.h
+++ b/src/kernel/arch/i386/registers.h
@@ -14,7 +14,8 @@ struct registers {
} __attribute__((__packed__));
// saves a return value according to the SysV ABI
-static inline void regs_savereturn(struct registers *regs, uint64_t value) {
+static inline uint64_t regs_savereturn(struct registers *regs, uint64_t value) {
regs->eax = value;
regs->edx = value >> 32;
+ return value;
}