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