The value computed isn't actually used anywhere. It just ensured that
a panic would be triggered if we "skipped" to virtual addresses further
along. This shouldn't be problematic however.
This makes it less likely that uninitialized entries cause troubles.
Also panic if we encounter an unknown entry type instead of defaulting
to 4K pages.
And actually use the virtual address for it later on. This wasn't
problematic as the virtual and physical addresses are identity mapped,
but it seems more correct to do it in this order.
- BListValueNode now also handles BObjectLists. In the latter's case
however, it uses the template type parameters to map the array
elements to their actual type. As before, this requires a debug
libbe to function.
- Keep a unified list in DIEClassBaseType so that the order
of template parameters is preserved in cases when type and
value parameters are mixed. Thanks Ingo for the hint.
- Introduce new base Type TemplateParameter, which represents either
a template type or template value parameter, a list of which is
attached to CompoundType.
- Add DwarfTemplateParameter implementing subclass of TemplateParameter
and adjust DwarfTypeFactory accordingly for the above changes.
- Adjust CompoundType to add accessors for template type and value
parameters.
- Add DwarfCompoundType/DwarfTypeFactory handling for template
template type parameters.
- When a debugging libbe is present, and a BList is encountered,
we now read its internal structure and expose it as if it were an
array of pointers. Combined with typecasting, this means one can
now easily inspect the content of such a list.
* The hashtable stored complete Inode objects (albeit without the actual block).
* Now we only store the block_run which should reduce the memory footprint
considerably; before "recover" could easily run out of memory. In any case,
a 64 bit version would still make sense to have :-)
* Saved an extra hash table traversal by counting the node types directly.
* This isn't that well tested yet, though.
- If a program crashed due to an invalid function pointer, the stack
was being incorrectly unwound such that the top frame would actually
be skipped, preventing one from seeing the actual line of code that
invoked said pointer. On x86, we now check if the IP of the top frame
of the stack lies at a readable location in order to catch this case.
- The actual reason the hidden node wasn't being released as expected
was that ContainerListener::ModelNodeHidden() added a reference on
behalf of its indirect target, while the latter never actually
took ownership of said reference.
- In the special case of an address node with a hidden child, we
must send notifications for removal of the hidden compound's
children rather than for the hidden node itself. Otherwise the
base TreeTable's state gets out of sync, leading to a crash when
attempting to typecast such a node.
As there are only 8 bits for the index in the coarse page table entries
the maximum index is 256. This makes us correctly move to the next page
directory once we've run through all entries. Fixes missing unmap of
pages that crossed that boundary and consequent panic "page still has
mappings" when the page was removed from a cache.