Skip to content

Commit

Permalink
[llvm-readobj] Print error when executed with no input files
Browse files Browse the repository at this point in the history
This patch changes llvm-readelf (and llvm-readobj for consistency)
behavior to print an error when executed with no input files.

Reading from stdin can be achieved via a '-' for the input
object.

Fixes https://bugs.llvm.org/show_bug.cgi?id=46400

Differential Revision: https://reviews.llvm.org/D83704

Reviewed by: jhenderson, MaskRay, sbc, jyknight
  • Loading branch information
ElvinaYakubova authored and jh7370 committed Jul 20, 2020
1 parent b36a3e6 commit df952cb
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 7 deletions.
2 changes: 1 addition & 1 deletion llvm/docs/CommandGuide/llvm-readelf.rst
Expand Up @@ -14,7 +14,7 @@ DESCRIPTION
The :program:`llvm-readelf` tool displays low-level format-specific information
about one or more object files.

If ``input`` is "``-``" or omitted, :program:`llvm-readelf` reads from standard
If ``input`` is "``-``", :program:`llvm-readelf` reads from standard
input. Otherwise, it will read from the specified ``filenames``.

OPTIONS
Expand Down
2 changes: 1 addition & 1 deletion llvm/docs/CommandGuide/llvm-readobj.rst
Expand Up @@ -14,7 +14,7 @@ DESCRIPTION
The :program:`llvm-readobj` tool displays low-level format-specific information
about one or more object files.

If ``input`` is "``-``" or omitted, :program:`llvm-readobj` reads from standard
If ``input`` is "``-``", :program:`llvm-readobj` reads from standard
input. Otherwise, it will read from the specified ``filenames``.

DIFFERENCES TO LLVM-READELF
Expand Down
4 changes: 3 additions & 1 deletion llvm/docs/ReleaseNotes.rst
Expand Up @@ -123,7 +123,9 @@ During this release ...
Changes to the LLVM tools
---------------------------------

During this release ...
* llvm-readobj and llvm-readelf behavior has changed to report an error when
executed with no input files instead of reading an input from stdin.
Reading from stdin can still be achieved by specifying `-` as an input file.

Changes to LLDB
---------------------------------
Expand Down
5 changes: 5 additions & 0 deletions llvm/test/tools/llvm-readobj/basic.test
Expand Up @@ -4,6 +4,11 @@ RUN: not llvm-readelf %t.blah 2>&1 | FileCheck --check-prefix=ENOENT -DTOOL=read

ENOENT: llvm-[[TOOL]]{{(\.exe)?}}: error: '{{.*}}.blah': {{[Nn]}}o such file or directory

# Test case with no input file.
RUN: not llvm-readobj 2>&1 | FileCheck %s --check-prefix=NO-FILE
RUN: not llvm-readelf 2>&1 | FileCheck %s --check-prefix=NO-FILE
NO-FILE: error: no input files specified

# Test case where input file is too small to be a recognised object file.
RUN: touch %t.empty
RUN: not llvm-readobj %t.empty 2>&1 | FileCheck --check-prefix=EMPTY %s
Expand Down
9 changes: 5 additions & 4 deletions llvm/tools/llvm-readobj/llvm-readobj.cpp
Expand Up @@ -690,6 +690,11 @@ int main(int argc, const char *argv[]) {

cl::ParseCommandLineOptions(argc, argv, "LLVM Object Reader\n");

// Default to print error if no filename is specified.
if (opts::InputFilenames.empty()) {
error("no input files specified");
}

if (opts::All) {
opts::FileHeaders = true;
opts::ProgramHeaders = true;
Expand All @@ -714,10 +719,6 @@ int main(int argc, const char *argv[]) {
opts::SectionHeaders = true;
}

// Default to stdin if no filename is specified.
if (opts::InputFilenames.empty())
opts::InputFilenames.push_back("-");

ScopedPrinter Writer(fouts());
for (const std::string &I : opts::InputFilenames)
dumpInput(I, Writer);
Expand Down

0 comments on commit df952cb

Please sign in to comment.