[arm] Avoid instruction references to symbols defined via ".equ"
authorMichael Brown <mcb30@ipxe.org>
Sat, 7 May 2016 22:55:28 +0000 (23:55 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sat, 7 May 2016 23:08:48 +0000 (00:08 +0100)
commit2a187f480ecc9d7943a53658e748bb5e60104788
treec7e739cac5c78017b15e4b6a3720cf6fc58066d4
parent1a16f67a28c6e8b9875b07e15c7c379cfc147e69
[arm] Avoid instruction references to symbols defined via ".equ"

When building for 64-bit ARM, some symbol references may be resolved
via an "adrp" instruction (to obtain the start of the 4kB page
containing the symbol) and a separate 12-bit offset.  For example
(taken from the GNU assembler documentation):

  adrp x0, foo
  ldr  x0, [x0, #:lo12:foo]

We occasionally refer to symbols defined via mechanisms that are not
directly visible to gcc.  For example:

  extern char some_magic_symbol[];
  __asm__ ( ".equ some_magic_symbol, some_magic_expression" );

The subsequent use of the ":lo12:" prefix on such magically-defined
symbols triggers an assertion failure in the assembler.

This problem seems to affect only "private_key_len" in the current
codebase.  Fix by storing this value as static data; this avoids the
need to provide the value as a literal within the instruction stream,
and so avoids the problematic use of the ":lo12:" prefix.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/crypto/privkey.c