[llvm] r286556 - llvm-strings: introduce basic strings tool
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 10 19:59:34 PST 2016
I got this warning message. I was trying to add (void) there, but probably
we should handle errors instead of ignore them. Could you fix it?
[1/2] Building CXX object
tools/llvm-strings/CMakeFiles/llvm-strings.dir/llvm-strings.cpp.o
/ssd/llvm/tools/llvm-strings/llvm-strings.cpp:77:5: warning: expression
result unused [-Wunused-value]
static_cast<bool>(E);
^~~~~~~~~~~~~~~~~~~~
On Thu, Nov 10, 2016 at 7:44 PM, Saleem Abdulrasool via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: compnerd
> Date: Thu Nov 10 21:44:12 2016
> New Revision: 286556
>
> URL: http://llvm.org/viewvc/llvm-project?rev=286556&view=rev
> Log:
> llvm-strings: introduce basic strings tool
>
> This is a replacement to binutils' string tool. It prints strings found
> in a
> binary (object file, executable, or archive library). It is rather bare
> and
> not functionally equivalent, however, it lays the groundwork necessary for
> the
> strings tool, enabling iterative development of features to reach feature
> parity.
>
> Added:
> llvm/trunk/tools/llvm-strings/
> llvm/trunk/tools/llvm-strings/CMakeLists.txt
> llvm/trunk/tools/llvm-strings/LLVMBuild.txt
> llvm/trunk/tools/llvm-strings/llvm-strings.cpp
>
> Added: llvm/trunk/tools/llvm-strings/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-
> strings/CMakeLists.txt?rev=286556&view=auto
> ============================================================
> ==================
> --- llvm/trunk/tools/llvm-strings/CMakeLists.txt (added)
> +++ llvm/trunk/tools/llvm-strings/CMakeLists.txt Thu Nov 10 21:44:12 2016
> @@ -0,0 +1,8 @@
> +set(LLVM_LINK_COMPONENTS
> + Object
> + )
> +
> +add_llvm_tool(llvm-strings
> + llvm-strings.cpp
> + )
> +
>
> Added: llvm/trunk/tools/llvm-strings/LLVMBuild.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-
> strings/LLVMBuild.txt?rev=286556&view=auto
> ============================================================
> ==================
> --- llvm/trunk/tools/llvm-strings/LLVMBuild.txt (added)
> +++ llvm/trunk/tools/llvm-strings/LLVMBuild.txt Thu Nov 10 21:44:12 2016
> @@ -0,0 +1,22 @@
> +;===- ./tools/llvm-strings/LLVMBuild.txt -----------------------*- Conf
> -*--===;
> +;
> +; The LLVM Compiler Infrastructure
> +;
> +; This file is distributed under the University of Illinois Open Source
> +; License. See LICENSE.TXT for details.
> +;
> +;===-------------------------------------------------------
> -----------------===;
> +;
> +; This is an LLVMBuild description file for the components in this
> subdirectory.
> +;
> +; For more information on the LLVMBuild system, please see:
> +;
> +; http://llvm.org/docs/LLVMBuild.html
> +;
> +;===-------------------------------------------------------
> -----------------===;
> +
> +[component_0]
> +type = Tool
> +name = llvm-strings
> +parent = Tools
> +required_libraries = Archive Object
>
> Added: llvm/trunk/tools/llvm-strings/llvm-strings.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-
> strings/llvm-strings.cpp?rev=286556&view=auto
> ============================================================
> ==================
> --- llvm/trunk/tools/llvm-strings/llvm-strings.cpp (added)
> +++ llvm/trunk/tools/llvm-strings/llvm-strings.cpp Thu Nov 10 21:44:12
> 2016
> @@ -0,0 +1,120 @@
> +//===-- llvm-strings.cpp - Printable String dumping utility
> ---------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------
> ----------------===//
> +//
> +// This program is a utility that works like binutils "strings", that is,
> it
> +// prints out printable strings in a binary, objdump, or archive file.
> +//
> +//===------------------------------------------------------
> ----------------===//
> +
> +#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"
> +#include "llvm/Support/PrettyStackTrace.h"
> +#include "llvm/Support/Program.h"
> +#include "llvm/Support/Signals.h"
> +#include <string>
> +
> +using namespace llvm;
> +using namespace llvm::object;
> +
> +static cl::list<std::string> InputFileNames(cl::Positional,
> + cl::desc("<input object
> files>"),
> + cl::ZeroOrMore);
> +
> +static void dump(raw_ostream &OS, StringRef Contents) {
> + const char *S = nullptr;
> + for (const char *P = Contents.begin(), *E = Contents.end(); P < E; ++P)
> {
> + if (std::isgraph(*P) || std::isblank(*P)) {
> + if (S == nullptr)
> + S = P;
> + } else if (S) {
> + if (P - S > 3)
> + OS << StringRef(S, P - S) << '\n';
> + S = nullptr;
> + }
> + }
> +}
> +
> +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;
> + 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';
> + }
> + }
> + }
> + 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);
> +
> + cl::ParseCommandLineOptions(argc, argv, "llvm string dumper\n");
> +
> + if (InputFileNames.empty())
> + InputFileNames.push_back("-");
> +
> + Strings S(llvm::outs());
> + std::for_each(InputFileNames.begin(), InputFileNames.end(),
> + [&S](StringRef F) { S.scan(F); });
> + return EXIT_SUCCESS;
> +}
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161110/7cdd38ce/attachment.html>
More information about the llvm-commits
mailing list