summaryrefslogtreecommitdiff
path: root/chapter28b/src/main/smp/sys/libc.smp
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-24 15:23:20 -0700
committerCliff Click <cliffc@acm.org>2026-10-24 15:23:20 -0700
commitf49b184a093ab5f653ac36ccc4939c45515a2f4b (patch)
tree36b7b0b688a6b03ceb1412fc45f79f32e7540002 /chapter28b/src/main/smp/sys/libc.smp
parenta216a23bbd4d6e05a40d86ec8e76c038e945f3ba (diff)
downloadSimple-f49b184a093ab5f653ac36ccc4939c45515a2f4b.tar.gz
Simple-f49b184a093ab5f653ac36ccc4939c45515a2f4b.zip
Move combined chapter 25 baseline to chapter 28b
Diffstat (limited to 'chapter28b/src/main/smp/sys/libc.smp')
-rw-r--r--chapter28b/src/main/smp/sys/libc.smp44
1 files changed, 44 insertions, 0 deletions
diff --git a/chapter28b/src/main/smp/sys/libc.smp b/chapter28b/src/main/smp/sys/libc.smp
new file mode 100644
index 00000000..17ee65cb
--- /dev/null
+++ b/chapter28b/src/main/smp/sys/libc.smp
@@ -0,0 +1,44 @@
+
+// libc bindings:
+// https://www.man7.org/linux/man-pages/man2/<libc call>.2.html
+
+// The buffers are int-versions of zero-terminated strings.
+// int buf = aryu8.str0("some_file");
+// buf mode perm-> fd
+{ i64 i32 i32 -> i32 } open = "C";
+// buf perm -> fd
+{ i64 i32 -> i32 } creat = "C";
+
+// fd buf len -> len
+{ i32 i64 u32 -> i32 } write = "C";
+// fd buf len -> len
+{ i32 i64 u32 -> i32 } read = "C";
+// fd -> err
+{ i32 -> i32 } close = "C";
+// path -> err
+{ i64 -> i32 } unlink = "C";
+
+i32 O_RDONLY = 0;
+i32 O_WRONLY = 1;
+i32 O_RDWR = 2;
+i32 O_CREAT = 512; // 02000 on x86_64-pc-cygwin
+i32 O_TRUNC = 1024; // 04000 on x86_64-pc-cygwin
+
+i32 STDIN = 0;
+i32 STDOUT = 1;
+i32 STDERR = 2;
+
+// status
+{ i32 -> i32 } _exit = "C";
+// errno is not an ordinary C data symbol; read it through the native runtime.
+{ i32 } simple_errno = "C";
+val errno = { -> simple_errno(); };
+// addr len prot flags fd off -> void*
+{ i64 i64 i32 i32 i32 i32 -> i64 } mmap = "C";
+// mmap flags
+i32 PROT_EXEC = 4;
+i32 PROT_READ = 1;
+i32 PROT_WRITE= 2;
+i32 PROT_NONE = 0;
+i32 MAP_PRIVATE = 2;
+i32 MAP_ANON = 32;