Support .quad for x32.

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.
This commit is contained in:
H.J. Lu 2011-03-28 22:47:59 +00:00
parent e462023046
commit 314a59d568
7 changed files with 81 additions and 11 deletions

View 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*.

View 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 */

View 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.

View 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

View File

@ -4,7 +4,3 @@
movabs foo,%rax
movabsq xxx,%rax
movabsq foo,%rax
.data
xxx:
.quad foo

View File

@ -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 ................

View File

@ -0,0 +1,5 @@
.data
.quad foo
.quad 0x1245677890abcdef
.quad bar
.quad -1