This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC PATCH]: Sparc gold support


From: Ian Lance Taylor <iant@google.com>
Date: Mon, 14 Apr 2008 15:18:31 -0700

> David Miller <davem@davemloft.net> writes:
> 
> > Firstly I know the gold/configure* aren't right.  What I want to be
> > able to say is that if you ask for the sparc target, we need to enable
> > support for both endiannesses and both 32-bit and 64-bit support.
> > Any suggestions?
> 
> The entries in configure.tgt have two purposes.  One is to tell gold
> which combinations to build.  The other is to set the default to use
> when there is no input file.  So I think we need to add
> targ_extra_size and targ_extra_big_endian.  Those will be used to set
> target_32_little, etc., but won't change default_size, etc.

This should match your suggestion:

Index: configure.ac
===================================================================
RCS file: /cvs/src/src/gold/configure.ac,v
retrieving revision 1.29
diff -u -p -r1.29 configure.ac
--- configure.ac	11 Apr 2008 21:24:29 -0000	1.29
+++ configure.ac	15 Apr 2008 03:21:53 -0000
@@ -107,24 +107,25 @@ for targ in $target $canon_targets; do
       AC_MSG_ERROR("unsupported target $targ")
     else
       targetobjs="$targetobjs ${targ_obj}.\$(OBJEXT)"
-      if test "$targ_size" = "32"; then
-        if test "$targ_big_endian" = "false"; then
-	  targ_32_little=yes
-        elif test "$targ_big_endian" = "true"; then
-	  targ_32_big=yes
-	else
-	  AC_MSG_ERROR("bad configure.tgt endian $targ_big_endian")
-	fi
-      elif test "$targ_size" = "64"; then
-        if test "$targ_big_endian" = "false"; then
-	  targ_64_little=yes
-        elif test "$targ_big_endian" = "true"; then
-	  targ_64_big=yes
-	else
-	  AC_MSG_ERROR("bad configure.tgt endian $targ_big_endian")
-	fi
-      else
-	AC_MSG_ERROR("bad configure.tgt size $targ_size")
+      if test "$targ_size" = "32" -o "$targ_extra_size" = "32"; then
+	  if test "$targ_big_endian" = "true" \
+	      -o "$targ_extra_big_endian" = "true"; then
+	      targ_32_big=yes
+	  fi
+	  if test "$targ_big_endian" = "false" \
+	      -o "$targ_extra_big_endian" = "false"; then
+	      targ_32_little=yes
+	  fi
+      fi
+      if test "$targ_size" = "64" -o "$targ_extra_size" = "64"; then
+	  if test "$targ_big_endian" = "true" \
+	      -o "$targ_extra_big_endian" = "true"; then
+	      targ_64_big=yes
+	  fi
+	  if test "$targ_big_endian" = "false" \
+	      -o "$targ_extra_big_endian" = "false"; then
+	      targ_64_little=yes
+	  fi
       fi
 
       if test "$target" = "$targ"; then
Index: configure.tgt
===================================================================
RCS file: /cvs/src/src/gold/configure.tgt,v
retrieving revision 1.1
diff -u -p -r1.1 configure.tgt
--- configure.tgt	6 Feb 2008 20:32:10 -0000	1.1
+++ configure.tgt	15 Apr 2008 03:21:53 -0000
@@ -29,10 +29,12 @@
 # canonicalized GNU configuration triplet.  It sets the following
 # shell variables:
 
-# targ_obj         object file to include in the link, with no extension
-# targ_machine     ELF machine code for this target
-# targ_size        size of this target--32 or 64
-# targ_big_endian  whether the target is big-endian--true or false
+# targ_obj               object file to include in the link, with no extension
+# targ_machine           ELF machine code for this target
+# targ_size              size of this target--32 or 64
+# targ_extra_size        extra targ_size setting for the target
+# targ_big_endian        whether the target is big-endian--true or false
+# targ_extra_big_endian  extra targ_big_endian setting for the target
 
 # If the target is not recognized targ_obj is set to "UNKNOWN".
 
@@ -49,6 +51,22 @@ x86_64*)
   targ_size=64
   targ_big_endian=false
   ;;
+sparc-*)
+  targ_obj=sparc
+  targ_machine=EM_SPARC
+  targ_size=32
+  targ_extra_size=64
+  targ_big_endian=true
+  targ_extra_big_endian=false
+  ;;
+sparc64-*)
+  targ_obj=sparc
+  targ_machine=EM_SPARCV9
+  targ_size=64
+  targ_extra_size=32
+  targ_big_endian=true
+  targ_extra_big_endian=false
+  ;;
 *)
   targ_obj=UNKNOWN
   ;;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]