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]

PATCH: Fix misc x32 issues


Hi,

I checked in this patch to fix misc x32 issues.  I configured binutils
for target x86_64-x32-linux-gnu to build binutils with x32 format:

[hjl@gnu-6 build-x86_64-x32-linux]$ file ld/ld-new gas/as-new 
ld/ld-new:  ELF 32-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.35, not
stripped
gas/as-new: ELF 32-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.35, not
stripped
[hjl@gnu-6 build-x86_64-x32-linux]$ 


H.J.
---
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 1ce1ac2..9536f02 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elf64-x86-64.c (elf_backend_post_process_headers): Defined
+	for x32.
+
 2011-06-16  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* elf64-x86-64.c: Include <stdarg.h> and CORE_HEADER if
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 23b5559..a929797 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -4995,4 +4995,7 @@ elf32_x86_64_elf_object_p (bfd *abfd)
 #define elf_backend_size_info \
   _bfd_elf32_size_info
 
+#undef  elf_backend_post_process_headers
+#define elf_backend_post_process_headers  _bfd_elf_set_osabi
+
 #include "elf32-target.h"
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog
index 94dcdad..d19d1b0 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* binutils-all/elfedit-1.d: Updated for x32.
+
 2011-05-18  Nick Clifton  <nickc@redhat.com>
 
 	PR binutils/12753
diff --git a/binutils/testsuite/binutils-all/elfedit-1.d b/binutils/testsuite/binutils-all/elfedit-1.d
index 3459315..700d542 100644
--- a/binutils/testsuite/binutils-all/elfedit-1.d
+++ b/binutils/testsuite/binutils-all/elfedit-1.d
@@ -7,8 +7,8 @@
 
 #...
 ELF Header:
-  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
-  Class:                             ELF64
+  Magic:   7f 45 4c 46 0(1|2) 01 01 00 00 00 00 00 00 00 00 00 
+  Class:                             ELF(32|64)
   Data:                              2's complement, little endian
   Version:                           1 \(current\)
 #...
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 1120cdc..32cd61f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,7 @@
+2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* configure.tgt: Support x32.
+
 2011-06-15  Nick Clifton  <nickc@redhat.com>
 
 	* NEWS: Mention addition of TILEPRO and TIKE-Gx support.
diff --git a/gas/configure.tgt b/gas/configure.tgt
index a171a32..7f7f611 100644
--- a/gas/configure.tgt
+++ b/gas/configure.tgt
@@ -81,7 +81,14 @@ case ${cpu} in
   sparclite*)		cpu_type=sparc arch=sparclite ;;
   sparc*)		cpu_type=sparc arch=sparclite ;; # ??? See tc-sparc.c.
   v850*)		cpu_type=v850 ;;
-  x86_64*)		cpu_type=i386 arch=x86_64;;
+  x86_64*)
+    cpu_type=i386
+    if [ x"$vendor" = xx32 ]; then
+      arch=x86_64:32
+    else
+      arch=x86_64
+    fi
+    ;;
   xtensa*)		cpu_type=xtensa arch=xtensa ;;
   *)			cpu_type=${cpu} ;;
 esac
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 683d18d..099104d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,7 @@
+2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* configure.tgt: Support x32.
+
 2011-06-15  Nick Clifton  <nickc@redhat.com>
 
 	* NEWS: Mention addition of TILEPRO and TIKE-Gx support.
diff --git a/ld/configure.tgt b/ld/configure.tgt
index f35298c..dd05975 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -190,6 +190,11 @@ i[3-7]86-*-linux-*)	targ_emul=elf_i386
 			targ64_extra_libpath=elf_x86_64
 			targ_extra_libpath=elf32_x86_64
 			tdir_i386linux=${targ_alias}aout ;;
+x86_64-x32-linux-*)	targ_emul=elf32_x86_64
+			targ_extra_emuls="elf_x86_64 elf_i386 i386linux elf_l1om"
+			targ_extra_libpath="elf_i386 elf_x86_64 elf_l1om"
+			tdir_i386linux=`echo ${targ_alias}aout | sed -e 's/x86_64/i386/'`
+			tdir_elf_i386=`echo ${targ_alias} | sed -e 's/x86_64/i386/'` ;;
 x86_64-*-linux-*)	targ_emul=elf_x86_64
 			targ_extra_emuls="elf32_x86_64 elf_i386 i386linux elf_l1om"
 			targ_extra_libpath="elf_i386 elf32_x86_64 elf_l1om"
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 8861d94..4db226f 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,20 @@
+2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* ld-elf/eh1.d: Skip x32.
+	* ld-elf/eh2.d: Likewise.
+	* ld-elf/eh3.d: Likewise.
+	* ld-elf/eh4.d: Likewise.
+
+	* ld-elfvsb/elfvsb.exp: Only xfail 64bit x86_64-*-linux*.
+	* ld-shared/shared.exp: Likewise. 
+
+	* ld-ifunc/ifunc-1-local-x86.d: Support x32.
+	* ld-ifunc/ifunc-1-x86.d: Likewise.
+	* ld-ifunc/ifunc-3a-x86.d: Likewise.
+	* ld-x86-64/pcrel16.d: Likewise.
+
+	* ld-x86-64/x86-64.exp (x86_64tests): Add missing -melf_x86_64.
+
 2011-06-16  Alan Modra  <amodra@gmail.com>
 
 	* ld-elfvers/vers2.ver: Don't assume any particular index for
diff --git a/ld/testsuite/ld-elf/eh1.d b/ld/testsuite/ld-elf/eh1.d
index f0874f7..4275de1 100644
--- a/ld/testsuite/ld-elf/eh1.d
+++ b/ld/testsuite/ld-elf/eh1.d
@@ -2,6 +2,7 @@
 #source: eh1a.s
 #ld:
 #readelf: -wf
+#notarget: x86_64-x32-*
 #target: x86_64-*-*
 
 Contents of the .eh_frame section:
diff --git a/ld/testsuite/ld-elf/eh2.d b/ld/testsuite/ld-elf/eh2.d
index 1a05d7f..a7372f0 100644
--- a/ld/testsuite/ld-elf/eh2.d
+++ b/ld/testsuite/ld-elf/eh2.d
@@ -2,6 +2,7 @@
 #source: eh2a.s
 #ld:
 #readelf: -wf
+#notarget: x86_64-x32-*
 #target: x86_64-*-*
 
 Contents of the .eh_frame section:
diff --git a/ld/testsuite/ld-elf/eh3.d b/ld/testsuite/ld-elf/eh3.d
index 1f76b8c..a9777a2 100644
--- a/ld/testsuite/ld-elf/eh3.d
+++ b/ld/testsuite/ld-elf/eh3.d
@@ -2,6 +2,7 @@
 #source: eh3a.s
 #ld:
 #readelf: -wf
+#notarget: x86_64-x32-*
 #target: x86_64-*-*
 
 Contents of the .eh_frame section:
diff --git a/ld/testsuite/ld-elf/eh4.d b/ld/testsuite/ld-elf/eh4.d
index b8f9865..b568f32 100644
--- a/ld/testsuite/ld-elf/eh4.d
+++ b/ld/testsuite/ld-elf/eh4.d
@@ -2,6 +2,7 @@
 #source: eh4a.s
 #ld: -shared
 #readelf: -wf
+#notarget: x86_64-x32-*
 #target: x86_64-*-*
 
 Contents of the .eh_frame section:
diff --git a/ld/testsuite/ld-elfvsb/elfvsb.exp b/ld/testsuite/ld-elfvsb/elfvsb.exp
index d288774..3c64783 100644
--- a/ld/testsuite/ld-elfvsb/elfvsb.exp
+++ b/ld/testsuite/ld-elfvsb/elfvsb.exp
@@ -302,7 +302,9 @@ proc visibility_run {visibility} {
 		    setup_xfail "sparc*-*-linux*"
 		}
 	    }
-	    setup_xfail "x86_64-*-linux*"
+	    if { [is_elf64 $tmpdir/mainnp.o] } {
+		setup_xfail "x86_64-*-linux*"
+	    }
 	    if { ![istarget hppa*64*-*-linux*] } {
 		setup_xfail "hppa*-*-linux*"
 	    }
@@ -343,7 +345,9 @@ proc visibility_run {visibility} {
 		setup_xfail "alpha*-*-linux*"
 		setup_xfail "mips*-*-linux*"
 	    }
-	    setup_xfail "x86_64-*-linux*"
+	    if { [is_elf64 $tmpdir/mainnp.o] } {
+		setup_xfail "x86_64-*-linux*"
+	    }
 	    if { ![istarget hppa*64*-*-linux*] } {
 		setup_xfail "hppa*-*-linux*"
 	    }
@@ -415,7 +419,9 @@ proc visibility_run {visibility} {
 			setup_xfail "sparc*-*-linux*"
 		    }
 		}
-		setup_xfail "x86_64-*-linux*"
+		if { [is_elf64 $tmpdir/mainp.o] } {
+		    setup_xfail "x86_64-*-linux*"
+		}
 		if { ![istarget hppa*64*-*-linux*] } {
 		    setup_xfail "hppa*-*-linux*"
 		}
diff --git a/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d b/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d
index 80cbe41..67ecdae 100644
--- a/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d
+++ b/ld/testsuite/ld-ifunc/ifunc-1-local-x86.d
@@ -3,5 +3,5 @@
 #target: x86_64-*-* i?86-*-*
 
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x200|)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x16c|\+0x200|)@plt>
 #pass
diff --git a/ld/testsuite/ld-ifunc/ifunc-1-x86.d b/ld/testsuite/ld-ifunc/ifunc-1-x86.d
index 1fa2d56..4142402 100644
--- a/ld/testsuite/ld-ifunc/ifunc-1-x86.d
+++ b/ld/testsuite/ld-ifunc/ifunc-1-x86.d
@@ -3,5 +3,5 @@
 #target: x86_64-*-* i?86-*-*
 
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x220|)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x184|\+0x220|)@plt>
 #pass
diff --git a/ld/testsuite/ld-ifunc/ifunc-3a-x86.d b/ld/testsuite/ld-ifunc/ifunc-3a-x86.d
index 3924dda..bcfac6f 100644
--- a/ld/testsuite/ld-ifunc/ifunc-3a-x86.d
+++ b/ld/testsuite/ld-ifunc/ifunc-3a-x86.d
@@ -4,5 +4,5 @@
 #target: x86_64-*-* i?86-*-*
 
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x258|)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+call[ \t0-9a-fq]+<\*ABS\*(\+0x1a8|\+0x258|)@plt>
 #pass
diff --git a/ld/testsuite/ld-shared/shared.exp b/ld/testsuite/ld-shared/shared.exp
index b77b9ce..1d25d51 100644
--- a/ld/testsuite/ld-shared/shared.exp
+++ b/ld/testsuite/ld-shared/shared.exp
@@ -234,7 +234,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o]
 	if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
 	    setup_xfail "sparc*-*-linux*"
 	}
-	setup_xfail "x86_64-*-linux*"
+	if { [is_elf64 $tmpdir/mainnp.o] } {
+	    setup_xfail "x86_64-*-linux*"
+	}
 	setup_xfail "s390x-*-linux*"
 	if [ string match $shared_needs_pic "yes" ] {
 	    setup_xfail "arm*-*-linux*"
@@ -257,7 +259,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o]
 	if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
 	    setup_xfail "sparc*-*-linux*"
 	}
-	setup_xfail "x86_64-*-linux*"
+	if { [is_elf64 $tmpdir/mainnp.o] } {
+	    setup_xfail "x86_64-*-linux*"
+	}
 	setup_xfail "s390x-*-linux*"
 	if [ string match $shared_needs_pic "yes" ] {
 	    setup_xfail "arm*-*-linux*"
@@ -310,7 +314,9 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/main.c $tmpdir/m
 	    if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainp.o] } {
 		setup_xfail "sparc*-*-linux*"
 	    }
-	    setup_xfail "x86_64-*-linux*"
+	    if { [is_elf64 $tmpdir/mainp.o] } {
+		setup_xfail "x86_64-*-linux*"
+	    }
 	    setup_xfail "s390x-*-linux*"
 	    if [ string match $shared_needs_pic "yes" ] {
 		setup_xfail "arm*-*-linux*"
diff --git a/ld/testsuite/ld-x86-64/pcrel16.d b/ld/testsuite/ld-x86-64/pcrel16.d
index f593657..5bbbb3e 100644
--- a/ld/testsuite/ld-x86-64/pcrel16.d
+++ b/ld/testsuite/ld-x86-64/pcrel16.d
@@ -3,7 +3,7 @@
 #ld: -Ttext 0x0
 #objdump: -drj.text -m i8086
 
-.*: +file format elf64-x86-64
+.*: +file format elf.*-x86-64
 
 Disassembly of section .text:
 
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 2cb1891..bd1991a 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -84,7 +84,7 @@ set x86_64tests {
      "--64" {mixed2a.s} {} "libmixe2a.o"}
     {"Helper 32bit object 2" "-r -melf_i386"
      "--32" {mixed2b.s} {} "libmixe2b.o"}
-    {"Split by file with 'l' flag on section." "-split-by-file -r"
+    {"Split by file with 'l' flag on section." "-split-by-file -r -melf_x86_64"
      "--64" {split-by-file1.s split-by-file2.s}
      {{readelf -SW split-by-file.rd}} "split-by-file.o"}
     {"TLS X32 IE->LE transition" "-melf32_x86_64"


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