Currently the PROCEXEC event only reports a single address, entryaddr,
which is the entry point of the interpreter in the typical dynamic case,
and used solely to calculate the base address of the interpreter. For
PDEs this is fine, since the base address is known from the program
headers, but for PIEs the base address varies at run time based on where
the kernel chooses to load it, and so pmcstat has no way of knowing the
real address ranges for the executable. This was less of an issue in the
past since PIEs were rare, but now they're on by default on 64-bit
architectures it's more of a problem.
To solve this, pass through what was picked for et_dyn_addr by the
kernel, and use that as the offset for the executable's start address
just as is done for everything in the kernel, and bump the pmc version
accordingly. Since we're changing this interface, sanitise the way we
determine the interpreter's base address by passing it through directly
rather than indirectly via the entry point and having to subtract off
whatever the ELF header's e_entry is (and anything that wants the entry
point in future can still add that back on as needed; this merely
changes the interface to directly provide the underlying variables
involved).
Also, whilst bumping the version, initialise and check the pm_flags
field for CONFIGURELOG so that future changes to the interface can make
use of flags instead of a more invasive version bump if appropriate.