[llvm] r286727 - llvm-strings: trivialise logic until we support more options
Saleem Abdulrasool via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 12 10:37:04 PST 2016
Author: compnerd
Date: Sat Nov 12 12:37:04 2016
New Revision: 286727
URL: http://llvm.org/viewvc/llvm-project?rev=286727&view=rev
Log:
llvm-strings: trivialise logic until we support more options
Until we have handling for ignoring unloaded sections, simplify the logic to
the point of triviality. This fixes the scanning of archives, particularly when
embedded in archives.
Added:
llvm/trunk/test/tools/llvm-strings/nested-archives.test
Modified:
llvm/trunk/tools/llvm-strings/llvm-strings.cpp
Added: llvm/trunk/test/tools/llvm-strings/nested-archives.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-strings/nested-archives.test?rev=286727&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-strings/nested-archives.test (added)
+++ llvm/trunk/test/tools/llvm-strings/nested-archives.test Sat Nov 12 12:37:04 2016
@@ -0,0 +1,13 @@
+RUN: echo -n abcd > %T/abcd
+RUN: rm -f %T/inner.ar
+RUN: llvm-ar crs %T/inner.a %T/abcd
+RUN: rm -f %T/outer.ar
+RUN: llvm-ar crs %T/outer.a %T/inner.a
+RUN: llvm-strings %T/outer.a | FileCheck %s
+
+CHECK: !<arch>
+CHECK: inner.a/ 0 0 0 644 72 `
+CHECK: !<arch>
+CHECK: abcd/ 0 0 0 644 4 `
+CHECK: abcd
+
Modified: llvm/trunk/tools/llvm-strings/llvm-strings.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/llvm-strings.cpp?rev=286727&r1=286726&r2=286727&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-strings/llvm-strings.cpp (original)
+++ llvm/trunk/tools/llvm-strings/llvm-strings.cpp Sat Nov 12 12:37:04 2016
@@ -12,10 +12,7 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/IR/LLVMContext.h"
-#include "llvm/Object/Archive.h"
#include "llvm/Object/Binary.h"
-#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/MemoryBuffer.h"
@@ -32,7 +29,7 @@ static cl::list<std::string> InputFileNa
cl::desc("<input object files>"),
cl::ZeroOrMore);
-static void dump(raw_ostream &OS, StringRef Contents) {
+static void strings(raw_ostream &OS, StringRef Contents) {
const char *P = nullptr, *E = nullptr, *S = nullptr;
for (P = Contents.begin(), E = Contents.end(); P < E; ++P) {
if (std::isgraph(*P) || std::isblank(*P)) {
@@ -48,64 +45,6 @@ static void dump(raw_ostream &OS, String
OS << StringRef(S, E - S) << '\n';
}
-namespace {
-class Strings {
- LLVMContext Context;
- raw_ostream &OS;
-
- void dump(const ObjectFile *O) {
- for (const auto &S : O->sections()) {
- StringRef Contents;
- if (!S.getContents(Contents))
- ::dump(OS, Contents);
- }
- }
-
- void dump(const Archive *A) {
- Error E = Error::success();
- for (auto &Element : A->children(E)) {
- if (Expected<std::unique_ptr<Binary>> Child =
- Element.getAsBinary(&Context)) {
- dump(dyn_cast<ObjectFile>(&**Child));
- } else {
- if (auto E = isNotObjectErrorInvalidFileType(Child.takeError())) {
- errs() << A->getFileName();
- if (Expected<StringRef> Name = Element.getName())
- errs() << '(' << *Name << ')';
- logAllUnhandledErrors(std::move(E), errs(), "");
- errs() << '\n';
- }
- }
- }
- (void)static_cast<bool>(E);
- }
-
-public:
- Strings(raw_ostream &S) : OS(S) {}
-
- void scan(StringRef File) {
- ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =
- MemoryBuffer::getFileOrSTDIN(File);
- if (std::error_code EC = Buffer.getError()) {
- errs() << File << ": " << EC.message() << '\n';
- return;
- }
-
- if (Expected<std::unique_ptr<Binary>> B =
- createBinary(Buffer.get()->getMemBufferRef(), &Context)) {
- if (auto *A = dyn_cast<Archive>(&**B))
- return dump(A);
- if (auto *O = dyn_cast<ObjectFile>(&**B))
- return dump(O);
- ::dump(OS, Buffer.get()->getMemBufferRef().getBuffer());
- } else {
- consumeError(B.takeError());
- ::dump(OS, Buffer.get()->getMemBufferRef().getBuffer());
- }
- }
-};
-}
-
int main(int argc, char **argv) {
sys::PrintStackTraceOnErrorSignal(argv[0]);
PrettyStackTraceProgram X(argc, argv);
@@ -115,9 +54,14 @@ int main(int argc, char **argv) {
if (InputFileNames.empty())
InputFileNames.push_back("-");
- Strings S(llvm::outs());
- std::for_each(InputFileNames.begin(), InputFileNames.end(),
- [&S](StringRef F) { S.scan(F); });
+ for (const auto &File : InputFileNames) {
+ ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =
+ MemoryBuffer::getFileOrSTDIN(File);
+ if (std::error_code EC = Buffer.getError())
+ errs() << File << ": " << EC.message() << '\n';
+ else
+ strings(llvm::outs(), Buffer.get()->getMemBufferRef().getBuffer());
+ }
+
return EXIT_SUCCESS;
}
-
More information about the llvm-commits
mailing list