bfd/archures.c and bfd_mach_ppc
Alan Modra
amodra@bigpond.net.au
Sat Jan 26 00:43:00 GMT 2002
On Fri, Jan 25, 2002 at 02:05:19PM -0500, Jimi X wrote:
>
> in bfd/archures.c:165 (and then bfd-in2.h) bfd_mach_ppc is defined as
> 0.
>
> this causes bfd_default_set_arch_mach() (bfd/archures.c:592) to choose
> the 32bit powerpc (bfd/cpu-powerpc.c:222) register definition
> regardless of the target size.
Hi Jimi,
I think bfd_mach_ppc is intentionally set to zero as a default mach
to cover all ppc variants. Hmm, I guess the real bug is in the
order in which the archs are scanned. cpu-powerpc.c ought to look
at bfd_mach_ppc _last_. Could you try the attached diff?
--
Alan Modra
IBM OzLabs - Linux Technology Centre
-------------- next part --------------
* archures.c (bfd_powerpc_arch): Rename to bfd_powerpc_archs.
(bfd_powerpc_arch): Define.
* cpu-powerpc.c (bfd_powerpc_arch): Move to last entry of..
(arch_info_struct): ..this array. Rename to bfd_powerpc_archs,
and make global.
Index: bfd/archures.c
===================================================================
RCS file: /cvs/src/src/bfd/archures.c,v
retrieving revision 1.41
diff -u -p -r1.41 archures.c
--- archures.c 2001/12/08 03:45:48 1.41
+++ archures.c 2002/01/25 23:03:21
@@ -319,7 +319,8 @@ extern const bfd_arch_info_type bfd_mips
extern const bfd_arch_info_type bfd_mn10200_arch;
extern const bfd_arch_info_type bfd_mn10300_arch;
extern const bfd_arch_info_type bfd_pdp11_arch;
-extern const bfd_arch_info_type bfd_powerpc_arch;
+extern const bfd_arch_info_type bfd_powerpc_archs[];
+#define bfd_powerpc_arch bfd_powerpc_archs[0]
extern const bfd_arch_info_type bfd_rs6000_arch;
extern const bfd_arch_info_type bfd_pj_arch;
extern const bfd_arch_info_type bfd_sh_arch;
Index: bfd/cpu-powerpc.c
===================================================================
RCS file: /cvs/src/src/bfd/cpu-powerpc.c,v
retrieving revision 1.7
diff -u -p -r1.7 cpu-powerpc.c
--- cpu-powerpc.c 2001/08/27 10:22:03 1.7
+++ cpu-powerpc.c 2002/01/25 23:03:21
@@ -47,7 +47,7 @@ powerpc_compatible (a,b)
/*NOTREACHED*/
}
-static const bfd_arch_info_type arch_info_struct[] =
+const bfd_arch_info_type bfd_powerpc_archs[] =
{
{
32, /* 32 bits in a word */
@@ -61,7 +61,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[1]
+ &bfd_powerpc_archs[1]
},
{
32, /* 32 bits in a word */
@@ -75,7 +75,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[2]
+ &bfd_powerpc_archs[2]
},
{
32, /* 32 bits in a word */
@@ -89,7 +89,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[3]
+ &bfd_powerpc_archs[3]
},
{
32, /* 32 bits in a word */
@@ -103,7 +103,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[4]
+ &bfd_powerpc_archs[4]
},
{
32, /* 32 bits in a word */
@@ -117,7 +117,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[5]
+ &bfd_powerpc_archs[5]
},
{
64, /* 64 bits in a word */
@@ -131,7 +131,7 @@ static const bfd_arch_info_type arch_inf
BFD_DEFAULT_TARGET_SIZE == 64, /* default for 64 bit target */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[6]
+ &bfd_powerpc_archs[6]
},
{
64, /* 64 bits in a word */
@@ -145,7 +145,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[7]
+ &bfd_powerpc_archs[7]
},
{
64, /* 64 bits in a word */
@@ -159,7 +159,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[8]
+ &bfd_powerpc_archs[8]
},
{
64, /* 64 bits in a word */
@@ -173,7 +173,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[9]
+ &bfd_powerpc_archs[9]
},
{
64, /* 64 bits in a word */
@@ -187,7 +187,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[10]
+ &bfd_powerpc_archs[10]
},
{
32, /* 32 bits in a word */
@@ -201,7 +201,7 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[11]
+ &bfd_powerpc_archs[11]
},
{
32, /* 32 bits in a word */
@@ -215,11 +215,8 @@ static const bfd_arch_info_type arch_inf
false, /* not the default */
powerpc_compatible,
bfd_default_scan,
- 0
- }
-};
-
-const bfd_arch_info_type bfd_powerpc_arch =
+ &bfd_powerpc_archs[12]
+ },
{
32, /* 32 bits in a word */
32, /* 32 bits in an address */
@@ -232,5 +229,6 @@ const bfd_arch_info_type bfd_powerpc_arc
BFD_DEFAULT_TARGET_SIZE != 64, /* default for 32 bit target */
powerpc_compatible,
bfd_default_scan,
- &arch_info_struct[0]
- };
+ 0
+ }
+};
More information about the Binutils
mailing list