summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-strings/llvm-strings.cpp
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2016-11-12 18:37:04 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2016-11-12 18:37:04 +0000
commitbe3a2919f42e8323f65c126138f263578bfb9a7e (patch)
treecf956a00db6a58f150a051f35ed5316f14be8d03 /llvm/tools/llvm-strings/llvm-strings.cpp
parent22a2628f18094a4f7c1b40b90ec280739805768b (diff)
downloadbcm5719-llvm-be3a2919f42e8323f65c126138f263578bfb9a7e.tar.gz
bcm5719-llvm-be3a2919f42e8323f65c126138f263578bfb9a7e.zip
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. llvm-svn: 286727
Diffstat (limited to 'llvm/tools/llvm-strings/llvm-strings.cpp')
-rw-r--r--llvm/tools/llvm-strings/llvm-strings.cpp76
1 files changed, 10 insertions, 66 deletions
diff --git a/llvm/tools/llvm-strings/llvm-strings.cpp b/llvm/tools/llvm-strings/llvm-strings.cpp
index dbabf08a52f..6e5e2f298c3 100644
--- a/llvm/tools/llvm-strings/llvm-strings.cpp
+++ b/llvm/tools/llvm-strings/llvm-strings.cpp
@@ -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> InputFileNames(cl::Positional,
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, StringRef Contents) {
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;
}
-
OpenPOWER on IntegriCloud