1/* BFD back-end for rs6000 support
2   Copyright (C) 1990-2017 Free Software Foundation, Inc.
3   Written by Mimi Phuong-Thao Vo of IBM
4   and John Gilmore of Cygnus Support.
5
6   This file is part of BFD, the Binary File Descriptor library.
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 3 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; if not, write to the Free Software
20   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21   MA 02110-1301, USA.  */
22
23#include "sysdep.h"
24#include "bfd.h"
25#include "libbfd.h"
26
27/* The RS/6000 architecture is compatible with the PowerPC common
28   architecture.  */
29
30static const bfd_arch_info_type *
31rs6000_compatible (const bfd_arch_info_type *a,
32		   const bfd_arch_info_type *b)
33{
34  BFD_ASSERT (a->arch == bfd_arch_rs6000);
35  switch (b->arch)
36    {
37    default:
38      return NULL;
39    case bfd_arch_rs6000:
40      return bfd_default_compatible (a, b);
41    case bfd_arch_powerpc:
42      if (a->mach == bfd_mach_rs6k)
43	return b;
44      return NULL;
45    }
46  /*NOTREACHED*/
47}
48
49static const bfd_arch_info_type arch_info_struct[] =
50{
51  {
52    32,	/* 32 bits in a word */
53    32,	/* 32 bits in an address */
54    8,	/* 8 bits in a byte */
55    bfd_arch_rs6000,
56    bfd_mach_rs6k_rs1,
57    "rs6000",
58    "rs6000:rs1",
59    3,
60    FALSE, /* not the default */
61    rs6000_compatible,
62    bfd_default_scan,
63    bfd_arch_default_fill,
64    &arch_info_struct[1]
65  },
66  {
67    32,	/* 32 bits in a word */
68    32,	/* 32 bits in an address */
69    8,	/* 8 bits in a byte */
70    bfd_arch_rs6000,
71    bfd_mach_rs6k_rsc,
72    "rs6000",
73    "rs6000:rsc",
74    3,
75    FALSE, /* not the default */
76    rs6000_compatible,
77    bfd_default_scan,
78    bfd_arch_default_fill,
79    &arch_info_struct[2]
80  },
81  {
82    32,	/* 32 bits in a word */
83    32,	/* 32 bits in an address */
84    8,	/* 8 bits in a byte */
85    bfd_arch_rs6000,
86    bfd_mach_rs6k_rs2,
87    "rs6000",
88    "rs6000:rs2",
89    3,
90    FALSE, /* not the default */
91    rs6000_compatible,
92    bfd_default_scan,
93    bfd_arch_default_fill,
94    0
95  }
96};
97
98const bfd_arch_info_type bfd_rs6000_arch =
99  {
100    32,	/* 32 bits in a word */
101    32,	/* 32 bits in an address */
102    8,	/* 8 bits in a byte */
103    bfd_arch_rs6000,
104    bfd_mach_rs6k,	/* POWER common architecture */
105    "rs6000",
106    "rs6000:6000",
107    3,
108    TRUE, /* the default */
109    rs6000_compatible,
110    bfd_default_scan,
111    bfd_arch_default_fill,
112    &arch_info_struct[0]
113  };
114