Bug#1107859: libffi-dev: Can't link libffi_pic.a to large binaries like chromium on loong64
Package: libffi-dev
Version: 3.4.8-2
Severity: normal
Tags: patch
X-Debbugs-Cc: debian-loongarch@lists.debian.org
User: debian-loongarch@lists.debian.org
Usertags: loong64
Chromium is linking libffi staticly. While on LoongArch64 platform the
default code model
provides 256MiB PC-relative addressing space[1], which is not enough for
chromium.
I will get following errors like:
ld.lld-19: error:
/lib/loongarch64-linux-gnu/libffi_pic.a(prep_cif.o):(function
ffi_prep_cif_core: .text+0x2b8): relocation R_LARCH_B26 out of range:
157436696 is not in [-134217728, 134217727]; references 'abort'
After recompiling libffi with code model medium, chromium can get linked
fine.
Here is my patch setting medium code model:
diff --git a/debian/rules b/debian/rules
index 87e4467..7ad92a9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -22,6 +22,13 @@ CPPFLAGS = $(shell dpkg-buildflags --get CPPFLAGS)
CFLAGS = $(shell dpkg-buildflags --get CFLAGS)
LDFLAGS = $(shell dpkg-buildflags --get LDFLAGS)
+# This will enable linking libffi staticly with large binaries like
chromium.
+# For more details, see:
+#
https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc#code_models
+ifeq (loong64,$(DEB_HOST_ARCH))
+CFLAGS += -mcmodel=medium
+endif
+
ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
with_check = yes
else
-- System Information:
Debian Release: 13.0
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: loong64 (loongarch64)
Foreign Architectures: amd64
Kernel: Linux 6.15-loong64 (SMP w/8 CPU threads; PREEMPT)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=zh_CN.UTF-8, LC_CTYPE=zh_CN.UTF-8 (charmap=UTF-8),
LANGUAGE=zh_CN:zh
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages libffi-dev depends on:
ii libffi8 3.4.8-2
libffi-dev recommends no packages.
libffi-dev suggests no packages.
-- no debconf information
Reply to: