Skip to content
Snippets Groups Projects
Commit c41a394a authored by Pekka Enberg's avatar Pekka Enberg
Browse files

mman: Move mincore() to libc/mman.cc


Move mincore() to libc/mman.cc where all other memory mapping libc
functions are.

Reviewed-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
parent 71f1ffda
No related branches found
No related tags found
No related merge requests found
......@@ -13,6 +13,7 @@
#include "osv/dentry.h"
#include "osv/mount.h"
#include "libc/libc.hh"
#include <safe-ptr.hh>
TRACEPOINT(trace_memory_mmap, "addr=%p, length=%d, prot=%d, flags=%d, fd=%d, offset=%d", void *, size_t, int, int, int, off_t);
TRACEPOINT(trace_memory_mmap_err, "%d", int);
......@@ -186,3 +187,23 @@ int msync(void *addr, size_t length, int flags)
}
return err.to_libc();
}
int mincore(void *addr, size_t length, unsigned char *vec)
{
if (!mmu::is_page_aligned(addr)) {
return libc_error(EINVAL);
}
if (!mmu::is_linear_mapped(addr, length) && !mmu::ismapped(addr, length)) {
return libc_error(ENOMEM);
}
char *end = align_up((char *)addr + length, mmu::page_size);
char tmp;
for (char *p = (char *)addr; p < end; p += mmu::page_size) {
if (safe_load(p, tmp)) {
*vec++ = 0x01;
} else {
*vec++ = 0x00;
}
}
return 0;
}
......@@ -48,7 +48,6 @@
#include <map>
#include <boost/range/adaptor/reversed.hpp>
#include "align.hh"
#include <safe-ptr.hh>
#include <osv/stubbing.hh>
#include "drivers/pvpanic.hh"
#include <api/sys/resource.h>
......@@ -195,26 +194,6 @@ int getpid()
return 0;
}
int mincore(void *addr, size_t length, unsigned char *vec)
{
if (!mmu::is_page_aligned(addr)) {
return libc_error(EINVAL);
}
if (!mmu::is_linear_mapped(addr, length) && !mmu::ismapped(addr, length)) {
return libc_error(ENOMEM);
}
char *end = align_up((char *)addr + length, mmu::page_size);
char tmp;
for (char *p = (char *)addr; p < end; p += mmu::page_size) {
if (safe_load(p, tmp)) {
*vec++ = 0x01;
} else {
*vec++ = 0x00;
}
}
return 0;
}
// WCTDEF(alnum), WCTDEF(alpha), WCTDEF(blank), WCTDEF(cntrl),
// WCTDEF(digit), WCTDEF(graph), WCTDEF(lower), WCTDEF(print),
// WCTDEF(punct), WCTDEF(space), WCTDEF(upper), WCTDEF(xdigit),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment