tests: compile tst-mmap with "-z now"

Compile tst-mmap.so with "-z now", so that symbols are resolved at load
time instead of when needed.

The problem was that tst-mmap uses wait_until, which runs the functions
sched::thread::wait() and sched::thread::stop_wait() while preemption is
disabled. In about 1 in 10 runs of tst-mmap.so, this caused an assertion-
failure crash (symbol resolution caused sleeping while preemption is disabled).

Fixes #256.

Signed-off-by: Nadav Har'El <nyh@cloudius-systems.com>
Signed-off-by: Avi Kivity <avi@cloudius-systems.com>
libc: Implement stubbed clock()

Nadav says:
The clock() function is stubbed. We can easily implement it by calling
clock_gettime(CLOCK_PROCESS_CPUTIME_ID).

Closes #275.

Reviewed-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
runtime: stub initgroups

empty implementation will suit us.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
runtime: basic prctl functionality

First of all, we need the symbol. But so far it is fine returning EINVAL to
everybody except for PR_SET_DUMPABLE. There are situations (see man prctl) in
which this flag is automatically cleared. Some programs (nginx here) will then
proceed to set it to make sure it is on. The flag itself is meanginless to us,
since we are not producing per-thread coredumps, and when we do dump, we will
dump regardless of this. But we need the call to suceed.

Reviewed-by: Nadav Har'El <nyh@cloudius-systems.com>
Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
af_local: allow ioctl on unix sockets

The current code does not allow ioctls on unix sockets, but real world
applications - nginx in my example will issue them. I am starting by
implementing FIONBIO to set blocking/nonblocking mode.

I notice here that we already have a flag in the read and write functions, and
they seem to handle that flag: the internal pipe_buffer implementation does
check and act on it.

So let's just flip it.

Reviewed-by: Nadav Har'El <nyh@cloudius-systems.com>
Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
mmu: export function to measure the amount of mmaped area

It will be used for procfs compatibility. Applications may want to know how much
memory is potentially available through mmap mappings (not necessarily allocated).

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
sched: export total sys and user time statistics

This is one of the statistics that shows up in /proc/self/stat under Linux, but
this is generally interesting for applications. Since we don't have kernel mode
and userspace mode, it is very hard to differentiate between "time spent in
userspace" and "kernel time spent on behalf of the process". Therefore, we will
present system time as always 0. If we wanted, we could at least differentiate
clearly osv-specific threads as system time, but there is no need to go through
the trouble now.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
linux: provide a /proc/$$/stat compatibility file

MongoDB wants it. In general, I am providing the information that is easy
to get, and ignoring the ones which are not - with the exception of process
count, that seemed easy enough to implement.

This is the kind of thing Mongo does with it:

2014-04-15T09:54:12.322+0000 [clientcursormon] mem (MB) res:670160 virt:25212
2014-04-15T09:54:12.323+0000 [clientcursormon]  mapped (incl journal view):160
2014-04-15T09:54:12.324+0000 [clientcursormon]  connections:0

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
mmu: implement madvise for MADV_DONTNEED

The jemalloc memory allocator will make intense use of MADV_DONTNEED to flush
pages it is no longer using. Respect that advice.

Let's keep returning -1 for the remaining cases so we don't fool anybody

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
vfs: simple flock implementation

This patch implements a version of flock that only performs error checking.
It assumes any valid operation succeeds, since we are using a single-process
model.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>