1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

[llvm-objcopy] --dump-section: error if '=' is missing or filename is empty

Fix PR45416: the diagnostic when '=' is missing is misleading.
`FileOutputBuffer::create` returns successfully when the filename is empty
(the temporary file is `.tmp%%%%%%%`), but `FileOutputBuffer::commit` will error when
renaming `.tmp%%%%%%%` to the empty name).

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D101697
This commit is contained in:
Fangrui Song 2021-05-04 17:30:57 -07:00
parent 33552ebc41
commit 98bf7fd6fd
2 changed files with 13 additions and 2 deletions

View File

@ -59,3 +59,8 @@ ProgramHeaders:
# RUN: FileCheck %s --check-prefix=ERR -DFILE=%t -DSECTION=.missing
# ERR: error: '[[FILE]]': section '[[SECTION]]' not found
# RUN: not llvm-objcopy --dump-section .text %t /dev/null 2>&1 | FileCheck %s --check-prefix=ERR2
# RUN: not llvm-objcopy --dump-section .text= %t /dev/null 2>&1 | FileCheck %s --check-prefix=ERR2
# ERR2: error: bad format for --dump-section, expected section=file

View File

@ -700,8 +700,14 @@ parseObjcopyOptions(ArrayRef<const char *> ArgsArr,
"bad format for --add-section: missing file name");
Config.AddSection.push_back(ArgValue);
}
for (auto Arg : InputArgs.filtered(OBJCOPY_dump_section))
Config.DumpSection.push_back(Arg->getValue());
for (auto *Arg : InputArgs.filtered(OBJCOPY_dump_section)) {
StringRef Value(Arg->getValue());
if (Value.split('=').second.empty())
return createStringError(
errc::invalid_argument,
"bad format for --dump-section, expected section=file");
Config.DumpSection.push_back(Value);
}
Config.StripAll = InputArgs.hasArg(OBJCOPY_strip_all);
Config.StripAllGNU = InputArgs.hasArg(OBJCOPY_strip_all_gnu);
Config.StripDebug = InputArgs.hasArg(OBJCOPY_strip_debug);