S390: Place "s390:31-bit" after default arch in 64-bit arch list

On 64-bit platforms GDB did not include "s390:31-bit" in its list of
architecture names.  This patch fixes that.

To determine the list of architecture names for S390,
gdbarch_printable_names() walks through the linked list of BFD arches
starting with the default S390 arch, which is "s390:64-bit" on 64-bit
platforms.  But since "s390:64-bit" was at the end of that list, the
31-bit architecture was not reached.  The patch swaps the elements of
that list on 64-bit platforms.

bfd/ChangeLog:

	* cpu-s390.c (N): New macro.
	(bfd_s390_31_arch): New.  Define only if default target word size
	is 64 bits.  Otherwise define...
	(bfd_390_64_arch): ...this.  Make static.
	(bfd_s390_arch): Define according to the default target word size.
	Let the 'next' field point to the alternate arch.
This commit is contained in:
Andreas Arnez 2015-03-04 10:40:39 +01:00 committed by Andreas Krebbel
parent 511aee7c39
commit df88b70224
2 changed files with 33 additions and 37 deletions

View File

@ -1,3 +1,12 @@
2015-03-04 Andreas Arnez <arnez@linux.vnet.ibm.com>
* cpu-s390.c (N): New macro.
(bfd_s390_31_arch): New. Define only if default target word size
is 64 bits. Otherwise define...
(bfd_390_64_arch): ...this. Make static.
(bfd_s390_arch): Define according to the default target word size.
Let the 'next' field point to the alternate arch.
2015-03-04 Richard Sandiford <richard.sandiford@arm.com>
PR gas/17843

View File

@ -23,44 +23,31 @@
#include "bfd.h"
#include "libbfd.h"
const bfd_arch_info_type bfd_s390_64_arch =
{
64, /* bits in a word */
64, /* bits in an address */
8, /* bits in a byte */
bfd_arch_s390,
bfd_mach_s390_64,
"s390",
"s390:64-bit",
3, /* section alignment power */
#if BFD_DEFAULT_TARGET_SIZE == 64
TRUE, /* the default */
#else
FALSE, /* the default */
#endif
bfd_default_compatible,
bfd_default_scan,
bfd_arch_default_fill,
NULL
};
#define N(bits, number, print, is_default, next) \
{ \
bits, /* bits in a word */ \
bits, /* bits in an address */ \
8, /* bits in a byte */ \
bfd_arch_s390, \
number, \
"s390", \
print, \
3, /* section alignment power */ \
is_default, \
bfd_default_compatible, \
bfd_default_scan, \
bfd_arch_default_fill, \
next \
}
const bfd_arch_info_type bfd_s390_arch =
{
32, /* bits in a word */
32, /* bits in an address */
8, /* bits in a byte */
bfd_arch_s390,
bfd_mach_s390_31,
"s390",
"s390:31-bit",
3, /* section alignment power */
#if BFD_DEFAULT_TARGET_SIZE == 64
FALSE, /* the default */
static const bfd_arch_info_type bfd_s390_31_arch =
N (32, bfd_mach_s390_31, "s390:31-bit", FALSE, NULL);
const bfd_arch_info_type bfd_s390_arch =
N (64, bfd_mach_s390_64, "s390:64-bit", TRUE, &bfd_s390_31_arch);
#else
TRUE, /* the default */
static const bfd_arch_info_type bfd_s390_64_arch =
N (64, bfd_mach_s390_64, "s390:64-bit", FALSE, NULL);
const bfd_arch_info_type bfd_s390_arch =
N (32, bfd_mach_s390_31, "s390:31-bit", TRUE, &bfd_s390_64_arch);
#endif
bfd_default_compatible,
bfd_default_scan,
bfd_arch_default_fill,
&bfd_s390_64_arch
};