Patchwork [13/29,AARCH64] Use PTR_* macros in dl-trampoline.S

login
register
mail settings
Submitter Andrew Pinski
Date Oct. 27, 2014, 7:59 a.m.
Message ID <1414396793-9005-14-git-send-email-apinski@cavium.com>
Download mbox | patch
Permalink /patch/3413/
State New
Headers show

Comments

Andrew Pinski - Oct. 27, 2014, 7:59 a.m.
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(-)
Will Newton - Nov. 18, 2014, 12:33 p.m.
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
>

Patch

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]