From 44f1c4d7b0160a51ecf7fe1af42416f1d2a71356 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Thu, 3 Nov 2016 14:35:13 +0000 Subject: [PATCH] Add enum for mips breakpoint kinds This patch adds an enum mips_breakpoint_kind to avoid using magic numbers as much as possible. gdb: 2016-11-03 Yao Qi * mips-tdep.c (mips_breakpoint_kind): New enum. (mips_breakpoint_from_pc): Use it. (mips_remote_breakpoint_from_pc): Likewise. --- gdb/ChangeLog | 6 ++++++ gdb/mips-tdep.c | 40 +++++++++++++++++++++++++--------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7ae735915a..f4f3e8b201 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2016-11-03 Yao Qi + + * mips-tdep.c (mips_breakpoint_kind): New enum. + (mips_breakpoint_from_pc): Use it. + (mips_remote_breakpoint_from_pc): Likewise. + 2016-11-03 Yao Qi * arch-utils.h (GDBARCH_BREAKPOINT_MANIPULATION): New macro. diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index e4b60c0c19..627b9c0d34 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -108,6 +108,23 @@ static const char *const mips_abi_strings[] = { NULL }; +/* Enum describing the different kinds of breakpoints. */ + +enum mips_breakpoint_kind +{ + /* 16-bit MIPS16 mode breakpoint. */ + MIPS_BP_KIND_MIPS16 = 2, + + /* 16-bit microMIPS mode breakpoint. */ + MIPS_BP_KIND_MICROMIPS16 = 3, + + /* 32-bit standard MIPS mode breakpoint. */ + MIPS_BP_KIND_MIPS32 = 4, + + /* 32-bit microMIPS mode breakpoint. */ + MIPS_BP_KIND_MICROMIPS32 = 5, +}; + /* For backwards compatibility we default to MIPS16. This flag is overridden as soon as unambiguous ELF file flags tell us the compressed ISA encoding used. */ @@ -7097,16 +7114,7 @@ mips_breakpoint_from_pc (struct gdbarch *gdbarch, } } -/* Determine the remote breakpoint kind suitable for the PC. The following - kinds are used: - - * 2 -- 16-bit MIPS16 mode breakpoint, - - * 3 -- 16-bit microMIPS mode breakpoint, - - * 4 -- 32-bit standard MIPS mode breakpoint, - - * 5 -- 32-bit microMIPS mode breakpoint. */ +/* Determine the remote breakpoint kind suitable for the PC. */ static void mips_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, @@ -7117,21 +7125,23 @@ mips_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, if (mips_pc_is_mips16 (gdbarch, pc)) { *pcptr = unmake_compact_addr (pc); - *kindptr = 2; + *kindptr = MIPS_BP_KIND_MIPS16; } else if (mips_pc_is_micromips (gdbarch, pc)) { ULONGEST insn; int status; - int size; insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, &status); - size = status ? 2 : mips_insn_size (ISA_MICROMIPS, insn) == 2 ? 2 : 4; + if (status || (mips_insn_size (ISA_MICROMIPS, insn) == 2)) + *kindptr = MIPS_BP_KIND_MICROMIPS16; + else + *kindptr = MIPS_BP_KIND_MICROMIPS32; + *pcptr = unmake_compact_addr (pc); - *kindptr = size | 1; } else - *kindptr = 4; + *kindptr = MIPS_BP_KIND_MIPS32; } /* Return non-zero if the standard MIPS instruction INST has a branch