Re: git: f1e8b0ff4e13 - main - bsd.cpu.mk: Add a workaround for erratum 843419

From: Dima Panov <fluffy_at_FreeBSD.org>
Date: Fri, 28 Aug 2026 10:55:04 UTC
Hello!

IMO, there must be additional guard knob to avoid apply extra LDFLAGS in test conditions

Something like:
. if ${MACHINE_CPU:Mcortexa53} != "" && !defined AVOID_CORTEXA53_FIX
  LDFLAGS += -Wl,--fix-cortex-a53-843419
. endif


On 20.08.2026 19:30, Adrian Chadd wrote:
> Do they or do they not have workarounds for the a53 bug in question?
> 
> Like, ok, I can understand an issue like "rust/go is looking at LDFLAGS"
> which is a whole fun bottle of wtf, but the end question I have here is whether
> rust/go have the workaround in question or not.
> 
> Life may be easier if you live on later silicon without these bugs, but we
> live in a world where there's plenty of arm64 silicon revisions out there
> all with different fun bugs and if we want to ship single kernel/userland and
> package builds for them all, we /do/ need to compile code that runs on
> the least common denominator.
> 
> 
> 
> 
> -adrian
> 
> On Thu, 20 Aug 2026 at 08:41, Dima Panov <fluffy@freebsd.org> wrote:
>>
>> Hello!
>>
>> At least it badly affected aarch64 build on Apple Silicon in VMWare guest and always set LDFLAGS += -Wl,--fix-cortex-a53-843419
>>
>> However here is no cortex cores at all:
>> $ dmesg | grep CPU
>> Starting CPU 1 (10000)
>> Starting CPU 2 (20000)
>> Starting CPU 3 (30000)
>> Starting CPU 4 (40000)
>> Starting CPU 5 (50000)
>> FreeBSD/SMP: Multiprocessor System Detected: 6 CPUs
>> cpu0: <ACPI CPU> on acpi0
>> CPU  0: Apple Unknown CPU r0p0 (midr: 610f0000) affinity:  0  0  0
>> CPU  1: Apple Unknown CPU r0p0 (midr: 610f0000) affinity:  1  0  0
>> CPU  2: Apple Unknown CPU r0p0 (midr: 610f0000) affinity:  2  0  0
>> CPU  3: Apple Unknown CPU r0p0 (midr: 610f0000) affinity:  3  0  0
>> CPU  4: Apple Unknown CPU r0p0 (midr: 610f0000) affinity:  4  0  0
>> CPU  5: Apple Unknown CPU r0p0 (midr: 610f0000) affinity:  5  0  0
>>
>> Some rust and go ports now failed with error "flag provided but not defined: -Wl,--fix-cortex-a53-843419", see www/gitea or lang/rust-bootstrap for example
>>
>>
>> On 14.07.2026 18:49, Andrew Turner wrote:
>>> The branch main has been updated by andrew:
>>>
>>> URL: https://cgit.FreeBSD.org/src/commit/?id=f1e8b0ff4e13b52c5e41a5eea3e686410af3dd0b
>>>
>>> commit f1e8b0ff4e13b52c5e41a5eea3e686410af3dd0b
>>> Author:     Andrew Turner <andrew@FreeBSD.org>
>>> AuthorDate: 2026-07-14 15:07:30 +0000
>>> Commit:     Andrew Turner <andrew@FreeBSD.org>
>>> CommitDate: 2026-07-14 15:47:15 +0000
>>>
>>>       bsd.cpu.mk: Add a workaround for erratum 843419
>>>
>>>       Add a workaround for the Arm Cortex-A53 erratum 843419. This has been
>>>       targeted when the build is either unoptimised for any CPU/architecture
>>>       or targets the Cortex-A53 or ARMv8.0 architecture.
>>>
>>>       PR:             296240
>>>       PR:             296395
>>>       Reported by:    Hal Murray <halmurray+freebsd@sonic.net>
>>>       Reported by:    Andreas Schuh <x55839@icloud.com>
>>>       Reviewed by:    cognet, mmel
>>>       Sponsored by:   Arm Ltd
>>>       Differential Revision:  https://reviews.freebsd.org/D58212
>>> ---
>>>    share/mk/bsd.cpu.mk | 18 +++++++++++++++++-
>>>    1 file changed, 17 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/share/mk/bsd.cpu.mk b/share/mk/bsd.cpu.mk
>>> index 33587b6ba25a..b743d3e71a36 100644
>>> --- a/share/mk/bsd.cpu.mk
>>> +++ b/share/mk/bsd.cpu.mk
>>> @@ -6,7 +6,7 @@
>>>    .if !defined(CPUTYPE) || empty(CPUTYPE)
>>>    _CPUCFLAGS =
>>>    . if ${MACHINE_CPUARCH} == "aarch64"
>>> -MACHINE_CPU = arm64
>>> +MACHINE_CPU = arm64 cortexa53
>>>    . elif ${MACHINE_CPUARCH} == "amd64"
>>>    MACHINE_CPU = amd64 sse2 sse mmx
>>>    . elif ${MACHINE_CPUARCH} == "arm"
>>> @@ -124,6 +124,14 @@ _CPUCFLAGS = -mcpu=${CPUTYPE}
>>>    . elif ${MACHINE_ARCH:Mpowerpc64*} != ""
>>>    _CPUCFLAGS = -mcpu=${CPUTYPE}
>>>    . elif ${MACHINE_CPUARCH} == "aarch64"
>>> +MACHINE_CPU = arm64
>>> +.  if ${CPUTYPE} == "generic"
>>> +MACHINE_CPU += cortexa53
>>> +.  elif ${CPUTYPE} == "armv8-a"
>>> +MACHINE_CPU += cortexa53
>>> +.  elif ${CPUTYPE:M*cortex-a53*} != ""
>>> +MACHINE_CPU += cortexa53
>>> +.  endif
>>>    .  if ${CPUTYPE:Marmv*} != ""
>>>    # Use -march when the CPU type is an architecture value, e.g. armv8.1-a
>>>    _CPUCFLAGS = -march=${CPUTYPE}
>>> @@ -302,6 +310,14 @@ MACHINE_CPU = riscv
>>>    . endif
>>>    .endif
>>>
>>> +########## arm64/aarch64
>>> +.if ${MACHINE_CPUARCH} == "aarch64"
>>> +# Add the Cortex-A53 erratum 843419 workaround if we are targeting it.
>>> +. if ${MACHINE_CPU:Mcortexa53} != ""
>>> +LDFLAGS += -Wl,--fix-cortex-a53-843419
>>> +. endif
>>> +.endif
>>> +
>>>    ########## arm
>>>    .if ${MACHINE_CPUARCH} == "arm"
>>>    MACHINE_CPU += arm
>>
>> --
>> Sincerely,
>> Dima (fluffy@FreeBSD.org, https://t.me/FluffyBSD, @fluffy:matrix-dev.freebsd.org)
>> (desktop, kde, x11, office, ports-secteam)@FreeBSD team
>>

-- 
Sincerely,
Dima (fluffy@FreeBSD.org, https://t.me/FluffyBSD, @fluffy:matrix-dev.freebsd.org)
(desktop, kde, x11, office, ports-secteam)@FreeBSD team