bl31.elf has a LOAD segment with RWX permissions
Hello,
(no issue here at all, I hope someone sees this...)
after upgrading binutils on debian testing (2.38.50.20220707-1 to 2.38.90.20220713-2) atf started to fail building with the following warning, causing an error:
$ make BUILD_BASE=build CROSS_COMPILE=aarch64-linux-gnu- bl31
...
LD /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf
aarch64-linux-gnu-ld.bfd: warning: /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf has a LOAD segment with RWX permissions
make: *** [Makefile:1128: /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf] Error 1
Running with V=1, getting the ld line and running it with --verbose here's the output. The command fails because of --fatal-warnings
(I truncated some harmless fluff in the middle)
$ aarch64-linux-gnu-ld.bfd -o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf --fatal-warnings -O1 --gc-sections -Map=/home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.map --script /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.ld /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/build_message.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_context_mgmt.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/interrupt_mgmt.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fdt_wrappers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/runtime_svc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cci.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_pwrc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gic-x00.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicdv3_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicrv3_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicv3_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicv3_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/smmu_v3.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/tzc400.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/v2m_flash.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/delay_timer.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/generic_delay_timer.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpuamu.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/errata_report.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/context_mgmt.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpu_data_array.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/amu.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/spe.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/sve.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fconf.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fconf_dyn_cfg_getter.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bakery_lock_coherent.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/pmf_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/pmf_smc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_mem_protect.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_off.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_on.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_setup.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_stat.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_suspend.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_system_off.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31make BUILD_BASE=build CROSS_COMPILE=aarch64-lin16:26:50 martinet@pc-zest 1 ~/code/trusted-firmware-a$ aarch64-linux-gnu-ld.bfd -o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf --fatal-warnings -O1 --gc-sections -Map=/home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.map --script /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.ld /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/build_message.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_context_mgmt.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/interrupt_mgmt.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fdt_wrappers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/runtime_svc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cci.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_pwrc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gic-x00.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicdv3_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicrv3_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicv3_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/gicv3_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/smmu_v3.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/tzc400.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/v2m_flash.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/delay_timer.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/generic_delay_timer.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpuamu.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/errata_report.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/context_mgmt.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpu_data_array.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/amu.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/spe.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/sve.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fconf.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fconf_dyn_cfg_getter.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bakery_lock_coherent.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/pmf_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/pmf_smc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_main.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_mem_protect.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_off.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_on.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_setup.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_stat.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_suspend.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_system_off.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/mem_region.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fconf_hw_config_getter.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_bl31_setup.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_console.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_gicv3.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_pm.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_security.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_topology.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/execution_state_switch.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_bl31_setup.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_gicv3.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_nor_psci_mem_protect.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_pm.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_sip_svc.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_topology.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_tzc400.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/plat_gicv3.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/plat_psci_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_arch_svc_setup.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/std_svc_setup.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/tf_log.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/multi_console.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/plat_bl_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/plat_log_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/plat_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/popcountdi2.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/popcountsi2.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_common.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_console.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/xlat_tables_arch.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/xlat_tables_context.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/xlat_tables_core.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/xlat_tables_utils.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_entrypoint.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/crash_reporting.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/ea_delegate.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/runtime_exceptions.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/aem_generic.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cortex_a35.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cortex_a53.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cortex_a57.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cortex_a72.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cortex_a73.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpu_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpuamu_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/dsu_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/wa_cve_2017_5715_bpiall.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/wa_cve_2017_5715_mmu.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/context.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cpu_data.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/amu_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/spinlock.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/psci_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/fvp_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/platform_mp_stack.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/debug.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/cache_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/misc_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/platform_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/pl011_console.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/board_arm_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/arm_helpers.o /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/enable_mmu.o -L/home/martinet/code/trusted-firmware-a/build/fvp/release/lib -lfdt -lc --verbose
GNU ld (GNU Binutils for Debian) 2.38.90.20220713
Supported emulations:
aarch64linux
aarch64elf
aarch64elf32
aarch64elf32b
aarch64elfb
armelf
armelfb
aarch64linuxb
aarch64linux32
aarch64linux32b
armelfb_linux_eabi
armelf_linux_eabi
using external linker script:
==================================================
OUTPUT_FORMAT("elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
ENTRY(bl31_entrypoint)
MEMORY {
RAM (rwx): ORIGIN = ((((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000))) - (0x3D000)), LENGTH = (((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000))) - ((((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000))) - (0x3D000))
}
MEMORY {
EL3_SEC_DRAM (rw): ORIGIN = (((0x80000000) + (0x80000000) - (0x0)) - (0x00200000)), LENGTH = (0x00200000)
}
SECTIONS
{
. = (((0x80000000) + (0x80000000) - (0x0)) - (0x00200000));
ASSERT(. == ALIGN(((1) << (12))),
"ARM_EL3_TZC_DRAM_BASE address is not aligned on a page boundary.")
el3_tzc_dram (NOLOAD) : ALIGN(((1) << (12))) {
__EL3_SEC_DRAM_START__ = .;
*(arm_el3_tzc_dram)
__EL3_SEC_DRAM_UNALIGNED_END__ = .;
. = ALIGN(((1) << (12)));
__EL3_SEC_DRAM_END__ = .;
} >EL3_SEC_DRAM
}
SECTIONS
{
.init __STACKS_START__ : {
. = . + (0x800);
. = ALIGN(((1) << (12)));
__INIT_CODE_START__ = .;
*(*text.init*);
__INIT_CODE_END__ = .;
INIT_CODE_END_ALIGNED = ALIGN(((1) << (12)));
} >RAM
ASSERT(__INIT_CODE_END__ <= ((((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000)) - ((0xB000) + (0))) - ((0x13000) - (0))),
"BL31 init has exceeded progbits limit.")
}
SECTIONS
{
. = ((((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000))) - (0x3D000));
ASSERT(. == ALIGN(((1) << (12))),
"BL31_BASE address is not aligned on a page boundary.")
__BL31_START__ = .;
.text . : {
__TEXT_START__ = .;
*bl31_entrypoint.o(.text*)
*(SORT_BY_ALIGNMENT(SORT(.text*)))
*(.vectors)
. = ALIGN(((1) << (12)));
__TEXT_END__ = .;
} >RAM
.rodata . : {
__RODATA_START__ = .;
*(SORT_BY_ALIGNMENT(.rodata*))
. = ALIGN(8); __RT_SVC_DESCS_START__ = .; KEEP(*(rt_svc_descs)) __RT_SVC_DESCS_END__ = .; . = ALIGN(8); __FCONF_POPULATOR_START__ = .; KEEP(*(.fconf_populator)) __FCONF_POPULATOR_END__ = .; . = ALIGN(8); __PMF_SVC_DESCS_START__ = .; KEEP(*(pmf_svc_descs)) __PMF_SVC_DESCS_END__ = .; . = ALIGN(8); __PARSER_LIB_DESCS_START__ = .; KEEP(*(.img_parser_lib_descs)) __PARSER_LIB_DESCS_END__ = .; . = ALIGN(8); __CPU_OPS_START__ = .; KEEP(*(cpu_ops)) __CPU_OPS_END__ = .; . = ALIGN(8); __GOT_START__ = .; *(.got) __GOT_END__ = .;
. = ALIGN(8);
__pubsub_psci_cpu_on_finish_start = .; KEEP(*(__pubsub_psci_cpu_on_finish)); __pubsub_psci_cpu_on_finish_end = .;
__pubsub_psci_suspend_pwrdown_start_start = .; KEEP(*(__pubsub_psci_suspend_pwrdown_start)); __pubsub_psci_suspend_pwrdown_start_end = .;
__pubsub_psci_suspend_pwrdown_finish_start = .; KEEP(*(__pubsub_psci_suspend_pwrdown_finish)); __pubsub_psci_suspend_pwrdown_finish_end = .;
__pubsub_cm_entering_secure_world_start = .; KEEP(*(__pubsub_cm_entering_secure_world)); __pubsub_cm_entering_secure_world_end = .;
__pubsub_cm_exited_secure_world_start = .; KEEP(*(__pubsub_cm_exited_secure_world)); __pubsub_cm_exited_secure_world_end = .;
__pubsub_cm_entering_normal_world_start = .; KEEP(*(__pubsub_cm_entering_normal_world)); __pubsub_cm_entering_normal_world_end = .;
__pubsub_cm_exited_normal_world_start = .; KEEP(*(__pubsub_cm_exited_normal_world)); __pubsub_cm_exited_normal_world_end = .;
. = ALIGN(((1) << (12)));
__RODATA_END__ = .;
} >RAM
ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__,
"cpu_ops not defined for this platform.")
__RW_START__ = . ;
.data . : ALIGN(1) { __DATA_START__ = .; *(SORT_BY_ALIGNMENT(.data*)) __DATA_END__ = .; } >RAM
.rela.dyn : ALIGN(8) { __RELA_START__ = .; *(.rela*) __RELA_END__ = .; } >RAM
ASSERT(. <= ((((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000)) - ((0xB000) + (0))) - ((0x13000) - (0))), "BL31 progbits has exceeded its limit.")
stacks (NOLOAD) : { __STACKS_START__ = .; *(tzfw_normal_stacks) __STACKS_END__ = .; OFFSET = ABSOLUTE(SIZEOF(.init) - (. - __STACKS_START__)); SIGN = ABSOLUTE(OFFSET) & (1 << 63); MASK = ABSOLUTE(SIGN >> 63) - 1; . += ABSOLUTE(OFFSET) & ABSOLUTE(MASK); . = ALIGN(((1) << (12))); } >RAM
.bss (NOLOAD) : ALIGN(16) { __BSS_START__ = .; *(SORT_BY_ALIGNMENT(.bss*)) *(COMMON) . = ALIGN(((1) << 6)); __PMF_TIMESTAMP_START__ = .; KEEP(*(pmf_timestamp_array)) . = ALIGN(((1) << 6)); __PMF_PERCPU_TIMESTAMP_END__ = .; __PERCPU_TIMESTAMP_SIZE__ = ABSOLUTE(. - __PMF_TIMESTAMP_START__); . = . + (__PERCPU_TIMESTAMP_SIZE__ * (((2) * (4) * (1)) - 1)); __PMF_TIMESTAMP_END__ = .; . = ALIGN(16); *(base_xlat_table) __BSS_END__ = .; } >RAM
xlat_table (NOLOAD) : { *(xlat_table) } >RAM
coherent_ram (NOLOAD) : ALIGN(((1) << (12))) {
__COHERENT_RAM_START__ = .;
*(bakery_lock)
*(tzfw_coherent_mem)
__COHERENT_RAM_END_UNALIGNED__ = .;
. = ALIGN(((1) << (12)));
__COHERENT_RAM_END__ = .;
} >RAM
__RW_END__ = .;
__BL31_END__ = .;
/DISCARD/ : {
*(.dynsym .dynstr .hash .gnu.hash)
}
ASSERT(. <= (((0x04000000) + (0x00001000)) + ((0x00040000) - (0x00001000))), "BL31 image has exceeded its limit.")
}
==================================================
aarch64-linux-gnu-ld.bfd: mode aarch64linux
attempt to open /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/build_message.o succeeded
/home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/build_message.o
attempt to open /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_context_mgmt.o succeeded
/home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_context_mgmt.o
attempt to open /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31_main.o succeeded
...
(/home/martinet/code/trusted-firmware-a/build/fvp/release/lib/libc.a)strnlen.o
(/home/martinet/code/trusted-firmware-a/build/fvp/release/lib/libc.a)strrchr.o
(/home/martinet/code/trusted-firmware-a/build/fvp/release/lib/libc.a)memset.o
aarch64-linux-gnu-ld.bfd: warning: /home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf has a LOAD segment with RWX permissions
aarch64-linux-gnu-ld.bfd: link errors found, deleting executable `/home/martinet/code/trusted-firmware-a/build/fvp/release/bl31/bl31.elf'
This can be worked around with the new --no-warn-rwx-segments
option as follow:
diff --git a/Makefile b/Makefile
index 2d5a5bb2e3db..80b1e78d27b0 100644
--- a/Makefile
+++ b/Makefile
@@ -415,7 +415,7 @@ TF_LDFLAGS += $(subst --,-Xlinker --,$(TF_LDFLAGS_$(ARCH)))
# LD = gcc-ld (ld) or llvm-ld (ld.lld) or other
else
-TF_LDFLAGS += --fatal-warnings -O1
+TF_LDFLAGS += --fatal-warnings -O1 --no-warn-rwx-segments
TF_LDFLAGS += --gc-sections
# ld.lld doesn't recognize the errata flags,
# therefore don't add those in that case
But there might be a better solution than wiping it under the rug; please advise.