Skip to content

[Driver] Add option to force undefined symbols during linking in BareMetal toolchain object. #132807

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 17, 2025

Conversation

quic-garvgupt
Copy link
Contributor

@quic-garvgupt quic-garvgupt commented Mar 24, 2025

Add support for -u option to force defined symbols. This option is supported
by both lld and gnuld.

This is done as a part of the effort to merge RISCVToolchain object into
BareMetal toolchain object.

This is the 4th patch in the series of patches for merging RISCVToolchain object
into BareMetal toolchain object.

RFC:
https://discourse.llvm.org/t/merging-riscvtoolchain-and-baremetal-toolchains/75524

@quic-garvgupt quic-garvgupt changed the title [Driver] Add option to force udnefined symbols during linking in BareMetal toolchain object. [Driver] Add option to force undefined symbols during linking in BareMetal toolchain object. Mar 24, 2025
@quic-garvgupt quic-garvgupt marked this pull request as ready for review March 24, 2025 18:52
@llvmbot llvmbot added clang Clang issues not falling into any other category backend:RISC-V clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' labels Mar 24, 2025
@llvmbot
Copy link
Member

llvmbot commented Mar 24, 2025

@llvm/pr-subscribers-clang-driver
@llvm/pr-subscribers-backend-risc-v

@llvm/pr-subscribers-clang

Author: Garvit Gupta (quic-garvgupt)

Changes

Add support for -u option to force defined symbols. This option is supported
by both lld and gnuld.

This is done as a part of the effort to merge RISCVToolchain object into
BareMetal toolchain object.

This is the 4th patch in the series of patches for merging RISCVToolchain object
into BareMetal toolchain object.

RFC:
https://discourse.llvm.org/t/merging-riscvtoolchain-and-baremetal-toolchains/75524


Full diff: https://github.com/llvm/llvm-project/pull/132807.diff

3 Files Affected:

  • (modified) clang/lib/Driver/ToolChains/BareMetal.cpp (+3-2)
  • (removed) clang/test/Driver/riscv-args.c (-6)
  • (added) clang/test/Driver/undefined-symbols.c (+15)
diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp
index 919fc6fe71178..edf9ecc728282 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -566,8 +566,9 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
     }
   }
 
-  Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
-                            options::OPT_s, options::OPT_t, options::OPT_r});
+  Args.addAllArgs(CmdArgs,
+                  {options::OPT_L, options::OPT_u, options::OPT_T_Group,
+                   options::OPT_s, options::OPT_t, options::OPT_r});
 
   TC.AddFilePathLibArgs(Args, CmdArgs);
 
diff --git a/clang/test/Driver/riscv-args.c b/clang/test/Driver/riscv-args.c
deleted file mode 100644
index cab08e5b0f811..0000000000000
--- a/clang/test/Driver/riscv-args.c
+++ /dev/null
@@ -1,6 +0,0 @@
-// Check the arguments are correctly passed
-
-// Make sure -T is the last with gcc-toolchain option
-// RUN: %clang -### --target=riscv32 --gcc-toolchain= -Xlinker --defsym=FOO=10 -T a.lds -u foo %s 2>&1 \
-// RUN:   | FileCheck -check-prefix=CHECK-LD %s
-// CHECK-LD: {{.*}} "--defsym=FOO=10" {{.*}} "-u" "foo" {{.*}} "-T" "a.lds"
diff --git a/clang/test/Driver/undefined-symbols.c b/clang/test/Driver/undefined-symbols.c
new file mode 100644
index 0000000000000..0ce0db43bccad
--- /dev/null
+++ b/clang/test/Driver/undefined-symbols.c
@@ -0,0 +1,15 @@
+// Check the arguments are correctly passed
+
+// Make sure -T is the last with gcc-toolchain option
+// RUN: %clang -### --target=riscv32 --gcc-toolchain= -Xlinker --defsym=FOO=10 -T a.lds -u foo %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-LD %s
+// CHECK-LD: {{.*}} "--defsym=FOO=10" {{.*}} "-u" "foo" {{.*}} "-T" "a.lds"
+
+// TODO: Merge this test with the above in the last patch when finally integrating riscv
+// Make sure -T is the last with gcc-toolchain option
+// RUN: %clang -### --target=aarch64-none-elf --gcc-toolchain= -Xlinker --defsym=FOO=10 -T a.lds -u foo %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-ARM-LD %s
+// RUN: %clang -### --target=armv6m-none-eabi --gcc-toolchain= -Xlinker --defsym=FOO=10 -T a.lds -u foo %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-ARM-LD %s
+// CHECK-ARM-LD: {{.*}} "-T" "a.lds" "-u" "foo" {{.*}} "--defsym=FOO=10"
+

@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 2d1b254 to b5e7f11 Compare March 24, 2025 18:59
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 09f0151 to 2c160d5 Compare March 24, 2025 18:59
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from b5e7f11 to 66c86dd Compare March 25, 2025 10:22
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 2c160d5 to 22c7d24 Compare March 25, 2025 10:22
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 66c86dd to 9c67ffb Compare April 4, 2025 15:50
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 22c7d24 to 789d8f2 Compare April 4, 2025 15:50
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 9c67ffb to 34b8356 Compare April 4, 2025 15:53
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 789d8f2 to b3b8c8e Compare April 4, 2025 15:54
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 34b8356 to d74ec9a Compare April 4, 2025 18:08
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from b3b8c8e to bfba89a Compare April 4, 2025 18:08
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from d74ec9a to f93fc60 Compare April 4, 2025 19:34
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from bfba89a to 547b57a Compare April 4, 2025 19:34
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from f93fc60 to a3788b3 Compare April 23, 2025 19:37
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 547b57a to cfa93ef Compare April 23, 2025 19:38
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from a3788b3 to dcff9da Compare May 27, 2025 03:53
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from cfa93ef to ff6d71e Compare May 27, 2025 03:53
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from dcff9da to 597b0e0 Compare May 27, 2025 12:34
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from ff6d71e to 695604e Compare May 27, 2025 12:34
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 597b0e0 to 9a1f1f7 Compare June 12, 2025 17:46
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 695604e to ab8d90f Compare June 12, 2025 17:47
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 9a1f1f7 to 39a064a Compare June 17, 2025 10:33
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from ab8d90f to 0738629 Compare June 17, 2025 10:33
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from 39a064a to c5642ff Compare June 17, 2025 16:39
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from 0738629 to beaabe6 Compare June 17, 2025 16:39
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/link_order branch from c5642ff to fa8aad1 Compare June 17, 2025 17:37
Base automatically changed from users/quic-garvgupt/link_order to main June 17, 2025 18:13
…Metal

toolchain object.

Add support for `-u` option to force defined symbols. This option is supported
by both lld and gnuld.

This is done as a part of the effort to merge RISCVToolchain object into
BareMetal toolchain object.

This is the 4th patch in the series of patches for merging RISCVToolchain object
into BareMetal toolchain object.

RFC:
https://discourse.llvm.org/t/merging-riscvtoolchain-and-baremetal-toolchains/75524

Change-Id: Ia6597c756923a77fd9c7cb9a6ae8e52a56f5457d
@quic-garvgupt quic-garvgupt force-pushed the users/quic-garvgupt/undefined branch from ec09d83 to 7f26ac9 Compare June 17, 2025 18:19
@quic-garvgupt quic-garvgupt merged commit 9cb7545 into main Jun 17, 2025
7 checks passed
@quic-garvgupt quic-garvgupt deleted the users/quic-garvgupt/undefined branch June 17, 2025 18:58
mysterymath added a commit that referenced this pull request Jun 17, 2025
#144603)

…Baremetal toolchain (#121829)"

This reverts the following stack of commits, due to them breaking the
Fuchsia toolchain and corresponding LLVM buildbot.

Revert "[Driver] Fix Arm/AArch64 Link Argument tests (#144582)" This
reverts commit a79186c.

Revert "[Driver] Add option to force undefined symbols during linking in
BareMetal toolchain object. (#132807)" This reverts commit
9cb7545.

Revert "[Driver] Fix link order of BareMetal toolchain object (#132806)"
This reverts commit 31523de.

Revert "[Driver] Add support for crtbegin.o, crtend.o and libgloss lib
to BareMetal toolchain object (#121830)" This reverts commit
ec230aa.

Revert "[Driver] Add support for GCC installation detection in Baremetal
toolchain (#121829)" This reverts commit
eb31c42.
mysterymath added a commit to mysterymath/llvm-project that referenced this pull request Jun 17, 2025
…Baremetal toolchain (llvm#121829)"

This reverts the following stack of commits, due to them breaking the
Fuchsia toolchain and corresponding LLVM buildbot.

Revert "[Driver] Fix Arm/AArch64 Link Argument tests (llvm#144582)"
This reverts commit a79186c.

Revert "[Driver] Add option to force undefined symbols during linking in BareMetal toolchain object. (llvm#132807)"
This reverts commit 9cb7545.

Revert "[Driver] Fix link order of BareMetal toolchain object (llvm#132806)"
This reverts commit 31523de.

Revert "[Driver] Add support for crtbegin.o, crtend.o and libgloss lib to BareMetal toolchain object (llvm#121830)"
This reverts commit ec230aa.

Revert "[Driver] Add support for GCC installation detection in Baremetal toolchain (llvm#121829)"
This reverts commit eb31c42.
fschlimb pushed a commit to fschlimb/llvm-project that referenced this pull request Jun 18, 2025
…Metal toolchain object. (llvm#132807)

Add support for `-u` option to force defined symbols. This option is
supported by both lld and gnuld.

This is done as a part of the effort to merge RISCVToolchain object into
BareMetal toolchain object.

This is the 4th patch in the series of patches for merging
RISCVToolchain object into BareMetal toolchain object.

RFC:
https://discourse.llvm.org/t/merging-riscvtoolchain-and-baremetal-toolchains/75524
fschlimb pushed a commit to fschlimb/llvm-project that referenced this pull request Jun 18, 2025
llvm#144603)

…Baremetal toolchain (llvm#121829)"

This reverts the following stack of commits, due to them breaking the
Fuchsia toolchain and corresponding LLVM buildbot.

Revert "[Driver] Fix Arm/AArch64 Link Argument tests (llvm#144582)" This
reverts commit a79186c.

Revert "[Driver] Add option to force undefined symbols during linking in
BareMetal toolchain object. (llvm#132807)" This reverts commit
9cb7545.

Revert "[Driver] Fix link order of BareMetal toolchain object (llvm#132806)"
This reverts commit 31523de.

Revert "[Driver] Add support for crtbegin.o, crtend.o and libgloss lib
to BareMetal toolchain object (llvm#121830)" This reverts commit
ec230aa.

Revert "[Driver] Add support for GCC installation detection in Baremetal
toolchain (llvm#121829)" This reverts commit
eb31c42.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:RISC-V clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants