This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [RFC][PATCH] AArch64: use movz/movk instead of literal pools in start.S
- From: Boshi Wang <wangboshi at huawei dot com>
- To: Szabolcs Nagy <szabolcs dot nagy at arm dot com>
- Cc: <nd at arm dot com>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 15 Sep 2017 09:16:02 +0800
- Subject: Re: [RFC][PATCH] AArch64: use movz/movk instead of literal pools in start.S
- Authentication-results: sourceware.org; auth=none
- References: <e65025af-5168-c999-bfc1-7ac614314836@huawei.com> <59B65347.503@arm.com> <336560e5-c9de-08bc-c850-28994cac2c33@huawei.com> <59BA3F64.60504@arm.com>
On 2017/9/14 16:35, Szabolcs Nagy wrote:
On 14/09/17 04:21, Boshi Wang wrote:
On 2017/9/11 17:11, Szabolcs Nagy wrote:
On 07/09/17 08:33, wangboshi wrote:
2017-09-07 Wang Boshi <wangboshi@huawei.com>
* sysdeps/aarch64/start.S: Use MOVL instead of literal pools.
* sysdeps/aarch64/sysdep.h (MOVL): Add MOVL macro.
thanks, the patch looks good to me (except for a nit below),
do you have copyright assignment?
do you have commit rights to the glibc repo?
I have read requirements of copyright assignment. I don't have that.
I don't have commit rights, too.
So how can I contribute the change? Could you give me some suggestions?
i think your change is just below the legally-significant limit
https://www.gnu.org/prep/maintain/maintain.html#Legally-Significant
so i can commit it for you.
but getting your employer to sort it out with the fsf would be better,
in case you run into further issues that need glibc fixes.
That's great. I have a few doubt. Could you add my name into the patch?
The new patch is here below.
diff --git a/sysdeps/aarch64/start.S b/sysdeps/aarch64/start.S
index df1c642..51e8e82 100644
--- a/sysdeps/aarch64/start.S
+++ b/sysdeps/aarch64/start.S
@@ -71,9 +71,9 @@ _start:
ldr PTR_REG (4), [x4, #:got_lo12:__libc_csu_fini]
#else
/* Set up the other arguments in registers */
- ldr PTR_REG (0), =main
- ldr PTR_REG (3), =__libc_csu_init
- ldr PTR_REG (4), =__libc_csu_fini
+ MOVL(0, main)
+ MOVL(3, __libc_csu_init)
+ MOVL(4, __libc_csu_fini)
#endif
/* __libc_start_main (main, argc, argv, init, fini, rtld_fini,
diff --git a/sysdeps/aarch64/sysdep.h b/sysdeps/aarch64/sysdep.h
index a749a70..152f5ba 100644
--- a/sysdeps/aarch64/sysdep.h
+++ b/sysdeps/aarch64/sysdep.h
@@ -137,6 +137,20 @@
ldr PTR_REG (T), [x##T, #:got_lo12:EXPR]; \
OP PTR_REG (R), [x##T];
+/* Load an immediate into R.
+ Note R is a register number and not a register name. */
+#ifdef __LP64__
+# define MOVL(R, NAME) \
+ movz PTR_REG(R), #:abs_g3:NAME; \
+ movk PTR_REG(R), #:abs_g2_nc:NAME; \
+ movk PTR_REG(R), #:abs_g1_nc:NAME; \
+ movk PTR_REG(R), #:abs_g0_nc:NAME;
+#else
+# define MOVL(R, NAME) \
+ movz PTR_REG(R), #:abs_g1:NAME; \
+ movk PTR_REG(R), #:abs_g0_nc:NAME;
+#endif
+
/* Since C identifiers are not normally prefixed with an underscore
on this system, the asm identifier `syscall_error' intrudes on the
C name space. Make sure we use an innocuous name. */
Thank you, Nagy.