This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [AArch64][4/4] Define TC_ADDRESS_BYTES for GAS


On Tue, Dec 06, 2016 at 11:09:41AM +0000, Jiong Wang wrote:
> On 06/12/16 10:50, Andreas Schwab wrote:
> >On Dez 05 2016, Jiong Wang <jiong.wang@foss.arm.com> wrote:
> >
> >>The default address_per_bytes is define in cpu-aarch64.c, current it's 8 for
> >>both LP64 and ILP32, whether we should change it to 4 as well as word_per_bytes
> >>looks to me is another issue we need to investigate.
> >This works for me and fixes quite a few failures:
> 
> Hi Andreas,
>   Thanks very much for verifying this.
> 
> Yury, does Andreas's cpu-aarch64.c change works well with Cavium's ILP32
> environment, mind a full testing on it?
> 
> Thanks.
> 
> >
> >	* cpu-aarch64.c (N): Add argument ADDRSIZE.
> >	(bfd_aarch64_arch_ilp32): Set it to 32.
> >	(bfd_aarch64_arch): Set it to 64.
> >---
> >  bfd/cpu-aarch64.c | 8 ++++----
> >  1 file changed, 4 insertions(+), 4 deletions(-)
> >
> >diff --git a/bfd/cpu-aarch64.c b/bfd/cpu-aarch64.c
> >index 596d24190b..af2da8455d 100644
> >--- a/bfd/cpu-aarch64.c
> >+++ b/bfd/cpu-aarch64.c
> >@@ -100,16 +100,16 @@ scan (const struct bfd_arch_info *info, const char *string)
> >    return FALSE;
> >  }
> >-#define N(NUMBER, PRINT, DEFAULT, NEXT)				\
> >-  { 64, 64, 8, bfd_arch_aarch64, NUMBER,			\
> >+#define N(NUMBER, PRINT, ADDRSIZE, DEFAULT, NEXT)		\
> >+  { 64, ADDRSIZE, 8, bfd_arch_aarch64, NUMBER,			\
> >      "aarch64", PRINT, 4, DEFAULT, compatible, scan,		\
> >      bfd_arch_default_fill, NEXT }
> >  static const bfd_arch_info_type bfd_aarch64_arch_ilp32 =
> >-  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", FALSE, NULL);
> >+  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", 32, FALSE, NULL);
> >  const bfd_arch_info_type bfd_aarch64_arch =
> >-  N (0, "aarch64", TRUE, &bfd_aarch64_arch_ilp32);
> >+  N (0, "aarch64", 64, TRUE, &bfd_aarch64_arch_ilp32);
> >  bfd_boolean
> >  bfd_is_aarch64_special_symbol_name (const char *name, int type)

This is my version of the change. The same idea, but I also set
bits_per_word to 32:

diff --git a/bfd/cpu-aarch64.c b/bfd/cpu-aarch64.c
index 596d241..cc98e2e 100644
--- a/bfd/cpu-aarch64.c
+++ b/bfd/cpu-aarch64.c
@@ -105,8 +105,13 @@ scan (const struct bfd_arch_info *info, const char *string)
     "aarch64", PRINT, 4, DEFAULT, compatible, scan,		\
     bfd_arch_default_fill, NEXT }
 
+#define N32(NUMBER, PRINT, DEFAULT, NEXT)				\
+  { 32, 32, 8, bfd_arch_aarch64, NUMBER,			\
+    "aarch64", PRINT, 4, DEFAULT, compatible, scan,		\
+    bfd_arch_default_fill, NEXT }
+
 static const bfd_arch_info_type bfd_aarch64_arch_ilp32 =
-  N (bfd_mach_aarch64_ilp32, "aarch64:ilp32", FALSE, NULL);
+  N32 (bfd_mach_aarch64_ilp32, "aarch64:ilp32", FALSE, NULL);
 
 const bfd_arch_info_type bfd_aarch64_arch =
   N (0, "aarch64", TRUE, &bfd_aarch64_arch_ilp32);

---

And this is before/after test results:

After                                                   Before
						>	FAIL: c++-types-check
FAIL: elf/tst-tls-manydynamic			<
                                                >	FAIL: iconvdata/mtrace-tst-loading
						>	FAIL: iconvdata/tst-loading
						>	FAIL: iconvdata/tst-tables
                                		>	FAIL: localedata/mtrace-tst-leaks
						>	FAIL: localedata/tst-leaks
						>	FAIL: posix/tst-getaddrinfo4
						>	FAIL: posix/tst-getaddrinfo5
						>	FAIL: posix/tst-regex2

Pretty good to me. I'm not experienced in ld logic, but tests show
that changing both wordsize and addrsize is right idea. If no
objections here, I'll send the patch to binutils maillist.

Steve, could you try this patch with real hardware and report here?

Yury


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]