[lld] cb248f8 - [LLD] [COFF] Don't crash on an empty -entry: argument (#96058)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 24 10:02:42 PDT 2024


Author: Martin Storsjö
Date: 2024-06-24T20:02:39+03:00
New Revision: cb248f8c2a79fbddfdfed0039390e49512410a80

URL: https://github.com/llvm/llvm-project/commit/cb248f8c2a79fbddfdfed0039390e49512410a80
DIFF: https://github.com/llvm/llvm-project/commit/cb248f8c2a79fbddfdfed0039390e49512410a80.diff

LOG: [LLD] [COFF] Don't crash on an empty -entry: argument (#96058)

We can't pass an empty string to addUndefined().

This fixes the crash that was encountered in
https://github.com/llvm/llvm-project/issues/93309 (turning the crash
into a properly handled error; making it do the right thing is handled
in https://github.com/llvm/llvm-project/pull/96055).

Added: 
    lld/test/COFF/invalid-entry.s

Modified: 
    lld/COFF/Driver.cpp

Removed: 
    


################################################################################
diff  --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 17550170a173e..cef6271e4c8f8 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -413,6 +413,8 @@ void LinkerDriver::parseDirectives(InputFile *file) {
         enqueuePath(*path, false, false);
       break;
     case OPT_entry:
+      if (!arg->getValue()[0])
+        fatal("missing entry point symbol name");
       ctx.config.entry = addUndefined(mangle(arg->getValue()));
       break;
     case OPT_failifmismatch:
@@ -2249,6 +2251,8 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
   {
     llvm::TimeTraceScope timeScope("Entry point");
     if (auto *arg = args.getLastArg(OPT_entry)) {
+      if (!arg->getValue()[0])
+        fatal("missing entry point symbol name");
       config->entry = addUndefined(mangle(arg->getValue()));
     } else if (!config->entry && !config->noEntry) {
       if (args.hasArg(OPT_dll)) {

diff  --git a/lld/test/COFF/invalid-entry.s b/lld/test/COFF/invalid-entry.s
new file mode 100644
index 0000000000000..8973dfba3b9f8
--- /dev/null
+++ b/lld/test/COFF/invalid-entry.s
@@ -0,0 +1,20 @@
+# REQUIRES: x86
+# RUN: split-file %s %t.dir && cd %t.dir
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-windows test.s -o test.obj
+# RUN: llvm-mc -filetype=obj -triple=x86_64-windows drectve.s -o drectve.obj
+
+# RUN: env LLD_IN_TEST=1 not lld-link -out:out.dll test.obj -dll -entry: 2>&1 | FileCheck %s
+# RUN: env LLD_IN_TEST=1 not lld-link -out:out.dll test.obj -dll drectve.obj 2>&1 | FileCheck %s
+
+# CHECK: error: missing entry point symbol name
+
+#--- test.s
+        .text
+        .globl func
+func:
+        ret
+
+#--- drectve.s
+        .section .drectve, "yn"
+        .ascii " -entry:"


        


More information about the llvm-commits mailing list