Remove /dev/mem, /dev/kmem, /dev/port support.

* Makefile.in (DLL_OFILES): Drop fhandler_mem.o.
	(fhandler_mem_CFLAGS): Remove rule.
	* devices.in (enum fh_devices): Remove FH_MEM, FH_KMEM and FH_PORT.
	* devices.cc: Regenerate.
	* dtable.cc (fh_alloc): Drop handling for FH_MEM, FH_KMEM and FH_PORT.
	* fhandler.h (class fhandler_dev_mem): Remove.
	* fhandler_mem.cc: Remove file.
	* globals.cc (ro_u_pmem): Remove.
	* mmap.cc (fhandler_dev_mem::mmap): Remove.
	(fhandler_dev_mem::munmap): Remove.
	(fhandler_dev_mem::fixup_mmap_after_fork): Remove.
This commit is contained in:
Corinna Vinschen
2013-07-15 13:54:27 +00:00
parent 7ea982e75a
commit 4c4693008a
11 changed files with 2575 additions and 3009 deletions

View File

@@ -1811,100 +1811,6 @@ fhandler_disk_file::fixup_mmap_after_fork (HANDLE h, int prot, int flags,
return base == address;
}
HANDLE
fhandler_dev_mem::mmap (caddr_t *addr, size_t len, int prot,
int flags, off_t off)
{
if (off >= (off_t) mem_size
|| len >= mem_size
|| off + len >= mem_size)
{
set_errno (EINVAL);
debug_printf ("-1 = mmap(): illegal parameter, set EINVAL");
return INVALID_HANDLE_VALUE;
}
OBJECT_ATTRIBUTES attr;
InitializeObjectAttributes (&attr, &ro_u_pmem,
OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
NULL, NULL);
/* Section access is bit-wise ored, while on the Win32 level access
is only one of the values. It's not quite clear if the section
access has to be defined this way, or if SECTION_ALL_ACCESS would
be sufficient but this worked fine so far, so why change? */
ACCESS_MASK section_access;
if (prot & PROT_WRITE)
section_access = SECTION_MAP_READ | SECTION_MAP_WRITE;
else
section_access = SECTION_MAP_READ;
HANDLE h;
NTSTATUS status = NtOpenSection (&h, section_access, &attr);
if (!NT_SUCCESS (status))
{
__seterrno_from_nt_status (status);
debug_printf ("-1 = mmap(): NtOpenSection failed with %E");
return INVALID_HANDLE_VALUE;
}
void *base = MapView (h, *addr, len, get_access (), prot,
flags | MAP_ANONYMOUS, off);
if (!base || (fixed (flags) && base != *addr))
{
if (!base)
__seterrno ();
else
{
NtUnmapViewOfSection (NtCurrentProcess (), base);
set_errno (EINVAL);
debug_printf ("MapView: address shift with MAP_FIXED given");
}
NtClose (h);
return INVALID_HANDLE_VALUE;
}
*addr = (caddr_t) base;
return h;
}
int
fhandler_dev_mem::munmap (HANDLE h, caddr_t addr, size_t len)
{
NTSTATUS status;
if (!NT_SUCCESS (status = NtUnmapViewOfSection (NtCurrentProcess (), addr)))
{
__seterrno_from_nt_status (status);
return -1;
}
NtClose (h);
return 0;
}
int
fhandler_dev_mem::msync (HANDLE h, caddr_t addr, size_t len, int flags)
{
return 0;
}
bool
fhandler_dev_mem::fixup_mmap_after_fork (HANDLE h, int prot, int flags,
off_t offset, DWORD size,
void *address)
{
void *base = MapView (h, address, size, get_access (), prot,
flags | MAP_ANONYMOUS, offset);
if (base != address)
{
MEMORY_BASIC_INFORMATION m;
VirtualQuery (address, &m, sizeof (m));
system_printf ("requested %p != %p mem alloc base %p, state %y, "
"size %lu, %E", address, base, m.AllocationBase, m.State,
m.RegionSize);
}
return base == address;
}
/* Call to re-create all the file mappings in a forked child. Called from
the child in initialization. At this point we are passed a valid
mmapped_areas map, and all the HANDLE's are valid for the child, but