mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 02:54:24 +00:00

This patch fixes up the AArch64 assembly code to use adrp/adr instructions instead of ldr instruction for reference to symbols. This allows these assembly sequences to be Position Independant. Note that the the reference to sizes have been replaced with calculation of size at runtime. This is because size is a constant value and does not depend on execution address and using PC relative instructions for loading them makes them relative to execution address. Also we cannot use `ldr` instruction to load size as it generates a dynamic relocation entry which must *not* be fixed up and it is difficult for a dynamic loader to differentiate which entries need to be skipped. Change-Id: I8bf4ed5c58a9703629e5498a27624500ef40a836 Signed-off-by: Soby Mathew <soby.mathew@arm.com>
30 lines
678 B
ArmAsm
30 lines
678 B
ArmAsm
/*
|
|
* Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef __PMF_ASM_MACROS_S__
|
|
#define __PMF_ASM_MACROS_S__
|
|
|
|
#define PMF_TS_SIZE 8
|
|
|
|
/*
|
|
* This macro calculates the address of the per-cpu timestamp
|
|
* for the given service name and local timestamp id.
|
|
* Clobbers: x0 - x9
|
|
*/
|
|
.macro pmf_calc_timestamp_addr _name, _tid
|
|
mov x9, x30
|
|
bl plat_my_core_pos
|
|
mov x30, x9
|
|
adr x2, __PMF_PERCPU_TIMESTAMP_END__
|
|
adr x1, __PMF_TIMESTAMP_START__
|
|
sub x1, x2, x1
|
|
mov x2, #(\_tid * PMF_TS_SIZE)
|
|
madd x0, x0, x1, x2
|
|
adr x1, pmf_ts_mem_\_name
|
|
add x0, x0, x1
|
|
.endm
|
|
|
|
#endif /* __PMF_ASM_MACROS_S__ */
|