aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2012-06-13 21:41:07 +0000
committerH.J. Lu <hjl.tools@gmail.com>2012-06-13 21:41:07 +0000
commit357d1bd8fd0ba1a79f347f9d989058ea1615236a (patch)
tree35dd52fd9e352f2b1a2b161dcff0e1ca1f133081
parentf85e18ee6c9f6650c24532f1830057919e872664 (diff)
downloadfsf-binutils-gdb-357d1bd8fd0ba1a79f347f9d989058ea1615236a.zip
fsf-binutils-gdb-357d1bd8fd0ba1a79f347f9d989058ea1615236a.tar.gz
fsf-binutils-gdb-357d1bd8fd0ba1a79f347f9d989058ea1615236a.tar.bz2
Fix .dc.a for x32
gas/ * config/tc-i386.c (x86_address_bytes): New. * config/tc-i386.h (TC_ADDRESS_BYTES): Likewise. (x86_address_bytes): Likewise. gas/testsuite/ * gas/i386/ilp32/x86-64-dc_a.d: New. * gas/i386/ilp32/x86-64-dc_a.s: Likewise.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-i386.c11
-rw-r--r--gas/config/tc-i386.h3
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/i386/ilp32/x86-64-dc_a.d5
-rw-r--r--gas/testsuite/gas/i386/ilp32/x86-64-dc_a.s5
6 files changed, 35 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index a9fc59a..7860d0f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (x86_address_bytes): New.
+ * config/tc-i386.h (TC_ADDRESS_BYTES): Likewise.
+ (x86_address_bytes): Likewise.
+
2012-06-13 Zhenqiang Chen <zhenqiang.chen@linaro.org>
PR gas/12698
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index ccf54bc..d2b4927 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -6619,6 +6619,17 @@ x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len,
fix_new_exp (frag, off, len, exp, 0, r);
}
+/* Export the ABI address size for use by TC_ADDRESS_BYTES for the
+ purpose of the `.dc.a' internal pseudo-op. */
+
+int
+x86_address_bytes (void)
+{
+ if ((stdoutput->arch_info->mach & bfd_mach_x64_32))
+ return 4;
+ return stdoutput->arch_info->bits_per_address / 8;
+}
+
#if !(defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) || defined (OBJ_MACH_O)) \
|| defined (LEX_AT)
# define lex_got(reloc, adjust, types) NULL
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
index 51c6cb6..d4d7d96 100644
--- a/gas/config/tc-i386.h
+++ b/gas/config/tc-i386.h
@@ -140,6 +140,9 @@ extern void x86_cons (expressionS *, int);
extern void x86_cons_fix_new
(fragS *, unsigned int, unsigned int, expressionS *);
+#define TC_ADDRESS_BYTES x86_address_bytes
+extern int x86_address_bytes (void);
+
#define DIFF_EXPR_OK /* foo-. gets turned into PC relative relocs */
#define NO_RELOC BFD_RELOC_NONE
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index a729175..1129df0 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-06-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/ilp32/x86-64-dc_a.d: New.
+ * gas/i386/ilp32/x86-64-dc_a.s: Likewise.
+
2012-06-11 Andreas Schwab <schwab@linux-m68k.org>
* gas/ppc/e500mc.d: Update.
diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-dc_a.d b/gas/testsuite/gas/i386/ilp32/x86-64-dc_a.d
new file mode 100644
index 0000000..8b2cdcd
--- /dev/null
+++ b/gas/testsuite/gas/i386/ilp32/x86-64-dc_a.d
@@ -0,0 +1,5 @@
+#nm: -n
+#name: x86-64 (ILP32) .dc.a
+
+0+ d foo
+0+4 d bar
diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-dc_a.s b/gas/testsuite/gas/i386/ilp32/x86-64-dc_a.s
new file mode 100644
index 0000000..4674392
--- /dev/null
+++ b/gas/testsuite/gas/i386/ilp32/x86-64-dc_a.s
@@ -0,0 +1,5 @@
+ .data
+foo:
+ .dc.a 0
+bar:
+ .dc.a 0