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>
---
.../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