aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLulu Cheng <chenglulu@loongson.cn>2025-02-12 14:29:58 +0800
committerLulu Cheng <chenglulu@loongson.cn>2025-02-17 10:15:39 +0800
commitae14d7d04da8c6cb542269722638071f999f94d8 (patch)
treef809de7cc994fdc132b5f9931259568ca29e6e31
parent2ef2b206c4617abae60002280455f7175aaa6064 (diff)
downloadgcc-ae14d7d04da8c6cb542269722638071f999f94d8.zip
gcc-ae14d7d04da8c6cb542269722638071f999f94d8.tar.gz
gcc-ae14d7d04da8c6cb542269722638071f999f94d8.tar.bz2
LoongArch: Fix the issue of function jump out of range caused by crtbeginS.o [PR118844].
Due to the presence of R_LARCH_B26 in /usr/lib/gcc/loongarch64-linux-gnu/14/crtbeginS.o, its addressing range is [PC-128MiB, PC+128MiB-4]. This means that when the code segment size exceeds 128MB, linking with lld will definitely fail (ld will not fail because the order of the two is different). The linking order: lld: crtbeginS.o + .text + .plt ld : .plt + crtbeginS.o + .text To solve this issue, add '-mcmodel=extreme' when compiling crtbeginS.o. PR target/118844 libgcc/ChangeLog: * config/loongarch/t-crtstuff: Add '-mcmodel=extreme' to CRTSTUFF_T_CFLAGS_S.
-rw-r--r--libgcc/config/loongarch/t-crtstuff6
1 files changed, 6 insertions, 0 deletions
diff --git a/libgcc/config/loongarch/t-crtstuff b/libgcc/config/loongarch/t-crtstuff
index b8c36eb..2a2489b 100644
--- a/libgcc/config/loongarch/t-crtstuff
+++ b/libgcc/config/loongarch/t-crtstuff
@@ -3,3 +3,9 @@
# to .eh_frame data from crtbeginT.o instead of the user-defined object
# during static linking.
CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables
+
+# As shown in the test case PR118844, when using lld for linking,
+# it fails due to B26 in crtbeginS.o causing the link to exceed the range.
+# Therefore, the issue was resolved by adding the compilation option
+# "-mcmodel=extreme" when compiling crtbeginS.o.
+CRTSTUFF_T_CFLAGS_S += -mcmodel=extreme