Refactor the breakpoint definitions in linux-arm-low.c.

Before arm_sw_breakpoint_from_kind would use an #ifdef to return the right
arm_breakpoint from the abi or eabi breakpoint type.

arm_breakpoint_at would also check for the arm_breakpoint ||
arm_eabi_breakpoint.

Thus the selected arm_breakpoint would be what arm_sw_breakpoint_from_kind
returned and arm_breakpoint was arm_abi_breakpoint.

This patch makes it more clear by naming those for what they are : 2 separate
entities: arm_abi_breakpoint and arm_eabi_breakpoint and set the current used
one as arm_breakpoint.

This allows a cleaner arm_sw_breakpoint_from_kind as it just returns
arm_breakpoint rather than having the #ifdef in that function.

Any other reference to the arm_breakpoint can now also be clear of #ifdefs...

No regressions on Ubuntu 14.04 on ARMv7 and x86.
With gdbserver-{native,extended} / { -marm -mthumb }

gdb/gdbserver/ChangeLog:

	* linux-arm-low.c: Refactor breakpoint definitions.
	(arm_breakpoint_at): Adjust for arm_abi_breakpoint.
	(arm_sw_breakpoint_from_kind): Adjust for arm_breakpoint.
This commit is contained in:
Antoine Tremblay 2015-10-21 11:13:42 -04:00
parent 8689682cc3
commit b0b4b50194
2 changed files with 21 additions and 12 deletions

View File

@ -1,3 +1,9 @@
2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com>
* linux-arm-low.c: Refactor breakpoint definitions.
(arm_breakpoint_at): Adjust for arm_abi_breakpoint.
(arm_sw_breakpoint_from_kind): Adjust for arm_breakpoint.
2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com> 2015-10-21 Antoine Tremblay <antoine.tremblay@ericsson.com>
* Makefile.in: Add arm.c/o. * Makefile.in: Add arm.c/o.

View File

@ -244,18 +244,25 @@ arm_set_pc (struct regcache *regcache, CORE_ADDR pc)
} }
/* Correct in either endianness. */ /* Correct in either endianness. */
static const unsigned long arm_breakpoint = 0xef9f0001; #define arm_abi_breakpoint 0xef9f0001UL
#define arm_breakpoint_len 4
static const unsigned short thumb_breakpoint = 0xde01;
#define thumb_breakpoint_len 2
static const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 };
#define thumb2_breakpoint_len 4
/* For new EABI binaries. We recognize it regardless of which ABI /* For new EABI binaries. We recognize it regardless of which ABI
is used for gdbserver, so single threaded debugging should work is used for gdbserver, so single threaded debugging should work
OK, but for multi-threaded debugging we only insert the current OK, but for multi-threaded debugging we only insert the current
ABI's breakpoint instruction. For now at least. */ ABI's breakpoint instruction. For now at least. */
static const unsigned long arm_eabi_breakpoint = 0xe7f001f0; #define arm_eabi_breakpoint 0xe7f001f0UL
#ifndef __ARM_EABI__
static const unsigned long arm_breakpoint = arm_abi_breakpoint;
#else
static const unsigned long arm_breakpoint = arm_eabi_breakpoint;
#endif
#define arm_breakpoint_len 4
static const unsigned short thumb_breakpoint = 0xde01;
#define thumb_breakpoint_len 2
static const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 };
#define thumb2_breakpoint_len 4
static int static int
arm_breakpoint_at (CORE_ADDR where) arm_breakpoint_at (CORE_ADDR where)
@ -287,7 +294,7 @@ arm_breakpoint_at (CORE_ADDR where)
unsigned long insn; unsigned long insn;
(*the_target->read_memory) (where, (unsigned char *) &insn, 4); (*the_target->read_memory) (where, (unsigned char *) &insn, 4);
if (insn == arm_breakpoint) if (insn == arm_abi_breakpoint)
return 1; return 1;
if (insn == arm_eabi_breakpoint) if (insn == arm_eabi_breakpoint)
@ -978,11 +985,7 @@ arm_sw_breakpoint_from_kind (int kind , int *size)
return (gdb_byte *) &thumb2_breakpoint; return (gdb_byte *) &thumb2_breakpoint;
case ARM_BP_KIND_ARM: case ARM_BP_KIND_ARM:
*size = arm_breakpoint_len; *size = arm_breakpoint_len;
#ifndef __ARM_EABI__
return (const gdb_byte *) &arm_breakpoint; return (const gdb_byte *) &arm_breakpoint;
#else
return (const gdb_byte *) &arm_eabi_breakpoint;
#endif
default: default:
return NULL; return NULL;
} }