gdb: Remove arm_pc_is_thumb_dummy() and related code.
This is basically an import of the following gdb change: http://sourceware.org/ml/gdb-cvs/2005-03/msg00143.html (which in effect fixes problems with gracefully closing down the non-Thumb program being debugged).
This commit is contained in:
parent
c7b4433263
commit
f6d2be2556
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=185024
@ -181,20 +181,6 @@ struct arm_prologue_cache
|
|||||||
|
|
||||||
int arm_apcs_32 = 1;
|
int arm_apcs_32 = 1;
|
||||||
|
|
||||||
/* Flag set by arm_fix_call_dummy that tells whether the target
|
|
||||||
function is a Thumb function. This flag is checked by
|
|
||||||
arm_push_arguments. FIXME: Change the PUSH_ARGUMENTS macro (and
|
|
||||||
its use in valops.c) to pass the function address as an additional
|
|
||||||
parameter. */
|
|
||||||
|
|
||||||
static int target_is_thumb;
|
|
||||||
|
|
||||||
/* Flag set by arm_fix_call_dummy that tells whether the calling
|
|
||||||
function is a Thumb function. This flag is checked by
|
|
||||||
arm_pc_is_thumb and arm_call_dummy_breakpoint_offset. */
|
|
||||||
|
|
||||||
static int caller_is_thumb;
|
|
||||||
|
|
||||||
/* Determine if the program counter specified in MEMADDR is in a Thumb
|
/* Determine if the program counter specified in MEMADDR is in a Thumb
|
||||||
function. */
|
function. */
|
||||||
|
|
||||||
@ -219,27 +205,6 @@ arm_pc_is_thumb (CORE_ADDR memaddr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine if the program counter specified in MEMADDR is in a call
|
|
||||||
dummy being called from a Thumb function. */
|
|
||||||
|
|
||||||
int
|
|
||||||
arm_pc_is_thumb_dummy (CORE_ADDR memaddr)
|
|
||||||
{
|
|
||||||
CORE_ADDR sp = read_sp ();
|
|
||||||
|
|
||||||
/* FIXME: Until we switch for the new call dummy macros, this heuristic
|
|
||||||
is the best we can do. We are trying to determine if the pc is on
|
|
||||||
the stack, which (hopefully) will only happen in a call dummy.
|
|
||||||
We hope the current stack pointer is not so far alway from the dummy
|
|
||||||
frame location (true if we have not pushed large data structures or
|
|
||||||
gone too many levels deep) and that our 1024 is not enough to consider
|
|
||||||
code regions as part of the stack (true for most practical purposes). */
|
|
||||||
if (DEPRECATED_PC_IN_CALL_DUMMY (memaddr, sp, sp + 1024))
|
|
||||||
return caller_is_thumb;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Remove useless bits from addresses in a running program. */
|
/* Remove useless bits from addresses in a running program. */
|
||||||
static CORE_ADDR
|
static CORE_ADDR
|
||||||
arm_addr_bits_remove (CORE_ADDR val)
|
arm_addr_bits_remove (CORE_ADDR val)
|
||||||
@ -2021,7 +1986,7 @@ arm_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
|
|||||||
{
|
{
|
||||||
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
|
struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
|
||||||
|
|
||||||
if (arm_pc_is_thumb (*pcptr) || arm_pc_is_thumb_dummy (*pcptr))
|
if (arm_pc_is_thumb (*pcptr))
|
||||||
{
|
{
|
||||||
*pcptr = UNMAKE_THUMB_ADDR (*pcptr);
|
*pcptr = UNMAKE_THUMB_ADDR (*pcptr);
|
||||||
*lenptr = tdep->thumb_breakpoint_size;
|
*lenptr = tdep->thumb_breakpoint_size;
|
||||||
|
Loading…
Reference in New Issue
Block a user