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 <jwkozac...@gmail.com>
---
 .../aarch64/osv_ld-musl-aarch64.so.1.symbols       |  1 +
 exported_symbols/aarch64/osv_libc.so.6.symbols     |  1 +
 .../x64/osv_ld-musl-x86_64.so.1.symbols            |  1 +
 exported_symbols/x64/osv_libc.so.6.symbols         |  1 +
 libc/mman.cc                                       | 14 ++++++++++++++
 5 files changed, 18 insertions(+)

diff --git a/exported_symbols/aarch64/osv_ld-musl-aarch64.so.1.symbols 
b/exported_symbols/aarch64/osv_ld-musl-aarch64.so.1.symbols
index c463131a..4c284fba 100644
--- a/exported_symbols/aarch64/osv_ld-musl-aarch64.so.1.symbols
+++ b/exported_symbols/aarch64/osv_ld-musl-aarch64.so.1.symbols
@@ -739,6 +739,7 @@ posix_fadvise
 posix_fadvise64
 posix_fallocate
 posix_fallocate64
+posix_madvise
 posix_memalign
 pow
 pow10
diff --git a/exported_symbols/aarch64/osv_libc.so.6.symbols 
b/exported_symbols/aarch64/osv_libc.so.6.symbols
index 000191b7..ea0bfcdc 100644
--- a/exported_symbols/aarch64/osv_libc.so.6.symbols
+++ b/exported_symbols/aarch64/osv_libc.so.6.symbols
@@ -667,6 +667,7 @@ posix_fadvise
 posix_fadvise64
 posix_fallocate
 posix_fallocate64
+posix_madvise
 posix_memalign
 ppoll
 prctl
diff --git a/exported_symbols/x64/osv_ld-musl-x86_64.so.1.symbols 
b/exported_symbols/x64/osv_ld-musl-x86_64.so.1.symbols
index b3f87859..d88e98ed 100644
--- a/exported_symbols/x64/osv_ld-musl-x86_64.so.1.symbols
+++ b/exported_symbols/x64/osv_ld-musl-x86_64.so.1.symbols
@@ -721,6 +721,7 @@ posix_fadvise
 posix_fadvise64
 posix_fallocate
 posix_fallocate64
+posix_madvise
 __posix_getopt
 posix_memalign
 pow
diff --git a/exported_symbols/x64/osv_libc.so.6.symbols 
b/exported_symbols/x64/osv_libc.so.6.symbols
index 6635cabb..07b5368b 100644
--- a/exported_symbols/x64/osv_libc.so.6.symbols
+++ b/exported_symbols/x64/osv_libc.so.6.symbols
@@ -596,6 +596,7 @@ posix_fadvise
 posix_fadvise64
 posix_fallocate
 posix_fallocate64
+posix_madvise
 __posix_getopt
 posix_memalign
 ppoll
diff --git a/libc/mman.cc b/libc/mman.cc
index 9dd6429a..75a94eb0 100644
--- 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();
+}
-- 
2.31.1

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20211221182614.242226-1-jwkozaczuk%40gmail.com.

Reply via email to