Skip to content

Commit 40ebab8

Browse files
committed
vfs: bug fixes
1 parent 43063b8 commit 40ebab8

22 files changed

Lines changed: 515 additions & 323 deletions

File tree

kernel/include/libc/elf.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,19 @@ typedef struct
170170
#define ELF64_R_SYM(i) ((i) >> 32)
171171
#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
172172

173+
#define R_X86_64_NONE 0
173174
#define R_X86_64_64 1
175+
#define R_X86_64_COPY 5
174176
#define R_X86_64_GLOB_DAT 6
175177
#define R_X86_64_JUMP_SLOT 7
176178
#define R_X86_64_RELATIVE 8
177179

180+
#define R_AARCH64_NONE 0
181+
#define R_AARCH64_COPY 1024
182+
#define R_AARCH64_GLOB_DAT 1025
183+
#define R_AARCH64_JUMP_SLOT 1026
184+
#define R_AARCH64_RELATIVE 1027
185+
178186
#define AT_NULL 0
179187
#define AT_IGNORE 1
180188
#define AT_EXECFD 2

kernel/interfaces/arch/x86_64/drivers/output/e9.cppm

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,5 @@ export module x86_64.drivers.output.e9;
44

55
export namespace x86_64::output::e9
66
{
7-
void printc(char chr);
87
void init();
98
} // export namespace x86_64::output::e9

kernel/interfaces/boot/boot.cppm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export namespace boot
4444
};
4545

4646
[[gnu::used, gnu::section(".limine_requests")]]
47-
volatile std::uint64_t limine_base_revision[] = LIMINE_BASE_REVISION(5);
47+
volatile std::uint64_t limine_base_revision[] = LIMINE_BASE_REVISION(6);
4848

4949
namespace requests
5050
{

kernel/interfaces/drivers/fs/dev/dev.cppm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
export module drivers.fs.dev;
44

5-
export import drivers.fs.dev.mem;
5+
// export import drivers.fs.dev.mem;
66
export import drivers.fs.dev.pty;
77
export import drivers.fs.dev.tty;

kernel/interfaces/drivers/fs/dev/mem.cppm

Lines changed: 0 additions & 11 deletions
This file was deleted.

kernel/interfaces/drivers/fs/devtmpfs.cppm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ export namespace fs::devtmpfs
1010
{
1111
lib::initgraph::stage *registered_stage();
1212
lib::initgraph::stage *mounted_stage();
13+
14+
lib::expect<void> create(lib::path path, mode_t mode, dev_t rdev = 0);
1315
} // export namespace fs::devtmpfs

kernel/interfaces/drivers/fs/tmpfs.cppm

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,17 @@ export namespace fs::tmpfs
2323
return instance;
2424
}
2525

26-
lib::expect<std::size_t> read(std::shared_ptr<vfs::file> file, std::uint64_t offset, lib::maybe_uspan<std::byte> buffer) override;
27-
lib::expect<std::size_t> write(std::shared_ptr<vfs::file> file, std::uint64_t offset, lib::maybe_uspan<std::byte> buffer) override;
28-
lib::expect<void> trunc(std::shared_ptr<vfs::file> file, std::size_t size) override;
26+
lib::expect<std::size_t> read(
27+
std::shared_ptr<vfs::file> file, std::uint64_t offset,
28+
lib::maybe_uspan<std::byte> buffer
29+
) override;
30+
31+
lib::expect<std::size_t> write(
32+
std::shared_ptr<vfs::file> file, std::uint64_t offset,
33+
lib::maybe_uspan<std::byte> buffer
34+
) override;
2935

30-
lib::expect<std::size_t> getdents(std::shared_ptr<vfs::file> file, std::uint64_t &offset, lib::maybe_uspan<std::byte> buffer) override;
36+
lib::expect<void> trunc(std::shared_ptr<vfs::file> file, std::size_t size) override;
3137

3238
lib::expect<vmm::object::ptr> map(std::shared_ptr<vfs::file> file) override;
3339
};
@@ -36,12 +42,28 @@ export namespace fs::tmpfs
3642
{
3743
struct instance : vfs::filesystem::instance, std::enable_shared_from_this<instance>
3844
{
39-
auto create(std::shared_ptr<vfs::inode> &parent, std::string_view name, mode_t mode, dev_t rdev) -> lib::expect<std::shared_ptr<vfs::inode>> override;
40-
auto symlink(std::shared_ptr<vfs::inode> &parent, std::string_view name, lib::path target) -> lib::expect<std::shared_ptr<vfs::inode>> override;
41-
auto link(std::shared_ptr<vfs::inode> &parent, std::string_view name, std::shared_ptr<vfs::inode> target) -> lib::expect<std::shared_ptr<vfs::inode>> override;
45+
auto create(
46+
std::shared_ptr<vfs::inode> &parent,
47+
std::string_view name, mode_t mode, dev_t rdev
48+
) -> lib::expect<std::shared_ptr<vfs::inode>> override;
49+
50+
auto symlink(
51+
std::shared_ptr<vfs::inode> &parent,
52+
std::string_view name, lib::path target
53+
) -> lib::expect<std::shared_ptr<vfs::inode>> override;
54+
55+
auto link(
56+
std::shared_ptr<vfs::inode> &parent,
57+
std::string_view name, std::shared_ptr<vfs::inode> target
58+
) -> lib::expect<std::shared_ptr<vfs::inode>> override;
59+
4260
auto unlink(std::shared_ptr<vfs::inode> &node) -> lib::expect<void> override;
4361

44-
auto populate(std::shared_ptr<vfs::inode> &node, std::string_view name = "") -> lib::expect<lib::list<std::pair<std::string, std::shared_ptr<vfs::inode>>>> override;
62+
auto readdir(std::shared_ptr<vfs::dentry> dir, std::size_t cookie)
63+
-> lib::expect<lib::list<vfs::dir_entry>> override;
64+
65+
auto lookup(std::shared_ptr<vfs::dentry> dir,std::string_view name)
66+
-> lib::expect<std::optional<vfs::dir_entry>> override;
4567

4668
auto write_inode(std::shared_ptr<vfs::inode> &inode) -> lib::expect<void> override;
4769
auto dirty_inode(std::shared_ptr<vfs::inode> &inode) -> lib::expect<void> override;

kernel/interfaces/lib/error.cppm

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export namespace lib
3131
no_such_device,
3232
invalid_device_or_address,
3333
invalid_mount,
34+
invalid_path,
3435
invalid_symlink,
3536
invalid_flags,
3637
invalid_type,
@@ -93,6 +94,7 @@ export namespace lib
9394
case err::invalid_device_or_address:
9495
return ENXIO;
9596
case err::invalid_mount:
97+
case err::invalid_path:
9698
case err::invalid_symlink:
9799
case err::invalid_flags:
98100
case err::invalid_type:

kernel/interfaces/lib/log.cppm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ export namespace lib::log
5454
{
5555
void (*prints)(std::string_view str);
5656

57-
void (*start)();
58-
void (*stop)();
57+
void (*lock)();
58+
void (*unlock)();
5959

6060
logger *next;
6161

62-
constexpr logger(auto prints, auto start, auto stop)
63-
: prints { prints }, start { start }, stop { stop }, next { nullptr } { }
62+
constexpr logger(auto prints, auto lock, auto unlock)
63+
: prints { prints }, lock { lock }, unlock { unlock }, next { nullptr } { }
6464
};
6565

6666
void register_logger(logger *lg);

kernel/interfaces/lib/spinlock.cppm

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import std;
66

77
namespace lib::lock
88
{
9-
bool acquire_irq();
10-
void release_irq(bool irq);
9+
void acquire_irq();
10+
void release_irq();
1111

1212
void acquire_preempt();
1313
void release_preempt();
@@ -98,18 +98,15 @@ export namespace lib
9898
template<>
9999
class spinlock_base<lock_type::irq> : public spinlock_base<lock_type::none>
100100
{
101-
private:
102-
bool _interrupts;
103-
104101
public:
105102
constexpr spinlock_base()
106-
: spinlock_base<lock_type::none> { }, _interrupts { false } { }
103+
: spinlock_base<lock_type::none> { } { }
107104

108105
using spinlock_base<lock_type::none>::spinlock_base;
109106

110107
void lock()
111108
{
112-
_interrupts = lock::acquire_irq();
109+
lock::acquire_irq();
113110
spinlock_base<lock_type::none>::lock();
114111
}
115112

@@ -118,7 +115,7 @@ export namespace lib
118115
if (!spinlock_base<lock_type::none>::unlock())
119116
return false;
120117

121-
lock::release_irq(_interrupts);
118+
lock::release_irq();
122119
return true;
123120
}
124121
};

0 commit comments

Comments
 (0)