Support .quad for x32.
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 28 Mar 2011 22:47:59 +0000 (22:47 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 28 Mar 2011 22:47:59 +0000 (22:47 +0000)
gas/

2011-03-28  H.J. Lu  <hongjiu.lu@intel.com>

* config/tc-i386.c (handle_quad): New.
(md_pseudo_table): Add "quad".

gas/testsuite/

2011-03-28  H.J. Lu  <hongjiu.lu@intel.com>

* gas/i386/ilp32/inval.s: Remove .quad.
* gas/i386/ilp32/inval.l: Updated.

* gas/i386/ilp32/quad.d: New.
* gas/i386/ilp32/quad.s: Likewise.

gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/ilp32/inval.l
gas/testsuite/gas/i386/ilp32/inval.s
gas/testsuite/gas/i386/ilp32/quad.d [new file with mode: 0644]
gas/testsuite/gas/i386/ilp32/quad.s [new file with mode: 0644]

index e75980951486c0a5f965d36c3b6dd478911fae83..6ccff48ee28065f03db6fb6f585fb3e25436b2b9 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-i386.c (handle_quad): New.
+       (md_pseudo_table): Add "quad".
+
 2011-03-26  John Marino  <binutils@marino.st>
 
        * configure.tgt: Fix support for *-*-dragonfly*.
index e7f9c9aa97aa9690248c80592cdb57cb123fe4d7..624c78a886a3d0cb091eedc4f76cc5c9e088deab 100644 (file)
@@ -182,6 +182,7 @@ static void s_bss (int);
 #endif
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
 static void handle_large_common (int small ATTRIBUTE_UNUSED);
+static void handle_quad (int);
 #endif
 
 static const char *default_arch = DEFAULT_ARCH;
@@ -813,6 +814,7 @@ const pseudo_typeS md_pseudo_table[] =
   {"sse_check", set_sse_check, 0},
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
   {"largecomm", handle_large_common, 0},
+  {"quad", handle_quad, 8},
 #else
   {"file", (void (*) (int)) dwarf2_directive_file, 0},
   {"loc", dwarf2_directive_loc, 0},
@@ -9149,4 +9151,50 @@ handle_large_common (int small ATTRIBUTE_UNUSED)
       bss_section = saved_bss_section;
     }
 }
+
+static void
+handle_quad (int nbytes)
+{
+  expressionS exp;
+
+  if (x86_elf_abi != X86_64_X32_ABI)
+    {
+      cons (nbytes);
+      return;
+    }
+
+  if (is_it_end_of_statement ())
+    {
+      demand_empty_rest_of_line ();
+      return;
+    }
+
+  do
+    {
+      if (*input_line_pointer == '"')
+       {
+         as_bad (_("unexpected `\"' in expression"));
+         ignore_rest_of_line ();
+         return;
+       }
+      x86_cons (&exp, nbytes);
+      /* Output 4 bytes if not constant.  */
+      if (exp.X_op != O_constant)
+       nbytes = 4;
+      emit_expr (&exp, (unsigned int) nbytes);
+    }
+  while (*input_line_pointer++ == ',');
+
+  input_line_pointer--;                /* Put terminator back into stream.  */
+
+  demand_empty_rest_of_line ();
+
+  /* Zero-extends to 8 bytes if not constant.  */
+  if (nbytes == 4)
+    {
+      memset (&exp, '\0', sizeof (exp));
+      exp.X_op = O_constant;
+      emit_expr (&exp, nbytes);
+    }
+}
 #endif /* OBJ_ELF || OBJ_MAYBE_ELF */
index 7975fb851f9196a8701a9c0b90816def97441a59..4f69afaca4825d58aad9cddc538185fec10184fe 100644 (file)
@@ -1,3 +1,11 @@
+2011-03-28  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gas/i386/ilp32/inval.s: Remove .quad.
+       * gas/i386/ilp32/inval.l: Updated.
+
+       * gas/i386/ilp32/quad.d: New.
+       * gas/i386/ilp32/quad.s: Likewise.
+
 2011-03-24  Mike Frysinger  <vapier@gentoo.org>
 
        * gas/bfin/expected_errors.s: Add invalid vector add/sub insn tests.
index 70f975411819a2219e2807e3632e3adab6923e73..d037baeccc255738c2a5846abca3a9437d93c2e0 100644 (file)
@@ -3,7 +3,6 @@
 .*:4: Error: .*
 .*:5: Error: .*
 .*:6: Error: .*
-.*:10: Error: .*
 GAS LISTING .*
 
 
@@ -19,11 +18,6 @@ GAS LISTING .*
 [      ]*5[    ]+00000000 
 [      ]*5[    ]+0000
 [      ]*6[    ]+\?\?\?\? 48A10000             movabsq foo,%rax
+\*\*\*\*  Error:cannot represent relocation type BFD_RELOC_[   ]*64[   ]+in x32 mode
 [      ]*6[    ]+00000000 
 [      ]*6[    ]+0000
-[      ]*7[    ]+
-[      ]*8[    ]+\.data
-[      ]*9[    ]+xxx:
-[      ]*10[   ]+\?\?\?\? 00000000             \.quad foo
-\*\*\*\*  Error:cannot represent relocation type BFD_RELOC_[   ]*64[   ]+in x32 mode
-[      ]*10[   ]+00000000 
index 416c1f89747584147e6de03ac9ffb8b249c61acb..f117ca0091385c1fd2f4dacb7aa1a12d5d396179 100644 (file)
@@ -4,7 +4,3 @@
        movabs foo,%rax
        movabsq xxx,%rax
        movabsq foo,%rax
-
-       .data
-xxx:
-       .quad foo
diff --git a/gas/testsuite/gas/i386/ilp32/quad.d b/gas/testsuite/gas/i386/ilp32/quad.d
new file mode 100644 (file)
index 0000000..d3e6ff8
--- /dev/null
@@ -0,0 +1,14 @@
+#objdump: -sr
+#name: xquad
+
+.*: +file format .*
+
+RELOCATION RECORDS FOR \[.data\]:
+OFFSET +TYPE +VALUE 
+0+ R_X86_64_32 +foo
+0+10 R_X86_64_32 +bar
+
+
+Contents of section .data:
+ 0000 00000000 00000000 efcdab90 78674512  ............xgE.
+ 0010 00000000 00000000 ffffffff ffffffff  ................
diff --git a/gas/testsuite/gas/i386/ilp32/quad.s b/gas/testsuite/gas/i386/ilp32/quad.s
new file mode 100644 (file)
index 0000000..e96653a
--- /dev/null
@@ -0,0 +1,5 @@
+       .data
+       .quad foo
+       .quad 0x1245677890abcdef
+       .quad bar
+       .quad -1