[18/29,AARCH64] Reformat inline-asm in elf_machine_load_address.
Commit Message
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(-)
Comments
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
>
@@ -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;
}