+2016-01-14  Yao Qi  <yao.qi@linaro.org>
+
+       * arch/arm-get-next-pcs.c (arm_get_next_pcs_ctor): Change
+       argument arm_thumb2_breakpoint to has_thumb2_breakpoint.
+       (thumb_get_next_pcs_raw): Check has_thumb2_breakpoint
+       instead.
+       * arch/arm-get-next-pcs.h (struct arm_get_next_pcs)
+       <arm_thumb2_breakpoint>: Remove.
+       <has_thumb2_breakpoint>: New field.
+       (arm_get_next_pcs_ctor): Update declaration.
+       * arm-linux-tdep.c (arm_linux_software_single_step): Pass
+       1 to arm_get_next_pcs_ctor.
+       * arm-tdep.c (arm_software_single_step): Pass 0 to
+       arm_get_next_pcs_ctor.
+
 2016-01-13  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * MAINTAINERS: Add Andreas Arnez as s390 target maintainer.
 
                       struct arm_get_next_pcs_ops *ops,
                       int byte_order,
                       int byte_order_for_code,
-                      const gdb_byte *arm_thumb2_breakpoint,
+                      int has_thumb2_breakpoint,
                       struct regcache *regcache)
 {
   self->ops = ops;
   self->byte_order = byte_order;
   self->byte_order_for_code = byte_order_for_code;
-  self->arm_thumb2_breakpoint = arm_thumb2_breakpoint;
+  self->has_thumb2_breakpoint = has_thumb2_breakpoint;
   self->regcache = regcache;
 }
 
      flags, affecting the execution of further instructions, we may
      need to set two breakpoints.  */
 
-  if (self->arm_thumb2_breakpoint != NULL)
+  if (self->has_thumb2_breakpoint)
     {
       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
        {
 
   int byte_order;
   /* Byte order for code.  */
   int byte_order_for_code;
-  /* Thumb2 breakpoint instruction.  */
-  const gdb_byte *arm_thumb2_breakpoint;
+  /* Whether the target has 32-bit thumb-2 breakpoint defined or
+     not.  */
+  int has_thumb2_breakpoint;
   /* Registry cache.  */
   struct regcache *regcache;
 };
                            struct arm_get_next_pcs_ops *ops,
                            int byte_order,
                            int byte_order_for_code,
-                           const gdb_byte *arm_thumb2_breakpoint,
+                           int has_thumb2_breakpoint,
                            struct regcache *regcache);
 
 /* Find the next possible PCs after the current instruction executes.  */
 
                         &arm_linux_get_next_pcs_ops,
                         gdbarch_byte_order (gdbarch),
                         gdbarch_byte_order_for_code (gdbarch),
-                        gdbarch_tdep (gdbarch)->thumb2_breakpoint,
+                        1,
                         regcache);
 
   next_pcs = arm_get_next_pcs (&next_pcs_ctx, regcache_read_pc (regcache));
 
                         &arm_get_next_pcs_ops,
                         gdbarch_byte_order (gdbarch),
                         gdbarch_byte_order_for_code (gdbarch),
-                        gdbarch_tdep (gdbarch)->thumb2_breakpoint,
+                        0,
                         regcache);
 
   next_pcs = arm_get_next_pcs (&next_pcs_ctx, regcache_read_pc (regcache));
 
+2016-01-14  Yao Qi  <yao.qi@linaro.org>
+
+       * linux-aarch32-low.c (thumb2_breakpoint): Make it static.
+       * linux-aarch32-low.h (thumb2_breakpoint): Remove declaration.
+       * linux-arm-low.c (arm_gdbserver_get_next_pcs): Pass 1 to
+       arm_get_next_pcs_ctor.
+
 2016-01-12  Josh Stone  <jistone@redhat.com>
            Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
 
 #define arm_breakpoint_len 4
 static const unsigned short thumb_breakpoint = 0xde01;
 #define thumb_breakpoint_len 2
-const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 };
+static const unsigned short thumb2_breakpoint[] = { 0xf7f0, 0xa000 };
 #define thumb2_breakpoint_len 4
 
 /* Some older versions of GNU/Linux and Android do not define
 
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-extern const unsigned short thumb2_breakpoint[];
-
 extern struct regs_info regs_info_aarch32;
 
 void arm_fill_gregset (struct regcache *regcache, void *buf);
 
                         /* Byte order is ignored assumed as host.  */
                         0,
                         0,
-                        (const gdb_byte *) &thumb2_breakpoint,
+                        1,
                         regcache);
 
   next_pcs = arm_get_next_pcs (&next_pcs_ctx, pc);