<div style="white-space:pre-wrap">It went through Phab.  Did it get dropped from the list? :(</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 14, 2016 at 2:57 PM Rui Ueyama <<a href="mailto:ruiu@google.com">ruiu@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">I was wondering that, too.</div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Mon, Nov 14, 2016 at 2:48 PM, Michael Spencer via llvm-commits <span dir="ltr" class="gmail_msg"><<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Was there a review thread for this? I was at the C++ standards meeting all last week so I may have missed it.<br class="gmail_msg"><div class="gmail_extra gmail_msg"><br clear="all" class="gmail_msg"><div class="gmail_msg"><div class="m_1991103296160677412m_5641409663438737564gmail_signature gmail_msg">- Michael Spencer<br class="gmail_msg"></div></div>
<br class="gmail_msg"><div class="gmail_quote gmail_msg"><span class="gmail_msg">On Thu, Nov 10, 2016 at 7:44 PM, Saleem Abdulrasool via llvm-commits <span dir="ltr" class="gmail_msg"><<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br class="gmail_msg"></span><div class="gmail_msg"><div class="m_1991103296160677412h5 gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: compnerd<br class="gmail_msg">
Date: Thu Nov 10 21:44:12 2016<br class="gmail_msg">
New Revision: 286556<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=286556&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=286556&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
llvm-strings: introduce basic strings tool<br class="gmail_msg">
<br class="gmail_msg">
This is a replacement to binutils' string tool.  It prints strings found in a<br class="gmail_msg">
binary (object file, executable, or archive library).  It is rather bare and<br class="gmail_msg">
not functionally equivalent, however, it lays the groundwork necessary for the<br class="gmail_msg">
strings tool, enabling iterative development of features to reach feature<br class="gmail_msg">
parity.<br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    llvm/trunk/tools/llvm-strings/<br class="gmail_msg">
    llvm/trunk/tools/llvm-strings/CMakeLists.txt<br class="gmail_msg">
    llvm/trunk/tools/llvm-strings/LLVMBuild.txt<br class="gmail_msg">
    llvm/trunk/tools/llvm-strings/llvm-strings.cpp<br class="gmail_msg">
<br class="gmail_msg">
Added: llvm/trunk/tools/llvm-strings/CMakeLists.txt<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/CMakeLists.txt?rev=286556&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/CMakeLists.txt?rev=286556&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/tools/llvm-strings/CMakeLists.txt (added)<br class="gmail_msg">
+++ llvm/trunk/tools/llvm-strings/CMakeLists.txt Thu Nov 10 21:44:12 2016<br class="gmail_msg">
@@ -0,0 +1,8 @@<br class="gmail_msg">
+set(LLVM_LINK_COMPONENTS<br class="gmail_msg">
+  Object<br class="gmail_msg">
+  )<br class="gmail_msg">
+<br class="gmail_msg">
+add_llvm_tool(llvm-strings<br class="gmail_msg">
+  llvm-strings.cpp<br class="gmail_msg">
+  )<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
Added: llvm/trunk/tools/llvm-strings/LLVMBuild.txt<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/LLVMBuild.txt?rev=286556&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/LLVMBuild.txt?rev=286556&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/tools/llvm-strings/LLVMBuild.txt (added)<br class="gmail_msg">
+++ llvm/trunk/tools/llvm-strings/LLVMBuild.txt Thu Nov 10 21:44:12 2016<br class="gmail_msg">
@@ -0,0 +1,22 @@<br class="gmail_msg">
+;===- ./tools/llvm-strings/LLVMBuild.txt -----------------------*- Conf -*--===;<br class="gmail_msg">
+;<br class="gmail_msg">
+;                     The LLVM Compiler Infrastructure<br class="gmail_msg">
+;<br class="gmail_msg">
+; This file is distributed under the University of Illinois Open Source<br class="gmail_msg">
+; License. See LICENSE.TXT for details.<br class="gmail_msg">
+;<br class="gmail_msg">
+;===------------------------------------------------------------------------===;<br class="gmail_msg">
+;<br class="gmail_msg">
+; This is an LLVMBuild description file for the components in this subdirectory.<br class="gmail_msg">
+;<br class="gmail_msg">
+; For more information on the LLVMBuild system, please see:<br class="gmail_msg">
+;<br class="gmail_msg">
+;   <a href="http://llvm.org/docs/LLVMBuild.html" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/docs/LLVMBuild.html</a><br class="gmail_msg">
+;<br class="gmail_msg">
+;===------------------------------------------------------------------------===;<br class="gmail_msg">
+<br class="gmail_msg">
+[component_0]<br class="gmail_msg">
+type = Tool<br class="gmail_msg">
+name = llvm-strings<br class="gmail_msg">
+parent = Tools<br class="gmail_msg">
+required_libraries = Archive Object<br class="gmail_msg">
<br class="gmail_msg">
Added: llvm/trunk/tools/llvm-strings/llvm-strings.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/llvm-strings.cpp?rev=286556&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-strings/llvm-strings.cpp?rev=286556&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- llvm/trunk/tools/llvm-strings/llvm-strings.cpp (added)<br class="gmail_msg">
+++ llvm/trunk/tools/llvm-strings/llvm-strings.cpp Thu Nov 10 21:44:12 2016<br class="gmail_msg">
@@ -0,0 +1,120 @@<br class="gmail_msg">
+//===-- llvm-strings.cpp - Printable String dumping utility ---------------===//<br class="gmail_msg">
+//<br class="gmail_msg">
+//                     The LLVM Compiler Infrastructure<br class="gmail_msg">
+//<br class="gmail_msg">
+// This file is distributed under the University of Illinois Open Source<br class="gmail_msg">
+// License. See LICENSE.TXT for details.<br class="gmail_msg">
+//<br class="gmail_msg">
+//===----------------------------------------------------------------------===//<br class="gmail_msg">
+//<br class="gmail_msg">
+// This program is a utility that works like binutils "strings", that is, it<br class="gmail_msg">
+// prints out printable strings in a binary, objdump, or archive file.<br class="gmail_msg">
+//<br class="gmail_msg">
+//===----------------------------------------------------------------------===//<br class="gmail_msg">
+<br class="gmail_msg">
+#include "llvm/IR/LLVMContext.h"<br class="gmail_msg">
+#include "llvm/Object/Archive.h"<br class="gmail_msg">
+#include "llvm/Object/Binary.h"<br class="gmail_msg">
+#include "llvm/Object/ObjectFile.h"<br class="gmail_msg">
+#include "llvm/Support/CommandLine.h"<br class="gmail_msg">
+#include "llvm/Support/Error.h"<br class="gmail_msg">
+#include "llvm/Support/MemoryBuffer.h"<br class="gmail_msg">
+#include "llvm/Support/PrettyStackTrace.h"<br class="gmail_msg">
+#include "llvm/Support/Program.h"<br class="gmail_msg">
+#include "llvm/Support/Signals.h"<br class="gmail_msg">
+#include <string><br class="gmail_msg">
+<br class="gmail_msg">
+using namespace llvm;<br class="gmail_msg">
+using namespace llvm::object;<br class="gmail_msg">
+<br class="gmail_msg">
+static cl::list<std::string> InputFileNames(cl::Positional,<br class="gmail_msg">
+                                            cl::desc("<input object files>"),<br class="gmail_msg">
+                                            cl::ZeroOrMore);<br class="gmail_msg">
+<br class="gmail_msg">
+static void dump(raw_ostream &OS, StringRef Contents) {<br class="gmail_msg">
+  const char *S = nullptr;<br class="gmail_msg">
+  for (const char *P = Contents.begin(), *E = Contents.end(); P < E; ++P) {<br class="gmail_msg">
+    if (std::isgraph(*P) || std::isblank(*P)) {<br class="gmail_msg">
+      if (S == nullptr)<br class="gmail_msg">
+        S = P;<br class="gmail_msg">
+    } else if (S) {<br class="gmail_msg">
+      if (P - S > 3)<br class="gmail_msg">
+        OS << StringRef(S, P - S) << '\n';<br class="gmail_msg">
+      S = nullptr;<br class="gmail_msg">
+    }<br class="gmail_msg">
+  }<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+namespace {<br class="gmail_msg">
+class Strings {<br class="gmail_msg">
+  LLVMContext Context;<br class="gmail_msg">
+  raw_ostream &OS;<br class="gmail_msg">
+<br class="gmail_msg">
+  void dump(const ObjectFile *O) {<br class="gmail_msg">
+    for (const auto &S : O->sections()) {<br class="gmail_msg">
+      StringRef Contents;<br class="gmail_msg">
+      if (!S.getContents(Contents))<br class="gmail_msg">
+        ::dump(OS, Contents);<br class="gmail_msg">
+    }<br class="gmail_msg">
+  }<br class="gmail_msg">
+<br class="gmail_msg">
+  void dump(const Archive *A) {<br class="gmail_msg">
+    Error E;<br class="gmail_msg">
+    for (auto &Element : A->children(E)) {<br class="gmail_msg">
+      if (Expected<std::unique_ptr<Binary>> Child =<br class="gmail_msg">
+              Element.getAsBinary(&Context)) {<br class="gmail_msg">
+        dump(dyn_cast<ObjectFile>(&**Child));<br class="gmail_msg">
+      } else {<br class="gmail_msg">
+        if (auto E = isNotObjectErrorInvalidFileType(Child.takeError())) {<br class="gmail_msg">
+          errs() << A->getFileName();<br class="gmail_msg">
+          if (Expected<StringRef> Name = Element.getName())<br class="gmail_msg">
+            errs() << '(' << *Name << ')';<br class="gmail_msg">
+          logAllUnhandledErrors(std::move(E), errs(), "");<br class="gmail_msg">
+          errs() << '\n';<br class="gmail_msg">
+        }<br class="gmail_msg">
+      }<br class="gmail_msg">
+    }<br class="gmail_msg">
+    static_cast<bool>(E);<br class="gmail_msg">
+  }<br class="gmail_msg">
+<br class="gmail_msg">
+public:<br class="gmail_msg">
+  Strings(raw_ostream &S) : OS(S) {}<br class="gmail_msg">
+<br class="gmail_msg">
+  void scan(StringRef File) {<br class="gmail_msg">
+    ErrorOr<std::unique_ptr<MemoryBuffer>> Buffer =<br class="gmail_msg">
+        MemoryBuffer::getFileOrSTDIN(File);<br class="gmail_msg">
+    if (std::error_code EC = Buffer.getError()) {<br class="gmail_msg">
+      errs() << File << ": " << EC.message() << '\n';<br class="gmail_msg">
+      return;<br class="gmail_msg">
+    }<br class="gmail_msg">
+<br class="gmail_msg">
+    if (Expected<std::unique_ptr<Binary>> B =<br class="gmail_msg">
+            createBinary(Buffer.get()->getMemBufferRef(), &Context)) {<br class="gmail_msg">
+      if (auto *A = dyn_cast<Archive>(&**B))<br class="gmail_msg">
+        return dump(A);<br class="gmail_msg">
+      if (auto *O = dyn_cast<ObjectFile>(&**B))<br class="gmail_msg">
+        return dump(O);<br class="gmail_msg">
+      ::dump(OS, Buffer.get()->getMemBufferRef().getBuffer());<br class="gmail_msg">
+    } else {<br class="gmail_msg">
+      consumeError(B.takeError());<br class="gmail_msg">
+      ::dump(OS, Buffer.get()->getMemBufferRef().getBuffer());<br class="gmail_msg">
+    }<br class="gmail_msg">
+  }<br class="gmail_msg">
+};<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+int main(int argc, char **argv) {<br class="gmail_msg">
+  sys::PrintStackTraceOnErrorSignal(argv[0]);<br class="gmail_msg">
+  PrettyStackTraceProgram X(argc, argv);<br class="gmail_msg">
+<br class="gmail_msg">
+  cl::ParseCommandLineOptions(argc, argv, "llvm string dumper\n");<br class="gmail_msg">
+<br class="gmail_msg">
+  if (InputFileNames.empty())<br class="gmail_msg">
+    InputFileNames.push_back("-");<br class="gmail_msg">
+<br class="gmail_msg">
+  Strings S(llvm::outs());<br class="gmail_msg">
+  std::for_each(InputFileNames.begin(), InputFileNames.end(),<br class="gmail_msg">
+                [&S](StringRef F) { S.scan(F); });<br class="gmail_msg">
+  return EXIT_SUCCESS;<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div></div><br class="gmail_msg"></div></div>
<br class="gmail_msg">_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div><br class="gmail_msg"></div>
</blockquote></div>