[rfc/rfa] Remove config/arm/tm-embed.h TM file

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[rfc/rfa] Remove config/arm/tm-embed.h TM file

Ulrich Weigand
Hello,

this patch attempts to get rid of the config/arm/tm-embed.h TM file.
The file currently defines the following settings:
#define SOFTWARE_SINGLE_STEP_P() 0
#define LOWEST_PC       0x20
#define THUMB_LE_BREAKPOINT {0xbe,0xbe}
#define THUMB_BE_BREAKPOINT {0xbe,0xbe}
#define SKIP_TRAMPOLINE_CODE(pc)                arm_skip_stub (pc)

The LOWEST_PC setting is redundant, as 0x20 is the default anyway.

The THUMB_[BL]E_BREAKPOINT variables override defaults in arm-tdep.c.
The patch changes those defaults to match the tm-embed.h version.
However, as the current arm-tdep.c settings are inherited by the
OpenBSD and WinCE targets, the armobsd_init_abi and arm_wince_init_abi
routines are changed to override the settings back.  (Linux and NetBSD
already override those breakpoint settings anyway.)

To remove the need to override SOFTWARE_SINGLE_STEP_P, the patch
moves installing the single-step gdbarch callback from the main
arm_gdbarch_init into all init_abi routines for target that currently
inherit the setting (Linux, *BSD, WinCE).

Finally, arm_skip_stub is simply installed as skip_trampoline_code
routine always.  This *is* strictly speaking a change on all non-
tm-embed.h targets (Linux, *BSD, WinCE), but as far as I can see
it shouldn't have any adverse effects.

Tested by making sure arm-elf, arm-linux, arm-netbsd, arm-openbsd,
and arm-wince-pe cross-GDBs still build.

OK for mainline?

Bye,
Ulrich


ChangeLog:

        * config/arm/embed.mt (DEPRECATED_TM_FILE): Set to tm-arm.h.
        * config/arm/tm-embed.h: Delete file.

        * arm-tdep.h (arm_software_single_step): Declare.
        * arm-tdep.c (arm_software_single_step): Make global.
        (arm_gdbarch_init) Move set_gdbarch_software_single_step call
        from here to ...
        * arm-linux-tdep.c (arm_linux_init_abi): ... here ...
        * armnbsd-tdep.c (arm_netbsd_init_abi_common): ... here ...
        * armobsd-tdep.c (armobsd_init_abi): ... here ...
        * arm-wince-tdep.c (arm_wince_init_abi): ... and here.

        * arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT): No longer
        allow defines to be overriden by TM file.
        (THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Likewise.  Also,
        change default to {0xbe,0xbe}.
        * armobsd-tdep.c (arm_obsd_thumb_le_breakpoint,
        arm_obsd_thumb_be_breakpoint): New global variables.
        (armobsd_init_abi): Override tdep->thumb_breakpoint and
        tdep->thumb_breakpoint_size.
        * arm-wince-tdep.c (arm_wince_thumb_le_breakpoint): New variable.
        (arm_wince_init_abi): Override tdep->thumb_breakpoint and
        tdep->thumb_breakpoint_size.

        * arm-tdep.c (arm_gdbarch_init): Add set_gdbarch_skip_trampoline_code.



diff -urNp gdb-orig/gdb/arm-linux-tdep.c gdb-head/gdb/arm-linux-tdep.c
--- gdb-orig/gdb/arm-linux-tdep.c 2007-03-29 23:35:55.000000000 +0200
+++ gdb-head/gdb/arm-linux-tdep.c 2007-04-13 01:05:37.201206920 +0200
@@ -605,6 +605,9 @@ arm_linux_init_abi (struct gdbarch_info
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
 
+  /* Single stepping.  */
+  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
+
   /* Shared library handling.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
diff -urNp gdb-orig/gdb/armnbsd-tdep.c gdb-head/gdb/armnbsd-tdep.c
--- gdb-orig/gdb/armnbsd-tdep.c 2007-03-29 23:35:55.000000000 +0200
+++ gdb-head/gdb/armnbsd-tdep.c 2007-04-13 01:05:37.206206160 +0200
@@ -68,6 +68,9 @@ arm_netbsd_init_abi_common (struct gdbar
 
   tdep->jb_pc = ARM_NBSD_JB_PC;
   tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE;
+
+  /* Single stepping.  */
+  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
 }
   
 static void
diff -urNp gdb-orig/gdb/armobsd-tdep.c gdb-head/gdb/armobsd-tdep.c
--- gdb-orig/gdb/armobsd-tdep.c 2007-03-29 23:35:55.000000000 +0200
+++ gdb-head/gdb/armobsd-tdep.c 2007-04-13 01:05:37.210205552 +0200
@@ -72,6 +72,10 @@ static const struct tramp_frame armobsd_
 };
 
 
+/* Override default thumb breakpoints.  */
+static const char arm_obsd_thumb_le_breakpoint[] = {0xfe, 0xdf};
+static const char arm_obsd_thumb_be_breakpoint[] = {0xdf, 0xfe};
+
 static void
 armobsd_init_abi (struct gdbarch_info info,
   struct gdbarch *gdbarch)
@@ -96,6 +100,23 @@ armobsd_init_abi (struct gdbarch_info in
 
   /* OpenBSD/arm uses -fpcc-struct-return by default.  */
   tdep->struct_return = pcc_struct_return;
+
+  /* Single stepping.  */
+  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
+
+  /* Breakpoints.  */
+  switch (info.byte_order)
+    {
+    case BFD_ENDIAN_BIG:
+      tdep->thumb_breakpoint = arm_obsd_thumb_be_breakpoint;
+      tdep->thumb_breakpoint_size = sizeof (arm_obsd_thumb_be_breakpoint);
+      break;
+
+    case BFD_ENDIAN_LITTLE:
+      tdep->thumb_breakpoint = arm_obsd_thumb_le_breakpoint;
+      tdep->thumb_breakpoint_size = sizeof (arm_obsd_thumb_le_breakpoint);
+      break;
+    }
 }
 
 
diff -urNp gdb-orig/gdb/arm-tdep.c gdb-head/gdb/arm-tdep.c
--- gdb-orig/gdb/arm-tdep.c 2007-04-13 00:22:26.477202000 +0200
+++ gdb-head/gdb/arm-tdep.c 2007-04-13 01:05:37.230202512 +0200
@@ -1907,7 +1907,7 @@ arm_get_next_pc (CORE_ADDR pc)
    single_step() is also called just after the inferior stops.  If we
    had set up a simulated single-step, we undo our damage.  */
 
-static int
+int
 arm_software_single_step (enum target_signal sig, int insert_bpt)
 {
   /* NOTE: This may insert the wrong breakpoint instruction when
@@ -1998,21 +1998,10 @@ gdb_print_insn_arm (bfd_vma memaddr, dis
    instruction to force a trap.  This can be handled by by the
    abi-specific code during establishment of the gdbarch vector.  */
 
-
-/* NOTE rearnsha 2002-02-18: for now we allow a non-multi-arch gdb to
-   override these definitions.  */
-#ifndef ARM_LE_BREAKPOINT
 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
-#endif
-#ifndef ARM_BE_BREAKPOINT
 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
-#endif
-#ifndef THUMB_LE_BREAKPOINT
-#define THUMB_LE_BREAKPOINT {0xfe,0xdf}
-#endif
-#ifndef THUMB_BE_BREAKPOINT
-#define THUMB_BE_BREAKPOINT {0xdf,0xfe}
-#endif
+#define THUMB_LE_BREAKPOINT {0xbe,0xbe}
+#define THUMB_BE_BREAKPOINT {0xbe,0xbe}
 
 static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
 static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
@@ -2948,6 +2937,9 @@ arm_gdbarch_init (struct gdbarch_info in
   /* Advance PC across function entry code.  */
   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
 
+  /* Skip trampolines.  */
+  set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
+
   /* The stack grows downward.  */
   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
 
@@ -2978,10 +2970,6 @@ arm_gdbarch_init (struct gdbarch_info in
   /* Returning results.  */
   set_gdbarch_return_value (gdbarch, arm_return_value);
 
-  /* Single stepping.  */
-  /* XXX For an RDI target we should ask the target if it can single-step.  */
-  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
-
   /* Disassembly.  */
   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
 
diff -urNp gdb-orig/gdb/arm-tdep.h gdb-head/gdb/arm-tdep.h
--- gdb-orig/gdb/arm-tdep.h 2007-04-02 00:10:02.000000000 +0200
+++ gdb-head/gdb/arm-tdep.h 2007-04-13 01:05:37.281194760 +0200
@@ -187,6 +187,8 @@ struct gdbarch_tdep
 #define LOWEST_PC (gdbarch_tdep (current_gdbarch)->lowest_pc)
 #endif
 
+int arm_software_single_step (enum target_signal, int);
+
 /* Functions exported from armbsd-tdep.h.  */
 
 /* Return the appropriate register set for the core section identified
diff -urNp gdb-orig/gdb/arm-wince-tdep.c gdb-head/gdb/arm-wince-tdep.c
--- gdb-orig/gdb/arm-wince-tdep.c 2007-03-29 23:35:56.000000000 +0200
+++ gdb-head/gdb/arm-wince-tdep.c 2007-04-13 01:05:37.285194152 +0200
@@ -30,6 +30,7 @@
 #include "arm-tdep.h"
 
 static const char arm_wince_le_breakpoint[] = { 0x10, 0x00, 0x00, 0xe6 };
+static const char arm_wince_thumb_le_breakpoint[] = { 0xfe, 0xdf };
 
 /* Description of the longjmp buffer.  */
 #define ARM_WINCE_JB_ELEMENT_SIZE INT_REGISTER_SIZE
@@ -42,6 +43,8 @@ arm_wince_init_abi (struct gdbarch_info
 
   tdep->arm_breakpoint = arm_wince_le_breakpoint;
   tdep->arm_breakpoint_size = sizeof (arm_wince_le_breakpoint);
+  tdep->thumb_breakpoint = arm_wince_thumb_le_breakpoint;
+  tdep->thumb_breakpoint_size = sizeof (arm_wince_thumb_le_breakpoint);
   tdep->struct_return = pcc_struct_return;
 
   tdep->fp_model = ARM_FLOAT_SOFT_VFP;
@@ -57,6 +60,9 @@ arm_wince_init_abi (struct gdbarch_info
 
   /* Shared library handling.  */
   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+
+  /* Single stepping.  */
+  set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
 }
 
 static enum gdb_osabi
diff -urNp gdb-orig/gdb/config/arm/embed.mt gdb-head/gdb/config/arm/embed.mt
--- gdb-orig/gdb/config/arm/embed.mt 2007-03-29 23:35:56.000000000 +0200
+++ gdb-head/gdb/config/arm/embed.mt 2007-04-13 01:05:37.289193544 +0200
@@ -1,6 +1,6 @@
 # Target: ARM embedded system
 TDEPFILES= arm-tdep.o
-DEPRECATED_TM_FILE= tm-embed.h
+DEPRECATED_TM_FILE= tm-arm.h
 
 SIM_OBS = remote-sim.o
 SIM = ../sim/arm/libsim.a
diff -urNp gdb-orig/gdb/config/arm/tm-embed.h gdb-head/gdb/config/arm/tm-embed.h
--- gdb-orig/gdb/config/arm/tm-embed.h 2007-03-29 23:35:56.000000000 +0200
+++ gdb-head/gdb/config/arm/tm-embed.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,48 +0,0 @@
-/* Definitions to target GDB to ARM embedded systems.
-   Copyright 1986, 1987, 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2007 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#ifndef TM_ARMEMBED_H
-#define TM_ARMEMBED_H
-
-/* Include the common ARM definitions. */
-#include "arm/tm-arm.h"
-
-/* The remote stub should be able to single-step. */
-#undef SOFTWARE_SINGLE_STEP_P
-#define SOFTWARE_SINGLE_STEP_P() 0
-
-/* The first 0x20 bytes are the trap vectors.  */
-#undef LOWEST_PC
-#define LOWEST_PC 0x20
-
-/* Override defaults.  */
-
-#undef THUMB_LE_BREAKPOINT
-#define THUMB_LE_BREAKPOINT {0xbe,0xbe}      
-#undef THUMB_BE_BREAKPOINT
-#define THUMB_BE_BREAKPOINT {0xbe,0xbe}      
-
-/* Functions for dealing with Thumb call thunks.  */
-#define SKIP_TRAMPOLINE_CODE(pc) arm_skip_stub (pc)
-extern int arm_in_call_stub (CORE_ADDR pc, char *name);
-extern CORE_ADDR arm_skip_stub (CORE_ADDR pc);
-
-#endif /* TM_ARMEMBED_H */

--
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  [hidden email]