Bug#1121498: libreoffice: Preprocessor macros in pdfium confuse arm64 with sparc64

John Paul Adrian Glaubitz <[email protected]>
Newsgroups gmane.linux.debian.devel.openoffice
Message-ID <176424938497.2635800.6445523652088706481.reportbug__21123.8896868721$1764249467$gmane$org@login1.physik.fu-berlin.de>
Source: libreoffice
Version: 4:25.8.3-1
Severity: important
Tags: patch upstream
User: [email protected]
Usertags: sparc64
X-Debbugs-Cc: [email protected]

Hi,

the libreoffice package fails to build from source on sparc64 with:

/tmp/ccLEFgM7.s: Assembler messages:
/tmp/ccLEFgM7.s:10332: Error: Unknown opcode: `qsub'
/tmp/ccLEFgM7.s:10365: Error: Unknown opcode: `qsub'

Further investigation showed that qsub is a valid arm64 instruction, but not
a valid sparc64 instruction. It turned out that the preprocessor check macros
in core/fxcrt/numerics/safe_math_clang_gcc_impl.h contain a typo which causes
arm64 code to be used on sparc64:

#if defined(__ARMEL__) || defined(__arch64__)
#include "core/fxcrt/numerics/safe_math_arm_impl.h"  // IWYU pragma: export
#define BASE_HAS_ASSEMBLER_SAFE_MATH (1)
#else
#define BASE_HAS_ASSEMBLER_SAFE_MATH (0)
#endif

The test for __arch64__ is wrong as the proper test should be for __aarch64__
which is defined on arm64:

(sid_arm64-dchroot)glaubitz@amdahl:~$ echo | gcc -E -dM -|grep arch
#define __aarch64__ 1
(sid_arm64-dchroot)glaubitz@amdahl:~$

On sparc64, __arch64__ is defined:

(sid_sparc64-dchroot)glaubitz@stadler:~$ echo | gcc -E -dM -|grep arch
#define __arch64__ 1
(sid_sparc64-dchroot)glaubitz@stadler:~$

On SPARC, 32-bit and 64-bit systems are differentiated from eacher by testing
whether both __sparc__ and __arch64__ are defined or just __sparc__.

I have reported the issue upstream [1] and provided them with the attached patch.

Thanks,
Adrian

> [1] https://issues.chromium.org/issues/464091911

--
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
0001-core-fxcrt-numerics-Fix-incorrect-preprocessor-check.patch (text/plain, 2 KB)
>From 1c815bec0324037494840d01fc579f2a3420e624 Mon Sep 17 00:00:00 2001
From: John Paul Adrian Glaubitz <[email protected]>
Date: Thu, 27 Nov 2025 13:22:22 +0100
Subject: [PATCH] core/fxcrt/numerics: Fix incorrect preprocessor check on
 aarch64

The preprocessor macro to toggle the use of safe_math_arm_impl.h
currently checks whether __ARMEL__ or __arch64__ are defined. However,
on aarch64, the actual define is called __aarch64__ not __arch64__:

(sid_arm64-dchroot)glaubitz@amdahl:~$ uname -a
Linux amdahl 6.12.57+deb13-arm64 #1 SMP Debian 6.12.57-1 (2025-11-05) aarch64 GNU/Linux
(sid_arm64-dchroot)glaubitz@amdahl:~$ echo | gcc -E -dM -|grep arch
(sid_arm64-dchroot)glaubitz@amdahl:~$

However, the define __arch64__ is used on sparc64:

(sid_sparc64-dchroot)glaubitz@stadler:~$ uname -a
Linux stadler 6.17.0-rc5+ #1 SMP Fri Sep 12 20:37:32 UTC 2025 sparc64 GNU/Linux
(sid_sparc64-dchroot)glaubitz@stadler:~$ echo | gcc -E -dM -|grep arch
(sid_sparc64-dchroot)glaubitz@stadler:~$

This triggers the use of safe_math_arm_impl.h on sparc64 which causes
the compiler to emit the "qsub" instruction which is not recongized:

/tmp/ccLEFgM7.s: Assembler messages:
/tmp/ccLEFgM7.s:10332: Error: Unknown opcode: `qsub'
/tmp/ccLEFgM7.s:10365: Error: Unknown opcode: `qsub'

Signed-off-by: John Paul Adrian Glaubitz <[email protected]>
---
 core/fxcrt/numerics/safe_math_clang_gcc_impl.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/fxcrt/numerics/safe_math_clang_gcc_impl.h b/core/fxcrt/numerics/safe_math_clang_gcc_impl.h
index 58419d5c9..d395ebd3e 100644
--- a/core/fxcrt/numerics/safe_math_clang_gcc_impl.h
+++ b/core/fxcrt/numerics/safe_math_clang_gcc_impl.h
@@ -14,7 +14,7 @@
 
 #include "core/fxcrt/numerics/safe_conversions.h"
 
-#if defined(__ARMEL__) || defined(__arch64__)
+#if defined(__ARMEL__) || defined(__aarch64__)
 #include "core/fxcrt/numerics/safe_math_arm_impl.h"  // IWYU pragma: export
 #define BASE_HAS_ASSEMBLER_SAFE_MATH (1)
 #else
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.