aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2016-03-08 01:45:09 +0000
committerPedro Alves <palves@redhat.com>2016-03-09 03:14:07 +0000
commit114d7832b0e07452277d748c81d8bc0c5675a1bc (patch)
tree63d2ce66e42ce324d7c4508d972e1bdbfd236645
parentd7a87b5e4343467db23b70e73b156c9cc79c50ea (diff)
downloadgdb-114d7832b0e07452277d748c81d8bc0c5675a1bc.zip
gdb-114d7832b0e07452277d748c81d8bc0c5675a1bc.tar.gz
gdb-114d7832b0e07452277d748c81d8bc0c5675a1bc.tar.bz2
[CRIS] Don't internal error if forced big endian
This fixes: $ ./gdb -q -ex "set endian big" -ex "set architecture cris" The target is assumed to be big endian .../src/gdb/cris-tdep.c:4051: internal-error: cris_gdbarch_init: big endian byte order in info A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) The "set cris-version" command can likewise cause internal errors. The gdbarch init routine should be returning 0 to reject the architecture instead of internal erroring on user input. gdb/ChangeLog: 2016-03-09 Pedro Alves <palves@redhat.com> * cris-tdep.c (cris_gdbarch_init): Return 0 if the info's byte order is BFD_ENDIAN_BIG or if the cris version is unsupported.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/cris-tdep.c16
2 files changed, 12 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1718ff1..a6414c1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2016-03-09 Pedro Alves <palves@redhat.com>
+ * cris-tdep.c (cris_gdbarch_init): Return 0 if the info's byte
+ order is BFD_ENDIAN_BIG or if the cris version is unsupported.
+
+2016-03-09 Pedro Alves <palves@redhat.com>
+
* doublest.c: Extend comments.
(floatformat_to_doublest, floatformat_from_doublest): Copy the
floatformat's total size, not the host type's size.
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index 971ee9f..d350ce8 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -4048,10 +4048,10 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
break;
case BFD_ENDIAN_BIG:
- internal_error (__FILE__, __LINE__,
- _("cris_gdbarch_init: big endian byte order in info"));
- break;
-
+ /* Cris is always little endian, but the user could have forced
+ big endian with "set endian". */
+ return 0;
+
default:
internal_error (__FILE__, __LINE__,
_("cris_gdbarch_init: unknown byte order in info"));
@@ -4083,9 +4083,7 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
case 8:
case 9:
/* Old versions; not supported. */
- internal_error (__FILE__, __LINE__,
- _("cris_gdbarch_init: unsupported CRIS version"));
- break;
+ return 0;
case 10:
case 11:
@@ -4125,8 +4123,8 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
break;
default:
- internal_error (__FILE__, __LINE__,
- _("cris_gdbarch_init: unknown CRIS version"));
+ /* Unknown version. */
+ return 0;
}
/* Dummy frame functions (shared between CRISv10 and CRISv32 since they