This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC][PATCH] Big-endian hosts: Fix "set architecture cris"
- From: Pedro Alves <palves at redhat dot com>
- To: Andreas Arnez <arnez at linux dot vnet dot ibm dot com>, gdb-patches at sourceware dot org
- Date: Thu, 26 Jan 2017 12:55:06 +0000
- Subject: Re: [RFC][PATCH] Big-endian hosts: Fix "set architecture cris"
- Authentication-results: sourceware.org; auth=none
- References: <m360lcweot.fsf@oc1027705133.ibm.com>
OK.
Thanks,
Pedro Alves
On 01/18/2017 03:49 PM, Andreas Arnez wrote:
> The all-architectures-1.exp test case currently yields 66 FAILs on s390x,
> because the "set architecture" command fails each time when attempting to
> switch to "cris", "crisv32", or "cris:common_v10_v32". Actually, the
> command would succeed if the endianness had been set to "little" before.
> Instead, the test case sets the endianness to "auto", which results in
> "big" on s390x.
>
> So on x86_64:
>
> (gdb) set endian auto
> The target endianness is set automatically (currently little endian)
> (gdb) set architecture cris
> warning: A handler for the OS ABI "AIX" is not built into this configuration
> of GDB. Attempting to continue with the default cris settings.
>
> The target architecture is assumed to be cris
>
> But on s390x:
>
> (gdb) set endian auto
> The target endianness is set automatically (currently big endian)
> (gdb) set architecture cris
> Architecture `cris' not recognized.
>
> See also the test results for s390x and ppc64be:
>
> https://sourceware.org/ml/gdb-testers/2016-q4/msg05150.html
> https://sourceware.org/ml/gdb-testers/2016-q4/msg05713.html
>
> Indeed, cris_gdbarch_init in cris-tdep.c returns a failure unless the
> user-specified endianness is "little". Other architectures usually ignore
> the user-specified endianness and return a valid gdbarch anyhow, even if
> they can not really cope with the given endianness.
>
> This patch removes the check in cris-tdep.c and forces little-endian byte
> order instead.
>
> gdb/ChangeLog:
>
> * cris-tdep.c (cris_gdbarch_init): Remove check for
> info.byte_order and force it to BFD_ENDIAN_LITTLE.
> ---
> gdb/cris-tdep.c | 19 +------------------
> 1 file changed, 1 insertion(+), 18 deletions(-)
>
> diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
> index c2ce338..aefd44a 100644
> --- a/gdb/cris-tdep.c
> +++ b/gdb/cris-tdep.c
> @@ -4022,31 +4022,14 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
>
> /* No matching architecture was found. Create a new one. */
> tdep = XNEW (struct gdbarch_tdep);
> + info.byte_order = BFD_ENDIAN_LITTLE;