. libc: add vfs_mmap, a way for vfs to initiate mmap()s.
This is a good special case to have as vfs is a slightly
different client from regular user processes. It doesn't do it
for itself, and has the dev & inode info already so the callback
to VFS for the lookup isn't necessary. So it has different info
to have to give to VM.
. libc: also add minix_mmap64() that accepts a 64-bit offset, even
though our off_t is still 32 bit now.
. to support mmap, we need to create new references to FD's (such
as an FD) so that the mmapped object can never be removed even if
all FD's are closed. To do that we conceptually dup the
filedescriptor into a new range that is only visible to the system.
So there are FDS_PER_PROCESS fd's, which is more than OPEN_MAX,
per process, and user processes can still use up to OPEN_MAX
FD's. mmap()ped objects then get extra reference in the invisible
range so user processes can't close them. The in-vfs fd_set is
of size FDS_PER_PROCESS.
. On exec() time, try to mmap() in the executable if available.
(It is not yet available in this commit.)
. To support mmap(), add do_vm_call that allows VM to lookup
(to ino+dev), do i/o from and close FD's on behalf of other
processes.
. To make this possible, a few functions have 2 more arguments
to make the target process explicit (instead of the implicit
global fp) and to specify whether the request is from a user
process or the system (which implies whether FD's starting at
OPEN_MAX are valid). These are close_fd, common_open, actual_llseek,
actual_read_write_peek, get_fd and get_filp2.
Change-Id: I831551e45a6781c74313c450eb9c967a68505932
this change
- makes panic() variadic, doing full printf() formatting -
no more NO_NUM, and no more separate printf() statements
needed to print extra info (or something in hex) before panicing
- unifies panic() - same panic() name and usage for everyone -
vm, kernel and rest have different names/syntax currently
in order to implement their own luxuries, but no longer
- throws out the 1st argument, to make source less noisy.
the panic() in syslib retrieves the server name from the kernel
so it should be clear enough who is panicing; e.g.
panic("sigaction failed: %d", errno);
looks like:
at_wini(73130): panic: sigaction failed: 0
syslib:panic.c: stacktrace: 0x74dc 0x2025 0x100a
- throws out report() - printf() is more convenient and powerful
- harmonizes/fixes the use of panic() - there were a few places
that used printf-style formatting (didn't work) and newlines
(messes up the formatting) in panic()
- throws out a few per-server panic() functions
- cleans up a tie-in of tty with panic()
merging printf() and panic() statements to be done incrementally.