[binutils-gdb] i386: Support .code64 directive only with 64-bit bfd

H.J.Lu hjl@sourceware.org
Tue Oct 24 14:56:00 GMT 2017


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=da5f19a2534936376228943de85fdd60f6ddd839

commit da5f19a2534936376228943de85fdd60f6ddd839
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Oct 24 07:47:32 2017 -0700

    i386: Support .code64 directive only with 64-bit bfd
    
    Without 64-bit bfd, we can't properly support .code64 directive in
    32-bit mode.
    
    	* config/tc-i386.c (md_pseudo_table): Add .code64 directive
    	only if BFD64 is defined.
    	* testsuite/gas/i386/code64-inval.l: New file.
    	* gas/testsuite/gas/i386/code64-inval.s: Likewise.
    	* gas/testsuite/gas/i386/code64.d: Likewise.
    	* gas/testsuite/gas/i386/code64.s: Likewise.
    	* testsuite/gas/i386/i386.exp: Run mixed-mode-reloc32,
    	att-regs, intel-regs, intel-expr and string-ok tests only if
    	assembler supports x86-64.  Run code64 and code64-inval.

Diff:
---
 gas/ChangeLog                         | 12 ++++++++++++
 gas/config/tc-i386.c                  |  2 ++
 gas/testsuite/gas/i386/code64-inval.l | 13 +++++++++++++
 gas/testsuite/gas/i386/code64-inval.s |  1 +
 gas/testsuite/gas/i386/code64.d       | 11 +++++++++++
 gas/testsuite/gas/i386/code64.s       |  5 +++++
 gas/testsuite/gas/i386/i386.exp       | 14 ++++++++++----
 7 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index bb1aa01..138e43c 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,15 @@
+2017-10-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/tc-i386.c (md_pseudo_table): Add .code64 directive
+	only if BFD64 is defined.
+	* testsuite/gas/i386/code64-inval.l: New file.
+	* gas/testsuite/gas/i386/code64-inval.s: Likewise.
+	* gas/testsuite/gas/i386/code64.d: Likewise.
+	* gas/testsuite/gas/i386/code64.s: Likewise.
+	* testsuite/gas/i386/i386.exp: Run mixed-mode-reloc32,
+	att-regs, intel-regs, intel-expr and string-ok tests only if
+	assembler supports x86-64.  Run code64 and code64-inval.
+
 2017-10-23  Palmer Dabbelt  <palmer@dabbelt.com>
 
         * config/tc-riscv.c (riscv_frag_align_code): Align code by 4
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 5cde092..6b5026f 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1106,7 +1106,9 @@ const pseudo_typeS md_pseudo_table[] =
   {"code16gcc", set_16bit_gcc_code_flag, CODE_16BIT},
   {"code16", set_code_flag, CODE_16BIT},
   {"code32", set_code_flag, CODE_32BIT},
+#ifdef BFD64
   {"code64", set_code_flag, CODE_64BIT},
+#endif
   {"intel_syntax", set_intel_syntax, 1},
   {"att_syntax", set_intel_syntax, 0},
   {"intel_mnemonic", set_intel_mnemonic, 1},
diff --git a/gas/testsuite/gas/i386/code64-inval.l b/gas/testsuite/gas/i386/code64-inval.l
new file mode 100644
index 0000000..ea2e966
--- /dev/null
+++ b/gas/testsuite/gas/i386/code64-inval.l
@@ -0,0 +1,13 @@
+.*: Assembler messages:
+.*:3: Error: unknown pseudo-op: `.code64'
+.*:4: Error: `movabs' is only supported in 64-bit mode
+.*:5: Error: `movabs' is only supported in 64-bit mode
+GAS LISTING .*
+
+
+[ 	]*1[ 	]+\.include "code64\.s"
+[ 	]*1[ 	]+\.text
+[ 	]*2[ 	]+_start:
+[ 	]*3[ 	]+\.code64
+[ 	]*4[ 	]+movabs  0x87654321, %al
+[ 	]*5[ 	]+movabs  \$0x87654321, %rax
diff --git a/gas/testsuite/gas/i386/code64-inval.s b/gas/testsuite/gas/i386/code64-inval.s
new file mode 100644
index 0000000..ba5a377
--- /dev/null
+++ b/gas/testsuite/gas/i386/code64-inval.s
@@ -0,0 +1 @@
+.include "code64.s"
diff --git a/gas/testsuite/gas/i386/code64.d b/gas/testsuite/gas/i386/code64.d
new file mode 100644
index 0000000..684b44b
--- /dev/null
+++ b/gas/testsuite/gas/i386/code64.d
@@ -0,0 +1,11 @@
+#objdump: -dw -Mx86-64
+#name: .code64 directive in 32-bit mode.
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+ +[a-f0-9]+:	a0 21 43 65 87 00 00 00 00 	movabs 0x87654321,%al
+ +[a-f0-9]+:	48 b8 21 43 65 87 00 00 00 00 	movabs \$0x87654321,%rax
+#pass
diff --git a/gas/testsuite/gas/i386/code64.s b/gas/testsuite/gas/i386/code64.s
new file mode 100644
index 0000000..8f2ded4
--- /dev/null
+++ b/gas/testsuite/gas/i386/code64.s
@@ -0,0 +1,5 @@
+	.text
+_start:
+	.code64
+	movabs  0x87654321, %al
+	movabs  $0x87654321, %rax
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index b6eb40a..1662d9c 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -458,10 +458,7 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
 	run_dump_test "bss"
 	run_dump_test "reloc32"
 	run_list_test "reloc32" "--defsym _bad_=1"
-	run_dump_test "mixed-mode-reloc32"
-	run_dump_test "att-regs"
 	run_dump_test "intel-got32"
-	run_dump_test "intel-regs"
 	run_dump_test "intel-movs32"
 	run_list_test "inval-equ-1" "-al"
 	run_list_test "inval-equ-2" "-al"
@@ -493,6 +490,15 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
 
 	run_dump_test "addend"
 
+	if { [gas_64_check] } then {
+	    run_dump_test "att-regs"
+	    run_dump_test "intel-regs"
+	    run_dump_test "mixed-mode-reloc32"
+	    run_dump_test "code64"
+	} else {
+	    run_list_test "code64-inval" "-I${srcdir}/$subdir -al"
+	}
+
 	if {![istarget "*-*-nacl*"]} then {
 	    run_dump_test "iamcu-1"
 	    run_dump_test "iamcu-2"
@@ -518,7 +524,7 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
 
 # Common tests
 if [expr [istarget "i*86-*-*"] || [istarget "x86_64-*-*"]] then {
-    if {![istarget "i*86-*-elfiamcu"]} then {
+    if {![istarget "i*86-*-elfiamcu"] && [gas_64_check]} then {
 	run_dump_test "intel-expr"
 	run_dump_test "string-ok"
     }



More information about the Binutils-cvs mailing list