diff --git a/include/lib/utils.h b/include/lib/utils.h index cdb125cfa..17ee93694 100644 --- a/include/lib/utils.h +++ b/include/lib/utils.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -79,13 +79,11 @@ void zeromem(void *mem, u_register_t length); * which is constant and does not depend on the execute address of the binary. */ #define DEFINE_LOAD_SYM_ADDR(_name) \ -static inline u_register_t load_addr_## _name(void) \ -{ \ - u_register_t v; \ - /* Create a void reference to silence compiler */ \ - (void) _name; \ - __asm__ volatile ("ldr %0, =" #_name : "=r" (v)); \ - return v; \ +static inline u_register_t load_addr_## _name(void) \ +{ \ + u_register_t v; \ + __asm__ volatile ("ldr %0, =" #_name : "=r" (v) : "X" (#_name));\ + return v; \ } /* Helper to invoke the function defined by DEFINE_LOAD_SYM_ADDR() */ diff --git a/plat/arm/common/arm_gicv3.c b/plat/arm/common/arm_gicv3.c index cfc535939..4a3a22ec0 100644 --- a/plat/arm/common/arm_gicv3.c +++ b/plat/arm/common/arm_gicv3.c @@ -44,12 +44,11 @@ static const interrupt_prop_t arm_interrupt_props[] = { /* * We save and restore the GICv3 context on system suspend. Allocate the - * data in the designated EL3 Secure carve-out memory. The `volatile` - * is used to prevent the compiler from removing the gicv3 contexts even - * though the DEFINE_LOAD_SYM_ADDR creates a dummy reference to it. + * data in the designated EL3 Secure carve-out memory. The `used` attribute + * is used to prevent the compiler from removing the gicv3 contexts. */ -static volatile gicv3_redist_ctx_t rdist_ctx __section("arm_el3_tzc_dram"); -static volatile gicv3_dist_ctx_t dist_ctx __section("arm_el3_tzc_dram"); +static gicv3_redist_ctx_t rdist_ctx __section("arm_el3_tzc_dram") __used; +static gicv3_dist_ctx_t dist_ctx __section("arm_el3_tzc_dram") __used; /* Define accessor function to get reference to the GICv3 context */ DEFINE_LOAD_SYM_ADDR(rdist_ctx)