include/dwarf.h: Declare dwarf_reg_state_pool and dwarf_cie_info_pool.
include/dwarf_i.h: Include libunwind_i.h instead of tdep.h.
Make dwarf_to_unw_regnum() a macro so it doesn't get compiled
into an object file merely because it include dwarf_i.h (important
when optimization is turned off).
(dwarf_read_encoded_pointer_inlined): New function.
include/tdep-x86/libunwind_i.h: Add include of "mempool.h".
include/tdep-x86_64/libunwind_i.h: Add include of "mempool.h".
Yes, it casts to signed, but then converts right back to
unsigned via the return type. Fixed thus.
Signed-off-by: Richard Henderson <rth@redhat.com>
Signed-off-by: Arun Sharma <arun.sharma@google.com>
CFA should be incremented by 16 in the hope that the previous frame
may have valid unwind info.
Also increase the default frame pointer recognition heuristic from 4k
to 16k.
Signed-off-by: Andrey Veskov <Andrey.Veskov@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@google.com>
Now that dwarf_find_save_locs() not just finds the save-locations but
also updates the cursor-state, document this fact (the function really
is misnamed now).
Be sure to clear pi->unwind_info when looking up the kernel table and
not needing the unwind-info. Otherwise, _UPT_put_unwind_info() may
erroneously call free() on the pointer, even though that space wasn't
malloc'd, leading to crashes..
(maps_next): After reading less than a full buffer of data, copy
remaining data to the top of the buffer so as to maintain the
invariant that all data between mi->buf and mi->buf_end is valid.
This avoids maps_next() parsing uninitialized data.
Don't test read-only access to F0 and F1 registers --- according to
the SCRA manual, those locations cannot even be expressed in SPILL
descriptors and newer versions of GAS (as well as IAS) won't accept
.spillreg directives targeting those registers.
Writing UNW_IA64_BSP and UNW_IA64_SP can wreak havoc if not done
properly but can also be extremely useful when done correctly. For
example, the Linux kernel can use this to update a cursor with the
MIN_STATE info which is saved by firmware due to an MCA or INIT event.
BKrev: 428e03020AqYSMZEt1Q3cCPH0Bj2eA
The early-out causes problems in the kernel, which wants to unwind to the
end of the kernel-stack (i.e., until IP==0) and then access the user-level
state.
BKrev: 428de7a4kGcNmG2Tv5tDJMbQmqXO4w
In the Linux kernel, we want to track the size of all register-backing stores
so we can protect against illegal memory accesses. Enable this by introducing
an rbs_get_base() macro.
BKrev: 428de263-syBtG-G9-mlstg074gvtA