[COMMIT osv master] libc: implement posix_madvise

8 views
Skip to first unread message

Commit Bot

unread,
Jan 2, 2022, 1:13:28 AM1/2/22
to osv...@googlegroups.com, Waldemar Kozaczuk
From: Waldemar Kozaczuk <jwkoz...@gmail.com>
Committer: Waldemar Kozaczuk <jwkoz...@gmail.com>
Branch: master

libc: implement posix_madvise

Some apps/runtimes like dotnet call posix_madvise
which we do not implement. This patch adds a simple
implementation of it based on madvise with a difference
that only POSIX_MADV_DONTNEED is supported. On top of
this as required posix_madvise() returns an error without
setting errno.

Signed-off-by: Waldemar Kozaczuk <jwkoz...@gmail.com>

---
diff --git a/exported_symbols/osv_ld-musl.so.1.symbols b/exported_symbols/osv_ld-musl.so.1.symbols
--- a/exported_symbols/osv_ld-musl.so.1.symbols
+++ b/exported_symbols/osv_ld-musl.so.1.symbols
@@ -722,6 +722,7 @@ posix_fadvise64
posix_fallocate
posix_fallocate64
__posix_getopt
+posix_madvise
posix_memalign
pow
pow10
diff --git a/exported_symbols/osv_libc.so.6.symbols b/exported_symbols/osv_libc.so.6.symbols
--- a/exported_symbols/osv_libc.so.6.symbols
+++ b/exported_symbols/osv_libc.so.6.symbols
@@ -595,6 +595,7 @@ posix_fadvise64
posix_fallocate
posix_fallocate64
__posix_getopt
+posix_madvise
posix_memalign
ppoll
prctl
diff --git a/libc/mman.cc b/libc/mman.cc
--- a/libc/mman.cc
+++ b/libc/mman.cc
@@ -257,3 +257,17 @@ void *sbrk(intptr_t increment)
errno = ENOMEM;
return (void *)-1;
}
+
+static unsigned posix_madvise_to_advise(int advice)
+{
+ if (advice == POSIX_MADV_DONTNEED) {
+ return mmu::advise_dontneed;
+ }
+ return 0;
+}
+
+OSV_LIBC_API
+int posix_madvise(void *addr, size_t len, int advice) {
+ auto err = mmu::advise(addr, len, posix_madvise_to_advise(advice));
+ return err.get();
+}
Reply all
Reply to author
Forward
0 new messages