From 4bfa29e94788df12c5845adeb8d5fb915db89541 Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Thu, 20 Aug 2015 14:36:34 -0700 Subject: arm64: xcompile: Add support for A53 erratum 843419 This patch adds support to enable a linker workaround to a hardware erratum on some early Cortex-A53 revisions. Since the linker option was added very recently, we use xcompile to test whether the toolchain supports it first. It is also guarded by a Kconfig since only a few ARM64 SoCs will need this and it incurs a performance penalty. BRANCH=none BUG=none TEST=Turned it on or off for Smaug and confirmed that it (dis)appeared in verbose make output accordingly. Change-Id: I01c9642d3cf489134645f0db6f79f1c788ddb00d Signed-off-by: Patrick Georgi Original-Commit-Id: 57128785760c4dfa32d6e6d764756443a9323cb7 Original-Change-Id: Ia5dd124f484e38460d75fb864304e7e8b18d16b7 Original-Signed-off-by: Julius Werner Original-Reviewed-on: https://chromium-review.googlesource.com/294745 Original-Reviewed-by: Patrick Georgi Reviewed-on: http://review.coreboot.org/11403 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer Reviewed-by: Julius Werner --- util/xcompile/xcompile | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'util/xcompile') diff --git a/util/xcompile/xcompile b/util/xcompile/xcompile index e712ac34e3..46a30d15f0 100755 --- a/util/xcompile/xcompile +++ b/util/xcompile/xcompile @@ -87,6 +87,18 @@ testcc() { $1 -nostdlib -Werror $2 -c "$tmp_c" -o "$tmp_o" >/dev/null 2>&1 } +testld() { + local gcc="$1" + local cflags="$2" + local ld="$3" + local ldflags="$4" + local tmp_o="$TMPFILE.o" + local tmp_elf="$TMPFILE.elf" + rm -f "$tmp_elf" + testcc $1 $2 && + $3 -nostdlib -static $4 -o "$tmp_elf" "$tmp_o" >/dev/null 2>&1 +} + testas() { local gccprefix="$1" local twidth="$2" @@ -163,6 +175,11 @@ detect_special_flags() { ;; x64) ;; + arm64) + testld "$GCC" "$CFLAGS_GCC" "${GCCPREFIX}ld${LINKER_SUFFIX}" \ + "$LDFLAGS --fix-cortex-a53-843419" && \ + LDFLAGS_ARM64_A53_ERRATUM_843419+=" --fix-cortex-a53-843419" + ;; mipsel) testcc "$GCC" "$CFLAGS_GCC -mno-abicalls -fno-pic" && \ CFLAGS_GCC+=" -mno-abicalls -fno-pic" @@ -203,6 +220,9 @@ endif CPP_${TARCH}:=${GCCPREFIX}cpp AS_${TARCH}:=${GCCPREFIX}as ${ASFLAGS} LD_${TARCH}:=${GCCPREFIX}ld${LINKER_SUFFIX} ${LDFLAGS} +ifeq (\$(CONFIG_ARM64_A53_ERRATUM_843419)\$(CONFIG_LP_ARM64_A53_ERRATUM_843419),y) +LD_${TARCH}+=${LDFLAGS_ARM64_A53_ERRATUM_843419} +endif NM_${TARCH}:=${GCCPREFIX}nm OBJCOPY_${TARCH}:=${GCCPREFIX}objcopy OBJDUMP_${TARCH}:=${GCCPREFIX}objdump -- cgit v1.2.3