# --- T2-COPYRIGHT-BEGIN --- # t2/package/*/firefox/hotfix-ia64-nspr-atomics.patch # Copyright (C) 2026 The T2 SDE Project # SPDX-License-Identifier: GPL-2.0 or patched project license # --- T2-COPYRIGHT-END --- # NSPR's ia64 branch declares _PR_ia64_Atomic{Increment,Decrement,Add,Set} # as extern functions meant to be implemented in # pr/src/md/unix/os_Linux_ia64.s. That file (and the surrounding # PR_MD_ASFILES autoconf machinery in nsprpub/configure.in) is only wired # up for a standalone NSPR build; Firefox's own moz.build-integrated NSPR # build never compiles it, so those symbols end up undefined at link # time. Other 64-bit architectures here (loongarch/powerpc64/mips/riscv) # avoid this entirely by using GCC's built-in atomics instead of a # hand-written per-arch assembly file; do the same for ia64, since GCC's # ia64 backend has long supported these builtins. --- firefox-152.0.5/nsprpub/pr/include/md/_linux.h.vanilla 2026-07-12 01:20:00.000000000 +0200 +++ firefox-152.0.5/nsprpub/pr/include/md/_linux.h 2026-07-12 01:21:00.000000000 +0200 @@ -117,14 +117,12 @@ #endif #if defined(__ia64__) +/* Use GCC built-in functions (no separate os_Linux_ia64.s in the + * moz.build-integrated NSPR build) */ #define _PR_HAVE_ATOMIC_OPS #define _MD_INIT_ATOMIC() -extern PRInt32 _PR_ia64_AtomicIncrement(PRInt32 *val); -#define _MD_ATOMIC_INCREMENT _PR_ia64_AtomicIncrement -extern PRInt32 _PR_ia64_AtomicDecrement(PRInt32 *val); -#define _MD_ATOMIC_DECREMENT _PR_ia64_AtomicDecrement -extern PRInt32 _PR_ia64_AtomicAdd(PRInt32 *ptr, PRInt32 val); -#define _MD_ATOMIC_ADD _PR_ia64_AtomicAdd -extern PRInt32 _PR_ia64_AtomicSet(PRInt32 *val, PRInt32 newval); -#define _MD_ATOMIC_SET _PR_ia64_AtomicSet +#define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1) +#define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1) +#define _MD_ATOMIC_ADD(ptr, i) __sync_add_and_fetch(ptr, i) +#define _MD_ATOMIC_SET(ptr, nv) __sync_lock_test_and_set(ptr, nv) #endif