[lld] [lld] Use position independent argument parsing for Unresolved Symbol (PR #123950)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 22 07:19:39 PST 2025


https://github.com/aokblast updated https://github.com/llvm/llvm-project/pull/123950

>From 5ece6c77699e8bfc5d79260c261f53c92101b96d Mon Sep 17 00:00:00 2001
From: SHENGYI HONG <aokblast at FreeBSD.org>
Date: Thu, 2 Jan 2025 00:30:02 +0800
Subject: [PATCH] [lld] Use position independent argument parsing for
 Unresolved Symbol policy

---
 lld/ELF/Driver.cpp | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 019388c9bd2e2c..534be393976465 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -757,15 +757,18 @@ static void setUnresolvedSymbolPolicy(Ctx &ctx, opt::InputArgList &args) {
         break;
       arg->claim();
       break;
-    case OPT_allow_shlib_undefined:
-      diagShlib = false;
-      break;
-    case OPT_no_allow_shlib_undefined:
-      diagShlib = true;
-      break;
     }
   }
 
+  opt::Arg *allow_shlib = args.getLastArg(OPT_allow_shlib_undefined);
+  opt::Arg *no_allow_shlib = args.getLastArg(OPT_no_allow_shlib_undefined);
+
+  if (allow_shlib != nullptr && no_allow_shlib != nullptr)
+    diagShlib =
+        allow_shlib->getIndex() < no_allow_shlib->getIndex() ? true : false;
+  else if (allow_shlib != nullptr || no_allow_shlib != nullptr)
+    diagShlib = no_allow_shlib != nullptr ? true : false;
+
   ctx.arg.unresolvedSymbols =
       diagRegular ? errorOrWarn : UnresolvedPolicy::Ignore;
   ctx.arg.unresolvedSymbolsInShlib =



More information about the llvm-commits mailing list