This makes map allocations as more unified chunks, basically just one
big allocation for each map_root. For pmaps, there's one base
allocation, then the separate map_roots for each cpu and the aggregate.
Fewer chunks means fewer pointers to keep track of, which contributes to
the pointer-free goals of shared-memory stapdyn.
* runtime/*/alloc.c: Add kzalloc_node variants.
* runtime/*/map_runtime.h (struct pmap): Abstract the map_roots with
plain pointers in kernel or offptr_t in stapdyn.
* runtime/map.h (struct map_root): Make "hashes" a fixed array.
* runtime/map.c (_stp_map_init): No more allocation, just initialize
fields and insert the nodes into the free pool.
(_stp_map_normalize_key_size, _stp_map_normalize_data_size): Setup the
key and data sizes in a uniform way.
(_stp_map_new): Allocate the map_nodes along with the map_root.
(_stp_pmap_new): Allocate the base pmap, then _stp_map_new the bits.
(_stp_map_del, _stp_pmap_del): Deletion is now simpler to match.
* runtime/map-gen.c: Update callers to new abstractions.
* runtime/map-stat.c: Ditto.
* runtime/pmap-gen.c: Ditto.