Prepare release of PRoot v4.0.3 and CARE v2.2 (2/2).
Add a missing header for CARE.

This issue was exposed on Slackware-14.0.
Extract all load information from the executed binary.

The aim of this branch is to get a new "execve" module in PRoot that
will contain the so much awaited loader :)
Split new execve module in 2 (sysenter & sysexit) + align load addresses.

Before:

    $ ./src/proot grep . /proc/self/maps
    0000000000400000-000000000045227c r-xp 0000000000000000 00:00 0 /bin/grep
    0000000000652280-0000000000654860 rw-p 0000000000052280 00:00 0 /bin/grep
    0000000000000000-0000000000022cd8 r-xp 0000000000000000 00:00 0 /lib64/ld-2.17.so
    0000000000223be8-0000000000225268 rw-p 0000000000023be8 00:00 0 /lib64/ld-2.17.so

    00400000-00453000 r-xp 00000000 fd:01 1180089                            /bin/grep
    00652000-00654000 rw-p 00052000 fd:01 1180089                            /bin/grep
    [...]
    7fcd81a60000-7fcd81a83000 r-xp 00000000 fd:01 274754                     /lib64/ld-2.17.so
    7fcd81c83000-7fcd81c84000 r--p 00023000 fd:01 274754                     /lib64/ld-2.17.so
    7fcd81c84000-7fcd81c86000 rw-p 00024000 fd:01 274754                     /lib64/ld-2.17.so

Now:

    $ ./src/proot grep . /proc/self/maps
    0000000000400000-0000000000453000 r-xp 0000000000000000 00:00 0 /bin/grep
    0000000000652000-0000000000654000 rw-p 0000000000052000 00:00 0 /bin/grep
    0000000000654000-0000000000655000 rw-p 00000000 00:00 0
    0000000000000000-0000000000023000 r-xp 0000000000000000 00:00 0 /lib64/ld-2.17.so
    0000000000223000-0000000000226000 rw-p 0000000000023000 00:00 0 /lib64/ld-2.17.so

    00400000-00453000 r-xp 00000000 fd:01 1180089                            /bin/grep
    00652000-00654000 rw-p 00052000 fd:01 1180089                            /bin/grep
    00654000-00655000 rw-p 00000000 00:00 0
    [...]
    7f2e8c4a4000-7f2e8c4c7000 r-xp 00000000 fd:01 274754                     /lib64/ld-2.17.so
    7f2e8c6c7000-7f2e8c6c8000 r--p 00023000 fd:01 274754                     /lib64/ld-2.17.so
    7f2e8c6c8000-7f2e8c6ca000 rw-p 00024000 fd:01 274754                     /lib64/ld-2.17.so
Implement a trivial loader generator (it produces C code).

To use this loader (for ex.):

    $ ./src/proot grep . /proc/self/maps 2>loader.c
    $ gcc -fpie -pie loader.c
    $ strace ./a.out
    [...]
    open("/bin/grep", O_RDONLY)             = 3
    mmap(0x400000, 339968, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x400000
    mmap(0x652000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0x52000) = 0x652000
    mmap(0x654000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x654000
    close(3)                                = 0
    open("/lib64/ld-2.17.so", O_RDONLY)     = 3
    mmap(NULL, 143360, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x7fb1c3bc3000
    mmap(0x7fb1c3de6000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0x23000) = 0x7fb1c3de6000
    close(3)                                = 0
Initial import of the remote loader (a.k.a new execve module).

To enable the remote loader:

    env CPPFLAGS=-DEXECVE2 make -C src/

To test the remote loader:

    $ ./src/proot -v 5 /lib64/ld-linux-x86-64.so.2
    [...]
    ptrace acceleration (seccomp mode 2) enabled
    pid 123: sysenter start: execve(0x259ebf0, 0x259c7a0, 0x7fff694ea190, 0x7fff694e9df0, 0xe8150c73, 0x7f4cf85287d8) = 0xffffffffffffffda [0x7fff694e9f98, 0]
    pid 123: translate("/" + "/lib64/ld-linux-x86-64.so.2")
    pid 123:          -> "/lib64/ld-2.17.so"
    pid 123: sysenter end: execve(0x7fff694e9ee5, 0x259c7a0, 0x7fff694ea190, 0x7fff694e9df0, 0xe8150c73, 0x7f4cf85287d8) = 0xffffffffffffffda [0x7fff694e9ee5, 0]
    pid 123: sysexit start: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x0 [0x7fff962945d0, 0]
    pid 123: sysexit end: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x3b [0x7fff962945d0, 0]
    pid 123: sysenter start: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945d0, 0]
    pid 123: sysenter end: open(0x7fff962945be, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysexit start: open(0x7fff962945be, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x3 [0x7fff962945be, 0]
    pid 123: sysexit end: open(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x3b [0x7fff962945be, 0]
    pid 123: sysenter start: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysenter end: mmap(0x0, 0x23000, 0x5, 0x2, 0x3, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysexit start: mmap(0x0, 0x23000, 0x5, 0x2, 0x3, 0x0) = 0x7f5fd856a000 [0x7fff962945be, 0]
    pid 123: sysexit end: mmap(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x3b [0x7fff962945be, 0]
    pid 123: sysenter start: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysenter end: mmap(0x7f5fd878d000, 0x2000, 0x3, 0x2, 0x3, 0x23000) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysexit start: mmap(0x7f5fd878d000, 0x2000, 0x3, 0x2, 0x3, 0x23000) = 0x7f5fd878d000 [0x7fff962945be, 0]
    pid 123: sysexit end: mmap(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x3b [0x7fff962945be, 0]
    pid 123: sysenter start: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysenter end: mmap(0x7f5fd8790000, 0x1000, 0x3, 0x22, 0xffffffffffffffff, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysexit start: mmap(0x7f5fd8790000, 0x1000, 0x3, 0x22, 0xffffffffffffffff, 0x0) = 0x7f5fd8790000 [0x7fff962945be, 0]
    pid 123: sysexit end: mmap(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x3b [0x7fff962945be, 0]
    pid 123: sysenter start: execve(0x0, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysenter end: close(0x3, 0x0, 0x0, 0x0, 0x0, 0x0) = 0xffffffffffffffda [0x7fff962945be, 0]
    pid 123: sysexit start: close(0x3, 0x0, 0x0, 0x0, 0x0, 0x0) = 0x0 [0x7fff962945be, 0]
    pid 123: sysexit end: execve(0x259ebf0, 0x259c7a0, 0x7fff694ea190, 0x7fff694e9df0, 0xe8150c73, 0x7f4cf85287d8) = 0x0 [0x7fff694e9f98, 0]
    pid 123: translate("/" + "/lib64/ld-linux-x86-64.so.2")
    pid 123:          -> "/lib64/ld-linux-x86-64.so.2"
    pid 123: terminated with signal 11

It is expected to fail since the loader doesn't set the instruction
pointer correctly yet (nor the ELF auxiliary vectors).
Compute mapping lengths correctly + set the instr. pointer to the entry point.

Mapping lengths must be computed once the start and end addresses are
paged-align.

So far, it is possible to execute this command:

    $ setarch x86_64 -R ./src/proot /lib64/ld-linux-x86-64.so.2
    Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]
    You have invoked `ld.so', the helper program for shared library executables.
    This program usually lives in the file `/lib/ld.so', and special directives
    [...]
Set AT_PH* auxiliary vectors + "load map" -> "load info".

It is now possible to execute static executable:

    $ ./src/proot ./tests/rootfs/bin/echo OK

Current limitations:

- AT_PHDR value is hardcoded

- path to the stub is hardcoded

- the stub base address must not conflict with the program base
  address

- dynamic executable not supported yet
Rename module "tracee/array" into "execve/aoxp" and improve its semantic.

The terms "array" and "item" were too much misleading.  Instead, these
terms are now used:

- xpointer: pointer to a object into tracee's memory space that can be
  cached into tracer's memory space.

- array of xpointers: high level structure used to handle pointer
  tables.
Clear the heap info. of new processes.
Add initial support to load dynamically linked programs.

Also, the AT_PHDR value is not hard coded anymore.
Close file descriptors once all load information are extracted.

Otherwise PRoot migth get a "Too many open files" error.
Specify the MAP_FIXED flag for position dependent segments.
Clear the "extra" bytes from the last file-backed mapping.

For inforation, the BSS section does not have to start on a page
boundary.
Import PIE test-case (not yet supported) + misc. fixes + code cleanup.
Initial support for scripts by the new execve module.
Move functions related to shebang handling to a dedicated file.
Fix missing initialization.

Now most of the Coreutils testsuite passes.
Return -EACCESS when execve'ing a directory, as expected by some programs.

The problem was exposed by "env", see test-pppppppp.sh for details.

(cherry picked from commit 62a513089854d1a734821b2e52b1f73ee9148306)
Compute load addresses for each position independent objects to avoid overlapping.

There's a risk of overlapping when segments are randomly placed by the
kernel, since this latter doesn't know constraint locations for next
segments.  For instance:

    // load a position independent program anywhere:
    mmap(0x0, 0x1000, 0x5, 0x2, 0x3, 0x0) = 0x7ffff7ffd000 [0x7fffffffda3c, 0]

    // its next segment has to be 0x200000 bytes away:
    mmap(0x7ffff81fd000, 0x1000, 0x3, 0x2, 0x3, 0x0) = 0x7ffff81fd000 [0x7fffffffda3c, 0]

    // then load its position independent ELF interpreter anywhere:
    mmap(0x0, 0x23000, 0x5, 0x2, 0x3, 0x0) = 0x7ffff7fda000 [0x7fffffffda2a, 0]

    // it turns, its next segment has to be 0x223000 bytes away:
    mmap(0x7ffff81fd000, 0x3000, 0x3, 0x2, 0x3, 0x23000) = 0x7ffff7fd7000 [0x7fffffffda2a, 0]

In this exemple, program->segment[1] is overlapped by program->interp->segment[1].