[compiler-rt] [Compiler-rt][test] Fix circular link dependency between builtins and libc (PR #199482)

Garvit Gupta via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 8 05:25:50 PDT 2026


https://github.com/quic-garvgupt updated https://github.com/llvm/llvm-project/pull/199482

>From 496fcec2beafa37d99e6b0344f4f6e354b07c875 Mon Sep 17 00:00:00 2001
From: Garvit Gupta <garvgupt at qti.qualcomm.com>
Date: Sun, 24 May 2026 22:58:05 -0700
Subject: [PATCH] [Compiler-rt][test] Fix circular link dependency between
 builtins and libc The compiler-rt builtins tests link against
 libclang_rt.builtins.a, libc, and libm, but face a true circular dependency:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

builtins → libc: Overflow-checking builtins call
__compilerrt_abort_impl, which lowers to libc’s abort().
libc → builtins: Routines such as vfprintf (tinystdio) use
__aeabi_uldivmod, and AArch64 long double paths in libm rely on builtins
like __multf3, __divtf3, etc.

No linear link order (builtins -lc -lm or -lc -lm builtins) satisfies
both directions:

builtins -lc -lm → missing __aeabi_uldivmod
-lc -lm builtins → missing abort

Fix by grouping libclang_rt.builtins.a and libc with
--start-group/--end-group so the linker rescans until all undefined
symbols are resolved.
---
 compiler-rt/test/builtins/Unit/lit.cfg.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/compiler-rt/test/builtins/Unit/lit.cfg.py b/compiler-rt/test/builtins/Unit/lit.cfg.py
index 8d602d1c417fa..9bfa9d7964508 100644
--- a/compiler-rt/test/builtins/Unit/lit.cfg.py
+++ b/compiler-rt/test/builtins/Unit/lit.cfg.py
@@ -107,7 +107,9 @@ def get_libgcc_file_name():
     if config.target_os == "Haiku":
         config.substitutions.append(("%librt ", base_lib + " -lroot "))
     else:
-        config.substitutions.append(("%librt ", base_lib + " -lc -lm "))
+        config.substitutions.append(
+            ("%librt ", "-Wl,--start-group " + base_lib + " -lc -Wl,--end-group -lm ")
+        )
 
 builtins_test_crt = get_required_attr(config, "builtins_test_crt")
 if builtins_test_crt:



More information about the llvm-commits mailing list