CARP:
authorAndrew Cagney <cagney@redhat.com>
Sun, 13 Dec 1998 23:28:46 +0000 (23:28 +0000)
committerAndrew Cagney <cagney@redhat.com>
Sun, 13 Dec 1998 23:28:46 +0000 (23:28 +0000)
Re-do TARGET_PRINT_INSN_INFO, TARGET_PRINT_INSN, TARGET_ARCHITECTURE,
TARGET_ARCHITECTURE_AUTO, TARGET_BYTE_ORDER_SELECTABLE_P,
TARGET_BYTE_ORDER so that they can all be overriden.

Document.

Convert mn10300 and PPC targets.

12 files changed:
gdb/ChangeLog
gdb/config/mn10300/tm-mn10300.h
gdb/config/powerpc/tm-ppcle-eabi.h
gdb/defs.h
gdb/doc/ChangeLog
gdb/gdbtk-cmds.c
gdb/printcmd.c
gdb/remote-e7000.c
gdb/remote-rdi.c
gdb/remote-sim.c
gdb/sh-tdep.c
gdb/top.c

index 3201f1450e34010a53aae460e6c06e0a7972cd4c..40c10a8ba175f78d690eeab7e22d3c5b945b7cfe 100644 (file)
@@ -1,3 +1,21 @@
+Sun Dec 13 09:52:51 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * defs.h (TARGET_PRINT_INSN_INFO, TARGET_PRINT_INSN): Define.
+       (TARGET_ARCHITECTURE, TARGET_ARCHITECTURE_AUTO): Define.
+       (TARGET_BYTE_ORDER_AUTO): Define.
+       (TARGET_BYTE_ORDER_SELECTABLE_P): Provide default. Replaces
+       TARGET_BYTE_ORDER_SELECTABLE. Handle compat issues.
+       (BITS_BIG_ENDIAN): Simplify.
+       (TARGET_FLOAT_FORMAT): Ditto.
+       (TARGET_DOUBLE_FORMAT): 
+
+       * remote-e7000.c, sh-tdep.c, printcmd.c, gdbtk-cmds.c,
+       remote-sim.c, remote-rdi.c, sparc-tdep.c: Update.
+       
+       * config/powerpc/tm-ppcle-eabi.h, config/rs6000/tm-rs6000.h,
+       config/powerpc/tm-ppc-eabi.h, config/mn10300/tm-mn10300.h:
+       Convert.
+
 Sat Dec 12 09:28:13 1998  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * frame.h (struct frame_info): Add CORE_ADDR *saved_regs and
index 769924c1dfd6fff828463fdeb4c67fcb269283bb..b77232345bc7468fcc83e992e56382f1b2a49d8b 100644 (file)
@@ -20,7 +20,7 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* The mn10300 is little endian.  */
-#define TARGET_BYTE_ORDER LITTLE_ENDIAN
+#define TARGET_BYTE_ORDER_DEFAULT LITTLE_ENDIAN
 
 /* All registers are 32bits (phew!).  */
 #define REGISTER_SIZE 4
index 309dd6f935ed835ee23a98d921fa59c8969ac528..355195d8a0e8d0381e1c3841dcf26af8975f804d 100644 (file)
@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* Use normal ppc-eabi definitions */
 #include "powerpc/tm-ppc-eabi.h"
 
-#undef  TARGET_BYTE_ORDER
-#define TARGET_BYTE_ORDER      LITTLE_ENDIAN
+#undef  TARGET_BYTE_ORDER_DEFAULT
+#define TARGET_BYTE_ORDER_DEFAULT      LITTLE_ENDIAN
 
 #endif /* TM_PPCLE_EABI_H */
index 831a083377da04eb2eedcca24a0f7f347c547cf4..1c3e804b1e329c7d84a5d490b30900aae815e902 100644 (file)
@@ -780,15 +780,35 @@ extern void free ();
 
 /* Target-system-dependent parameters for GDB. */
 
+/* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
+   is selectable at runtime.  The user can use the `set endian'
+   command to change it.  TARGET_BYTE_ORDER_AUTO is nonzero when
+   target_byte_order should be auto-detected (from the program image
+   say). */
+
+#ifndef TARGET_BYTE_ORDER_SELECTABLE_P
+/* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
+   when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
 #ifdef TARGET_BYTE_ORDER_SELECTABLE
-/* The target endianness is selectable at runtime.  Define
-   TARGET_BYTE_ORDER to be a variable.  The user can use the `set
-   endian' command to change it.  */
-#undef TARGET_BYTE_ORDER
-#define TARGET_BYTE_ORDER target_byte_order
+#define TARGET_BYTE_ORDER_SELECTABLE_P 1
+#else
+#define TARGET_BYTE_ORDER_SELECTABLE_P 0
+#endif
+#endif
+
 extern int target_byte_order;
-/* Nonzero when target_byte_order auto-detected */
+#ifdef TARGET_BYTE_ORDER_SELECTABLE
+/* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
+   and expect defs.h to re-define TARGET_BYTE_ORDER. */
+#undef TARGET_BYTE_ORDER
+#endif
+#ifndef TARGET_BYTE_ORDER
+#define TARGET_BYTE_ORDER (target_byte_order + 0)
+#endif
+
 extern int target_byte_order_auto;
+#ifndef TARGET_BYTE_ORDER_AUTO
+#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
 #endif
 
 extern void set_endian_from_file PARAMS ((bfd *));
@@ -796,6 +816,8 @@ extern void set_endian_from_file PARAMS ((bfd *));
 /* The target architecture can be set at run-time. */
 extern int target_architecture_auto;
 extern const bfd_arch_info_type *target_architecture;
+#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
+#define TARGET_ARCHITECTURE (target_architecture + 0)
 extern void set_architecture_from_file PARAMS ((bfd *));
 /* Notify target of a change to the selected architecture. Zero return
    status indicates that the target did not like the change. */
@@ -864,22 +886,8 @@ extern void set_architecture_from_arch_mach PARAMS ((enum bfd_architecture arch,
    from byte/word byte order.  */
 
 #if !defined (BITS_BIG_ENDIAN)
-#ifndef TARGET_BYTE_ORDER_SELECTABLE
-
-#if TARGET_BYTE_ORDER == BIG_ENDIAN
-#define BITS_BIG_ENDIAN 1
-#endif /* Big endian.  */
-
-#if TARGET_BYTE_ORDER == LITTLE_ENDIAN
-#define BITS_BIG_ENDIAN 0
-#endif /* Little endian.  */
-
-#else /* defined (TARGET_BYTE_ORDER_SELECTABLE) */
-
 #define BITS_BIG_ENDIAN (TARGET_BYTE_ORDER == BIG_ENDIAN)
-
-#endif /* defined (TARGET_BYTE_ORDER_SELECTABLE) */
-#endif /* BITS_BIG_ENDIAN not defined.  */
+#endif
 
 /* In findvar.c.  */
 
@@ -929,33 +937,15 @@ extern const struct floatformat floatformat_unknown;
 #define HOST_LONG_DOUBLE_FORMAT &floatformat_unknown
 #endif
 
-#ifndef TARGET_BYTE_ORDER_SELECTABLE
-#  if TARGET_BYTE_ORDER == BIG_ENDIAN
-#    ifndef TARGET_FLOAT_FORMAT
-#      define TARGET_FLOAT_FORMAT &floatformat_ieee_single_big
-#    endif
-#    ifndef TARGET_DOUBLE_FORMAT
-#      define TARGET_DOUBLE_FORMAT &floatformat_ieee_double_big
-#    endif
-#  else /* LITTLE_ENDIAN */
-#    ifndef TARGET_FLOAT_FORMAT
-#      define TARGET_FLOAT_FORMAT &floatformat_ieee_single_little
-#    endif
-#    ifndef TARGET_DOUBLE_FORMAT
-#      define TARGET_DOUBLE_FORMAT &floatformat_ieee_double_little
-#    endif
-#  endif
-#else                          /* TARGET_BYTE_ORDER_SELECTABLE */
-#  ifndef TARGET_FLOAT_FORMAT
-#    define TARGET_FLOAT_FORMAT (target_byte_order == BIG_ENDIAN \
-                                ? &floatformat_ieee_single_big \
-                                : &floatformat_ieee_single_little)
-#  endif
-#  ifndef TARGET_DOUBLE_FORMAT
-#    define TARGET_DOUBLE_FORMAT (target_byte_order == BIG_ENDIAN \
-                                 ? &floatformat_ieee_double_big \
-                                 : &floatformat_ieee_double_little)
-#  endif
+#ifndef TARGET_FLOAT_FORMAT
+#define TARGET_FLOAT_FORMAT (target_byte_order == BIG_ENDIAN \
+                            ? &floatformat_ieee_single_big \
+                            : &floatformat_ieee_single_little)
+#endif
+#ifndef TARGET_DOUBLE_FORMAT
+#define TARGET_DOUBLE_FORMAT (target_byte_order == BIG_ENDIAN \
+                             ? &floatformat_ieee_double_big \
+                             : &floatformat_ieee_double_little)
 #endif
 
 #ifndef TARGET_LONG_DOUBLE_FORMAT
@@ -1036,6 +1026,12 @@ extern void dis_asm_print_address PARAMS ((bfd_vma addr,
 
 extern int (*tm_print_insn) PARAMS ((bfd_vma, disassemble_info*));
 extern disassemble_info tm_print_insn_info;
+#ifndef TARGET_PRINT_INSN
+#define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
+#endif
+#ifndef TARGET_PRINT_INSN_INFO
+#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
+#endif
 
 /* Hooks for alternate command interfaces.  */
 
index 922a7e01d537b3bb76d8edb13139dc455cb1e559..ebaf4f94a491cd5a4c98ca6e4d119ee57e5619ec 100644 (file)
@@ -1,3 +1,8 @@
+Sun Dec 13 10:27:59 1998  Andrew Cagney  <cagney@b1.cygnus.com>
+
+       * gdbint.texinfo: Document TARGET_BYTE_ORDER_DEFAULT and
+       TARGET_BYTE_ORDER_SELECTABLE_P.
+
 Thu Dec 10 16:07:09 1998  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * gdbint.texinfo (FRAME_FIND_SAVED_REGS): Document.
index 7001d062f6a5798ab07b2c37f27108e0a46285a9..fbf7458bb56f4355555e36f30b2eaad3a425068b 100644 (file)
@@ -2081,7 +2081,7 @@ gdb_disassemble (clientData, interp, objc, objv)
       di_initialized = 1;
     }
 
-  di.mach = tm_print_insn_info.mach;
+  di.mach = TM_PRINT_INSN_INFO->mach;
   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
     di.endian = BFD_ENDIAN_BIG;
   else
index ecde3eb5aba166f4b4fad58409a1d8cc9dadba00..bbc4ba00c0e0286815c6c547462520e6133c1035 100644 (file)
@@ -2283,20 +2283,16 @@ print_insn (memaddr, stream)
      CORE_ADDR memaddr;
      GDB_FILE *stream;
 {
-  /* If there's no disassembler, something is very wrong.  */
-  if (tm_print_insn == NULL)
-    abort ();
-
   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
-    tm_print_insn_info.endian = BFD_ENDIAN_BIG;
+    TARGET_PRINT_INSN_INFO->endian = BFD_ENDIAN_BIG;
   else
-    tm_print_insn_info.endian = BFD_ENDIAN_LITTLE;
+    TARGET_PRINT_INSN_INFO->endian = BFD_ENDIAN_LITTLE;
 
-  if (target_architecture != NULL)
-    tm_print_insn_info.mach = target_architecture->mach;
+  if (TARGET_ARCHITECTURE != NULL)
+    TARGET_PRINT_INSN_INFO->mach = TARGET_ARCHITECTURE->mach;
   /* else: should set .mach=0 but some disassemblers don't grok this */
 
-  return (*tm_print_insn) (memaddr, &tm_print_insn_info);
+  return TARGET_PRINT_INSN (memaddr, TARGET_PRINT_INSN_INFO);
 }
 
 \f
index 20cf774c1b273c7e077855969313a3bee38e0a85..b252084943733ee7ccfe25ffbf5dd1858017838d 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote debugging interface for Hitachi E7000 ICE, for GDB
-   Copyright 1993, 1994, 1996 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1996, 1997, 1998 Free Software Foundation, Inc.
    Contributed by Cygnus Support. 
 
    Written by Steve Chamberlain for Cygnus Support.
@@ -48,6 +48,7 @@
 #include <time.h>
 #include <ctype.h>
 
+
 #if 1
 #define HARD_BREAKPOINTS       /* Now handled by set option. */
 #define BC_BREAKPOINTS use_hard_breakpoints
@@ -381,7 +382,7 @@ e7000_create_inferior (execfile, args, env)
     error ("Can't pass arguments to remote E7000DEBUG process");
 
   if (execfile == 0 || exec_bfd == 0)
-    error ("No exec file specified");
+    error ("No executable file specified");
 
   entry_pt = (int) bfd_get_start_address (exec_bfd);
 
@@ -920,21 +921,19 @@ e7000_fetch_registers ()
 
 #ifdef GDB_TARGET_IS_SH
   wanted = want;
-  if (target_architecture->arch == bfd_arch_sh)
-    switch (target_architecture->mach)
+  if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
+    switch (TARGET_ARCHITECTURE->mach)
       {
       case bfd_mach_sh3:
       case bfd_mach_sh3e:
-       /* start-sanitize-sh4 */        
       case bfd_mach_sh4:
-       /* end-sanitize-sh4 */  
        wanted = want_sh3;
       }
 #else
   if (h8300smode)
     wanted = want_h8300s;
   else
-    wanted = want_h8300h);
+    wanted = want_h8300h;
 #endif
   fetch_regs_from_dump (gch, wanted);
 
@@ -1576,7 +1575,7 @@ e7000_load (args, from_tty)
       perror_with_name (filename);
       return;
     }
-  old_chain = make_cleanup (bfd_close, pbfd);
+  old_chain = make_cleanup ((make_cleanup_func) bfd_close, pbfd);
 
   if (!bfd_check_format (pbfd, bfd_object)) 
     error ("\"%s\" is not an object file: %s", filename,
@@ -1710,8 +1709,6 @@ e7000_mourn_inferior ()
 #define MAX_E7000DEBUG_BREAKPOINTS MAX_BREAKPOINTS
 #endif
 
-extern int memory_breakpoint_size;
-
 /* Since we can change to soft breakpoints dynamically, we must define 
    more than enough.  Was breakaddr[MAX_E7000DEBUG_BREAKPOINTS]. */
 static CORE_ADDR breakaddr[MAX_BREAKPOINTS] = {0};
@@ -2077,21 +2074,19 @@ e7000_wait (pid, status)
 
 #ifdef GDB_TARGET_IS_SH
   wanted_nopc = want_nopc;
-  if (target_architecture->arch == bfd_arch_sh)
-    switch (target_architecture->mach)
+  if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
+    switch (TARGET_ARCHITECTURE->mach)
       {
       case bfd_mach_sh3:
       case bfd_mach_sh3e:
-       /* start-sanitize-sh4 */        
       case bfd_mach_sh4:
-       /* end-sanitize-sh4 */  
        wanted_nopc = want_sh3_nopc;
       }
 #else
   if (h8300smode)
     wanted_nopc = want_nopc_h8300s;
   else
-    wanted_nopc = want_nopc_h8300h);
+    wanted_nopc = want_nopc_h8300h;
 #endif
   fetch_regs_from_dump (gch, wanted_nopc);
 
@@ -2163,59 +2158,61 @@ e7000_stop ()
 
 /* Define the target subroutine names. */
 
-struct target_ops e7000_ops =
+struct target_ops e7000_ops ;
+static void init_e7000_ops(void)
 {
-  "e7000",
-  "Remote Hitachi e7000 target",
-  "Use a remote Hitachi e7000 ICE connected by a serial line,\n\
+  e7000_ops.to_shortname =   "e7000";
+  e7000_ops.to_longname =   "Remote Hitachi e7000 target";
+  e7000_ops.to_doc =   "Use a remote Hitachi e7000 ICE connected by a serial line;\n\
 or a network connection.\n\
 Arguments are the name of the device for the serial line,\n\
 the speed to connect at in bits per second.\n\
 eg\n\
 target e7000 /dev/ttya 9600\n\
-target e7000 foobar",
-  e7000_open,                  /* to_open */
-  e7000_close,                 /* to_close */
-  0,                           /* to_attach */
-  e7000_detach,                        /* to_detach */
-  e7000_resume,                        /* to_resume */
-  e7000_wait,                  /* to_wait */
-  e7000_fetch_register,                /* to_fetch_registers */
-  e7000_store_register,                /* to_store_registers */
-  e7000_prepare_to_store,      /* to_prepare_to_store */
-  e7000_xfer_inferior_memory,  /* to_xfer_memory */
-  e7000_files_info,            /* to_files_info */
-  e7000_insert_breakpoint,     /* to_insert_breakpoint */
-  e7000_remove_breakpoint,     /* to_remove_breakpoint */
-  0,                           /* to_terminal_init */
-  0,                           /* to_terminal_inferior */
-  0,                           /* to_terminal_ours_for_output */
-  0,                           /* to_terminal_ours */
-  0,                           /* to_terminal_info */
-  e7000_kill,                  /* to_kill */
-  e7000_load,                  /* to_load */
-  0,                           /* to_lookup_symbol */
-  e7000_create_inferior,       /* to_create_inferior */
-  e7000_mourn_inferior,                /* to_mourn_inferior */
-  0,                           /* to_can_run */
-  0,                           /* to_notice_signals */
-  0,                           /* to_thread_alive */
-  e7000_stop,                  /* to_stop */
-  process_stratum,             /* to_stratum */
-  0,                           /* next (unused) */
-  1,                           /* to_has_all_memory */
-  1,                           /* to_has_memory */
-  1,                           /* to_has_stack */
-  1,                           /* to_has_registers */
-  1,                           /* to_has_execution */
-  0,                           /* to_sections */
-  0,                           /* to_sections_end */
-  OPS_MAGIC,                   /* Always the last thing */
+target e7000 foobar" ;
+  e7000_ops.to_open =   e7000_open;    
+  e7000_ops.to_close =   e7000_close;  
+  e7000_ops.to_attach =   0;           
+  e7000_ops.to_detach =   e7000_detach;        
+  e7000_ops.to_resume =   e7000_resume;        
+  e7000_ops.to_wait  =   e7000_wait;   
+  e7000_ops.to_fetch_registers  =   e7000_fetch_register;
+  e7000_ops.to_store_registers  =   e7000_store_register;
+  e7000_ops.to_prepare_to_store =   e7000_prepare_to_store;
+  e7000_ops.to_xfer_memory  =   e7000_xfer_inferior_memory;
+  e7000_ops.to_files_info  =   e7000_files_info;               
+  e7000_ops.to_insert_breakpoint =   e7000_insert_breakpoint;  
+  e7000_ops.to_remove_breakpoint =   e7000_remove_breakpoint;  
+  e7000_ops.to_terminal_init  =   0;                           
+  e7000_ops.to_terminal_inferior =   0;                                
+  e7000_ops.to_terminal_ours_for_output =   0;                 
+  e7000_ops.to_terminal_ours  =   0;                           
+  e7000_ops.to_terminal_info  =   0;                           
+  e7000_ops.to_kill  =   e7000_kill;           
+  e7000_ops.to_load  =   e7000_load;           
+  e7000_ops.to_lookup_symbol =   0;            
+  e7000_ops.to_create_inferior =   e7000_create_inferior;
+  e7000_ops.to_mourn_inferior =   e7000_mourn_inferior;                
+  e7000_ops.to_can_run  =   0;                 
+  e7000_ops.to_notice_signals =   0;           
+  e7000_ops.to_thread_alive  =   0;            
+  e7000_ops.to_stop  =   e7000_stop;           
+  e7000_ops.to_stratum =   process_stratum;    
+  e7000_ops.DONT_USE =   0;                    
+  e7000_ops.to_has_all_memory =   1;           
+  e7000_ops.to_has_memory =   1;               
+  e7000_ops.to_has_stack =   1;                        
+  e7000_ops.to_has_registers =   1;            
+  e7000_ops.to_has_execution =   1;            
+  e7000_ops.to_sections =   0;                 
+  e7000_ops.to_sections_end =   0;             
+  e7000_ops.to_magic =   OPS_MAGIC;            
 };
 
 void
 _initialize_remote_e7000 ()
 {
+  init_e7000_ops() ;
   add_target (&e7000_ops);
 
   add_com ("e7000", class_obscure, e7000_command,
index 3cd3ea12ed83c570ba98e409603a25af9620da50..7b6511e1e7b8c0038910c063d24191281b83d021 100644 (file)
@@ -223,7 +223,7 @@ device is attached to the remote system (e.g. /dev/ttya).");
   if (rslt != adp_ok)
     error ("Could not open device \"%s\"", name);
 
-  gdb_config.bytesex = 2 | (target_byte_order == BIG_ENDIAN ? 1 : 0);
+  gdb_config.bytesex = 2 | (TARGET_BYTE_ORDER == BIG_ENDIAN ? 1 : 0);
   gdb_config.fpe = 1;
   gdb_config.rditype = 2;
   gdb_config.heartbeat_on = 1;
index aaa225230f176f0fc31046f9194fd3c8542cd5a0..0c805447b5b957d359367608d6295f1cacb1cc2a 100644 (file)
@@ -528,8 +528,8 @@ gdbsim_open (args, from_tty)
   strcpy (arg_buf, "gdbsim"); /* 7 */
   /* Specify the byte order for the target when it is both selectable
      and explicitly specified by the user (not auto detected). */
-#ifdef TARGET_BYTE_ORDER_SELECTABLE
-  if (!target_byte_order_auto)
+  if (TARGET_BYTE_ORDER_SELECTABLE_P
+      && !TARGET_BYTE_ORDER_AUTO)
     {
       switch (TARGET_BYTE_ORDER)
        {
@@ -543,13 +543,12 @@ gdbsim_open (args, from_tty)
          fatal ("Value of TARGET_BYTE_ORDER unknown");
        }
     }
-#endif
   /* Specify the architecture of the target when it has been
      explicitly specified */
-  if (!target_architecture_auto)
+  if (!TARGET_ARCHITECTURE_AUTO)
     {
       strcat (arg_buf, " --architecture=");
-      strcat (arg_buf, target_architecture->printable_name);
+      strcat (arg_buf, TARGET_ARCHITECTURE->printable_name);
     }
   /* finally, any explicit args */
   if (args)
index 55fef8995c2b6a38510c68b2c03ebe2a3f3d1f28..226ca2fe5adf60cdb264eeca915fd55417fa2c5c 100644 (file)
@@ -626,8 +626,8 @@ sh_show_regs (args, from_tty)
      int from_tty;
 {
   int cpu;
-  if (target_architecture->arch == bfd_arch_sh)
-    cpu = target_architecture->mach;
+  if (TARGET_ARCHITECTURE->arch == bfd_arch_sh)
+    cpu = TARGET_ARCHITECTURE->mach;
   else
     cpu = 0;
   /* FIXME: sh4 has more registers */
index 944748407663c648f6008d8d565f5783b9fc3cd4..80e02b0fc81fac57a6641dfa05147bfb2acec21b 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -3200,14 +3200,22 @@ dont_repeat_command (ignored, from_tty)
 /* Functions to manipulate the endianness of the target.  */
 
 #ifdef TARGET_BYTE_ORDER_SELECTABLE
+/* compat - Catch old targets that expect a selectable byte-order to
+   default to BIG_ENDIAN */
 #ifndef TARGET_BYTE_ORDER_DEFAULT
 #define TARGET_BYTE_ORDER_DEFAULT BIG_ENDIAN
 #endif
+#endif
+#ifndef TARGET_BYTE_ORDER_DEFAULT
+/* compat - Catch old non byte-order selectable targets that do not
+   define TARGET_BYTE_ORDER_DEFAULT and instead expect
+   TARGET_BYTE_ORDER to be used as the default.  For targets that
+   defined neither TARGET_BYTE_ORDER nor TARGET_BYTE_ORDER_DEFAULT the
+   below will get a strange compiler warning. */
+#define TARGET_BYTE_ORDER_DEFAULT TARGET_BYTE_ORDER
+#endif
 int target_byte_order = TARGET_BYTE_ORDER_DEFAULT;
 int target_byte_order_auto = 1;
-#else
-static int target_byte_order_auto = 0;
-#endif
 
 /* Called if the user enters ``set endian'' without an argument.  */
 static void
@@ -3225,13 +3233,16 @@ set_endian_big (args, from_tty)
      char *args;
      int from_tty;
 {
-#ifdef TARGET_BYTE_ORDER_SELECTABLE
-  target_byte_order = BIG_ENDIAN;
-  target_byte_order_auto = 0;
-#else
-  printf_unfiltered ("Byte order is not selectable.");
-  show_endian (args, from_tty);
-#endif
+  if (TARGET_BYTE_ORDER_SELECTABLE_P)
+    {
+      target_byte_order = BIG_ENDIAN;
+      target_byte_order_auto = 0;
+    }
+  else
+    {
+      printf_unfiltered ("Byte order is not selectable.");
+      show_endian (args, from_tty);
+    }
 }
 
 /* Called by ``set endian little''.  */
@@ -3240,13 +3251,16 @@ set_endian_little (args, from_tty)
      char *args;
      int from_tty;
 {
-#ifdef TARGET_BYTE_ORDER_SELECTABLE
-  target_byte_order = LITTLE_ENDIAN;
-  target_byte_order_auto = 0;
-#else
-  printf_unfiltered ("Byte order is not selectable.");
-  show_endian (args, from_tty);
-#endif
+  if (TARGET_BYTE_ORDER_SELECTABLE_P)
+    {
+      target_byte_order = LITTLE_ENDIAN;
+      target_byte_order_auto = 0;
+    }
+  else
+    {
+      printf_unfiltered ("Byte order is not selectable.");
+      show_endian (args, from_tty);
+    }
 }
 
 /* Called by ``set endian auto''.  */
@@ -3255,12 +3269,15 @@ set_endian_auto (args, from_tty)
      char *args;
      int from_tty;
 {
-#ifdef TARGET_BYTE_ORDER_SELECTABLE
-  target_byte_order_auto = 1;
-#else
-  printf_unfiltered ("Byte order is not selectable.");
-  show_endian (args, from_tty);
-#endif
+  if (TARGET_BYTE_ORDER_SELECTABLE_P)
+    {
+      target_byte_order_auto = 1;
+    }
+  else
+    {
+      printf_unfiltered ("Byte order is not selectable.");
+      show_endian (args, from_tty);
+    }
 }
 
 /* Called by ``show endian''.  */
@@ -3269,11 +3286,11 @@ show_endian (args, from_tty)
      char *args;
      int from_tty;
 {
-  const char *msg =
-    (target_byte_order_auto
+  char *msg =
+    (TARGET_BYTE_ORDER_AUTO
      ? "The target endianness is set automatically (currently %s endian)\n"
      : "The target is assumed to be %s endian\n");
-  printf_unfiltered ((char *) msg, TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
+  printf_unfiltered (msg, (TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little"));
 }
 
 /* Set the endianness from a BFD.  */
@@ -3281,30 +3298,30 @@ void
 set_endian_from_file (abfd)
      bfd *abfd;
 {
-#ifdef TARGET_BYTE_ORDER_SELECTABLE
-  int want;
-
-  if (bfd_big_endian (abfd))
-    want = BIG_ENDIAN;
+  if (TARGET_BYTE_ORDER_SELECTABLE_P)
+    {
+      int want;
+      
+      if (bfd_big_endian (abfd))
+       want = BIG_ENDIAN;
+      else
+       want = LITTLE_ENDIAN;
+      if (TARGET_BYTE_ORDER_AUTO)
+       target_byte_order = want;
+      else if (TARGET_BYTE_ORDER != want)
+       warning ("%s endian file does not match %s endian target.",
+                want == BIG_ENDIAN ? "big" : "little",
+                TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
+    }
   else
-    want = LITTLE_ENDIAN;
-  if (target_byte_order_auto)
-    target_byte_order = want;
-  else if (target_byte_order != want)
-    warning ("%s endian file does not match %s endian target.",
-            want == BIG_ENDIAN ? "big" : "little",
-            TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
-
-#else /* ! defined (TARGET_BYTE_ORDER_SELECTABLE) */
-
-  if (bfd_big_endian (abfd)
-      ? TARGET_BYTE_ORDER != BIG_ENDIAN
-      : TARGET_BYTE_ORDER == BIG_ENDIAN)
-    warning ("%s endian file does not match %s endian target.",
-            bfd_big_endian (abfd) ? "big" : "little",
-            TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
-
-#endif /* ! defined (TARGET_BYTE_ORDER_SELECTABLE) */
+    {
+      if (bfd_big_endian (abfd)
+         ? TARGET_BYTE_ORDER != BIG_ENDIAN
+         : TARGET_BYTE_ORDER == BIG_ENDIAN)
+       warning ("%s endian file does not match %s endian target.",
+                bfd_big_endian (abfd) ? "big" : "little",
+                TARGET_BYTE_ORDER == BIG_ENDIAN ? "big" : "little");
+    }
 }
 \f
 /* Functions to manipulate the architecture of the target */