This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 18/29] [AARCH64] Reformat inline-asm in elf_machine_load_address.
- 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 13:51:20 +0000
- Subject: Re: [PATCH 18/29] [AARCH64] Reformat inline-asm in elf_machine_load_address.
- Authentication-results: sourceware.org; auth=none
- References: <1414396793-9005-1-git-send-email-apinski at cavium dot com> <1414396793-9005-19-git-send-email-apinski at cavium dot com>
On 27 October 2014 07:59, Andrew Pinski <apinski@cavium.com> wrote:
> This patch reformats the inline-asm in elf_machine_load_address so it is
> easier to change only part of the inline-asm. That is using string
> concating instead of string continueing.
>
> Also document on why this inline-asm works, it depends on the 32bit
> relocation being resolved at link time.
>
> * sysdeps/aarch64/dl-machine.h (elf_machine_load_address):
> Refactor inline-asm. Also add comment.
> ---
> sysdeps/aarch64/dl-machine.h | 21 ++++++++++++---------
> 1 files changed, 12 insertions(+), 9 deletions(-)
This looks ok to me.
> diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
> index 6e041b1..121b178 100644
> --- a/sysdeps/aarch64/dl-machine.h
> +++ b/sysdeps/aarch64/dl-machine.h
> @@ -53,19 +53,22 @@ elf_machine_load_address (void)
> The choice of symbol is arbitrary. The static address we obtain
> by constructing a non GOT reference to the symbol, the dynamic
> address of the symbol we compute using adrp/add to compute the
> - symbol's address relative to the PC. */
> + symbol's address relative to the PC.
> + This depends on 32bit relocations being resolved at link time
> + and that the static address fits in the 32bits. */
>
> ElfW(Addr) static_addr;
> ElfW(Addr) dynamic_addr;
>
> - asm (" \n\
> - adrp %1, _dl_start; \n\
> - add %1, %1, #:lo12:_dl_start \n\
> - ldr %w0, 1f \n\
> - b 2f \n\
> -1: .word _dl_start \n\
> -2: \n\
> - " : "=r" (static_addr), "=r" (dynamic_addr));
> + asm (" \n"
> +" adrp %1, _dl_start; \n"
> +" add %1, %1, #:lo12:_dl_start \n"
> +" ldr %w0, 1f \n"
> +" b 2f \n"
> +"1: \n"
> +" .word _dl_start \n"
> +"2: \n"
> + : "=r" (static_addr), "=r" (dynamic_addr));
> return dynamic_addr - static_addr;
> }
>
> --
> 1.7.2.5
>
--
Will Newton
Toolchain Working Group, Linaro