Patchwork [14/29,AARCH64] Use PTR_* in start.S

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

Comments

Andrew Pinski - Oct. 27, 2014, 7:59 a.m.
To support ILP32 without much sources changes, this changes
sysdeps/aarch64/start.S to use the PTR_* macros which was defined
earlier.

* sysdeps/aarch64/start.S: Include sysdep.h
(_start): Use PTR_REG, PTR_SIZE macros.
---
 sysdeps/aarch64/start.S |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)
Will Newton - Nov. 18, 2014, 12:35 p.m.
On 27 October 2014 07:59, Andrew Pinski <apinski@cavium.com> wrote:
> To support ILP32 without much sources changes, this changes
> sysdeps/aarch64/start.S to use the PTR_* macros which was defined
> earlier.
>
> * sysdeps/aarch64/start.S: Include sysdep.h
> (_start): Use PTR_REG, PTR_SIZE macros.
> ---
>  sysdeps/aarch64/start.S |   20 +++++++++++---------
>  1 files changed, 11 insertions(+), 9 deletions(-)

This looks ok to me.

> diff --git a/sysdeps/aarch64/start.S b/sysdeps/aarch64/start.S
> index 35d603a..dfa0622 100644
> --- a/sysdeps/aarch64/start.S
> +++ b/sysdeps/aarch64/start.S
> @@ -16,6 +16,8 @@
>     License along with the GNU C Library.  If not, see
>     <http://www.gnu.org/licenses/>.  */
>
> +#include <sysdep.h>
> +
>  /* This is the canonical entry point, usually the first thing in the text
>     segment.
>
> @@ -25,7 +27,7 @@
>
>     At this entry point, most registers' values are unspecified, except:
>
> -   x0          Contains a function pointer to be registered with `atexit'.
> +   x0/w0       Contains a function pointer to be registered with `atexit'.
>                 This is how the dynamic linker arranges to have DT_FINI
>                 functions called for shared libraries that have been loaded
>                 before this code runs.
> @@ -53,26 +55,26 @@ _start:
>         mov     x5, x0
>
>         /* Load argc and a pointer to argv */
> -       ldr     x1, [sp, #0]
> -       add     x2, sp, #8
> +       ldr     PTR_REG (1), [sp, #0]
> +       add     x2, sp, #PTR_SIZE
>
>         /* Setup stack limit in argument register */
>         mov     x6, sp
>
>  #ifdef SHARED
>          adrp    x0, :got:main
> -       ldr     x0, [x0, #:got_lo12:main]
> +       ldr     PTR_REG (0), [x0, #:got_lo12:main]
>
>          adrp    x3, :got:__libc_csu_init
> -       ldr     x3, [x3, #:got_lo12:__libc_csu_init]
> +       ldr     PTR_REG (3), [x3, #:got_lo12:__libc_csu_init]
>
>          adrp    x4, :got:__libc_csu_fini
> -       ldr     x4, [x4, #:got_lo12:__libc_csu_fini]
> +       ldr     PTR_REG (4), [x4, #:got_lo12:__libc_csu_fini]
>  #else
>         /* Set up the other arguments in registers */
> -       ldr     x0, =main
> -       ldr     x3, =__libc_csu_init
> -       ldr     x4, =__libc_csu_fini
> +       ldr     PTR_REG (0), =main
> +       ldr     PTR_REG (3), =__libc_csu_init
> +       ldr     PTR_REG (4), =__libc_csu_fini
>  #endif
>
>         /* __libc_start_main (main, argc, argv, init, fini, rtld_fini,
> --
> 1.7.2.5
>

Patch

diff --git a/sysdeps/aarch64/start.S b/sysdeps/aarch64/start.S
index 35d603a..dfa0622 100644
--- a/sysdeps/aarch64/start.S
+++ b/sysdeps/aarch64/start.S
@@ -16,6 +16,8 @@ 
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <sysdep.h>
+
 /* This is the canonical entry point, usually the first thing in the text
    segment.
 
@@ -25,7 +27,7 @@ 
 
    At this entry point, most registers' values are unspecified, except:
 
-   x0		Contains a function pointer to be registered with `atexit'.
+   x0/w0	Contains a function pointer to be registered with `atexit'.
 		This is how the dynamic linker arranges to have DT_FINI
 		functions called for shared libraries that have been loaded
 		before this code runs.
@@ -53,26 +55,26 @@  _start:
 	mov	x5, x0
 
 	/* Load argc and a pointer to argv */
-	ldr	x1, [sp, #0]
-	add	x2, sp, #8
+	ldr	PTR_REG (1), [sp, #0]
+	add	x2, sp, #PTR_SIZE
 
 	/* Setup stack limit in argument register */
 	mov	x6, sp
 
 #ifdef SHARED
         adrp    x0, :got:main
-	ldr     x0, [x0, #:got_lo12:main]
+	ldr     PTR_REG (0), [x0, #:got_lo12:main]
 
         adrp    x3, :got:__libc_csu_init
-	ldr     x3, [x3, #:got_lo12:__libc_csu_init]
+	ldr     PTR_REG (3), [x3, #:got_lo12:__libc_csu_init]
 
         adrp    x4, :got:__libc_csu_fini
-	ldr     x4, [x4, #:got_lo12:__libc_csu_fini]
+	ldr     PTR_REG (4), [x4, #:got_lo12:__libc_csu_fini]
 #else
 	/* Set up the other arguments in registers */
-	ldr	x0, =main
-	ldr	x3, =__libc_csu_init
-	ldr	x4, =__libc_csu_fini
+	ldr	PTR_REG (0), =main
+	ldr	PTR_REG (3), =__libc_csu_init
+	ldr	PTR_REG (4), =__libc_csu_fini
 #endif
 
 	/* __libc_start_main (main, argc, argv, init, fini, rtld_fini,