Skip to content

Commit

Permalink
AArch64: Reformat inline-asm in elf_machine_load_address
Browse files Browse the repository at this point in the history
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
concatenating instead of string continuation.

Also document why this inline-asm works - it depends on the 32bit
relocation being resolved at link time.

ChangeLog:

2014-11-21  Will Newton  <will.newton@linaro.org>
	    Andrew Pinski  <andrew.pinski@caviumnetworks.com>

	* sysdeps/aarch64/dl-machine.h (elf_machine_load_address):
	Refactor inline-asm.  Also add comment.
  • Loading branch information
Andrew Pinski authored and Will Newton committed Nov 21, 2014
1 parent 01194ba commit 6d3db89
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
3 changes: 3 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
2014-11-21 Will Newton <will.newton@linaro.org>
Andrew Pinski <andrew.pinski@caviumnetworks.com>

* sysdeps/aarch64/dl-machine.h (elf_machine_load_address):
Refactor inline-asm. Also add comment.

* sysdeps/aarch64/bits/link.h (la_aarch64_gnu_pltenter): Use
ElfW macro instead of hardcoded Elf64 types.
(la_aarch64_gnu_pltenter): Likewise.
Expand Down
21 changes: 12 additions & 9 deletions sysdeps/aarch64/dl-machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,19 +52,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;
}

Expand Down

0 comments on commit 6d3db89

Please sign in to comment.