* doc/invoke.texi (TC_LARGEST_EXPONENT_IS_NORMAL): Document.
[deliverable/binutils-gdb.git] / gdb / arch-utils.c
index b99e62a9befbdd0eeea2b19e18e447cd149cd668..5612ddf841c791f296c6c40ca802dd7073fbae6b 100644 (file)
@@ -225,6 +225,19 @@ default_double_format (struct gdbarch *gdbarch)
     }
 }
 
+void
+default_print_float_info (void)
+{
+#ifdef FLOAT_INFO
+#if GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL
+#error "FLOAT_INFO defined in multi-arch"
+#endif
+  FLOAT_INFO;
+#else
+  printf_filtered ("No floating point info available for this processor.\n");
+#endif
+}
+
 /* Misc helper functions for targets. */
 
 int
@@ -359,6 +372,18 @@ init_frame_pc_default (int fromleaf, struct frame_info *prev)
     prev->pc = read_pc ();
 }
 
+void
+default_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
+{
+  return;
+}
+
+void
+default_coff_make_msymbol_special (int val, struct minimal_symbol *msym)
+{
+  return;
+}
+
 int
 cannot_register_not (int regnum)
 {
@@ -399,30 +424,14 @@ generic_register_virtual_size (int regnum)
 \f
 /* 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 BFD_ENDIAN_BIG */
-#ifndef TARGET_BYTE_ORDER_DEFAULT
-#define TARGET_BYTE_ORDER_DEFAULT BFD_ENDIAN_BIG
-#endif
-#endif
-#if !TARGET_BYTE_ORDER_SELECTABLE_P
-#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
-#endif
-#ifndef TARGET_BYTE_ORDER_DEFAULT
-#define TARGET_BYTE_ORDER_DEFAULT BFD_ENDIAN_BIG /* arbitrary */
-#endif
 /* ``target_byte_order'' is only used when non- multi-arch.
-   Multi-arch targets obtain the current byte order using
-   TARGET_BYTE_ORDER which is controlled by gdbarch.*. */
-int target_byte_order = TARGET_BYTE_ORDER_DEFAULT;
+   Multi-arch targets obtain the current byte order using the
+   TARGET_BYTE_ORDER gdbarch method.
+
+   The choice of initial value is entirely arbitrary.  During startup,
+   the function initialize_current_architecture() updates this value
+   based on default byte-order information extracted from BFD.  */
+int target_byte_order = BFD_ENDIAN_BIG;
 int target_byte_order_auto = 1;
 
 static const char endian_big[] = "big";
@@ -453,11 +462,7 @@ show_endian (char *args, int from_tty)
 static void
 set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c)
 {
-  if (!TARGET_BYTE_ORDER_SELECTABLE_P)
-    {
-      printf_unfiltered ("Byte order is not selectable.");
-    }
-  else if (set_endian_string == endian_auto)
+  if (set_endian_string == endian_auto)
     {
       target_byte_order_auto = 1;
     }
@@ -508,33 +513,20 @@ set_endian (char *ignore_args, int from_tty, struct cmd_list_element *c)
 static void
 set_endian_from_file (bfd *abfd)
 {
+  int want;
   if (GDB_MULTI_ARCH)
     internal_error (__FILE__, __LINE__,
                    "set_endian_from_file: not for multi-arch");
-  if (TARGET_BYTE_ORDER_SELECTABLE_P)
-    {
-      int want;
-      
-      if (bfd_big_endian (abfd))
-       want = BFD_ENDIAN_BIG;
-      else
-       want = BFD_ENDIAN_LITTLE;
-      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 == BFD_ENDIAN_BIG ? "big" : "little",
-                TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "big" : "little");
-    }
+  if (bfd_big_endian (abfd))
+    want = BFD_ENDIAN_BIG;
   else
-    {
-      if (bfd_big_endian (abfd)
-         ? TARGET_BYTE_ORDER != BFD_ENDIAN_BIG
-         : TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
-       warning ("%s endian file does not match %s endian target.",
-                bfd_big_endian (abfd) ? "big" : "little",
-                TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "big" : "little");
-    }
+    want = BFD_ENDIAN_LITTLE;
+  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 == BFD_ENDIAN_BIG ? "big" : "little",
+            TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "big" : "little");
 }
 
 
@@ -759,9 +751,7 @@ initialize_current_architecture (void)
                        "initialize_current_architecture: Arch not found");
     }
 
-  /* take several guesses at a byte order. */
-  /* NB: can't use TARGET_BYTE_ORDER_DEFAULT as its definition is
-     forced above. */
+  /* Take several guesses at a byte order.  */
   if (info.byte_order == BFD_ENDIAN_UNKNOWN
       && default_bfd_vec != NULL)
     {
@@ -803,7 +793,13 @@ initialize_current_architecture (void)
        }
     }
   else
-    initialize_non_multiarch ();
+    {
+      /* If the multi-arch logic comes up with a byte-order (from BFD)
+         use it for the non-multi-arch case.  */
+      if (info.byte_order != BFD_ENDIAN_UNKNOWN)
+       target_byte_order = info.byte_order;
+      initialize_non_multiarch ();
+    }
 
   /* Create the ``set architecture'' command appending ``auto'' to the
      list of architectures. */
@@ -822,7 +818,7 @@ initialize_current_architecture (void)
                          arches, &set_architecture_string,
                          "Set architecture of target.",
                          &setlist);
-    c->function.sfunc = set_architecture;
+    set_cmd_sfunc (c, set_architecture);
     add_alias_cmd ("processor", "architecture", class_support, 1, &setlist);
     /* Don't use set_from_show - need to print both auto/manual and
        current setting. */
@@ -857,7 +853,7 @@ _initialize_gdbarch_utils (void)
                        endian_enum, &set_endian_string,
                        "Set endianness of target.",
                        &setlist);
-  c->function.sfunc = set_endian;
+  set_cmd_sfunc (c, set_endian);
   /* Don't use set_from_show - need to print both auto/manual and
      current setting. */
   add_cmd ("endian", class_support, show_endian,
This page took 0.025167 seconds and 4 git commands to generate.