[PATCH] D63122: [llvm-strip] Error when using stdin twice
Alex Brachet via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 10 23:22:32 PDT 2019
abrachet created this revision.
abrachet added reviewers: jhenderson, rupprecht.
Herald added subscribers: llvm-commits, MaskRay, jakehehrlich, arichardson, emaste.
Herald added a reviewer: espindola.
Herald added a reviewer: alexshap.
Herald added a project: LLVM.
Implements bug 42204 <https://bugs.llvm.org/show_bug.cgi?id=42204>. llvm-strip now warns when the same input file is used more than once, and errors when stdin is used more than once.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D63122
Files:
llvm/test/tools/llvm-objcopy/ELF/same-file-strip.test
llvm/tools/llvm-objcopy/CopyConfig.cpp
llvm/tools/llvm-objcopy/llvm-objcopy.cpp
llvm/tools/llvm-objcopy/llvm-objcopy.h
Index: llvm/tools/llvm-objcopy/llvm-objcopy.h
===================================================================
--- llvm/tools/llvm-objcopy/llvm-objcopy.h
+++ llvm/tools/llvm-objcopy/llvm-objcopy.h
@@ -23,6 +23,7 @@
LLVM_ATTRIBUTE_NORETURN extern void reportError(StringRef File, Error E);
LLVM_ATTRIBUTE_NORETURN extern void reportError(StringRef File,
std::error_code EC);
+extern void reportWarning(Twine Message);
// This is taken from llvm-readobj.
// [see here](llvm/tools/llvm-readobj/llvm-readobj.h:38)
Index: llvm/tools/llvm-objcopy/llvm-objcopy.cpp
===================================================================
--- llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -83,6 +83,11 @@
exit(1);
}
+void reportWarning(Twine Message) {
+ WithColor::warning(errs(), ToolName) << Message << "\n";
+ errs().flush();
+}
+
} // end namespace objcopy
} // end namespace llvm
Index: llvm/tools/llvm-objcopy/CopyConfig.cpp
===================================================================
--- llvm/tools/llvm-objcopy/CopyConfig.cpp
+++ llvm/tools/llvm-objcopy/CopyConfig.cpp
@@ -7,10 +7,12 @@
//===----------------------------------------------------------------------===//
#include "CopyConfig.h"
+#include "llvm-objcopy.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/StringSet.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Support/CommandLine.h"
@@ -735,7 +737,7 @@
exit(0);
}
- SmallVector<const char *, 2> Positional;
+ SmallVector<StringRef, 2> Positional;
for (auto Arg : InputArgs.filtered(STRIP_UNKNOWN))
return createStringError(errc::invalid_argument, "unknown argument '%s'",
Arg->getAsString(InputArgs).c_str());
@@ -800,7 +802,14 @@
InputArgs.getLastArgValue(STRIP_output, Positional[0]);
DC.CopyConfigs.push_back(std::move(Config));
} else {
- for (const char *Filename : Positional) {
+ StringSet<> InputFiles;
+ for (StringRef Filename : Positional) {
+ if (InputFiles.find(Filename) != InputFiles.end()) {
+ if (Filename == "-")
+ return createStringError(errc::invalid_argument, "cannot specify '-' as an input file more than once");
+ reportWarning("'" + Filename + "' was already specified");
+ }
+ InputFiles.insert(Filename);
Config.InputFilename = Filename;
Config.OutputFilename = Filename;
DC.CopyConfigs.push_back(Config);
Index: llvm/test/tools/llvm-objcopy/ELF/same-file-strip.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objcopy/ELF/same-file-strip.test
@@ -0,0 +1,10 @@
+# RUN: not llvm-strip - - < %p/Inputs/dynrel.elf 2>&1 | FileCheck -check-prefix=ERR %s
+# RUN: not llvm-strip - %p/Inputs/dynrel.elf - < %p/Inputs/dynrel.elf 2>&1 \
+# RUN: | FileCheck -check-prefix=ERR %s
+# ERR: error: cannot specify '-' as an input file more than once
+
+# RUN: cp %p/Inputs/dynrel.elf dynrel.elf
+# RUN: llvm-strip dynrel.elf dynrel.elf 2>&1 \
+# RUN: | FileCheck -check-prefix=WARN %s
+# WARN: warning: 'dynrel.elf' was already specified
+# RUN: rm dynrel.elf
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63122.203980.patch
Type: text/x-patch
Size: 3324 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190611/d37c19e9/attachment-0001.bin>
More information about the llvm-commits
mailing list