[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).
This commit is contained in:
Martin Storsjö 2024-06-24 20:02:39 +03:00 committed by GitHub
parent 7601ae125d
commit cb248f8c2a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 0 deletions

View File

@ -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)) {

View File

@ -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:"