liblinux++

A hosted C++ runtime without any libc.
git clone git://henryandlizzy.uk/liblinux++
Log | Files | Refs

commit e3c35dc7aa1a22f744d4aaaaea08f2365d9b0d36
parent 09504ff0b7b080108faeda3c94982aaa429b6885
Author: Henry Wilson <henry@henryandlizzy.uk>
Date:   Mon, 29 Dec 2025 15:50:19 +0000

Add unlinkat

Diffstat:
Maarch64.s | 6++++++
Mlinux.hpp | 7+++++++
Aunlink.cpp | 7+++++++
Mx86_64.s | 6++++++
4 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/aarch64.s b/aarch64.s @@ -1,3 +1,5 @@ +# Syscall numbers https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#arm64-64-bit + .global start .text @@ -28,6 +30,10 @@ extern_alias \name .text .global exit +extern unlinkat +extern_alias _Z8unlinkat4file5c_str12unlink_flags +syscall 35 + extern getdents64 extern_alias _Z10getdents644fileP14linux_dirent64m syscall 61 diff --git a/linux.hpp b/linux.hpp @@ -189,3 +189,10 @@ enum class rename_flags : unsigned int }; extern syscall_result<void> renameat2(file olddir, c_str oldpath, file newdir, c_str newpath, rename_flags flags) noexcept; + +enum class unlink_flags : int +{ + REMOVEDIR = 0x200, +}; + +extern syscall_result<void> unlinkat(file dir, c_str path, unlink_flags flags); diff --git a/unlink.cpp b/unlink.cpp @@ -0,0 +1,7 @@ +#include "linux.hpp" + +int main(int argc, char* argv[]) +{ + for (int i = 1; i < argc; ++i) + *unlinkat(AT_FDCWD, argv[i], {}); +} diff --git a/x86_64.s b/x86_64.s @@ -1,3 +1,5 @@ +# Syscall numbers https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/#x86_64-64-bit + .intel_syntax noprefix .global start @@ -86,6 +88,10 @@ extern openat extern_alias _Z6openat4file5c_strii _syscall 257 syscall6 +extern unlinkat +extern_alias _Z8unlinkat4file5c_str12unlink_flags +_syscall 263 syscall3 + extern renameat extern_alias _Z9renameat24file5c_strS_S0_12rename_flags _syscall 316 syscall6