Re: [PATCH 05/27] [AARCH64] Use PTR_REG in crti.S.

2016-06-22 Thread Joseph Myers
On Wed, 22 Jun 2016, Yury Norov wrote:

> > As well as preprocessor indentation, this is missing spaces after '('; 
> > check for and fix that issue throughout this patch series.  (There are 
> > only a few cases where a macro is used to construct a type / variable 
> > name, such as ElfW, where missing the space is more usual.)
> > 
> > -- 
> > Joseph S. Myers
> > jos...@codesourcery.com
> 
> So, you want have it like this?
> #ifdef __LP64__
> # define RTLD_START RTLD_START_1( "x", "3", "sp" )

Sorry, before '(' in function and function-like-macro calls, as in 
standard GNU style.

# define RTLD_START RTLD_START_1 ("x", "3", "sp")

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: [PATCH 05/27] [AARCH64] Use PTR_REG in crti.S.

2016-06-22 Thread Andreas Schwab
Yury Norov  writes:

> On Tue, Jun 21, 2016 at 10:28:40AM +, Joseph Myers wrote:
>> On Tue, 21 Jun 2016, Yury Norov wrote:
>> 
>> > +#ifdef __LP64__
>> > +#define RTLD_START RTLD_START_1("x", "3", "sp")
>> > +#else
>> > +#define RTLD_START RTLD_START_1("w", "2", "wsp")
>> > +#endif
>> 
>> As well as preprocessor indentation, this is missing spaces after '('; 

Before, not after.

Andreas.

-- 
Andreas Schwab, SUSE Labs, sch...@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."


Re: [PATCH 05/27] [AARCH64] Use PTR_REG in crti.S.

2016-06-21 Thread Yury Norov
On Tue, Jun 21, 2016 at 10:28:40AM +, Joseph Myers wrote:
> On Tue, 21 Jun 2016, Yury Norov wrote:
> 
> > +#ifdef __LP64__
> > +#define RTLD_START RTLD_START_1("x", "3", "sp")
> > +#else
> > +#define RTLD_START RTLD_START_1("w", "2", "wsp")
> > +#endif
> 
> As well as preprocessor indentation, this is missing spaces after '('; 
> check for and fix that issue throughout this patch series.  (There are 
> only a few cases where a macro is used to construct a type / variable 
> name, such as ElfW, where missing the space is more usual.)
> 
> -- 
> Joseph S. Myers
> jos...@codesourcery.com

So, you want have it like this?
#ifdef __LP64__
# define RTLD_START RTLD_START_1( "x", "3", "sp" )
#else
# define RTLD_START RTLD_START_1( "w", "2", "wsp" )
#endif

Pretty contr-intuitive to me...
Anyway, I follow it.


Re: [PATCH 05/27] [AARCH64] Use PTR_REG in crti.S.

2016-06-21 Thread Joseph Myers
On Tue, 21 Jun 2016, Yury Norov wrote:

> +#ifdef __LP64__
> +#define RTLD_START RTLD_START_1("x", "3", "sp")
> +#else
> +#define RTLD_START RTLD_START_1("w", "2", "wsp")
> +#endif

As well as preprocessor indentation, this is missing spaces after '('; 
check for and fix that issue throughout this patch series.  (There are 
only a few cases where a macro is used to construct a type / variable 
name, such as ElfW, where missing the space is more usual.)

-- 
Joseph S. Myers
jos...@codesourcery.com


[PATCH 05/27] [AARCH64] Use PTR_REG in crti.S.

2016-06-20 Thread Yury Norov
From: Andrew Pinski 

call_weak_fn loads from a pointer, so use PTR_REG so the load
is 32bits for ILP32.

* sysdeps/aarch64/crti.S: Include sysdep.h
(call_weak_fn): Use PTR_REG when loading from
PREINIT_FUNCTION.

AARCH64: Make RTLD_START paramatizable

Make RTLD_START paramatizable for ILP32 and LP64 usage and provides common
code between ILP32.

* sysdeps/aarch64/dl-machine.h (RTLD_START): Rename to ...
(RTLD_START_1): This and add PTR, PTR_SIZE_LOG, and PTR_SP arguments.
(RTLD_START): New macro which uses RTLD_START_1.

Signed-off-by: Yury Norov 
---
 sysdeps/aarch64/crti.S   |   3 +-
 sysdeps/aarch64/dl-machine.h | 128 ++-
 2 files changed, 69 insertions(+), 62 deletions(-)

diff --git a/sysdeps/aarch64/crti.S b/sysdeps/aarch64/crti.S
index 53ccb42..6e149b5 100644
--- a/sysdeps/aarch64/crti.S
+++ b/sysdeps/aarch64/crti.S
@@ -39,6 +39,7 @@
they can be called as functions.  The symbols _init and _fini are
magic and cause the linker to emit DT_INIT and DT_FINI.  */
 
+#include 
 #include 
 
 #ifndef PREINIT_FUNCTION
@@ -60,7 +61,7 @@
.type   call_weak_fn, %function
 call_weak_fn:
adrpx0, :got:PREINIT_FUNCTION
-   ldr x0, [x0, #:got_lo12:PREINIT_FUNCTION]
+   ldr PTR_REG(0), [x0, #:got_lo12:PREINIT_FUNCTION]
cbz x0, 1f
b   PREINIT_FUNCTION
 1:
diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
index a16cb11..7a49852 100644
--- a/sysdeps/aarch64/dl-machine.h
+++ b/sysdeps/aarch64/dl-machine.h
@@ -126,68 +126,74 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, 
int profile)
 /* Initial entry point for the dynamic linker. The C function
_dl_start is the real entry point, its return value is the user
program's entry point */
+#ifdef __LP64__
+#define RTLD_START RTLD_START_1("x", "3", "sp")
+#else
+#define RTLD_START RTLD_START_1("w", "2", "wsp")
+#endif
+
 
-#define RTLD_START asm ("\
-.text  \n\
-.globl _start  \n\
-.type _start, %function\n\
-.globl _dl_start_user  \n\
-.type _dl_start_user, %function\n\
-_start:\n\
-   mov x0, sp  \n\
-   bl  _dl_start   \n\
-   // returns user entry point in x0   \n\
-   mov x21, x0 \n\
-_dl_start_user:\n\
-   // get the original arg count   \n\
-   ldr x1, [sp]\n\
-   // get the argv address \n\
-   add x2, sp, #8  \n\
-   // get _dl_skip_args to see if we were  \n\
-   // invoked as an executable \n\
-   adrpx4, _dl_skip_args   \n\
-ldrw4, [x4, #:lo12:_dl_skip_args]  \n\
-   // do we need to adjust argc/argv   \n\
-cmpw4, 0   \n\
-   beq .L_done_stack_adjust\n\
-   // subtract _dl_skip_args from original arg count   \n\
-   sub x1, x1, x4  \n\
-   // store adjusted argc back to stack\n\
-   str x1, [sp]\n\
-   // find the first unskipped argument\n\
-   mov x3, x2  \n\
-   add x4, x2, x4, lsl #3  \n\
-   // shuffle argv down\n\
-1: ldr x5, [x4], #8\n\
-   str x5, [x3], #8\n\
-   cmp x5, #0  \n\
-   bne 1b  \n\
-   // shuffle envp down\n\
-1: ldr x5, [x4], #8\n\
-   str x5, [x3], #8\n\
-   cmp x5, #0  \n\
-   bne 1b  \n\
-   // shuffle auxv down\n\
-1: ldp x0, x5, [x4, #16]!  \n\
-   stp x0, x5, [x3], #16   \n\
-   cmp x0, #0  \n\
-   bne 1b  \n\
-   //