From 357d1bd8fd0ba1a79f347f9d989058ea1615236a Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 13 Jun 2012 21:41:07 +0000 Subject: 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. --- gas/config/tc-i386.c | 11 +++++++++++ gas/config/tc-i386.h | 3 +++ 2 files changed, 14 insertions(+) (limited to 'gas/config') 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 -- cgit v1.1