[PATCH] D33869: [llvm-readobj] More command-line compatibility with GNU readelf
Roland McGrath via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 3 14:42:10 PDT 2017
mcgrathr created this revision.
Herald added a subscriber: mgorny.
Install an llvm-readelf symlink to llvm-readobj.
When invoked as *readelf*, default to -elf-output-style=GNU.
Accept -S as an alias for --sections, as GNU readelf does.
Accept and ignore -W, which in GNU readelf is necessary to produce
the output format that's consistent between 32-bit and 64-bit
targets, which is what llvm-readobj always produces.
There are still some incompatibilities with GNU readelf's command
line option syntax (e.g. -s and -t). But this makes llvm-readelf
interchangeable with GNU readelf for more of the common uses,
e.g. "readelf -W -S -l".
Repository:
rL LLVM
https://reviews.llvm.org/D33869
Files:
test/tools/llvm-readobj/gnu-sections.test
tools/llvm-readobj/CMakeLists.txt
tools/llvm-readobj/llvm-readobj.cpp
Index: tools/llvm-readobj/llvm-readobj.cpp
===================================================================
--- tools/llvm-readobj/llvm-readobj.cpp
+++ tools/llvm-readobj/llvm-readobj.cpp
@@ -34,6 +34,7 @@
#include "llvm/Support/Debug.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/Path.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/Signals.h"
@@ -50,19 +51,27 @@
cl::desc("<input object files>"),
cl::ZeroOrMore);
+ // -W
+ cl::opt<bool> IgnoredW("W",
+ cl::desc("Ignored for compatibility with GNU readelf"));
+
// -file-headers, -h
cl::opt<bool> FileHeaders("file-headers",
cl::desc("Display file headers "));
cl::alias FileHeadersShort("h",
cl::desc("Alias for --file-headers"),
cl::aliasopt(FileHeaders));
- // -sections, -s
+ // -sections, -s, -S
+ // Note: In GNU readelf, -s means --symbols!
cl::opt<bool> Sections("sections",
cl::desc("Display all sections."));
cl::alias SectionsShort("s",
cl::desc("Alias for --sections"),
cl::aliasopt(Sections));
+ cl::alias SectionsShortUpper("S",
+ cl::desc("Alias for --sections"),
+ cl::aliasopt(Sections));
// -section-relocations, -sr
cl::opt<bool> SectionRelocations("section-relocations",
@@ -526,13 +535,18 @@
}
int main(int argc, const char *argv[]) {
- sys::PrintStackTraceOnErrorSignal(argv[0]);
+ StringRef ToolName = argv[0];
+ sys::PrintStackTraceOnErrorSignal(ToolName);
PrettyStackTraceProgram X(argc, argv);
llvm_shutdown_obj Y;
// Register the target printer for --version.
cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion);
+ opts::IgnoredW.setHiddenFlag(cl::Hidden);
+ if (sys::path::stem(ToolName).find("readelf") != StringRef::npos)
+ opts::Output = opts::GNU;
+
cl::ParseCommandLineOptions(argc, argv, "LLVM Object Reader\n");
// Default to stdin if no filename is specified.
Index: tools/llvm-readobj/CMakeLists.txt
===================================================================
--- tools/llvm-readobj/CMakeLists.txt
+++ tools/llvm-readobj/CMakeLists.txt
@@ -19,3 +19,5 @@
WasmDumper.cpp
Win64EHDumper.cpp
)
+
+add_llvm_tool_symlink(llvm-readelf llvm-readobj)
Index: test/tools/llvm-readobj/gnu-sections.test
===================================================================
--- test/tools/llvm-readobj/gnu-sections.test
+++ test/tools/llvm-readobj/gnu-sections.test
@@ -2,6 +2,8 @@
RUN: | FileCheck %s -check-prefix ELF32
RUN: llvm-readobj -s %p/Inputs/relocs.obj.elf-x86_64 --elf-output-style=GNU \
RUN: | FileCheck %s -check-prefix ELF64
+RUN: llvm-readelf -W -S %p/Inputs/relocs.obj.elf-x86_64 \
+RUN: | FileCheck %s -check-prefix ELF64
ELF32: Section Headers:
ELF32-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33869.101327.patch
Type: text/x-patch
Size: 2938 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170603/b2671ac5/attachment.bin>
More information about the llvm-commits
mailing list