This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 13/29] [AARCH64] Use PTR_* macros in dl-trampoline.S
- From: Will Newton <will dot newton at linaro dot org>
- To: Andrew Pinski <apinski at cavium dot com>
- Cc: libc-alpha <libc-alpha at sourceware dot org>
- Date: Tue, 18 Nov 2014 12:33:42 +0000
- Subject: Re: [PATCH 13/29] [AARCH64] Use PTR_* macros in dl-trampoline.S
- Authentication-results: sourceware.org; auth=none
- References: <1414396793-9005-1-git-send-email-apinski at cavium dot com> <1414396793-9005-14-git-send-email-apinski at cavium dot com>
On 27 October 2014 07:59, Andrew Pinski <apinski@cavium.com> wrote:
> Use the PTR_* macros in dl-trampoline.S so it can be used for
> both ILP32 and LP64. Also add a comment about what was an magic number
> (the size of the rela relocation entries).
>
> * sysdeps/aarch64/dl-trampoline.S (ip0l): New define.
> (RELA_SIZE): New define.
> (_dl_runtime_resolve): Use PTR_REG, PTR_SIZE.
> (_dl_runtime_profile): Likewise. Use RELA_SIZE and ip0l.
> ---
> sysdeps/aarch64/dl-trampoline.S | 18 +++++++++++-------
> 1 files changed, 11 insertions(+), 7 deletions(-)
This looks ok to me. Not a massive fan of the name ip0l but I don't
have a better suggestion right now.
> diff --git a/sysdeps/aarch64/dl-trampoline.S b/sysdeps/aarch64/dl-trampoline.S
> index 2037f18..22b28ce 100644
> --- a/sysdeps/aarch64/dl-trampoline.S
> +++ b/sysdeps/aarch64/dl-trampoline.S
> @@ -22,9 +22,13 @@
> #include "dl-link.h"
>
> #define ip0 x16
> +#define ip0l PTR_REG (16)
> #define ip1 x17
> #define lr x30
>
> +/* RELA relocatons are 3 pointers */
> +#define RELA_SIZE (PTR_SIZE * 3)
> +
> .text
> .globl _dl_runtime_resolve
> .type _dl_runtime_resolve, #function
> @@ -79,7 +83,7 @@ _dl_runtime_resolve:
> cfi_rel_offset (q1, 80+7*16)
>
> /* Get pointer to linker struct. */
> - ldr x0, [ip0, #-8]
> + ldr PTR_REG (0), [ip0, #-PTR_SIZE]
>
> /* Prepare to call _dl_fixup(). */
> ldr x1, [sp, 80+8*16] /* Recover &PLTGOT[n] */
> @@ -87,7 +91,7 @@ _dl_runtime_resolve:
> sub x1, x1, ip0
> add x1, x1, x1, lsl #1
> lsl x1, x1, #3
> - sub x1, x1, #192
> + sub x1, x1, #(RELA_SIZE<<3)
> lsr x1, x1, #3
>
> /* Call fixup routine. */
> @@ -191,7 +195,7 @@ _dl_runtime_profile:
> stp x0, x1, [x29, #OFFSET_RG + DL_OFFSET_RG_SP]
>
> /* Get pointer to linker struct. */
> - ldr x0, [ip0, #-8]
> + ldr PTR_REG (0), [ip0, #-PTR_SIZE]
>
> /* Prepare to call _dl_profile_fixup(). */
> ldr x1, [x29, OFFSET_PLTGOTN] /* Recover &PLTGOT[n] */
> @@ -199,7 +203,7 @@ _dl_runtime_profile:
> sub x1, x1, ip0
> add x1, x1, x1, lsl #1
> lsl x1, x1, #3
> - sub x1, x1, #192
> + sub x1, x1, #(RELA_SIZE<<3)
> lsr x1, x1, #3
>
> stp x0, x1, [x29, #OFFSET_SAVED_CALL_X0]
> @@ -210,8 +214,8 @@ _dl_runtime_profile:
> add x4, x29, #OFFSET_FS /* address of framesize */
> bl _dl_profile_fixup
>
> - ldr ip0, [x29, #OFFSET_FS] /* framesize == 0 */
> - cmp ip0, #0
> + ldr ip0l, [x29, #OFFSET_FS] /* framesize == 0 */
> + cmp ip0l, #0
> bge 1f
> cfi_remember_state
>
> @@ -243,7 +247,7 @@ _dl_runtime_profile:
> 1:
> /* The new frame size is in ip0. */
>
> - sub x1, x29, ip0
> + sub PTR_REG (1), PTR_REG (29), ip0l
> and sp, x1, #0xfffffffffffffff0
>
> str x0, [x29, #OFFSET_T1]
> --
> 1.7.2.5
>
--
Will Newton
Toolchain Working Group, Linaro