Add local Breakpad patches that have not yet been upstreamed
authorTed Mielczarek <ted.mielczarek@gmail.com>
Wed, 06 Feb 2013 19:01:57 -0500
changeset 130981 be126e0d29a1ebaffeabae3e38b005fa3f8a6e37
parent 130980 b7218036908dff8ef39de0ffe923d8a5a060239b
child 130982 b4be6e1db78424771b9f472e6dc8e11df6133b86
push id2323
push userbbajaj@mozilla.com
push dateMon, 01 Apr 2013 19:47:02 +0000
treeherdermozilla-beta@7712be144d91 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs802106, 812133
milestone21.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Add local Breakpad patches that have not yet been upstreamed Contains patches for: bug 802106 - Breakpad stackwalking optimization: optimize PostfixEvaluator bug 812133 - Make breakpad-based SPS unwind work on MacOS
toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch
toolkit/crashreporter/breakpad-patches/01-dump-symbols-just-cfi.patch
toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch
toolkit/crashreporter/breakpad-patches/03-unique-string.patch
toolkit/crashreporter/breakpad-patches/04-uniquestringmap.patch
toolkit/crashreporter/breakpad-patches/05-androidfixup.patch
toolkit/crashreporter/breakpad-patches/06-readsymboldata-mac
toolkit/crashreporter/google-breakpad/aclocal.m4
toolkit/crashreporter/google-breakpad/configure
toolkit/crashreporter/google-breakpad/src/common/Makefile.in
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc
toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h
toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h
toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.mm
toolkit/crashreporter/google-breakpad/src/common/module.cc
toolkit/crashreporter/google-breakpad/src/common/module.cc.orig
toolkit/crashreporter/google-breakpad/src/common/module.h
toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/symbol_data.h
toolkit/crashreporter/google-breakpad/src/common/unique_string.cc
toolkit/crashreporter/google-breakpad/src/common/unique_string.h
toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc
toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc
toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj.orig
toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.mm
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch
@@ -0,0 +1,526 @@
+# HG changeset patch
+# User Ted Mielczarek <ted@mielczarek.org>
+# Date 1352220493 18000
+# Node ID af59ab8ee1ff8efa2a5e9d53fa494bb17ebad582
+# Parent 1b7cd930bef43cf597e66fefba27218affa724d6
+Add APIs for querying Module data
+R=glandium at https://breakpad.appspot.com/511003/
+
+diff --git a/src/common/module.cc b/src/common/module.cc
+--- a/src/common/module.cc
++++ b/src/common/module.cc
+@@ -58,17 +58,17 @@
+ 
+ Module::~Module() {
+   for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); ++it)
+     delete it->second;
+   for (FunctionSet::iterator it = functions_.begin();
+        it != functions_.end(); ++it) {
+     delete *it;
+   }
+-  for (vector<StackFrameEntry *>::iterator it = stack_frame_entries_.begin();
++  for (StackFrameEntrySet::iterator it = stack_frame_entries_.begin();
+        it != stack_frame_entries_.end(); ++it) {
+     delete *it;
+   }
+   for (ExternSet::iterator it = externs_.begin(); it != externs_.end(); ++it)
+     delete *it;
+ }
+ 
+ void Module::SetLoadAddress(Address address) {
+@@ -88,39 +88,84 @@
+ }
+ 
+ void Module::AddFunctions(vector<Function *>::iterator begin,
+                           vector<Function *>::iterator end) {
+   for (vector<Function *>::iterator it = begin; it != end; ++it)
+     AddFunction(*it);
+ }
+ 
+-void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) {
+-  stack_frame_entries_.push_back(stack_frame_entry);
++void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) {
++  std::pair<StackFrameEntrySet::iterator,bool> ret =
++      stack_frame_entries_.insert(stack_frame_entry);
++  if (!ret.second) {
++    // Free the duplicate that was not inserted because this Module
++    // now owns it.
++    delete stack_frame_entry;
++  }
+ }
+ 
+ void Module::AddExtern(Extern *ext) {
+   std::pair<ExternSet::iterator,bool> ret = externs_.insert(ext);
+   if (!ret.second) {
+     // Free the duplicate that was not inserted because this Module
+     // now owns it.
+     delete ext;
+   }
+ }
+ 
+ void Module::GetFunctions(vector<Function *> *vec,
+                           vector<Function *>::iterator i) {
+   vec->insert(i, functions_.begin(), functions_.end());
+ }
+ 
++template<typename T>
++bool EntryContainsAddress(T entry, Module::Address address) {
++  return entry->address <= address && address < entry->address + entry->size;
++}
++
++Module::Function* Module::FindFunctionByAddress(Address address) {
++  Function search;
++  search.address = address;
++  // Ensure that name always sorts higher than the function name,
++  // so that upper_bound always returns the function just after
++  // the function containing this address.
++  search.name = "\xFF";
++  FunctionSet::iterator it = functions_.upper_bound(&search);
++  if (it == functions_.begin())
++    return NULL;
++
++  it--;
++
++  if (EntryContainsAddress(*it, address))
++    return *it;
++
++  return NULL;
++}
++
+ void Module::GetExterns(vector<Extern *> *vec,
+                         vector<Extern *>::iterator i) {
+   vec->insert(i, externs_.begin(), externs_.end());
+ }
+ 
++Module::Extern* Module::FindExternByAddress(Address address) {
++  Extern search;
++  search.address = address;
++  ExternSet::iterator it = externs_.upper_bound(&search);
++
++  if (it == externs_.begin())
++    return NULL;
++
++  it--;
++  if ((*it)->address > address)
++    return NULL;
++
++  return *it;
++}
++
+ Module::File *Module::FindFile(const string &name) {
+   // A tricky bit here.  The key of each map entry needs to be a
+   // pointer to the entry's File's name string.  This means that we
+   // can't do the initial lookup with any operation that would create
+   // an empty entry for us if the name isn't found (like, say,
+   // operator[] or insert do), because such a created entry's key will
+   // be a pointer the string passed as our argument.  Since the key of
+   // a map's value type is const, we can't fix it up once we've
+@@ -150,18 +195,35 @@
+ }
+ 
+ void Module::GetFiles(vector<File *> *vec) {
+   vec->clear();
+   for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); ++it)
+     vec->push_back(it->second);
+ }
+ 
+-void Module::GetStackFrameEntries(vector<StackFrameEntry *> *vec) {
+-  *vec = stack_frame_entries_;
++void Module::GetStackFrameEntries(vector<StackFrameEntry *>* vec) {
++  vec->clear();
++  vec->insert(vec->begin(), stack_frame_entries_.begin(),
++              stack_frame_entries_.end());
++}
++
++Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) {
++  StackFrameEntry search;
++  search.address = address;
++  StackFrameEntrySet::iterator it = stack_frame_entries_.upper_bound(&search);
++
++  if (it == stack_frame_entries_.begin())
++    return NULL;
++
++  it--;
++  if (EntryContainsAddress(*it, address))
++    return *it;
++
++  return NULL;
+ }
+ 
+ void Module::AssignSourceIds() {
+   // First, give every source file an id of -1.
+   for (FileByNameMap::iterator file_it = files_.begin();
+        file_it != files_.end(); ++file_it) {
+     file_it->second->source_id = -1;
+   }
+@@ -256,17 +318,17 @@
+            << (ext->address - load_address_) << " 0 "
+            << ext->name << dec << endl;
+     if (!stream.good())
+       return ReportError();
+   }
+ 
+   if (cfi) {
+     // Write out 'STACK CFI INIT' and 'STACK CFI' records.
+-    vector<StackFrameEntry *>::const_iterator frame_it;
++    StackFrameEntrySet::const_iterator frame_it;
+     for (frame_it = stack_frame_entries_.begin();
+          frame_it != stack_frame_entries_.end(); ++frame_it) {
+       StackFrameEntry *entry = *frame_it;
+       stream << "STACK CFI INIT " << hex
+              << (entry->address - load_address_) << " "
+              << entry->size << " " << dec;
+       if (!stream.good()
+           || !WriteRuleMap(entry->initial_rules, stream))
+diff --git a/src/common/module.h b/src/common/module.h
+--- a/src/common/module.h
++++ b/src/common/module.h
+@@ -163,16 +163,23 @@
+ 
+   struct ExternCompare {
+     bool operator() (const Extern *lhs,
+                      const Extern *rhs) const {
+       return lhs->address < rhs->address;
+     }
+   };
+ 
++  struct StackFrameEntryCompare {
++    bool operator() (const StackFrameEntry* lhs,
++                     const StackFrameEntry* rhs) const {
++      return lhs->address < rhs->address;
++    }
++  };
++
+   // Create a new module with the given name, operating system,
+   // architecture, and ID string.
+   Module(const string &name, const string &os, const string &architecture,
+          const string &id);
+   ~Module();
+ 
+   // Set the module's load address to LOAD_ADDRESS; addresses given
+   // for functions and lines will be written to the Breakpad symbol
+@@ -222,37 +229,49 @@
+ 
+   // Insert pointers to the functions added to this module at I in
+   // VEC. The pointed-to Functions are still owned by this module.
+   // (Since this is effectively a copy of the function list, this is
+   // mostly useful for testing; other uses should probably get a more
+   // appropriate interface.)
+   void GetFunctions(vector<Function *> *vec, vector<Function *>::iterator i);
+ 
++  // If this module has a function at ADDRESS, return a pointer to it.
++  // Otherwise, return NULL.
++  Function* FindFunctionByAddress(Address address);
++
+   // Insert pointers to the externs added to this module at I in
+   // VEC. The pointed-to Externs are still owned by this module.
+   // (Since this is effectively a copy of the extern list, this is
+   // mostly useful for testing; other uses should probably get a more
+   // appropriate interface.)
+   void GetExterns(vector<Extern *> *vec, vector<Extern *>::iterator i);
+ 
++  // If this module has an extern whose base address is less than ADDRESS,
++  // return a pointer to it. Otherwise, return NULL.
++  Extern* FindExternByAddress(Address address);
++
+   // Clear VEC and fill it with pointers to the Files added to this
+   // module, sorted by name. The pointed-to Files are still owned by
+   // this module. (Since this is effectively a copy of the file list,
+   // this is mostly useful for testing; other uses should probably get
+   // a more appropriate interface.)
+   void GetFiles(vector<File *> *vec);
+ 
+   // Clear VEC and fill it with pointers to the StackFrameEntry
+   // objects that have been added to this module. (Since this is
+   // effectively a copy of the stack frame entry list, this is mostly
+   // useful for testing; other uses should probably get
+   // a more appropriate interface.)
+   void GetStackFrameEntries(vector<StackFrameEntry *> *vec);
+ 
++  // If this module has a StackFrameEntry whose address range covers
++  // ADDRESS, return it. Otherwise return NULL.
++  StackFrameEntry* FindStackFrameEntryByAddress(Address address);
++
+   // Find those files in this module that are actually referred to by
+   // functions' line number data, and assign them source id numbers.
+   // Set the source id numbers for all other files --- unused by the
+   // source line data --- to -1.  We do this before writing out the
+   // symbol file, at which point we omit any unused files.
+   void AssignSourceIds();
+ 
+   // Call AssignSourceIds, and write this module to STREAM in the
+@@ -296,25 +315,28 @@
+   typedef map<const string *, File *, CompareStringPtrs> FileByNameMap;
+ 
+   // A set containing Function structures, sorted by address.
+   typedef set<Function *, FunctionCompare> FunctionSet;
+ 
+   // A set containing Extern structures, sorted by address.
+   typedef set<Extern *, ExternCompare> ExternSet;
+ 
++  // A set containing StackFrameEntry structures, sorted by address.
++  typedef set<StackFrameEntry*, StackFrameEntryCompare> StackFrameEntrySet;
++
+   // The module owns all the files and functions that have been added
+   // to it; destroying the module frees the Files and Functions these
+   // point to.
+   FileByNameMap files_;    // This module's source files.
+   FunctionSet functions_;  // This module's functions.
+ 
+   // The module owns all the call frame info entries that have been
+   // added to it.
+-  vector<StackFrameEntry *> stack_frame_entries_;
++  StackFrameEntrySet stack_frame_entries_;
+ 
+   // The module owns all the externs that have been added to it;
+   // destroying the module frees the Externs these point to.
+   ExternSet externs_;
+ };
+ 
+ }  // namespace google_breakpad
+ 
+diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
+--- a/src/common/module_unittest.cc
++++ b/src/common/module_unittest.cc
+@@ -329,63 +329,63 @@
+   entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
+     "I think I know";
+   m.AddStackFrameEntry(entry3);
+ 
+   // Check that Write writes STACK CFI records properly.
+   m.Write(s, true);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+-               "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n"
+-               "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407"
+-               " .cfa: I think that I shall never see"
+-               " cannoli: a tree whose hungry mouth is prest"
+-               " stromboli: a poem lovely as a tree\n"
+                "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229"
+                " .cfa: Whose woods are these\n"
+                "STACK CFI 36682fad3763ffff"
+                " .cfa: I think I know"
+                " stromboli: his house is in\n"
+                "STACK CFI 47ceb0f63c269d7f"
+                " calzone: the village though"
+-               " cannoli: he will not see me stopping here\n",
++               " cannoli: he will not see me stopping here\n"
++               "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407"
++               " .cfa: I think that I shall never see"
++               " cannoli: a tree whose hungry mouth is prest"
++               " stromboli: a poem lovely as a tree\n"
++               "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n",
+                contents.c_str());
+ 
+   // Check that GetStackFrameEntries works.
+   vector<Module::StackFrameEntry *> entries;
+   m.GetStackFrameEntries(&entries);
+   ASSERT_EQ(3U, entries.size());
+   // Check first entry.
+-  EXPECT_EQ(0xddb5f41285aa7757ULL, entries[0]->address);
+-  EXPECT_EQ(0x1486493370dc5073ULL, entries[0]->size);
+-  ASSERT_EQ(0U, entries[0]->initial_rules.size());
+-  ASSERT_EQ(0U, entries[0]->rule_changes.size());
++  EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address);
++  EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size);
++  Module::RuleMap entry1_initial;
++  entry1_initial[".cfa"] = "Whose woods are these";
++  EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial));
++  Module::RuleChangeMap entry1_changes;
++  entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
++  entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
++  entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
++  entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
++    "he will not see me stopping here";
++  EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes));
+   // Check second entry.
+   EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address);
+   EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size);
+   ASSERT_EQ(3U, entries[1]->initial_rules.size());
+   Module::RuleMap entry2_initial;
+   entry2_initial[".cfa"] = "I think that I shall never see";
+   entry2_initial["stromboli"] = "a poem lovely as a tree";
+   entry2_initial["cannoli"] = "a tree whose hungry mouth is prest";
+   EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial));
+   ASSERT_EQ(0U, entries[1]->rule_changes.size());
+   // Check third entry.
+-  EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[2]->address);
+-  EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[2]->size);
+-  Module::RuleMap entry3_initial;
+-  entry3_initial[".cfa"] = "Whose woods are these";
+-  EXPECT_THAT(entries[2]->initial_rules, ContainerEq(entry3_initial));
+-  Module::RuleChangeMap entry3_changes;
+-  entry3_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
+-  entry3_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
+-  entry3_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
+-  entry3_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
+-    "he will not see me stopping here";
+-  EXPECT_THAT(entries[2]->rule_changes, ContainerEq(entry3_changes));
++  EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address);
++  EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size);
++  ASSERT_EQ(0U, entries[2]->initial_rules.size());
++  ASSERT_EQ(0U, entries[2]->rule_changes.size());
+ }
+ 
+ TEST(Construct, UniqueFiles) {
+   Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
+   Module::File *file1 = m.FindFile("foo");
+   Module::File *file2 = m.FindFile(string("bar"));
+   Module::File *file3 = m.FindFile(string("foo"));
+   Module::File *file4 = m.FindFile("bar");
+@@ -483,8 +483,155 @@
+   m.Write(s, true);
+   string contents = s.str();
+ 
+   EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " "
+                MODULE_ID " " MODULE_NAME "\n"
+                "PUBLIC ffff 0 _xyz\n",
+                contents.c_str());
+ }
++
++TEST(Lookup, Function) {
++  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
++
++  Module::Function *function1 = new(Module::Function);
++  function1->name = "_abc1";
++  function1->address = 0x1000;
++  function1->size = 0x900;
++  function1->parameter_size = 0x0;
++
++  Module::Function *function2 = new(Module::Function);
++  function2->name = "_xyz2";
++  function2->address = 0x2000;
++  function2->size = 0x900;
++  function2->parameter_size = 0x0;
++
++  Module::Function *function3 = new(Module::Function);
++  function3->name = "_def3";
++  function3->address = 0x3000;
++  function3->size = 0x900;
++  function3->parameter_size = 0x0;
++
++  // Put them in a vector.
++  vector<Module::Function *> vec;
++  vec.push_back(function1);
++  vec.push_back(function2);
++  vec.push_back(function3);
++
++  m.AddFunctions(vec.begin(), vec.end());
++
++  // Try looking up functions by address.
++  Module::Function* f = m.FindFunctionByAddress(0x1000);
++  EXPECT_EQ(function1, f);
++  f = m.FindFunctionByAddress(0x18FF);
++  EXPECT_EQ(function1, f);
++
++  f = m.FindFunctionByAddress(0x1900);
++  EXPECT_EQ((Module::Function*)NULL, f);
++  f = m.FindFunctionByAddress(0x1A00);
++  EXPECT_EQ((Module::Function*)NULL, f);
++
++  f = m.FindFunctionByAddress(0x2000);
++  EXPECT_EQ(function2, f);
++  f = m.FindFunctionByAddress(0x28FF);
++  EXPECT_EQ(function2, f);
++
++  f = m.FindFunctionByAddress(0x3000);
++  EXPECT_EQ(function3, f);
++  f = m.FindFunctionByAddress(0x38FF);
++  EXPECT_EQ(function3, f);
++
++  f = m.FindFunctionByAddress(0x3900);
++  EXPECT_EQ((Module::Function*)NULL, f);
++  f = m.FindFunctionByAddress(0x3A00);
++  EXPECT_EQ((Module::Function*)NULL, f);
++}
++
++TEST(Lookup, Externs) {
++  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
++
++  // Two externs.
++  Module::Extern* extern1 = new(Module::Extern);
++  extern1->address = 0x1000;
++  extern1->name = "_abc";
++  Module::Extern* extern2 = new(Module::Extern);
++  extern2->address = 0x2000;
++  extern2->name = "_xyz";
++
++  m.AddExtern(extern1);
++  m.AddExtern(extern2);
++
++  Module::Extern* e = m.FindExternByAddress(0xFFF);
++  EXPECT_EQ((Module::Extern*)NULL, e);
++
++  e = m.FindExternByAddress(0x1000);
++  EXPECT_EQ(extern1, e);
++  e = m.FindExternByAddress(0x1900);
++  EXPECT_EQ(extern1, e);
++  e = m.FindExternByAddress(0x1FFF);
++  EXPECT_EQ(extern1, e);
++
++  e = m.FindExternByAddress(0x2000);
++  EXPECT_EQ(extern2, e);
++  e = m.FindExternByAddress(0x2900);
++  EXPECT_EQ(extern2, e);
++  e = m.FindExternByAddress(0xFFFFFFFF);
++  EXPECT_EQ(extern2, e);
++}
++
++TEST(Lookup, StackFrameEntries) {
++  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
++
++  // First STACK CFI entry, with no initial rules or deltas.
++  Module::StackFrameEntry *entry1 = new Module::StackFrameEntry();
++  entry1->address = 0x2000;
++  entry1->size = 0x900;
++  m.AddStackFrameEntry(entry1);
++
++  // Second STACK CFI entry, with initial rules but no deltas.
++  Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
++  entry2->address = 0x3000;
++  entry2->size = 0x900;
++  entry2->initial_rules[".cfa"] = "I think that I shall never see";
++  entry2->initial_rules["stromboli"] = "a poem lovely as a tree";
++  entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest";
++  m.AddStackFrameEntry(entry2);
++
++  // Third STACK CFI entry, with initial rules and deltas.
++  Module::StackFrameEntry *entry3 = new Module::StackFrameEntry();
++  entry3->address = 0x1000;
++  entry3->size = 0x900;
++  entry3->initial_rules[".cfa"] = "Whose woods are these";
++  entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
++    "the village though";
++  entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
++    "he will not see me stopping here";
++  entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
++    "his house is in";
++  entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
++    "I think I know";
++  m.AddStackFrameEntry(entry3);
++
++  Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000);
++  EXPECT_EQ(entry3, s);
++  s = m.FindStackFrameEntryByAddress(0x18FF);
++  EXPECT_EQ(entry3, s);
++
++  s = m.FindStackFrameEntryByAddress(0x1900);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++  s = m.FindStackFrameEntryByAddress(0x1A00);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++
++  s = m.FindStackFrameEntryByAddress(0x2000);
++  EXPECT_EQ(entry1, s);
++  s = m.FindStackFrameEntryByAddress(0x28FF);
++  EXPECT_EQ(entry1, s);
++
++  s = m.FindStackFrameEntryByAddress(0x3000);
++  EXPECT_EQ(entry2, s);
++  s = m.FindStackFrameEntryByAddress(0x38FF);
++  EXPECT_EQ(entry2, s);
++
++  s = m.FindStackFrameEntryByAddress(0x3900);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++  s = m.FindStackFrameEntryByAddress(0x3A00);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++}
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/breakpad-patches/01-dump-symbols-just-cfi.patch
@@ -0,0 +1,1159 @@
+# HG changeset patch
+# User Ted Mielczarek <ted@mielczarek.org>
+# Date 1352220493 18000
+# Node ID 0f7f04d2a249b9a9bbc61eb350f177054ab11601
+# Parent 96b3a2bb799eb401c8a80ed6c134289f91eb7436
+Allow reading just CFI data when reading symbols
+R=thestig at https://breakpad.appspot.com/517002/
+
+diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
+--- a/src/common/linux/dump_symbols.cc
++++ b/src/common/linux/dump_symbols.cc
+@@ -505,16 +505,17 @@
+ };
+ 
+ template<typename ElfClass>
+ bool LoadSymbols(const string& obj_file,
+                  const bool big_endian,
+                  const typename ElfClass::Ehdr* elf_header,
+                  const bool read_gnu_debug_link,
+                  LoadSymbolsInfo<ElfClass>* info,
++                 SymbolData symbol_data,
+                  Module* module) {
+   typedef typename ElfClass::Addr Addr;
+   typedef typename ElfClass::Phdr Phdr;
+   typedef typename ElfClass::Shdr Shdr;
+ 
+   Addr loading_addr = GetLoadingAddress<ElfClass>(
+       GetOffset<ElfClass, Phdr>(elf_header, elf_header->e_phoff),
+       elf_header->e_phnum);
+@@ -525,91 +526,95 @@
+       GetOffset<ElfClass, Shdr>(elf_header, elf_header->e_shoff);
+   const Shdr* section_names = sections + elf_header->e_shstrndx;
+   const char* names =
+       GetOffset<ElfClass, char>(elf_header, section_names->sh_offset);
+   const char *names_end = names + section_names->sh_size;
+   bool found_debug_info_section = false;
+   bool found_usable_info = false;
+ 
+-  // Look for STABS debugging information, and load it if present.
+-  const Shdr* stab_section =
++  if (symbol_data != ONLY_CFI) {
++    // Look for STABS debugging information, and load it if present.
++    const Shdr* stab_section =
+       FindElfSectionByName<ElfClass>(".stab", SHT_PROGBITS,
+                                      sections, names, names_end,
+                                      elf_header->e_shnum);
+-  if (stab_section) {
+-    const Shdr* stabstr_section = stab_section->sh_link + sections;
+-    if (stabstr_section) {
++    if (stab_section) {
++      const Shdr* stabstr_section = stab_section->sh_link + sections;
++      if (stabstr_section) {
++        found_debug_info_section = true;
++        found_usable_info = true;
++        info->LoadedSection(".stab");
++        if (!LoadStabs<ElfClass>(elf_header, stab_section, stabstr_section,
++                                 big_endian, module)) {
++          fprintf(stderr, "%s: \".stab\" section found, but failed to load"
++                  " STABS debugging information\n", obj_file.c_str());
++        }
++      }
++    }
++
++    // Look for DWARF debugging information, and load it if present.
++    const Shdr* dwarf_section =
++      FindElfSectionByName<ElfClass>(".debug_info", SHT_PROGBITS,
++                                     sections, names, names_end,
++                                     elf_header->e_shnum);
++    if (dwarf_section) {
+       found_debug_info_section = true;
+       found_usable_info = true;
+-      info->LoadedSection(".stab");
+-      if (!LoadStabs<ElfClass>(elf_header, stab_section, stabstr_section,
+-                               big_endian, module)) {
+-        fprintf(stderr, "%s: \".stab\" section found, but failed to load STABS"
+-                " debugging information\n", obj_file.c_str());
+-      }
++      info->LoadedSection(".debug_info");
++      if (!LoadDwarf<ElfClass>(obj_file, elf_header, big_endian, module))
++        fprintf(stderr, "%s: \".debug_info\" section found, but failed to load "
++                "DWARF debugging information\n", obj_file.c_str());
+     }
+   }
+ 
+-  // Look for DWARF debugging information, and load it if present.
+-  const Shdr* dwarf_section =
+-      FindElfSectionByName<ElfClass>(".debug_info", SHT_PROGBITS,
+-                                     sections, names, names_end,
+-                                     elf_header->e_shnum);
+-  if (dwarf_section) {
+-    found_debug_info_section = true;
+-    found_usable_info = true;
+-    info->LoadedSection(".debug_info");
+-    if (!LoadDwarf<ElfClass>(obj_file, elf_header, big_endian, module))
+-      fprintf(stderr, "%s: \".debug_info\" section found, but failed to load "
+-              "DWARF debugging information\n", obj_file.c_str());
+-  }
+-
+-  // Dwarf Call Frame Information (CFI) is actually independent from
+-  // the other DWARF debugging information, and can be used alone.
+-  const Shdr* dwarf_cfi_section =
+-      FindElfSectionByName<ElfClass>(".debug_frame", SHT_PROGBITS,
+-                                     sections, names, names_end,
+-                                     elf_header->e_shnum);
+-  if (dwarf_cfi_section) {
+-    // Ignore the return value of this function; even without call frame
+-    // information, the other debugging information could be perfectly
+-    // useful.
+-    info->LoadedSection(".debug_frame");
+-    bool result =
+-        LoadDwarfCFI<ElfClass>(obj_file, elf_header, ".debug_frame",
+-                               dwarf_cfi_section, false, 0, 0, big_endian,
+-                               module);
+-    found_usable_info = found_usable_info || result;
+-  }
+-
+-  // Linux C++ exception handling information can also provide
+-  // unwinding data.
+-  const Shdr* eh_frame_section =
+-      FindElfSectionByName<ElfClass>(".eh_frame", SHT_PROGBITS,
+-                                     sections, names, names_end,
+-                                     elf_header->e_shnum);
+-  if (eh_frame_section) {
+-    // Pointers in .eh_frame data may be relative to the base addresses of
+-    // certain sections. Provide those sections if present.
+-    const Shdr* got_section =
+-        FindElfSectionByName<ElfClass>(".got", SHT_PROGBITS,
++  if (symbol_data != NO_CFI) {
++    // Dwarf Call Frame Information (CFI) is actually independent from
++    // the other DWARF debugging information, and can be used alone.
++    const Shdr* dwarf_cfi_section =
++        FindElfSectionByName<ElfClass>(".debug_frame", SHT_PROGBITS,
+                                        sections, names, names_end,
+                                        elf_header->e_shnum);
+-    const Shdr* text_section =
+-        FindElfSectionByName<ElfClass>(".text", SHT_PROGBITS,
++    if (dwarf_cfi_section) {
++      // Ignore the return value of this function; even without call frame
++      // information, the other debugging information could be perfectly
++      // useful.
++      info->LoadedSection(".debug_frame");
++      bool result =
++          LoadDwarfCFI<ElfClass>(obj_file, elf_header, ".debug_frame",
++                                 dwarf_cfi_section, false, 0, 0, big_endian,
++                                 module);
++      found_usable_info = found_usable_info || result;
++    }
++
++    // Linux C++ exception handling information can also provide
++    // unwinding data.
++    const Shdr* eh_frame_section =
++        FindElfSectionByName<ElfClass>(".eh_frame", SHT_PROGBITS,
+                                        sections, names, names_end,
+                                        elf_header->e_shnum);
+-    info->LoadedSection(".eh_frame");
+-    // As above, ignore the return value of this function.
+-    bool result =
+-        LoadDwarfCFI<ElfClass>(obj_file, elf_header, ".eh_frame",
+-                               eh_frame_section, true,
+-                               got_section, text_section, big_endian, module);
+-    found_usable_info = found_usable_info || result;
++    if (eh_frame_section) {
++      // Pointers in .eh_frame data may be relative to the base addresses of
++      // certain sections. Provide those sections if present.
++      const Shdr* got_section =
++          FindElfSectionByName<ElfClass>(".got", SHT_PROGBITS,
++                                         sections, names, names_end,
++                                         elf_header->e_shnum);
++      const Shdr* text_section =
++          FindElfSectionByName<ElfClass>(".text", SHT_PROGBITS,
++                                         sections, names, names_end,
++                                         elf_header->e_shnum);
++      info->LoadedSection(".eh_frame");
++      // As above, ignore the return value of this function.
++      bool result =
++          LoadDwarfCFI<ElfClass>(obj_file, elf_header, ".eh_frame",
++                                 eh_frame_section, true,
++                                 got_section, text_section, big_endian, module);
++      found_usable_info = found_usable_info || result;
++    }
+   }
+ 
+   if (!found_debug_info_section) {
+     fprintf(stderr, "%s: file contains no debugging information"
+             " (no \".stab\" or \".debug_info\" sections)\n",
+             obj_file.c_str());
+ 
+     // Failed, but maybe there's a .gnu_debuglink section?
+@@ -631,17 +636,17 @@
+         } else {
+           fprintf(stderr, ".gnu_debuglink section found in '%s', "
+                   "but no debug path specified.\n", obj_file.c_str());
+         }
+       } else {
+         fprintf(stderr, "%s does not contain a .gnu_debuglink section.\n",
+                 obj_file.c_str());
+       }
+-    } else {
++    } else if (symbol_data != ONLY_CFI) {
+       // The caller doesn't want to consult .gnu_debuglink.
+       // See if there are export symbols available.
+       const Shdr* dynsym_section =
+           FindElfSectionByName<ElfClass>(".dynsym", SHT_DYNSYM,
+                                          sections, names, names_end,
+                                          elf_header->e_shnum);
+       const Shdr* dynstr_section =
+           FindElfSectionByName<ElfClass>(".dynstr", SHT_STRTAB,
+@@ -726,17 +731,17 @@
+   free(c_filename);
+   return base;
+ }
+ 
+ template<typename ElfClass>
+ bool ReadSymbolDataElfClass(const typename ElfClass::Ehdr* elf_header,
+                              const string& obj_filename,
+                              const std::vector<string>& debug_dirs,
+-                             bool cfi,
++                             SymbolData symbol_data,
+                              Module** out_module) {
+   typedef typename ElfClass::Ehdr Ehdr;
+   typedef typename ElfClass::Shdr Shdr;
+ 
+   *out_module = NULL;
+ 
+   unsigned char identifier[16];
+   if (!google_breakpad::FileID::ElfFileIdentifierFromMappedFile(elf_header,
+@@ -760,17 +765,18 @@
+ 
+   string name = BaseFileName(obj_filename);
+   string os = "Linux";
+   string id = FormatIdentifier(identifier);
+ 
+   LoadSymbolsInfo<ElfClass> info(debug_dirs);
+   scoped_ptr<Module> module(new Module(name, os, architecture, id));
+   if (!LoadSymbols<ElfClass>(obj_filename, big_endian, elf_header,
+-                             !debug_dirs.empty(), &info, module.get())) {
++                             !debug_dirs.empty(), &info,
++                             symbol_data, module.get())) {
+     const string debuglink_file = info.debuglink_file();
+     if (debuglink_file.empty())
+       return false;
+ 
+     // Load debuglink ELF file.
+     fprintf(stderr, "Found debugging info in %s\n", debuglink_file.c_str());
+     MmapWrapper debug_map_wrapper;
+     Ehdr* debug_elf_header = NULL;
+@@ -798,75 +804,76 @@
+       return false;
+     if (debug_big_endian != big_endian) {
+       fprintf(stderr, "%s and %s does not match in endianness\n",
+               obj_filename.c_str(), debuglink_file.c_str());
+       return false;
+     }
+ 
+     if (!LoadSymbols<ElfClass>(debuglink_file, debug_big_endian,
+-                               debug_elf_header, false, &info, module.get())) {
++                               debug_elf_header, false, &info,
++                               symbol_data, module.get())) {
+       return false;
+     }
+   }
+ 
+   *out_module = module.release();
+   return true;
+ }
+ 
+ }  // namespace
+ 
+ namespace google_breakpad {
+ 
+ // Not explicitly exported, but not static so it can be used in unit tests.
+ bool ReadSymbolDataInternal(const uint8_t* obj_file,
+                             const string& obj_filename,
+                             const std::vector<string>& debug_dirs,
+-                            bool cfi,
++                            SymbolData symbol_data,
+                             Module** module) {
+ 
+   if (!IsValidElf(obj_file)) {
+     fprintf(stderr, "Not a valid ELF file: %s\n", obj_filename.c_str());
+     return false;
+   }
+ 
+   int elfclass = ElfClass(obj_file);
+   if (elfclass == ELFCLASS32) {
+     return ReadSymbolDataElfClass<ElfClass32>(
+         reinterpret_cast<const Elf32_Ehdr*>(obj_file), obj_filename, debug_dirs,
+-        cfi, module);
++        symbol_data, module);
+   }
+   if (elfclass == ELFCLASS64) {
+     return ReadSymbolDataElfClass<ElfClass64>(
+         reinterpret_cast<const Elf64_Ehdr*>(obj_file), obj_filename, debug_dirs,
+-        cfi, module);
++        symbol_data, module);
+   }
+ 
+   return false;
+ }
+ 
+ bool WriteSymbolFile(const string &obj_file,
+                      const std::vector<string>& debug_dirs,
+-                     bool cfi,
++                     SymbolData symbol_data,
+                      std::ostream &sym_stream) {
+   Module* module;
+-  if (!ReadSymbolData(obj_file, debug_dirs, cfi, &module))
++  if (!ReadSymbolData(obj_file, debug_dirs, symbol_data, &module))
+     return false;
+ 
+-  bool result = module->Write(sym_stream, cfi);
++  bool result = module->Write(sym_stream, symbol_data);
+   delete module;
+   return result;
+ }
+ 
+ bool ReadSymbolData(const string& obj_file,
+                     const std::vector<string>& debug_dirs,
+-                    bool cfi,
++                    SymbolData symbol_data,
+                     Module** module) {
+   MmapWrapper map_wrapper;
+   void* elf_header = NULL;
+   if (!LoadELF(obj_file, &map_wrapper, &elf_header))
+     return false;
+ 
+   return ReadSymbolDataInternal(reinterpret_cast<uint8_t*>(elf_header),
+-                                obj_file, debug_dirs, cfi, module);
++                                obj_file, debug_dirs, symbol_data, module);
+ }
+ 
+ }  // namespace google_breakpad
+diff --git a/src/common/linux/dump_symbols.h b/src/common/linux/dump_symbols.h
+--- a/src/common/linux/dump_symbols.h
++++ b/src/common/linux/dump_symbols.h
+@@ -34,36 +34,37 @@
+ 
+ #ifndef COMMON_LINUX_DUMP_SYMBOLS_H__
+ #define COMMON_LINUX_DUMP_SYMBOLS_H__
+ 
+ #include <iostream>
+ #include <string>
+ #include <vector>
+ 
++#include "common/symbol_data.h"
+ #include "common/using_std_string.h"
+ 
+ namespace google_breakpad {
+ 
+ class Module;
+ 
+ // Find all the debugging information in OBJ_FILE, an ELF executable
+ // or shared library, and write it to SYM_STREAM in the Breakpad symbol
+ // file format.
+ // If OBJ_FILE has been stripped but contains a .gnu_debuglink section,
+ // then look for the debug file in DEBUG_DIRS.
+-// If CFI is set to false, then omit the CFI section.
++// SYMBOL_DATA allows limiting the type of symbol data written.
+ bool WriteSymbolFile(const string &obj_file,
+                      const std::vector<string>& debug_dirs,
+-                     bool cfi,
++                     SymbolData symbol_data,
+                      std::ostream &sym_stream);
+ 
+ // As above, but simply return the debugging information in MODULE
+ // instead of writing it to a stream. The caller owns the resulting
+ // Module object and must delete it when finished.
+ bool ReadSymbolData(const string& obj_file,
+                     const std::vector<string>& debug_dirs,
+-                    bool cfi,
++                    SymbolData symbol_data,
+                     Module** module);
+ 
+ }  // namespace google_breakpad
+ 
+ #endif  // COMMON_LINUX_DUMP_SYMBOLS_H__
+diff --git a/src/common/linux/dump_symbols_unittest.cc b/src/common/linux/dump_symbols_unittest.cc
+--- a/src/common/linux/dump_symbols_unittest.cc
++++ b/src/common/linux/dump_symbols_unittest.cc
+@@ -43,17 +43,17 @@
+ #include "common/linux/synth_elf.h"
+ #include "common/module.h"
+ #include "common/using_std_string.h"
+ 
+ namespace google_breakpad {
+ bool ReadSymbolDataInternal(const uint8_t* obj_file,
+                             const string& obj_filename,
+                             const std::vector<string>& debug_dir,
+-                            bool cfi,
++                            SymbolData symbol_data,
+                             Module** module);
+ }
+ 
+ using google_breakpad::synth_elf::ELF;
+ using google_breakpad::synth_elf::StringTable;
+ using google_breakpad::synth_elf::SymbolTable;
+ using google_breakpad::test_assembler::kLittleEndian;
+ using google_breakpad::test_assembler::Section;
+@@ -81,17 +81,17 @@
+ 
+ TEST_F(DumpSymbols, Invalid) {
+   Elf32_Ehdr header;
+   memset(&header, 0, sizeof(header));
+   Module* module;
+   EXPECT_FALSE(ReadSymbolDataInternal(reinterpret_cast<uint8_t*>(&header),
+                                       "foo",
+                                       vector<string>(),
+-                                      true,
++                                      ALL_SYMBOL_DATA,
+                                       &module));
+ }
+ 
+ TEST_F(DumpSymbols, SimplePublic32) {
+   ELF elf(EM_386, ELFCLASS32, kLittleEndian);
+   // Zero out text section for simplicity.
+   Section text(kLittleEndian);
+   text.Append(4096, 0);
+@@ -113,21 +113,21 @@
+ 
+   elf.Finish();
+   GetElfContents(elf);
+ 
+   Module* module;
+   EXPECT_TRUE(ReadSymbolDataInternal(elfdata,
+                                      "foo",
+                                      vector<string>(),
+-                                     true,
++                                     ALL_SYMBOL_DATA,
+                                      &module));
+ 
+   stringstream s;
+-  module->Write(s, true);
++  module->Write(s, ALL_SYMBOL_DATA);
+   EXPECT_EQ("MODULE Linux x86 000000000000000000000000000000000 foo\n"
+             "PUBLIC 1000 0 superfunc\n",
+             s.str());
+   delete module;
+ }
+ 
+ TEST_F(DumpSymbols, SimplePublic64) {
+   ELF elf(EM_X86_64, ELFCLASS64, kLittleEndian);
+@@ -152,17 +152,17 @@
+ 
+   elf.Finish();
+   GetElfContents(elf);
+ 
+   Module* module;
+   EXPECT_TRUE(ReadSymbolDataInternal(elfdata,
+                                      "foo",
+                                      vector<string>(),
+-                                     true,
++                                     ALL_SYMBOL_DATA,
+                                      &module));
+ 
+   stringstream s;
+-  module->Write(s, true);
++  module->Write(s, ALL_SYMBOL_DATA);
+   EXPECT_EQ("MODULE Linux x86_64 000000000000000000000000000000000 foo\n"
+             "PUBLIC 1000 0 superfunc\n",
+             s.str());
+ }
+diff --git a/src/common/mac/dump_syms.h b/src/common/mac/dump_syms.h
+--- a/src/common/mac/dump_syms.h
++++ b/src/common/mac/dump_syms.h
+@@ -42,23 +42,25 @@
+ 
+ #include <ostream>
+ #include <string>
+ #include <vector>
+ 
+ #include "common/byte_cursor.h"
+ #include "common/mac/macho_reader.h"
+ #include "common/module.h"
++#include "common/symbol_data.h"
+ 
+ namespace google_breakpad {
+ 
+ class DumpSymbols {
+  public:
+-  DumpSymbols()
+-      : input_pathname_(),
++  explicit DumpSymbols(SymbolData symbol_data)
++      : symbol_data_(symbol_data),
++        input_pathname_(),
+         object_filename_(),
+         contents_(),
+         selected_object_file_(),
+         selected_object_name_() { }
+   ~DumpSymbols() {
+     [input_pathname_ release];
+     [object_filename_ release];
+     [contents_ release];
+@@ -105,19 +107,19 @@
+   const struct fat_arch *AvailableArchitectures(size_t *count) {
+     *count = object_files_.size();
+     if (object_files_.size() > 0)
+       return &object_files_[0];
+     return NULL;
+   }
+ 
+   // Read the selected object file's debugging information, and write it out to
+-  // |stream|. Write the CFI section if |cfi| is true. Return true on success;
+-  // if an error occurs, report it and return false.
+-  bool WriteSymbolFile(std::ostream &stream, bool cfi);
++  // |stream|. Return true on success; if an error occurs, report it and
++  // return false.
++  bool WriteSymbolFile(std::ostream &stream);
+ 
+  private:
+   // Used internally.
+   class DumperLineToModule;
+   class LoadCommandDumper;
+ 
+   // Return an identifier string for the file this DumpSymbols is dumping.
+   std::string Identifier();
+@@ -134,16 +136,19 @@
+   // then the data is .eh_frame-format data; otherwise, it is standard DWARF
+   // .debug_frame data. On success, return true; on failure, report
+   // the problem and return false.
+   bool ReadCFI(google_breakpad::Module *module,
+                const mach_o::Reader &macho_reader,
+                const mach_o::Section &section,
+                bool eh_frame) const;
+ 
++  // The selection of what type of symbol data to read/write.
++  const SymbolData symbol_data_;
++
+   // The name of the file or bundle whose symbols this will dump.
+   // This is the path given to Read, for use in error messages.
+   NSString *input_pathname_;
+ 
+   // The name of the file this DumpSymbols will actually read debugging
+   // information from. Normally, this is the same as input_pathname_, but if
+   // filename refers to a dSYM bundle, then this is the resource file
+   // within that bundle.
+diff --git a/src/common/mac/dump_syms.mm b/src/common/mac/dump_syms.mm
+--- a/src/common/mac/dump_syms.mm
++++ b/src/common/mac/dump_syms.mm
+@@ -50,16 +50,17 @@
+ #include "common/dwarf_cu_to_module.h"
+ #include "common/dwarf_line_to_module.h"
+ #include "common/mac/file_id.h"
+ #include "common/mac/arch_utilities.h"
+ #include "common/mac/macho_reader.h"
+ #include "common/module.h"
+ #include "common/stabs_reader.h"
+ #include "common/stabs_to_module.h"
++#include "common/symbol_data.h"
+ 
+ #ifndef CPU_TYPE_ARM
+ #define CPU_TYPE_ARM (static_cast<cpu_type_t>(12))
+ #endif //  CPU_TYPE_ARM
+ 
+ using dwarf2reader::ByteReader;
+ using google_breakpad::DwarfCUToModule;
+ using google_breakpad::DwarfLineToModule;
+@@ -365,52 +366,61 @@
+ // Module.
+ class DumpSymbols::LoadCommandDumper:
+       public mach_o::Reader::LoadCommandHandler {
+  public:
+   // Create a load command dumper handling load commands from READER's
+   // file, and adding data to MODULE.
+   LoadCommandDumper(const DumpSymbols &dumper,
+                     google_breakpad::Module *module,
+-                    const mach_o::Reader &reader)
+-      : dumper_(dumper), module_(module), reader_(reader) { }
++                    const mach_o::Reader &reader,
++                    SymbolData symbol_data)
++      : dumper_(dumper),
++        module_(module),
++        reader_(reader),
++        symbol_data_(symbol_data) { }
+ 
+   bool SegmentCommand(const mach_o::Segment &segment);
+   bool SymtabCommand(const ByteBuffer &entries, const ByteBuffer &strings);
+ 
+  private:
+   const DumpSymbols &dumper_;
+   google_breakpad::Module *module_;  // WEAK
+   const mach_o::Reader &reader_;
++  const SymbolData symbol_data_;
+ };
+ 
+ bool DumpSymbols::LoadCommandDumper::SegmentCommand(const Segment &segment) {
+   mach_o::SectionMap section_map;
+   if (!reader_.MapSegmentSections(segment, &section_map))
+     return false;
+ 
+-  if (segment.name == "__TEXT") {
++  if (segment.name == "__TEXT" && symbol_data_ != NO_CFI) {
+     module_->SetLoadAddress(segment.vmaddr);
+     mach_o::SectionMap::const_iterator eh_frame =
+         section_map.find("__eh_frame");
+     if (eh_frame != section_map.end()) {
+       // If there is a problem reading this, don't treat it as a fatal error.
+       dumper_.ReadCFI(module_, reader_, eh_frame->second, true);
+     }
+     return true;
+   }
+ 
+   if (segment.name == "__DWARF") {
+-    if (!dumper_.ReadDwarf(module_, reader_, section_map))
+-      return false;
+-    mach_o::SectionMap::const_iterator debug_frame
+-        = section_map.find("__debug_frame");
+-    if (debug_frame != section_map.end()) {
+-      // If there is a problem reading this, don't treat it as a fatal error.
+-      dumper_.ReadCFI(module_, reader_, debug_frame->second, false);
++    if (symbol_data_ != ONLY_CFI) {
++      if (!dumper_.ReadDwarf(module_, reader_, section_map))
++        return false;
++    }
++    if (symbol_data_ != NO_CFI) {
++      mach_o::SectionMap::const_iterator debug_frame
++          = section_map.find("__debug_frame");
++      if (debug_frame != section_map.end()) {
++        // If there is a problem reading this, don't treat it as a fatal error.
++        dumper_.ReadCFI(module_, reader_, debug_frame->second, false);
++      }
+     }
+   }
+ 
+   return true;
+ }
+ 
+ bool DumpSymbols::LoadCommandDumper::SymtabCommand(const ByteBuffer &entries,
+                                                    const ByteBuffer &strings) {
+@@ -424,17 +434,17 @@
+                            true,
+                            &stabs_to_module);
+   if (!stabs_reader.Process())
+     return false;
+   stabs_to_module.Finalize();
+   return true;
+ }
+ 
+-bool DumpSymbols::WriteSymbolFile(std::ostream &stream, bool cfi) {
++bool DumpSymbols::WriteSymbolFile(std::ostream &stream) {
+   // Select an object file, if SetArchitecture hasn't been called to set one
+   // explicitly.
+   if (!selected_object_file_) {
+     // If there's only one architecture, that's the one.
+     if (object_files_.size() == 1)
+       selected_object_file_ = &object_files_[0];
+     else {
+       // Look for an object file whose architecture matches our own.
+@@ -489,16 +499,16 @@
+   if (!reader.Read(reinterpret_cast<const uint8_t *>([contents_ bytes])
+                    + selected_object_file_->offset,
+                    selected_object_file_->size,
+                    selected_object_file_->cputype,
+                    selected_object_file_->cpusubtype))
+     return false;
+ 
+   // Walk its load commands, and deal with whatever is there.
+-  LoadCommandDumper load_command_dumper(*this, &module, reader);
++  LoadCommandDumper load_command_dumper(*this, &module, reader, symbol_data_);
+   if (!reader.WalkLoadCommands(&load_command_dumper))
+     return false;
+ 
+-  return module.Write(stream, cfi);
++  return module.Write(stream, symbol_data_);
+ }
+ 
+ }  // namespace google_breakpad
+diff --git a/src/common/module.cc b/src/common/module.cc
+--- a/src/common/module.cc
++++ b/src/common/module.cc
+@@ -256,72 +256,74 @@
+        it != rule_map.end(); ++it) {
+     if (it != rule_map.begin())
+       stream << ' ';
+     stream << it->first << ": " << it->second;
+   }
+   return stream.good();
+ }
+ 
+-bool Module::Write(std::ostream &stream, bool cfi) {
++bool Module::Write(std::ostream &stream, SymbolData symbol_data) {
+   stream << "MODULE " << os_ << " " << architecture_ << " "
+          << id_ << " " << name_ << endl;
+   if (!stream.good())
+     return ReportError();
+ 
+-  AssignSourceIds();
++  if (symbol_data != ONLY_CFI) {
++    AssignSourceIds();
+ 
+-  // Write out files.
+-  for (FileByNameMap::iterator file_it = files_.begin();
+-       file_it != files_.end(); ++file_it) {
+-    File *file = file_it->second;
+-    if (file->source_id >= 0) {
+-      stream << "FILE " << file->source_id << " " <<  file->name << endl;
++    // Write out files.
++    for (FileByNameMap::iterator file_it = files_.begin();
++         file_it != files_.end(); ++file_it) {
++      File *file = file_it->second;
++      if (file->source_id >= 0) {
++        stream << "FILE " << file->source_id << " " <<  file->name << endl;
++        if (!stream.good())
++          return ReportError();
++      }
++    }
++
++    // Write out functions and their lines.
++    for (FunctionSet::const_iterator func_it = functions_.begin();
++         func_it != functions_.end(); ++func_it) {
++      Function *func = *func_it;
++      stream << "FUNC " << hex
++             << (func->address - load_address_) << " "
++             << func->size << " "
++             << func->parameter_size << " "
++             << func->name << dec << endl;
++
++      if (!stream.good())
++        return ReportError();
++      for (vector<Line>::iterator line_it = func->lines.begin();
++           line_it != func->lines.end(); ++line_it) {
++        stream << hex
++               << (line_it->address - load_address_) << " "
++               << line_it->size << " "
++               << dec
++               << line_it->number << " "
++               << line_it->file->source_id << endl;
++        if (!stream.good())
++          return ReportError();
++      }
++    }
++
++    // Write out 'PUBLIC' records.
++    for (ExternSet::const_iterator extern_it = externs_.begin();
++         extern_it != externs_.end(); ++extern_it) {
++      Extern *ext = *extern_it;
++      stream << "PUBLIC " << hex
++             << (ext->address - load_address_) << " 0 "
++             << ext->name << dec << endl;
+       if (!stream.good())
+         return ReportError();
+     }
+   }
+ 
+-  // Write out functions and their lines.
+-  for (FunctionSet::const_iterator func_it = functions_.begin();
+-       func_it != functions_.end(); ++func_it) {
+-    Function *func = *func_it;
+-    stream << "FUNC " << hex
+-           << (func->address - load_address_) << " "
+-           << func->size << " "
+-           << func->parameter_size << " "
+-           << func->name << dec << endl;
+-
+-    if (!stream.good())
+-      return ReportError();
+-    for (vector<Line>::iterator line_it = func->lines.begin();
+-         line_it != func->lines.end(); ++line_it) {
+-      stream << hex
+-             << (line_it->address - load_address_) << " "
+-             << line_it->size << " "
+-             << dec
+-             << line_it->number << " "
+-             << line_it->file->source_id << endl;
+-      if (!stream.good())
+-        return ReportError();
+-    }
+-  }
+-
+-  // Write out 'PUBLIC' records.
+-  for (ExternSet::const_iterator extern_it = externs_.begin();
+-       extern_it != externs_.end(); ++extern_it) {
+-    Extern *ext = *extern_it;
+-    stream << "PUBLIC " << hex
+-           << (ext->address - load_address_) << " 0 "
+-           << ext->name << dec << endl;
+-    if (!stream.good())
+-      return ReportError();
+-  }
+-
+-  if (cfi) {
++  if (symbol_data != NO_CFI) {
+     // Write out 'STACK CFI INIT' and 'STACK CFI' records.
+     StackFrameEntrySet::const_iterator frame_it;
+     for (frame_it = stack_frame_entries_.begin();
+          frame_it != stack_frame_entries_.end(); ++frame_it) {
+       StackFrameEntry *entry = *frame_it;
+       stream << "STACK CFI INIT " << hex
+              << (entry->address - load_address_) << " "
+              << entry->size << " " << dec;
+diff --git a/src/common/module.h b/src/common/module.h
+--- a/src/common/module.h
++++ b/src/common/module.h
+@@ -39,16 +39,17 @@
+ #define COMMON_LINUX_MODULE_H__
+ 
+ #include <iostream>
+ #include <map>
+ #include <set>
+ #include <string>
+ #include <vector>
+ 
++#include "common/symbol_data.h"
+ #include "common/using_std_string.h"
+ #include "google_breakpad/common/breakpad_types.h"
+ 
+ namespace google_breakpad {
+ 
+ using std::set;
+ using std::vector;
+ using std::map;
+@@ -273,23 +274,25 @@
+   // source line data --- to -1.  We do this before writing out the
+   // symbol file, at which point we omit any unused files.
+   void AssignSourceIds();
+ 
+   // Call AssignSourceIds, and write this module to STREAM in the
+   // breakpad symbol format. Return true if all goes well, or false if
+   // an error occurs. This method writes out:
+   // - a header based on the values given to the constructor,
++  // If symbol_data is not ONLY_CFI then:
+   // - the source files added via FindFile,
+   // - the functions added via AddFunctions, each with its lines,
+   // - all public records,
+-  // - and if CFI is true, all CFI records.
++  // If symbol_data is not NO_CFI then:
++  // - all CFI records.
+   // Addresses in the output are all relative to the load address
+   // established by SetLoadAddress.
+-  bool Write(std::ostream &stream, bool cfi);
++  bool Write(std::ostream &stream, SymbolData symbol_data);
+ 
+  private:
+   // Report an error that has occurred writing the symbol file, using
+   // errno to find the appropriate cause.  Return false.
+   static bool ReportError();
+ 
+   // Write RULE_MAP to STREAM, in the form appropriate for 'STACK CFI'
+   // records, without a final newline. Return true if all goes well;
+diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
+--- a/src/common/module_unittest.cc
++++ b/src/common/module_unittest.cc
+@@ -65,17 +65,17 @@
+ #define MODULE_NAME "name with spaces"
+ #define MODULE_OS "os-name"
+ #define MODULE_ARCH "architecture"
+ #define MODULE_ID "id-string"
+ 
+ TEST(Write, Header) {
+   stringstream s;
+   Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n",
+                contents.c_str());
+ }
+ 
+ TEST(Write, OneLineFunc) {
+   stringstream s;
+   Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
+@@ -86,17 +86,17 @@
+   function->address = 0xe165bf8023b9d9abLL;
+   function->size = 0x1e4bb0eb1cbf5b09LL;
+   function->parameter_size = 0x772beee89114358aLL;
+   Module::Line line = { 0xe165bf8023b9d9abLL, 0x1e4bb0eb1cbf5b09LL,
+                         file, 67519080 };
+   function->lines.push_back(line);
+   m.AddFunction(function);
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FILE 0 file_name.cc\n"
+                "FUNC e165bf8023b9d9ab 1e4bb0eb1cbf5b09 772beee89114358a"
+                " function_name\n"
+                "e165bf8023b9d9ab 1e4bb0eb1cbf5b09 67519080 0\n",
+                contents.c_str());
+ }
+@@ -136,17 +136,17 @@
+     "do you like your blueeyed boy";
+   entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death";
+   m.AddStackFrameEntry(entry);
+ 
+   // Set the load address.  Doing this after adding all the data to
+   // the module must work fine.
+   m.SetLoadAddress(0x2ab698b0b6407073LL);
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FILE 0 filename-a.cc\n"
+                "FILE 1 filename-b.cc\n"
+                "FUNC 9410dc39a798c580 2922088f98d3f6fc e5e9aa008bd5f0d0"
+                " A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)\n"
+                "b03cc3106d47eb91 cf621b8d324d0eb 67519080 0\n"
+                "9410dc39a798c580 1c2be6d6c5af2611 41676901 1\n"
+@@ -192,17 +192,17 @@
+   EXPECT_NE(-1, vec[0]->source_id);
+   // Expect filename2 not to be used.
+   EXPECT_STREQ("filename2", vec[1]->name.c_str());
+   EXPECT_EQ(-1, vec[1]->source_id);
+   EXPECT_STREQ("filename3", vec[2]->name.c_str());
+   EXPECT_NE(-1, vec[2]->source_id);
+ 
+   stringstream s;
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FILE 0 filename1\n"
+                "FILE 1 filename3\n"
+                "FUNC 9b926d464f0b9384 4f524a4ba795e6a6 bbe8133a6641c9b7"
+                " function_name\n"
+                "595fa44ebacc1086 1e1e0191b066c5b3 137850127 0\n"
+                "401ce8c8a12d25e3 895751c41b8d2ce2 28113549 1\n",
+@@ -240,17 +240,17 @@
+     "do you like your blueeyed boy";
+   entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death";
+   m.AddStackFrameEntry(entry);
+ 
+   // Set the load address.  Doing this after adding all the data to
+   // the module must work fine.
+   m.SetLoadAddress(0x2ab698b0b6407073LL);
+ 
+-  m.Write(s, false);
++  m.Write(s, NO_CFI);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FILE 0 filename.cc\n"
+                "FUNC 9410dc39a798c580 2922088f98d3f6fc e5e9aa008bd5f0d0"
+                " A_FLIBBERTIJIBBET::a_will_o_the_wisp(a clown)\n"
+                "9410dc39a798c580 1c2be6d6c5af2611 41676901 0\n",
+                contents.c_str());
+ }
+@@ -274,17 +274,17 @@
+ 
+   // Put them in a vector.
+   vector<Module::Function *> vec;
+   vec.push_back(function1);
+   vec.push_back(function2);
+ 
+   m.AddFunctions(vec.begin(), vec.end());
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FUNC 2987743d0b35b13f b369db048deb3010 938e556cb5a79988"
+                " _and_void\n"
+                "FUNC d35024aa7ca7da5c 200b26e605f99071 f14ac4fed48c4a99"
+                " _without_form\n",
+                contents.c_str());
+ 
+@@ -326,17 +326,17 @@
+     "he will not see me stopping here";
+   entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
+     "his house is in";
+   entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
+     "I think I know";
+   m.AddStackFrameEntry(entry3);
+ 
+   // Check that Write writes STACK CFI records properly.
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229"
+                " .cfa: Whose woods are these\n"
+                "STACK CFI 36682fad3763ffff"
+                " .cfa: I think I know"
+                " stromboli: his house is in\n"
+                "STACK CFI 47ceb0f63c269d7f"
+@@ -402,17 +402,17 @@
+ 
+   // Two functions.
+   Module::Function *function1 = generate_duplicate_function("_without_form");
+   Module::Function *function2 = generate_duplicate_function("_without_form");
+ 
+   m.AddFunction(function1);
+   m.AddFunction(function2);
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FUNC d35402aac7a7ad5c 200b26e605f99071 f14ac4fed48c4a99"
+                " _without_form\n",
+                contents.c_str());
+ }
+ 
+ TEST(Construct, FunctionsWithSameAddress) {
+@@ -421,17 +421,17 @@
+ 
+   // Two functions.
+   Module::Function *function1 = generate_duplicate_function("_without_form");
+   Module::Function *function2 = generate_duplicate_function("_and_void");
+ 
+   m.AddFunction(function1);
+   m.AddFunction(function2);
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "FUNC d35402aac7a7ad5c 200b26e605f99071 f14ac4fed48c4a99"
+                " _and_void\n"
+                "FUNC d35402aac7a7ad5c 200b26e605f99071 f14ac4fed48c4a99"
+                " _without_form\n",
+                contents.c_str());
+ }
+@@ -448,17 +448,17 @@
+   extern1->name = "_abc";
+   Module::Extern *extern2 = new(Module::Extern);
+   extern2->address = 0xaaaa;
+   extern2->name = "_xyz";
+ 
+   m.AddExtern(extern1);
+   m.AddExtern(extern2);
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+ 
+   EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " "
+                MODULE_ID " " MODULE_NAME "\n"
+                "PUBLIC aaaa 0 _xyz\n"
+                "PUBLIC ffff 0 _abc\n",
+                contents.c_str());
+ }
+@@ -475,17 +475,17 @@
+   extern1->name = "_xyz";
+   Module::Extern *extern2 = new(Module::Extern);
+   extern2->address = 0xffff;
+   extern2->name = "_abc";
+ 
+   m.AddExtern(extern1);
+   m.AddExtern(extern2);
+ 
+-  m.Write(s, true);
++  m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+ 
+   EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " "
+                MODULE_ID " " MODULE_NAME "\n"
+                "PUBLIC ffff 0 _xyz\n",
+                contents.c_str());
+ }
+ 
+diff --git a/src/common/symbol_data.h b/src/common/symbol_data.h
+new file mode 100644
+--- /dev/null
++++ b/src/common/symbol_data.h
+@@ -0,0 +1,42 @@
++// -*- mode: c++ -*-
++
++// Copyright (c) 2013 Google Inc.
++// All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++//     * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++//     * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++//     * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++#ifndef COMMON_SYMBOL_DATA_H_
++#define COMMON_SYMBOL_DATA_H_
++
++// Control what data is used from the symbol file.
++enum SymbolData {
++  ALL_SYMBOL_DATA,
++  NO_CFI,
++  ONLY_CFI
++};
++
++#endif  // COMMON_SYMBOL_DATA_H_
+diff --git a/src/tools/linux/dump_syms/dump_syms.cc b/src/tools/linux/dump_syms/dump_syms.cc
+--- a/src/tools/linux/dump_syms/dump_syms.cc
++++ b/src/tools/linux/dump_syms/dump_syms.cc
+@@ -63,15 +63,16 @@
+   std::vector<string> debug_dirs;
+   binary = argv[binary_index];
+   for (int debug_dir_index = binary_index + 1;
+        debug_dir_index < argc;
+        ++debug_dir_index) {
+     debug_dirs.push_back(argv[debug_dir_index]);
+   }
+ 
+-  if (!WriteSymbolFile(binary, debug_dirs, cfi, std::cout)) {
++  SymbolData symbol_data = cfi ? ALL_SYMBOL_DATA : NO_CFI;
++  if (!WriteSymbolFile(binary, debug_dirs, symbol_data, std::cout)) {
+     fprintf(stderr, "Failed to write symbol file.\n");
+     return 1;
+   }
+ 
+   return 0;
+ }
+diff --git a/src/tools/mac/dump_syms/dump_syms_tool.mm b/src/tools/mac/dump_syms/dump_syms_tool.mm
+--- a/src/tools/mac/dump_syms/dump_syms_tool.mm
++++ b/src/tools/mac/dump_syms/dump_syms_tool.mm
+@@ -49,17 +49,17 @@
+   Options() : srcPath(), arch(), cfi(true) { }
+   NSString *srcPath;
+   const NXArchInfo *arch;
+   bool cfi;
+ };
+ 
+ //=============================================================================
+ static bool Start(const Options &options) {
+-  DumpSymbols dump_symbols;
++  DumpSymbols dump_symbols(options.cfi ? ALL_SYMBOL_DATA : NO_CFI);
+ 
+   if (!dump_symbols.Read(options.srcPath))
+     return false;
+ 
+   if (options.arch) {
+     if (!dump_symbols.SetArchitecture(options.arch->cputype,
+                                       options.arch->cpusubtype)) {
+       fprintf(stderr, "%s: no architecture '%s' is present in file.\n",
+@@ -81,17 +81,17 @@
+         else
+           fprintf(stderr, "unrecognized cpu type 0x%x, subtype 0x%x\n",
+                   arch->cputype, arch->cpusubtype);
+       }
+       return false;
+     }
+   }
+ 
+-  return dump_symbols.WriteSymbolFile(std::cout, options.cfi);
++  return dump_symbols.WriteSymbolFile(std::cout);
+ }
+ 
+ //=============================================================================
+ static void Usage(int argc, const char *argv[]) {
+   fprintf(stderr, "Output a Breakpad symbol file from a Mach-o file.\n");
+   fprintf(stderr, "Usage: %s [-a ARCHITECTURE] [-c] <Mach-o file>\n",
+           argv[0]);
+   fprintf(stderr, "\t-a: Architecture type [default: native, or whatever is\n");
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch
@@ -0,0 +1,6054 @@
+# HG changeset patch
+# Parent f98602ca29804c34e143d3fb337e6dde3e1c558c
+Change the representation of CFI rules to avoid postfix expressions in most cases
+Patch by Julian Seward <jseward@acm.org>
+
+diff --git a/Makefile.am b/Makefile.am
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -133,16 +133,17 @@
+ 	src/google_breakpad/processor/source_line_resolver_base.h \
+ 	src/google_breakpad/processor/source_line_resolver_interface.h \
+ 	src/google_breakpad/processor/stack_frame.h \
+ 	src/google_breakpad/processor/stack_frame_cpu.h \
+ 	src/google_breakpad/processor/stack_frame_symbolizer.h \
+ 	src/google_breakpad/processor/stackwalker.h \
+ 	src/google_breakpad/processor/symbol_supplier.h \
+ 	src/google_breakpad/processor/system_info.h \
++	src/common/module.cc \
+ 	src/processor/address_map-inl.h \
+ 	src/processor/address_map.h \
+ 	src/processor/basic_code_module.h \
+ 	src/processor/basic_code_modules.cc \
+ 	src/processor/basic_code_modules.h \
+ 	src/processor/basic_source_line_resolver_types.h \
+ 	src/processor/basic_source_line_resolver.cc \
+ 	src/processor/binarystream.h \
+@@ -555,30 +556,32 @@
+ 	src/testing/src/gmock-all.cc
+ src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
+ 	-I$(top_srcdir)/src \
+ 	-I$(top_srcdir)/src/testing/include \
+ 	-I$(top_srcdir)/src/testing/gtest/include \
+ 	-I$(top_srcdir)/src/testing/gtest \
+ 	-I$(top_srcdir)/src/testing
+ src_processor_basic_source_line_resolver_unittest_LDADD = \
++	src/common/module.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/pathname_stripper.o \
+ 	src/processor/logging.o \
+ 	src/processor/source_line_resolver_base.o \
+ 	src/processor/tokenize.o \
+ 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ src_processor_cfi_frame_info_unittest_SOURCES = \
+ 	src/processor/cfi_frame_info_unittest.cc \
+ 	src/testing/gtest/src/gtest-all.cc \
+ 	src/testing/gtest/src/gtest_main.cc \
+ 	src/testing/src/gmock-all.cc
+ src_processor_cfi_frame_info_unittest_LDADD = \
++	src/common/module.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/logging.o \
+ 	src/processor/pathname_stripper.o \
+ 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ src_processor_cfi_frame_info_unittest_CPPFLAGS = \
+ 	-I$(top_srcdir)/src \
+ 	-I$(top_srcdir)/src/testing/include \
+ 	-I$(top_srcdir)/src/testing/gtest/include \
+@@ -598,16 +601,17 @@
+ 	src/testing/src/gmock-all.cc
+ src_processor_exploitability_unittest_CPPFLAGS = \
+ 	-I$(top_srcdir)/src \
+ 	-I$(top_srcdir)/src/testing/include \
+ 	-I$(top_srcdir)/src/testing/gtest/include \
+ 	-I$(top_srcdir)/src/testing/gtest \
+ 	-I$(top_srcdir)/src/testing
+ src_processor_exploitability_unittest_LDADD = \
++	src/common/module.o \
+ 	src/processor/minidump_processor.o \
+ 	src/processor/process_state.o \
+ 	src/processor/disassembler_x86.o \
+ 	src/processor/exploitability.o \
+ 	src/processor/exploitability_win.o \
+ 	src/processor/basic_code_modules.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/call_stack.o \
+@@ -649,16 +653,17 @@
+ 	src/testing/src/gmock-all.cc
+ src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \
+ 	-I$(top_srcdir)/src \
+ 	-I$(top_srcdir)/src/testing/include \
+ 	-I$(top_srcdir)/src/testing/gtest/include \
+ 	-I$(top_srcdir)/src/testing/gtest \
+ 	-I$(top_srcdir)/src/testing
+ src_processor_fast_source_line_resolver_unittest_LDADD = \
++	src/common/module.o \
+ 	src/processor/fast_source_line_resolver.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/module_comparer.o \
+ 	src/processor/module_serializer.o \
+ 	src/processor/pathname_stripper.o \
+ 	src/processor/logging.o \
+ 	src/processor/source_line_resolver_base.o \
+@@ -686,16 +691,17 @@
+ 	src/testing/src/gmock-all.cc
+ src_processor_minidump_processor_unittest_CPPFLAGS = \
+ 	-I$(top_srcdir)/src \
+ 	-I$(top_srcdir)/src/testing/include \
+ 	-I$(top_srcdir)/src/testing/gtest/include \
+ 	-I$(top_srcdir)/src/testing/gtest \
+ 	-I$(top_srcdir)/src/testing
+ src_processor_minidump_processor_unittest_LDADD = \
++	src/common/module.o \
+ 	src/processor/basic_code_modules.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/call_stack.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/disassembler_x86.o \
+ 	src/processor/exploitability.o \
+ 	src/processor/exploitability_win.o \
+ 	src/processor/logging.o \
+@@ -799,16 +805,17 @@
+ 	src/processor/pathname_stripper_unittest.cc
+ src_processor_pathname_stripper_unittest_LDADD = \
+ 	src/processor/pathname_stripper.o \
+ 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ src_processor_postfix_evaluator_unittest_SOURCES = \
+ 	src/processor/postfix_evaluator_unittest.cc
+ src_processor_postfix_evaluator_unittest_LDADD = \
++	src/common/module.o \
+ 	src/processor/logging.o \
+ 	src/processor/pathname_stripper.o \
+ 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ src_processor_range_map_unittest_SOURCES = \
+ 	src/processor/range_map_unittest.cc
+ src_processor_range_map_unittest_LDADD = \
+ 	src/processor/logging.o \
+@@ -928,16 +935,17 @@
+ 	src/processor/basic_code_modules.o \
+ 	src/processor/logging.o \
+ 	src/processor/minidump.o \
+ 	src/processor/pathname_stripper.o
+ 
+ src_processor_minidump_stackwalk_SOURCES = \
+ 	src/processor/minidump_stackwalk.cc
+ src_processor_minidump_stackwalk_LDADD = \
++	src/common/module.o \
+ 	src/processor/basic_code_modules.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/binarystream.o \
+ 	src/processor/call_stack.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/disassembler_x86.o \
+ 	src/processor/exploitability.o \
+ 	src/processor/exploitability_win.o \
+diff --git a/Makefile.in b/Makefile.in
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -1,14 +1,14 @@
+-# Makefile.in generated by automake 1.11.1 from Makefile.am.
++# Makefile.in generated by automake 1.11.3 from Makefile.am.
+ # @configure_input@
+ 
+ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
+-# Inc.
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
++# Foundation, Inc.
+ # This Makefile.in is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+@@ -190,16 +190,22 @@
+   sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+   $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+     if (++n[$$2] == $(am__install_max)) \
+       { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+     END { for (dir in files) print dir, files[dir] }'
+ am__base_list = \
+   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__uninstall_files_from_dir = { \
++  test -z "$$files" \
++    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
++    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
++         $(am__cd) "$$dir" && rm -f $$files; }; \
++  }
+ am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+ 	"$(DESTDIR)$(docdir)"
+ LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
+ AR = ar
+ ARFLAGS = cru
+ src_client_linux_libbreakpad_client_a_AR = $(AR) $(ARFLAGS)
+ src_client_linux_libbreakpad_client_a_LIBADD =
+ am__src_client_linux_libbreakpad_client_a_SOURCES_DIST =  \
+@@ -261,18 +267,18 @@
+ 	src/google_breakpad/processor/source_line_resolver_base.h \
+ 	src/google_breakpad/processor/source_line_resolver_interface.h \
+ 	src/google_breakpad/processor/stack_frame.h \
+ 	src/google_breakpad/processor/stack_frame_cpu.h \
+ 	src/google_breakpad/processor/stack_frame_symbolizer.h \
+ 	src/google_breakpad/processor/stackwalker.h \
+ 	src/google_breakpad/processor/symbol_supplier.h \
+ 	src/google_breakpad/processor/system_info.h \
+-	src/processor/address_map-inl.h src/processor/address_map.h \
+-	src/processor/basic_code_module.h \
++	src/common/module.cc src/processor/address_map-inl.h \
++	src/processor/address_map.h src/processor/basic_code_module.h \
+ 	src/processor/basic_code_modules.cc \
+ 	src/processor/basic_code_modules.h \
+ 	src/processor/basic_source_line_resolver_types.h \
+ 	src/processor/basic_source_line_resolver.cc \
+ 	src/processor/binarystream.h src/processor/binarystream.cc \
+ 	src/processor/call_stack.cc src/processor/cfi_frame_info.cc \
+ 	src/processor/cfi_frame_info.h \
+ 	src/processor/contained_range_map-inl.h \
+@@ -322,17 +328,19 @@
+ 	src/processor/static_contained_range_map-inl.h \
+ 	src/processor/static_contained_range_map.h \
+ 	src/processor/static_map_iterator-inl.h \
+ 	src/processor/static_map_iterator.h \
+ 	src/processor/static_map-inl.h src/processor/static_map.h \
+ 	src/processor/static_range_map-inl.h \
+ 	src/processor/static_range_map.h src/processor/tokenize.cc \
+ 	src/processor/tokenize.h
+-@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = src/processor/basic_code_modules.$(OBJEXT) \
++@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.$(OBJEXT) \
++@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.$(OBJEXT) \
+@@ -620,17 +628,19 @@
+ am__src_processor_basic_source_line_resolver_unittest_SOURCES_DIST =  \
+ 	src/processor/basic_source_line_resolver_unittest.cc \
+ 	src/testing/gtest/src/gtest-all.cc \
+ 	src/testing/src/gmock-all.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_basic_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT)
+ src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_basic_source_line_resolver_unittest_OBJECTS)
+-@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES = src/processor/basic_source_line_resolver.o \
++@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
+ am__src_processor_binarystream_unittest_SOURCES_DIST =  \
+@@ -653,16 +663,17 @@
+ 	src/testing/src/gmock-all.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_cfi_frame_info_unittest_OBJECTS = src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT)
+ src_processor_cfi_frame_info_unittest_OBJECTS =  \
+ 	$(am_src_processor_cfi_frame_info_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
+ am__src_processor_contained_range_map_unittest_SOURCES_DIST =  \
+ 	src/processor/contained_range_map_unittest.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_contained_range_map_unittest_OBJECTS = src/processor/contained_range_map_unittest.$(OBJEXT)
+@@ -694,16 +705,17 @@
+ 	src/testing/src/gmock-all.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_exploitability_unittest_OBJECTS = src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT)
+ src_processor_exploitability_unittest_OBJECTS =  \
+ 	$(am_src_processor_exploitability_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@@ -726,17 +738,19 @@
+ am__src_processor_fast_source_line_resolver_unittest_SOURCES_DIST =  \
+ 	src/processor/fast_source_line_resolver_unittest.cc \
+ 	src/testing/gtest/src/gtest-all.cc \
+ 	src/testing/src/gmock-all.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_fast_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT)
+ src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fast_source_line_resolver_unittest_OBJECTS)
+-@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES = src/processor/fast_source_line_resolver.o \
++@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/module_serializer.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@@ -771,16 +785,17 @@
+ 	src/testing/gtest/src/gtest-all.cc \
+ 	src/testing/src/gmock-all.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
+ src_processor_minidump_processor_unittest_OBJECTS =  \
+ 	$(am_src_processor_minidump_processor_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@@ -801,16 +816,17 @@
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
+ am__src_processor_minidump_stackwalk_SOURCES_DIST =  \
+ 	src/processor/minidump_stackwalk.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_stackwalk_OBJECTS = src/processor/minidump_stackwalk.$(OBJEXT)
+ src_processor_minidump_stackwalk_OBJECTS =  \
+ 	$(am_src_processor_minidump_stackwalk_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@@ -862,16 +878,17 @@
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
+ am__src_processor_postfix_evaluator_unittest_SOURCES_DIST =  \
+ 	src/processor/postfix_evaluator_unittest.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_postfix_evaluator_unittest_OBJECTS = src/processor/postfix_evaluator_unittest.$(OBJEXT)
+ src_processor_postfix_evaluator_unittest_OBJECTS =  \
+ 	$(am_src_processor_postfix_evaluator_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_DEPENDENCIES =  \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
+ am__src_processor_range_map_unittest_SOURCES_DIST =  \
+ 	src/processor/range_map_unittest.cc
+ @DISABLE_PROCESSOR_FALSE@am_src_processor_range_map_unittest_OBJECTS = src/processor/range_map_unittest.$(OBJEXT)
+ src_processor_range_map_unittest_OBJECTS =  \
+@@ -1212,22 +1229,26 @@
+ ETAGS = etags
+ CTAGS = ctags
+ am__tty_colors = \
+ red=; grn=; lgn=; blu=; std=
+ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ distdir = $(PACKAGE)-$(VERSION)
+ top_distdir = $(distdir)
+ am__remove_distdir = \
+-  { test ! -d "$(distdir)" \
+-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+-         && rm -fr "$(distdir)"; }; }
++  if test -d "$(distdir)"; then \
++    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++      && rm -rf "$(distdir)" \
++      || { sleep 5 && rm -rf "$(distdir)"; }; \
++  else :; fi
+ DIST_ARCHIVES = $(distdir).tar.gz
+ GZIP_ENV = --best
+ distuninstallcheck_listfiles = find . -type f -print
++am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
++  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+ distcleancheck_listfiles = find . -type f -print
+ ACLOCAL = @ACLOCAL@
+ AMTAR = @AMTAR@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+ AUTOMAKE = @AUTOMAKE@
+ AWK = @AWK@
+ CC = @CC@
+@@ -1383,16 +1404,17 @@
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/source_line_resolver_base.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/source_line_resolver_interface.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame_cpu.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame_symbolizer.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stackwalker.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/symbol_supplier.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/system_info.h \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/address_map-inl.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/address_map.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_module.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver_types.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.h \
+@@ -1715,31 +1737,33 @@
+ @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+ @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_SOURCES = \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info_unittest.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_CPPFLAGS = \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+@@ -1763,16 +1787,17 @@
+ @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_CPPFLAGS = \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@@ -1818,16 +1843,17 @@
+ @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/module_serializer.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
+@@ -1859,16 +1885,17 @@
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_CPPFLAGS = \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+ @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+@@ -1984,16 +2011,17 @@
+ @DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_SOURCES = \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator_unittest.cc
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_SOURCES = \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/range_map_unittest.cc
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_LDADD = \
+@@ -2122,16 +2150,17 @@
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_SOURCES = \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk.cc
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_LDADD = \
++@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
+@@ -2289,17 +2318,17 @@
+ 	src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym \
+ 	src/tools/windows/symupload/symupload.cc \
+ 	src/tools/windows/symupload/symupload.vcproj
+ 
+ all: all-am
+ 
+ .SUFFIXES:
+ .SUFFIXES: .S .c .cc .o .obj
+-am--refresh:
++am--refresh: Makefile
+ 	@:
+ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+ 	@for dep in $?; do \
+ 	  case '$(am__configure_deps)' in \
+ 	    *$$dep*) \
+ 	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ 	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ 		&& exit 0; \
+@@ -2325,20 +2354,18 @@
+ 
+ $(top_srcdir)/configure:  $(am__configure_deps)
+ 	$(am__cd) $(srcdir) && $(AUTOCONF)
+ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+ 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+ $(am__aclocal_m4_deps):
+ 
+ src/config.h: src/stamp-h1
+-	@if test ! -f $@; then \
+-	  rm -f src/stamp-h1; \
+-	  $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; \
+-	else :; fi
++	@if test ! -f $@; then rm -f src/stamp-h1; else :; fi
++	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; else :; fi
+ 
+ src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status
+ 	@rm -f src/stamp-h1
+ 	cd $(top_builddir) && $(SHELL) ./config.status src/config.h
+ $(top_srcdir)/src/config.h.in:  $(am__configure_deps) 
+ 	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ 	rm -f src/stamp-h1
+ 	touch $@
+@@ -2366,19 +2393,17 @@
+ 	    ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
+ 	  else :; fi; \
+ 	done
+ 
+ uninstall-libLIBRARIES:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+ 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
+-	cd "$(DESTDIR)$(libdir)" && rm -f $$files
++	dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir)
+ 
+ clean-libLIBRARIES:
+ 	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+ 
+ clean-noinstLIBRARIES:
+ 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+ src/client/linux/crash_generation/$(am__dirstamp):
+ 	@$(MKDIR_P) src/client/linux/crash_generation
+@@ -2477,20 +2502,22 @@
+ 	@$(MKDIR_P) src/common/android/$(DEPDIR)
+ 	@: > src/common/android/$(DEPDIR)/$(am__dirstamp)
+ src/common/android/breakpad_getcontext.$(OBJEXT):  \
+ 	src/common/android/$(am__dirstamp) \
+ 	src/common/android/$(DEPDIR)/$(am__dirstamp)
+ src/client/linux/$(am__dirstamp):
+ 	@$(MKDIR_P) src/client/linux
+ 	@: > src/client/linux/$(am__dirstamp)
+-src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
++src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) $(EXTRA_src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
+ 	-rm -f src/client/linux/libbreakpad_client.a
+ 	$(src_client_linux_libbreakpad_client_a_AR) src/client/linux/libbreakpad_client.a $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_LIBADD)
+ 	$(RANLIB) src/client/linux/libbreakpad_client.a
++src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \
++	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/$(am__dirstamp):
+ 	@$(MKDIR_P) src/processor
+ 	@: > src/processor/$(am__dirstamp)
+ src/processor/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/processor/$(DEPDIR)
+ 	@: > src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/processor/basic_code_modules.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+@@ -2559,17 +2586,17 @@
+ src/processor/stackwalker_x86.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/processor/tokenize.$(OBJEXT): src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/$(am__dirstamp):
+ 	@$(MKDIR_P) src
+ 	@: > src/$(am__dirstamp)
+-src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
++src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) $(EXTRA_src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
+ 	-rm -f src/libbreakpad.a
+ 	$(src_libbreakpad_a_AR) src/libbreakpad.a $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_LIBADD)
+ 	$(RANLIB) src/libbreakpad.a
+ src/third_party/libdisasm/$(am__dirstamp):
+ 	@$(MKDIR_P) src/third_party/libdisasm
+ 	@: > src/third_party/libdisasm/$(am__dirstamp)
+ src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/third_party/libdisasm/$(DEPDIR)
+@@ -2611,17 +2638,17 @@
+ 	src/third_party/libdisasm/$(am__dirstamp) \
+ 	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+ src/third_party/libdisasm/x86_misc.$(OBJEXT):  \
+ 	src/third_party/libdisasm/$(am__dirstamp) \
+ 	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+ src/third_party/libdisasm/x86_operand_list.$(OBJEXT):  \
+ 	src/third_party/libdisasm/$(am__dirstamp) \
+ 	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
+-src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
++src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) $(EXTRA_src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
+ 	-rm -f src/third_party/libdisasm/libdisasm.a
+ 	$(src_third_party_libdisasm_libdisasm_a_AR) src/third_party/libdisasm/libdisasm.a $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_LIBADD)
+ 	$(RANLIB) src/third_party/libdisasm/libdisasm.a
+ install-binPROGRAMS: $(bin_PROGRAMS)
+ 	@$(NORMAL_INSTALL)
+ 	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ 	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ 	for p in $$list; do echo "$$p $$p"; done | \
+@@ -2658,17 +2685,17 @@
+ clean-binPROGRAMS:
+ 	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ 
+ clean-checkPROGRAMS:
+ 	-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+ 
+ clean-noinstPROGRAMS:
+ 	-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+-src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp)
++src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) $(EXTRA_src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp)
+ 	@rm -f src/client/linux/linux_client_unittest$(EXEEXT)
+ 	$(src_client_linux_linux_client_unittest_LINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_LDADD) $(LIBS)
+ src/client/linux/handler/src_client_linux_linux_client_unittest_shlib-exception_handler_unittest.$(OBJEXT):  \
+ 	src/client/linux/handler/$(am__dirstamp) \
+ 	src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
+ src/client/linux/minidump_writer/src_client_linux_linux_client_unittest_shlib-directory_reader_unittest.$(OBJEXT):  \
+ 	src/client/linux/minidump_writer/$(am__dirstamp) \
+ 	src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
+@@ -2751,23 +2778,23 @@
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext.$(OBJEXT):  \
+ 	src/common/android/$(am__dirstamp) \
+ 	src/common/android/$(DEPDIR)/$(am__dirstamp)
+ src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext_unittest.$(OBJEXT):  \
+ 	src/common/android/$(am__dirstamp) \
+ 	src/common/android/$(DEPDIR)/$(am__dirstamp)
+-src/client/linux/linux_client_unittest_shlib$(EXEEXT): $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) src/client/linux/$(am__dirstamp)
++src/client/linux/linux_client_unittest_shlib$(EXEEXT): $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) $(EXTRA_src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) src/client/linux/$(am__dirstamp)
+ 	@rm -f src/client/linux/linux_client_unittest_shlib$(EXEEXT)
+ 	$(src_client_linux_linux_client_unittest_shlib_LINK) $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_LDADD) $(LIBS)
+ src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT):  \
+ 	src/client/linux/minidump_writer/$(am__dirstamp) \
+ 	src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
+-src/client/linux/linux_dumper_unittest_helper$(EXEEXT): $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) src/client/linux/$(am__dirstamp)
++src/client/linux/linux_dumper_unittest_helper$(EXEEXT): $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) $(EXTRA_src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) src/client/linux/$(am__dirstamp)
+ 	@rm -f src/client/linux/linux_dumper_unittest_helper$(EXEEXT)
+ 	$(src_client_linux_linux_dumper_unittest_helper_LINK) $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_LDADD) $(LIBS)
+ src/common/src_common_dumper_unittest-byte_cursor_unittest.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/src_common_dumper_unittest-dwarf_cfi_to_module.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+@@ -2901,17 +2928,17 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_common_dumper_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_common_dumper_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/common/dumper_unittest$(EXEEXT): $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
++src/common/dumper_unittest$(EXEEXT): $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_DEPENDENCIES) $(EXTRA_src_common_dumper_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
+ 	@rm -f src/common/dumper_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_LDADD) $(LIBS)
+ src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+@@ -2919,145 +2946,145 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_common_test_assembler_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_common_test_assembler_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/common/test_assembler_unittest$(EXEEXT): $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
++src/common/test_assembler_unittest$(EXEEXT): $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_DEPENDENCIES) $(EXTRA_src_common_test_assembler_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
+ 	@rm -f src/common/test_assembler_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_LDADD) $(LIBS)
+ src/processor/address_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/address_map_unittest$(EXEEXT): $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/address_map_unittest$(EXEEXT): $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/address_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/basic_source_line_resolver_unittest$(EXEEXT): $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/basic_source_line_resolver_unittest$(EXEEXT): $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) $(EXTRA_src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/basic_source_line_resolver_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_binarystream_unittest-binarystream_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_binarystream_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_binarystream_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/binarystream_unittest$(EXEEXT): $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/binarystream_unittest$(EXEEXT): $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_DEPENDENCIES) $(EXTRA_src_processor_binarystream_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/binarystream_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/cfi_frame_info_unittest$(EXEEXT): $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/cfi_frame_info_unittest$(EXEEXT): $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_DEPENDENCIES) $(EXTRA_src_processor_cfi_frame_info_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/cfi_frame_info_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_LDADD) $(LIBS)
+ src/processor/contained_range_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/contained_range_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) $(EXTRA_src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/disassembler_x86_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) $(EXTRA_src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/exploitability_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) $(EXTRA_src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/fast_source_line_resolver_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) $(EXTRA_src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/map_serializers_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_LDADD) $(LIBS)
+ src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) $(EXTRA_src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/minidump_dump$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_LDADD) $(LIBS)
+ src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) $(EXTRA_src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/minidump_processor_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_LDADD) $(LIBS)
+ src/processor/minidump_stackwalk.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) $(EXTRA_src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/minidump_stackwalk$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_LDADD) $(LIBS)
+ src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/src_processor_minidump_unittest-minidump_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+@@ -3068,35 +3095,35 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/minidump_unittest$(EXEEXT): $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/minidump_unittest$(EXEEXT): $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_DEPENDENCIES) $(EXTRA_src_processor_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/minidump_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_LDADD) $(LIBS)
+ src/processor/pathname_stripper_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/pathname_stripper_unittest$(EXEEXT): $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/pathname_stripper_unittest$(EXEEXT): $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_DEPENDENCIES) $(EXTRA_src_processor_pathname_stripper_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/pathname_stripper_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_LDADD) $(LIBS)
+ src/processor/postfix_evaluator_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/postfix_evaluator_unittest$(EXEEXT): $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/postfix_evaluator_unittest$(EXEEXT): $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_DEPENDENCIES) $(EXTRA_src_processor_postfix_evaluator_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/postfix_evaluator_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_LDADD) $(LIBS)
+ src/processor/range_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/range_map_unittest$(EXEEXT): $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/range_map_unittest$(EXEEXT): $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/range_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_LDADD) $(LIBS)
+ src/common/src_processor_stackwalker_amd64_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/src_processor_stackwalker_amd64_unittest-stackwalker_amd64_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+@@ -3104,17 +3131,17 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/stackwalker_amd64_unittest$(EXEEXT): $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/stackwalker_amd64_unittest$(EXEEXT): $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_amd64_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/stackwalker_amd64_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_LDADD) $(LIBS)
+ src/common/src_processor_stackwalker_arm_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/src_processor_stackwalker_arm_unittest-stackwalker_arm_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+@@ -3122,23 +3149,23 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/stackwalker_arm_unittest$(EXEEXT): $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/stackwalker_arm_unittest$(EXEEXT): $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_arm_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/stackwalker_arm_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_LDADD) $(LIBS)
+ src/processor/stackwalker_selftest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_selftest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/stackwalker_selftest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_LDADD) $(LIBS)
+ src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/src_processor_stackwalker_x86_unittest-stackwalker_x86_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+@@ -3146,65 +3173,65 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/stackwalker_x86_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/static_address_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/static_contained_range_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/static_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_LDADD) $(LIBS)
+ src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+-src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/static_range_map_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_LDADD) $(LIBS)
+ src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+@@ -3215,17 +3242,17 @@
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+ src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT):  \
+ 	src/processor/$(am__dirstamp) \
+ 	src/processor/$(DEPDIR)/$(am__dirstamp)
+-src/processor/synth_minidump_unittest$(EXEEXT): $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
++src/processor/synth_minidump_unittest$(EXEEXT): $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_DEPENDENCIES) $(EXTRA_src_processor_synth_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
+ 	@rm -f src/processor/synth_minidump_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_LDADD) $(LIBS)
+ src/tools/linux/core2md/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/core2md
+ 	@: > src/tools/linux/core2md/$(am__dirstamp)
+ src/tools/linux/core2md/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/core2md/$(DEPDIR)
+ 	@: > src/tools/linux/core2md/$(DEPDIR)/$(am__dirstamp)
+@@ -3233,29 +3260,27 @@
+ 	src/tools/linux/core2md/$(am__dirstamp) \
+ 	src/tools/linux/core2md/$(DEPDIR)/$(am__dirstamp)
+ src/client/linux/minidump_writer/linux_core_dumper.$(OBJEXT):  \
+ 	src/client/linux/minidump_writer/$(am__dirstamp) \
+ 	src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
+ src/common/linux/elf_core_dump.$(OBJEXT):  \
+ 	src/common/linux/$(am__dirstamp) \
+ 	src/common/linux/$(DEPDIR)/$(am__dirstamp)
+-src/tools/linux/core2md/core2md$(EXEEXT): $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_DEPENDENCIES) src/tools/linux/core2md/$(am__dirstamp)
++src/tools/linux/core2md/core2md$(EXEEXT): $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_DEPENDENCIES) $(EXTRA_src_tools_linux_core2md_core2md_DEPENDENCIES) src/tools/linux/core2md/$(am__dirstamp)
+ 	@rm -f src/tools/linux/core2md/core2md$(EXEEXT)
+ 	$(CXXLINK) $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_LDADD) $(LIBS)
+ src/common/dwarf_cfi_to_module.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/dwarf_cu_to_module.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/dwarf_line_to_module.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/language.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+-src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \
+-	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/stabs_reader.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/stabs_to_module.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/dwarf/bytereader.$(OBJEXT):  \
+ 	src/common/dwarf/$(am__dirstamp) \
+ 	src/common/dwarf/$(DEPDIR)/$(am__dirstamp)
+ src/common/dwarf/dwarf2diehandler.$(OBJEXT):  \
+@@ -3274,65 +3299,65 @@
+ 	@$(MKDIR_P) src/tools/linux/dump_syms
+ 	@: > src/tools/linux/dump_syms/$(am__dirstamp)
+ src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/dump_syms/$(DEPDIR)
+ 	@: > src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp)
+ src/tools/linux/dump_syms/dump_syms.$(OBJEXT):  \
+ 	src/tools/linux/dump_syms/$(am__dirstamp) \
+ 	src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp)
+-src/tools/linux/dump_syms/dump_syms$(EXEEXT): $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) src/tools/linux/dump_syms/$(am__dirstamp)
++src/tools/linux/dump_syms/dump_syms$(EXEEXT): $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) $(EXTRA_src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) src/tools/linux/dump_syms/$(am__dirstamp)
+ 	@rm -f src/tools/linux/dump_syms/dump_syms$(EXEEXT)
+ 	$(CXXLINK) $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_LDADD) $(LIBS)
+ src/tools/linux/md2core/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/md2core
+ 	@: > src/tools/linux/md2core/$(am__dirstamp)
+ src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/md2core/$(DEPDIR)
+ 	@: > src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp)
+ src/tools/linux/md2core/minidump-2-core.$(OBJEXT):  \
+ 	src/tools/linux/md2core/$(am__dirstamp) \
+ 	src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp)
+-src/tools/linux/md2core/minidump-2-core$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
++src/tools/linux/md2core/minidump-2-core$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) $(EXTRA_src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
+ 	@rm -f src/tools/linux/md2core/minidump-2-core$(EXEEXT)
+ 	$(CXXLINK) $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_LDADD) $(LIBS)
+ src/testing/gtest/src/src_tools_linux_md2core_minidump_2_core_unittest-gtest-all.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/gtest/src/src_tools_linux_md2core_minidump_2_core_unittest-gtest_main.$(OBJEXT):  \
+ 	src/testing/gtest/src/$(am__dirstamp) \
+ 	src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+ src/testing/src/src_tools_linux_md2core_minidump_2_core_unittest-gmock-all.$(OBJEXT):  \
+ 	src/testing/src/$(am__dirstamp) \
+ 	src/testing/src/$(DEPDIR)/$(am__dirstamp)
+ src/tools/linux/md2core/src_tools_linux_md2core_minidump_2_core_unittest-minidump_memory_range_unittest.$(OBJEXT):  \
+ 	src/tools/linux/md2core/$(am__dirstamp) \
+ 	src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp)
+-src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
++src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) $(EXTRA_src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
+ 	@rm -f src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT)
+ 	$(CXXLINK) $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_LDADD) $(LIBS)
+ src/common/linux/http_upload.$(OBJEXT):  \
+ 	src/common/linux/$(am__dirstamp) \
+ 	src/common/linux/$(DEPDIR)/$(am__dirstamp)
+ src/tools/linux/symupload/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/symupload
+ 	@: > src/tools/linux/symupload/$(am__dirstamp)
+ src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp):
+ 	@$(MKDIR_P) src/tools/linux/symupload/$(DEPDIR)
+ 	@: > src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp)
+ src/tools/linux/symupload/minidump_upload.$(OBJEXT):  \
+ 	src/tools/linux/symupload/$(am__dirstamp) \
+ 	src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp)
+-src/tools/linux/symupload/minidump_upload$(EXEEXT): $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
++src/tools/linux/symupload/minidump_upload$(EXEEXT): $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_DEPENDENCIES) $(EXTRA_src_tools_linux_symupload_minidump_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
+ 	@rm -f src/tools/linux/symupload/minidump_upload$(EXEEXT)
+ 	$(CXXLINK) $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_LDADD) $(LIBS)
+ src/tools/linux/symupload/sym_upload.$(OBJEXT):  \
+ 	src/tools/linux/symupload/$(am__dirstamp) \
+ 	src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp)
+-src/tools/linux/symupload/sym_upload$(EXEEXT): $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
++src/tools/linux/symupload/sym_upload$(EXEEXT): $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_DEPENDENCIES) $(EXTRA_src_tools_linux_symupload_sym_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
+ 	@rm -f src/tools/linux/symupload/sym_upload$(EXEEXT)
+ 	$(CXXLINK) $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_LDADD) $(LIBS)
+ 
+ mostlyclean-compile:
+ 	-rm -f *.$(OBJEXT)
+ 	-rm -f src/client/linux/crash_generation/crash_generation_client.$(OBJEXT)
+ 	-rm -f src/client/linux/crash_generation/crash_generation_server.$(OBJEXT)
+ 	-rm -f src/client/linux/handler/exception_handler.$(OBJEXT)
+@@ -5859,19 +5884,17 @@
+ 	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
+ 	  $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+ 	done
+ 
+ uninstall-dist_docDATA:
+ 	@$(NORMAL_UNINSTALL)
+ 	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+ 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+-	test -n "$$files" || exit 0; \
+-	echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
+-	cd "$(DESTDIR)$(docdir)" && rm -f $$files
++	dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+ 
+ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ 	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ 	unique=`for i in $$list; do \
+ 	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ 	  done | \
+ 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+@@ -5996,24 +6019,25 @@
+ 	  report=""; \
+ 	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ 	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+ 	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ 	      dashes="$$report"; \
+ 	  fi; \
+ 	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+ 	  if test "$$failed" -eq 0; then \
+-	    echo "$$grn$$dashes"; \
++	    col="$$grn"; \
+ 	  else \
+-	    echo "$$red$$dashes"; \
++	    col="$$red"; \
+ 	  fi; \
+-	  echo "$$banner"; \
+-	  test -z "$$skipped" || echo "$$skipped"; \
+-	  test -z "$$report" || echo "$$report"; \
+-	  echo "$$dashes$$std"; \
++	  echo "$${col}$$dashes$${std}"; \
++	  echo "$${col}$$banner$${std}"; \
++	  test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
++	  test -z "$$report" || echo "$${col}$$report$${std}"; \
++	  echo "$${col}$$dashes$${std}"; \
+ 	  test "$$failed" -eq 0; \
+ 	else :; fi
+ 
+ distdir: $(DISTFILES)
+ 	$(am__remove_distdir)
+ 	test -d "$(distdir)" || mkdir "$(distdir)"
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+@@ -6051,25 +6075,29 @@
+ 	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ 	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ 	|| chmod -R a+r "$(distdir)"
+ dist-gzip: distdir
+ 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ 	$(am__remove_distdir)
+ 
+ dist-bzip2: distdir
+-	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
++	$(am__remove_distdir)
++
++dist-lzip: distdir
++	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ 	$(am__remove_distdir)
+ 
+ dist-lzma: distdir
+ 	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ 	$(am__remove_distdir)
+ 
+ dist-xz: distdir
+-	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
++	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ 	$(am__remove_distdir)
+ 
+ dist-tarZ: distdir
+ 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ 	$(am__remove_distdir)
+ 
+ dist-shar: distdir
+ 	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+@@ -6090,16 +6118,18 @@
+ distcheck: dist
+ 	case '$(DIST_ARCHIVES)' in \
+ 	*.tar.gz*) \
+ 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ 	*.tar.bz2*) \
+ 	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ 	*.tar.lzma*) \
+ 	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
++	*.tar.lz*) \
++	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ 	*.tar.xz*) \
+ 	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ 	*.tar.Z*) \
+ 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ 	*.shar.gz*) \
+ 	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ 	*.zip*) \
+ 	  unzip $(distdir).zip ;;\
+@@ -6109,16 +6139,17 @@
+ 	mkdir $(distdir)/_inst
+ 	chmod a-w $(distdir)
+ 	test -d $(distdir)/_build || exit 0; \
+ 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ 	  && am__cwd=`pwd` \
+ 	  && $(am__cd) $(distdir)/_build \
+ 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ 	    $(DISTCHECK_CONFIGURE_FLAGS) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) check \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) install \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ 	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+@@ -6137,18 +6168,26 @@
+ 	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ 	  && cd "$$am__cwd" \
+ 	  || exit 1
+ 	$(am__remove_distdir)
+ 	@(echo "$(distdir) archives ready for distribution: "; \
+ 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+ distuninstallcheck:
+-	@$(am__cd) '$(distuninstallcheck_dir)' \
+-	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
++	@test -n '$(distuninstallcheck_dir)' || { \
++	  echo 'ERROR: trying to run $@ with an empty' \
++	       '$$(distuninstallcheck_dir)' >&2; \
++	  exit 1; \
++	}; \
++	$(am__cd) '$(distuninstallcheck_dir)' || { \
++	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
++	  exit 1; \
++	}; \
++	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ 	   || { echo "ERROR: files left after uninstall:" ; \
+ 	        if test -n "$(DESTDIR)"; then \
+ 	          echo "  (check DESTDIR support)"; \
+ 	        fi ; \
+ 	        $(distuninstallcheck_listfiles) ; \
+ 	        exit 1; } >&2
+ distcleancheck: distclean
+ 	@if test '$(srcdir)' = . ; then \
+@@ -6173,20 +6212,25 @@
+ install-data: install-data-am
+ uninstall: uninstall-am
+ 
+ install-am: all-am
+ 	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+ 
+ installcheck: installcheck-am
+ install-strip:
+-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+-	  `test -z '$(STRIP)' || \
+-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++	if test -z '$(STRIP)'; then \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	      install; \
++	else \
++	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
++	fi
+ mostlyclean-generic:
+ 
+ clean-generic:
+ 
+ distclean-generic:
+ 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ 	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ 	-rm -f src/$(am__dirstamp)
+@@ -6308,18 +6352,18 @@
+ uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \
+ 	uninstall-libLIBRARIES
+ 
+ .MAKE: check-am install-am install-strip
+ 
+ .PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
+ 	clean clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
+ 	clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
+-	ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
+-	dist-tarZ dist-xz dist-zip distcheck distclean \
++	ctags dist dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma \
++	dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
+ 	distclean-compile distclean-generic distclean-hdr \
+ 	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ 	dvi-am html html-am info info-am install install-am \
+ 	install-binPROGRAMS install-data install-data-am \
+ 	install-dist_docDATA install-dvi install-dvi-am install-exec \
+ 	install-exec-am install-html install-html-am install-info \
+ 	install-info-am install-libLIBRARIES install-man install-pdf \
+ 	install-pdf-am install-ps install-ps-am install-strip \
+diff --git a/aclocal.m4 b/aclocal.m4
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -1,61 +1,65 @@
+-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
++# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
+ 
+ # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
++# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
++# Inc.
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ # PARTICULAR PURPOSE.
+ 
+ m4_ifndef([AC_AUTOCONF_VERSION],
+   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
+-[m4_warning([this file was generated for autoconf 2.65.
++m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
++[m4_warning([this file was generated for autoconf 2.68.
+ You have another version of autoconf.  It may work, but is not guaranteed to.
+ If you have problems, you may need to regenerate the build system entirely.
+ To do so, use the procedure documented by the package, typically `autoreconf'.])])
+ 
+-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
++# Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
++# serial 1
++
+ # AM_AUTOMAKE_VERSION(VERSION)
+ # ----------------------------
+ # Automake X.Y traces this macro to ensure aclocal.m4 has been
+ # generated from the m4 files accompanying Automake X.Y.
+ # (This private macro should not be called outside this file.)
+ AC_DEFUN([AM_AUTOMAKE_VERSION],
+ [am__api_version='1.11'
+ dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+ dnl require some minimum version.  Point them to the right macro.
+-m4_if([$1], [1.11.1], [],
++m4_if([$1], [1.11.3], [],
+       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+ ])
+ 
+ # _AM_AUTOCONF_VERSION(VERSION)
+ # -----------------------------
+ # aclocal traces this macro to find the Autoconf version.
+ # This is a private macro too.  Using m4_define simplifies
+ # the logic in aclocal, which can simply ignore this definition.
+ m4_define([_AM_AUTOCONF_VERSION], [])
+ 
+ # AM_SET_CURRENT_AUTOMAKE_VERSION
+ # -------------------------------
+ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+ # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+ AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+-[AM_AUTOMAKE_VERSION([1.11.1])dnl
++[AM_AUTOMAKE_VERSION([1.11.3])dnl
+ m4_ifndef([AC_AUTOCONF_VERSION],
+   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+ 
+ # Figure out how to run the assembler.                      -*- Autoconf -*-
+ 
+ # Copyright (C) 2001, 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+ #
+@@ -74,22 +78,24 @@
+ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+ AC_ARG_VAR([CCAS],      [assembler compiler command (defaults to CC)])
+ AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+ ])
+ 
+ # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
++# serial 1
++
+ # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+ # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+ # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+ #
+ # Of course, Automake must honor this variable whenever it calls a
+ # tool from the auxiliary directory.  The problem is that $srcdir (and
+ # therefore $ac_aux_dir as well) can be either absolute or relative,
+ # depending on how configure is run.  This is pretty annoying, since
+@@ -161,24 +167,24 @@
+   $1_FALSE=
+ fi
+ AC_CONFIG_COMMANDS_PRE(
+ [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+   AC_MSG_ERROR([[conditional "$1" was never defined.
+ Usually this means the macro was only invoked conditionally.]])
+ fi])])
+ 
+-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+-# Free Software Foundation, Inc.
++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
++# 2010, 2011 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 10
++# serial 12
+ 
+ # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+ # written in clear, in which case automake, when reading aclocal.m4,
+ # will think it sees a *use*, and therefore will trigger all it's
+ # C support machinery.  Also note that it means that autoscan, seeing
+ # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+ 
+ 
+@@ -208,16 +214,17 @@
+ AC_CACHE_CHECK([dependency style of $depcc],
+                [am_cv_$1_dependencies_compiler_type],
+ [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -272,17 +279,17 @@
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+       # This compiler won't grok `-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+@@ -337,20 +344,23 @@
+ # ------------
+ AC_DEFUN([AM_DEP_TRACK],
+ [AC_ARG_ENABLE(dependency-tracking,
+ [  --disable-dependency-tracking  speeds up one-time build
+   --enable-dependency-tracking   do not reject slow dependency extractors])
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
++  am__nodep='_no'
+ fi
+ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+ AC_SUBST([AMDEPBACKSLASH])dnl
+ _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
++AC_SUBST([am__nodep])dnl
++_AM_SUBST_NOTMAKE([am__nodep])dnl
+ ])
+ 
+ # Generate code to set up dependency tracking.              -*- Autoconf -*-
+ 
+ # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+ # Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+@@ -574,22 +584,25 @@
+     $_am_arg | $_am_arg:* )
+       break ;;
+     * )
+       _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+   esac
+ done
+ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+ 
+-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
++# Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
++# serial 1
++
+ # AM_PROG_INSTALL_SH
+ # ------------------
+ # Define $install_sh.
+ AC_DEFUN([AM_PROG_INSTALL_SH],
+ [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+ if test x"${install_sh}" != xset; then
+   case $am_aux_dir in
+   *\ * | *\	*)
+@@ -746,22 +759,25 @@
+ if eval "$MISSING --run true"; then
+   am_missing_run="$MISSING --run "
+ else
+   am_missing_run=
+   AC_MSG_WARN([`missing' script is too old or missing])
+ fi
+ ])
+ 
+-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
++# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
++# Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
++# serial 1
++
+ # AM_PROG_MKDIR_P
+ # ---------------
+ # Check for `mkdir -p'.
+ AC_DEFUN([AM_PROG_MKDIR_P],
+ [AC_PREREQ([2.60])dnl
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+ dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+ dnl while keeping a definition of mkdir_p for backward compatibility.
+@@ -774,53 +790,56 @@
+ case $mkdir_p in
+   [[\\/$]]* | ?:[[\\/]]*) ;;
+   */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+ esac
+ ])
+ 
+ # Helper functions for option handling.                     -*- Autoconf -*-
+ 
+-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
++# Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 4
++# serial 5
+ 
+ # _AM_MANGLE_OPTION(NAME)
+ # -----------------------
+ AC_DEFUN([_AM_MANGLE_OPTION],
+ [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+ 
+ # _AM_SET_OPTION(NAME)
+-# ------------------------------
++# --------------------
+ # Set option NAME.  Presently that only means defining a flag for this option.
+ AC_DEFUN([_AM_SET_OPTION],
+ [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+ 
+ # _AM_SET_OPTIONS(OPTIONS)
+-# ----------------------------------
++# ------------------------
+ # OPTIONS is a space-separated list of Automake options.
+ AC_DEFUN([_AM_SET_OPTIONS],
+ [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+ 
+ # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+ # -------------------------------------------
+ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+ AC_DEFUN([_AM_IF_OPTION],
+ [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+ 
+-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
++# serial 1
++
+ # AM_RUN_LOG(COMMAND)
+ # -------------------
+ # Run COMMAND, save the exit status in ac_status, and log it.
+ # (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+ AC_DEFUN([AM_RUN_LOG],
+ [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+    ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+    ac_status=$?
+@@ -887,22 +906,24 @@
+    # Ok.
+    :
+ else
+    AC_MSG_ERROR([newly created file is older than distributed files!
+ Check your system clock])
+ fi
+ AC_MSG_RESULT(yes)])
+ 
+-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
++# serial 1
++
+ # AM_PROG_INSTALL_STRIP
+ # ---------------------
+ # One issue with vendor `install' (even GNU) is that you can't
+ # specify the program used to strip binaries.  This is especially
+ # annoying in cross-compiling environments, where the build's strip
+ # is unlikely to handle the host's binaries.
+ # Fortunately install-sh will honor a STRIPPROG variable, so we
+ # always use install-sh in `make install-strip', and initialize
+@@ -915,38 +936,38 @@
+ # will honor the `STRIP' environment variable to overrule this program.
+ dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+ if test "$cross_compiling" != no; then
+   AC_CHECK_TOOL([STRIP], [strip], :)
+ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ AC_SUBST([INSTALL_STRIP_PROGRAM])])
+ 
+-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
++# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+-# serial 2
++# serial 3
+ 
+ # _AM_SUBST_NOTMAKE(VARIABLE)
+ # ---------------------------
+ # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+ # This macro is traced by Automake.
+ AC_DEFUN([_AM_SUBST_NOTMAKE])
+ 
+ # AM_SUBST_NOTMAKE(VARIABLE)
+-# ---------------------------
++# --------------------------
+ # Public sister of _AM_SUBST_NOTMAKE.
+ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+ 
+ # Check how to create a tarball.                            -*- Autoconf -*-
+ 
+-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
++# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+ #
+ # This file is free software; the Free Software Foundation
+ # gives unlimited permission to copy and/or distribute it,
+ # with or without modifications, as long as this notice is preserved.
+ 
+ # serial 2
+ 
+ # _AM_PROG_TAR(FORMAT)
+@@ -958,20 +979,21 @@
+ # writing to stdout a FORMAT-tarball containing the directory
+ # $tardir.
+ #     tardir=directory && $(am__tar) > result.tar
+ #
+ # Substitute a variable $(am__untar) that extract such
+ # a tarball read from stdin.
+ #     $(am__untar) < result.tar
+ AC_DEFUN([_AM_PROG_TAR],
+-[# Always define AMTAR for backward compatibility.
+-AM_MISSING_PROG([AMTAR], [tar])
++[# Always define AMTAR for backward compatibility.  Yes, it's still used
++# in the wild :-(  We should find a proper way to deprecate it ...
++AC_SUBST([AMTAR], ['$${TAR-tar}'])
+ m4_if([$1], [v7],
+-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
++     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+      [m4_case([$1], [ustar],, [pax],,
+               [m4_fatal([Unknown tar format])])
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+ # Loop over all known methods to create a tar archive until one works.
+ _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+ # Do not fold the above two line into one, because Tru64 sh and
+ # Solaris sh will not grok spaces in the rhs of `-'.
+diff --git a/configure b/configure
+--- a/configure
++++ b/configure
+@@ -1,18 +1,18 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.65 for breakpad 0.1.
++# Generated by GNU Autoconf 2.68 for breakpad 0.1.
+ #
+ # Report bugs to <google-breakpad-dev@googlegroups.com>.
+ #
+ #
+ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+-# Inc.
++# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
++# Foundation, Inc.
+ #
+ #
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+ ## -------------------- ##
+ ## M4sh Initialization. ##
+ ## -------------------- ##
+ 
+@@ -86,16 +86,17 @@
+ # IFS
+ # We need space, tab and new line, in precisely that order.  Quoting is
+ # there to prevent editors from complaining about space-tab.
+ # (If _AS_PATH_WALK were called with IFS unset, it would disable word
+ # splitting by setting IFS to empty value.)
+ IFS=" ""	$as_nl"
+ 
+ # Find who we are.  Look in the path if we contain no directory separator.
++as_myself=
+ case $0 in #((
+   *[\\/]* ) as_myself=$0 ;;
+   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+@@ -211,21 +212,28 @@
+ fi; }
+ IFS=$as_save_IFS
+ 
+ 
+       if test "x$CONFIG_SHELL" != x; then :
+   # We cannot yet assume a decent shell, so we have to provide a
+ 	# neutralization value for shells without unset; and this also
+ 	# works around shells that cannot unset nonexistent variables.
++	# Preserve -v and -x to the replacement shell.
+ 	BASH_ENV=/dev/null
+ 	ENV=/dev/null
+ 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ 	export CONFIG_SHELL
+-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
++	case $- in # ((((
++	  *v*x* | *x*v* ) as_opts=-vx ;;
++	  *v* ) as_opts=-v ;;
++	  *x* ) as_opts=-x ;;
++	  * ) as_opts= ;;
++	esac
++	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+ fi
+ 
+     if test x$as_have_required = xno; then :
+   $as_echo "$0: This script requires a shell more modern than all"
+   $as_echo "$0: the shells that I found on your system."
+   if test x${ZSH_VERSION+set} = xset ; then
+     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+@@ -314,17 +322,17 @@
+ 	  /^X\(\/\).*/{
+ 	    s//\1/
+ 	    q
+ 	  }
+ 	  s/.*/./; q'`
+       test -d "$as_dir" && break
+     done
+     test -z "$as_dirs" || eval "mkdir $as_dirs"
+-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+ 
+ 
+ } # as_fn_mkdir_p
+ # as_fn_append VAR VALUE
+ # ----------------------
+ # Append the text in VALUE to the end of the definition contained in VAR. Take
+ # advantage of any shell optimizations that allow amortized linear growth over
+ # repeated appends, instead of the typical quadratic growth present in naive
+@@ -354,29 +362,29 @@
+ else
+   as_fn_arith ()
+   {
+     as_val=`expr "$@" || test $? -eq 1`
+   }
+ fi # as_fn_arith
+ 
+ 
+-# as_fn_error ERROR [LINENO LOG_FD]
+-# ---------------------------------
++# as_fn_error STATUS ERROR [LINENO LOG_FD]
++# ----------------------------------------
+ # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+ # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+-# script with status $?, using 1 if that was 0.
++# script with STATUS, using 1 if that was 0.
+ as_fn_error ()
+ {
+-  as_status=$?; test $as_status -eq 0 && as_status=1
+-  if test "$3"; then
+-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++  as_status=$1; test $as_status -eq 0 && as_status=1
++  if test "$4"; then
++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+   fi
+-  $as_echo "$as_me: error: $1" >&2
++  $as_echo "$as_me: error: $2" >&2
+   as_fn_exit $as_status
+ } # as_fn_error
+ 
+ if expr a : '\(a\)' >/dev/null 2>&1 &&
+    test "X`expr 00001 : '.*\(...\)'`" = X001; then
+   as_expr=expr
+ else
+   as_expr=false
+@@ -528,17 +536,17 @@
+ # Sed expression to map a string onto a valid variable name.
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+ 
+ 
+ test -n "$DJDIR" || exec 7<&0 </dev/null
+ exec 6>&1
+ 
+ # Name of the host.
+-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
++# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+ # so uname gets run too.
+ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+ 
+ #
+ # Initializations.
+ #
+ ac_default_prefix=/usr/local
+ ac_clean_files=
+@@ -627,16 +635,17 @@
+ am__fastdepCCAS_FALSE
+ am__fastdepCCAS_TRUE
+ CCASDEPMODE
+ CCASFLAGS
+ CCAS
+ am__fastdepCC_FALSE
+ am__fastdepCC_TRUE
+ CCDEPMODE
++am__nodep
+ AMDEPBACKSLASH
+ AMDEP_FALSE
+ AMDEP_TRUE
+ am__quote
+ am__include
+ DEPDIR
+ OBJEXT
+ EXEEXT
+@@ -794,18 +803,19 @@
+   # If the previous option needs an argument, assign it.
+   if test -n "$ac_prev"; then
+     eval $ac_prev=\$ac_option
+     ac_prev=
+     continue
+   fi
+ 
+   case $ac_option in
+-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+-  *)	ac_optarg=yes ;;
++  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++  *=)   ac_optarg= ;;
++  *)    ac_optarg=yes ;;
+   esac
+ 
+   # Accept the important Cygnus configure options, so we can diagnose typos.
+ 
+   case $ac_dashdash$ac_option in
+   --)
+     ac_dashdash=yes ;;
+ 
+@@ -840,17 +850,17 @@
+   -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+   | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+     datarootdir=$ac_optarg ;;
+ 
+   -disable-* | --disable-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid feature name: $ac_useropt"
++      as_fn_error $? "invalid feature name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "enable_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+@@ -866,17 +876,17 @@
+     ac_prev=dvidir ;;
+   -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+     dvidir=$ac_optarg ;;
+ 
+   -enable-* | --enable-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid feature name: $ac_useropt"
++      as_fn_error $? "invalid feature name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "enable_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+@@ -1070,33 +1080,33 @@
+ 
+   -version | --version | --versio | --versi | --vers | -V)
+     ac_init_version=: ;;
+ 
+   -with-* | --with-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid package name: $ac_useropt"
++      as_fn_error $? "invalid package name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "with_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+     esac
+     eval with_$ac_useropt=\$ac_optarg ;;
+ 
+   -without-* | --without-*)
+     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+     # Reject names that are not valid shell variable names.
+     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+-      as_fn_error "invalid package name: $ac_useropt"
++      as_fn_error $? "invalid package name: $ac_useropt"
+     ac_useropt_orig=$ac_useropt
+     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+     case $ac_user_opts in
+       *"
+ "with_$ac_useropt"
+ "*) ;;
+       *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ 	 ac_unrecognized_sep=', ';;
+@@ -1116,50 +1126,50 @@
+ 
+   -x-libraries | --x-libraries | --x-librarie | --x-librari \
+   | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+     ac_prev=x_libraries ;;
+   -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+     x_libraries=$ac_optarg ;;
+ 
+-  -*) as_fn_error "unrecognized option: \`$ac_option'
+-Try \`$0 --help' for more information."
++  -*) as_fn_error $? "unrecognized option: \`$ac_option'
++Try \`$0 --help' for more information"
+     ;;
+ 
+   *=*)
+     ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+     # Reject names that are not valid shell variable names.
+     case $ac_envvar in #(
+       '' | [0-9]* | *[!_$as_cr_alnum]* )
+-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
++      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+     esac
+     eval $ac_envvar=\$ac_optarg
+     export $ac_envvar ;;
+ 
+   *)
+     # FIXME: should be removed in autoconf 3.0.
+     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
++    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+     ;;
+ 
+   esac
+ done
+ 
+ if test -n "$ac_prev"; then
+   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+-  as_fn_error "missing argument to $ac_option"
++  as_fn_error $? "missing argument to $ac_option"
+ fi
+ 
+ if test -n "$ac_unrecognized_opts"; then
+   case $enable_option_checking in
+     no) ;;
+-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
++    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+   esac
+ fi
+ 
+ # Check all directory arguments for consistency.
+ for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ 		datadir sysconfdir sharedstatedir localstatedir includedir \
+ 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+@@ -1172,49 +1182,49 @@
+       ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+       eval $ac_var=\$ac_val;;
+   esac
+   # Be sure to have absolute directory names.
+   case $ac_val in
+     [\\/$]* | ?:[\\/]* )  continue;;
+     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+   esac
+-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
++  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+ done
+ 
+ # There might be people who depend on the old broken behavior: `$host'
+ # used to hold the argument of --host etc.
+ # FIXME: To remove some day.
+ build=$build_alias
+ host=$host_alias
+ target=$target_alias
+ 
+ # FIXME: To remove some day.
+ if test "x$host_alias" != x; then
+   if test "x$build_alias" = x; then
+     cross_compiling=maybe
+-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+-    If a cross compiler is detected then cross compile mode will be used." >&2
++    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
++    If a cross compiler is detected then cross compile mode will be used" >&2
+   elif test "x$build_alias" != "x$host_alias"; then
+     cross_compiling=yes
+   fi
+ fi
+ 
+ ac_tool_prefix=
+ test -n "$host_alias" && ac_tool_prefix=$host_alias-
+ 
+ test "$silent" = yes && exec 6>/dev/null
+ 
+ 
+ ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ ac_ls_di=`ls -di .` &&
+ ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+-  as_fn_error "working directory cannot be determined"
++  as_fn_error $? "working directory cannot be determined"
+ test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+-  as_fn_error "pwd does not report name of working directory"
++  as_fn_error $? "pwd does not report name of working directory"
+ 
+ 
+ # Find the source files, if location was not specified.
+ if test -z "$srcdir"; then
+   ac_srcdir_defaulted=yes
+   # Try the directory containing this script, then the parent directory.
+   ac_confdir=`$as_dirname -- "$as_myself" ||
+ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+@@ -1243,21 +1253,21 @@
+   if test ! -r "$srcdir/$ac_unique_file"; then
+     srcdir=..
+   fi
+ else
+   ac_srcdir_defaulted=no
+ fi
+ if test ! -r "$srcdir/$ac_unique_file"; then
+   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
++  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+ fi
+ ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ ac_abs_confdir=`(
+-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
++	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ 	pwd)`
+ # When building in place, set srcdir=.
+ if test "$ac_abs_confdir" = "$ac_pwd"; then
+   srcdir=.
+ fi
+ # Remove unnecessary trailing slashes from srcdir.
+ # Double slashes in file names in object file debugging info
+ # mess up M-x gdb in Emacs.
+@@ -1287,17 +1297,17 @@
+ 
+ Defaults for the options are specified in brackets.
+ 
+ Configuration:
+   -h, --help              display this help and exit
+       --help=short        display options specific to this package
+       --help=recursive    display the short help of all the included packages
+   -V, --version           display version information and exit
+-  -q, --quiet, --silent   do not print \`checking...' messages
++  -q, --quiet, --silent   do not print \`checking ...' messages
+       --cache-file=FILE   cache test results in FILE [disabled]
+   -C, --config-cache      alias for \`--cache-file=config.cache'
+   -n, --no-create         do not create output files
+       --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+ 
+ Installation directories:
+   --prefix=PREFIX         install architecture-independent files in PREFIX
+                           [$ac_default_prefix]
+@@ -1440,19 +1450,19 @@
+     cd "$ac_pwd" || { ac_status=$?; break; }
+   done
+ fi
+ 
+ test -n "$ac_init_help" && exit $ac_status
+ if $ac_init_version; then
+   cat <<\_ACEOF
+ breakpad configure 0.1
+-generated by GNU Autoconf 2.65
+-
+-Copyright (C) 2009 Free Software Foundation, Inc.
++generated by GNU Autoconf 2.68
++
++Copyright (C) 2010 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+   exit
+ fi
+ 
+ ## ------------------------ ##
+ ## Autoconf initialization. ##
+@@ -1486,17 +1496,17 @@
+        } && test -s conftest.$ac_objext; then :
+   ac_retval=0
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ 	ac_retval=1
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_compile
+ 
+ # ac_fn_c_try_cpp LINENO
+ # ----------------------
+ # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ ac_fn_c_try_cpp ()
+@@ -1512,28 +1522,28 @@
+   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+   ac_status=$?
+   if test -s conftest.err; then
+     grep -v '^ *+' conftest.err >conftest.er1
+     cat conftest.er1 >&5
+     mv -f conftest.er1 conftest.err
+   fi
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+-  test $ac_status = 0; } >/dev/null && {
++  test $ac_status = 0; } > conftest.i && {
+ 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ 	 test ! -s conftest.err
+        }; then :
+   ac_retval=0
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+     ac_retval=1
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_cpp
+ 
+ # ac_fn_cxx_try_compile LINENO
+ # ----------------------------
+ # Try to compile conftest.$ac_ext, and return whether this succeeded.
+ ac_fn_cxx_try_compile ()
+@@ -1561,17 +1571,17 @@
+        } && test -s conftest.$ac_objext; then :
+   ac_retval=0
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ 	ac_retval=1
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_cxx_try_compile
+ 
+ # ac_fn_c_try_run LINENO
+ # ----------------------
+ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+ # that executables *can* be run.
+@@ -1603,17 +1613,17 @@
+ else
+   $as_echo "$as_me: program exited with status $ac_status" >&5
+        $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+        ac_retval=$ac_status
+ fi
+   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_run
+ 
+ # ac_fn_c_try_link LINENO
+ # -----------------------
+ # Try to link conftest.$ac_ext, and return whether this succeeded.
+ ac_fn_c_try_link ()
+@@ -1649,33 +1659,33 @@
+ 
+ 	ac_retval=1
+ fi
+   # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+   # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+   # interfere with the next link command; also delete a directory that is
+   # left behind by Apple's compiler.  We do this before executing the actions.
+   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+   as_fn_set_status $ac_retval
+ 
+ } # ac_fn_c_try_link
+ 
+ # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists, giving a warning if it cannot be compiled using
+ # the include files in INCLUDES and setting the cache variable VAR
+ # accordingly.
+ ac_fn_c_check_header_mongrel ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++  if eval \${$3+:} false; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+ else
+   # Is the header compilable?
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+@@ -1701,17 +1711,17 @@
+ /* end confdefs.h.  */
+ #include <$2>
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+   ac_header_preproc=yes
+ else
+   ac_header_preproc=no
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+ $as_echo "$ac_header_preproc" >&6; }
+ 
+ # So?  What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+   yes:no: )
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+ $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+@@ -1724,49 +1734,47 @@
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+ $as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+ $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+-( cat <<\_ASBOX
+-## --------------------------------------------------- ##
++( $as_echo "## --------------------------------------------------- ##
+ ## Report this to google-breakpad-dev@googlegroups.com ##
+-## --------------------------------------------------- ##
+-_ASBOX
++## --------------------------------------------------- ##"
+      ) | sed "s/^/$as_me: WARNING:     /" >&2
+     ;;
+ esac
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   eval "$3=\$ac_header_compiler"
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+ fi
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ 
+ } # ac_fn_c_check_header_mongrel
+ 
+ # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+ # -------------------------------------------------------
+ # Tests whether HEADER exists and can be compiled using the include files in
+ # INCLUDES, setting the cache variable VAR accordingly.
+ ac_fn_c_check_header_compile ()
+ {
+   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+ $as_echo_n "checking for $2... " >&6; }
+-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${$3+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ $4
+ #include <$2>
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+@@ -1774,25 +1782,25 @@
+ else
+   eval "$3=no"
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ eval ac_res=\$$3
+ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+ $as_echo "$ac_res" >&6; }
+-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ 
+ } # ac_fn_c_check_header_compile
+ cat >config.log <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+ 
+ It was created by breakpad $as_me 0.1, which was
+-generated by GNU Autoconf 2.65.  Invocation command line was
++generated by GNU Autoconf 2.68.  Invocation command line was
+ 
+   $ $0 $@
+ 
+ _ACEOF
+ exec 5>>config.log
+ {
+ cat <<_ASUNAME
+ ## --------- ##
+@@ -1892,21 +1900,19 @@
+ # would cause problems or look ugly.
+ # WARNING: Use '\'' to represent an apostrophe within the trap.
+ # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+ trap 'exit_status=$?
+   # Save into config.log some information that might help in debugging.
+   {
+     echo
+ 
+-    cat <<\_ASBOX
+-## ---------------- ##
++    $as_echo "## ---------------- ##
+ ## Cache variables. ##
+-## ---------------- ##
+-_ASBOX
++## ---------------- ##"
+     echo
+     # The following way of writing the cache mishandles newlines in values,
+ (
+   for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+     eval ac_val=\$$ac_var
+     case $ac_val in #(
+     *${as_nl}*)
+       case $ac_var in #(
+@@ -1930,56 +1936,50 @@
+     *)
+       sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+       ;;
+     esac |
+     sort
+ )
+     echo
+ 
+-    cat <<\_ASBOX
+-## ----------------- ##
++    $as_echo "## ----------------- ##
+ ## Output variables. ##
+-## ----------------- ##
+-_ASBOX
++## ----------------- ##"
+     echo
+     for ac_var in $ac_subst_vars
+     do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+     done | sort
+     echo
+ 
+     if test -n "$ac_subst_files"; then
+-      cat <<\_ASBOX
+-## ------------------- ##
++      $as_echo "## ------------------- ##
+ ## File substitutions. ##
+-## ------------------- ##
+-_ASBOX
++## ------------------- ##"
+       echo
+       for ac_var in $ac_subst_files
+       do
+ 	eval ac_val=\$$ac_var
+ 	case $ac_val in
+ 	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ 	esac
+ 	$as_echo "$ac_var='\''$ac_val'\''"
+       done | sort
+       echo
+     fi
+ 
+     if test -s confdefs.h; then
+-      cat <<\_ASBOX
+-## ----------- ##
++      $as_echo "## ----------- ##
+ ## confdefs.h. ##
+-## ----------- ##
+-_ASBOX
++## ----------- ##"
+       echo
+       cat confdefs.h
+       echo
+     fi
+     test "$ac_signal" != 0 &&
+       $as_echo "$as_me: caught signal $ac_signal"
+     $as_echo "$as_me: exit $exit_status"
+   } >&5
+@@ -2024,32 +2024,41 @@
+ _ACEOF
+ 
+ 
+ # Let the site file select an alternate cache file if it wants to.
+ # Prefer an explicitly selected file to automatically selected ones.
+ ac_site_file1=NONE
+ ac_site_file2=NONE
+ if test -n "$CONFIG_SITE"; then
+-  ac_site_file1=$CONFIG_SITE
++  # We do not want a PATH search for config.site.
++  case $CONFIG_SITE in #((
++    -*)  ac_site_file1=./$CONFIG_SITE;;
++    */*) ac_site_file1=$CONFIG_SITE;;
++    *)   ac_site_file1=./$CONFIG_SITE;;
++  esac
+ elif test "x$prefix" != xNONE; then
+   ac_site_file1=$prefix/share/config.site
+   ac_site_file2=$prefix/etc/config.site
+ else
+   ac_site_file1=$ac_default_prefix/share/config.site
+   ac_site_file2=$ac_default_prefix/etc/config.site
+ fi
+ for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+ do
+   test "x$ac_site_file" = xNONE && continue
+   if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
+     sed 's/^/| /' "$ac_site_file" >&5
+-    . "$ac_site_file"
++    . "$ac_site_file" \
++      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "failed to load site script $ac_site_file
++See \`config.log' for more details" "$LINENO" 5; }
+   fi
+ done
+ 
+ if test -r "$cache_file"; then
+   # Some versions of bash will fail to source /dev/null (special files
+   # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+   if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+@@ -2115,77 +2124,83 @@
+     esac
+   fi
+ done
+ if $ac_cache_corrupted; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+ $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
++  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+ fi
+ ## -------------------- ##
+ ## Main body of script. ##
+ ## -------------------- ##
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ 
+ ac_aux_dir=
+ for ac_dir in autotools "$srcdir"/autotools; do
+-  for ac_t in install-sh install.sh shtool; do
+-    if test -f "$ac_dir/$ac_t"; then
+-      ac_aux_dir=$ac_dir
+-      ac_install_sh="$ac_aux_dir/$ac_t -c"
+-      break 2
+-    fi
+-  done
++  if test -f "$ac_dir/install-sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install-sh -c"
++    break
++  elif test -f "$ac_dir/install.sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install.sh -c"
++    break
++  elif test -f "$ac_dir/shtool"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/shtool install -c"
++    break
++  fi
+ done
+ if test -z "$ac_aux_dir"; then
+-  as_fn_error "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$LINENO" 5
++  as_fn_error $? "cannot find install-sh, install.sh, or shtool in autotools \"$srcdir\"/autotools" "$LINENO" 5
+ fi
+ 
+ # These three variables are undocumented and unsupported,
+ # and are intended to be withdrawn in a future Autoconf release.
+ # They can cause serious problems if a builder's source tree is in a directory
+ # whose full name contains unusual characters.
+ ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+ 
+ 
+ 
+ # Make sure we can run config.sub.
+ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
++  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+ $as_echo_n "checking build system type... " >&6; }
+-if test "${ac_cv_build+set}" = set; then :
++if ${ac_cv_build+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_build_alias=$build_alias
+ test "x$ac_build_alias" = x &&
+   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+ test "x$ac_build_alias" = x &&
+-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
++  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
++  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+ $as_echo "$ac_cv_build" >&6; }
+ case $ac_cv_build in
+ *-*-*) ;;
+-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
++*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+ esac
+ build=$ac_cv_build
+ ac_save_IFS=$IFS; IFS='-'
+ set x $ac_cv_build
+ shift
+ build_cpu=$1
+ build_vendor=$2
+ shift; shift
+@@ -2193,32 +2208,32 @@
+ # except with old shells:
+ build_os=$*
+ IFS=$ac_save_IFS
+ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+ $as_echo_n "checking host system type... " >&6; }
+-if test "${ac_cv_host+set}" = set; then :
++if ${ac_cv_host+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test "x$host_alias" = x; then
+   ac_cv_host=$ac_cv_build
+ else
+   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
++    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+ $as_echo "$ac_cv_host" >&6; }
+ case $ac_cv_host in
+ *-*-*) ;;
+-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
++*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+ esac
+ host=$ac_cv_host
+ ac_save_IFS=$IFS; IFS='-'
+ set x $ac_cv_host
+ shift
+ host_cpu=$1
+ host_vendor=$2
+ shift; shift
+@@ -2244,17 +2259,17 @@
+ # AFS /usr/afsws/bin/install, which mishandles nonexistent args
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+ # Reject install programs that cannot install multiple files.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+ $as_echo_n "checking for a BSD-compatible install... " >&6; }
+ if test -z "$INSTALL"; then
+-if test "${ac_cv_path_install+set}" = set; then :
++if ${ac_cv_path_install+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     # Account for people who put trailing slashes in PATH elements.
+@@ -2331,21 +2346,21 @@
+ sleep 1
+ echo timestamp > conftest.file
+ # Reject unsafe characters in $srcdir or the absolute working directory
+ # name.  Accept space and tab only in the latter.
+ am_lf='
+ '
+ case `pwd` in
+   *[\\\"\#\$\&\'\`$am_lf]*)
+-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
++    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+ esac
+ case $srcdir in
+   *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
++    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+ esac
+ 
+ # Do `set' in a subshell so we don't clobber the current shell's
+ # arguments.  Must try -L first in case configure is actually a
+ # symlink; some systems play weird games with the mod time of symlinks
+ # (eg FreeBSD returns the mod time of the symlink's containing
+ # directory).
+ if (
+@@ -2357,27 +2372,27 @@
+    rm -f conftest.file
+    if test "$*" != "X $srcdir/configure conftest.file" \
+       && test "$*" != "X conftest.file $srcdir/configure"; then
+ 
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
++      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+    fi
+ 
+    test "$2" = conftest.file
+    )
+ then
+    # Ok.
+    :
+ else
+-   as_fn_error "newly created file is older than distributed files!
++   as_fn_error $? "newly created file is older than distributed files!
+ Check your system clock" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ test "$program_prefix" != NONE &&
+   program_transform_name="s&^&$program_prefix&;$program_transform_name"
+ # Use a double $ so make ignores it.
+ test "$program_suffix" != NONE &&
+@@ -2421,17 +2436,17 @@
+ # tool to use in cross-compilation environments, therefore Automake
+ # will honor the `STRIP' environment variable to overrule this program.
+ if test "$cross_compiling" != no; then
+   if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}strip; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_STRIP+set}" = set; then :
++if ${ac_cv_prog_STRIP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$STRIP"; then
+   ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -2461,17 +2476,17 @@
+ 
+ fi
+ if test -z "$ac_cv_prog_STRIP"; then
+   ac_ct_STRIP=$STRIP
+   # Extract the first word of "strip", so it can be a program name with args.
+ set dummy strip; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
++if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_STRIP"; then
+   ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -2514,17 +2529,17 @@
+ fi
+ 
+ fi
+ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+ $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+ if test -z "$MKDIR_P"; then
+-  if test "${ac_cv_path_mkdir+set}" = set; then :
++  if ${ac_cv_path_mkdir+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     for ac_prog in mkdir gmkdir; do
+@@ -2565,17 +2580,17 @@
+ esac
+ 
+ for ac_prog in gawk mawk nawk awk
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_AWK+set}" = set; then :
++if ${ac_cv_prog_AWK+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$AWK"; then
+   ac_cv_prog_AWK="$AWK" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -2605,25 +2620,25 @@
+ 
+   test -n "$AWK" && break
+ done
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+ $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+ set x ${MAKE-make}
+ ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat >conftest.make <<\_ACEOF
+ SHELL = /bin/sh
+ all:
+ 	@echo '@@@%%%=$(MAKE)=@@@%%%'
+ _ACEOF
+-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
++# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+ case `${MAKE-make} -f conftest.make 2>/dev/null` in
+   *@@@%%%=?*=@@@%%%*)
+     eval ac_cv_prog_make_${ac_make}_set=yes;;
+   *)
+     eval ac_cv_prog_make_${ac_make}_set=no;;
+ esac
+ rm -f conftest.make
+ fi
+@@ -2647,17 +2662,17 @@
+ rmdir .tst 2>/dev/null
+ 
+ if test "`cd $srcdir && pwd`" != "`pwd`"; then
+   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+   # is not polluted with repeated "-I."
+   am__isrc=' -I$(srcdir)'
+   # test to see if srcdir already configured
+   if test -f $srcdir/config.status; then
+-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
++    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+   fi
+ fi
+ 
+ # test whether we have cygpath
+ if test -z "$CYGPATH_W"; then
+   if (cygpath --version) >/dev/null 2>/dev/null; then
+     CYGPATH_W='cygpath -w'
+   else
+@@ -2693,19 +2708,19 @@
+ 
+ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+ 
+ 
+ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+ 
+ # We need awk for the "check" target.  The system "awk" is bad on
+ # some platforms.
+-# Always define AMTAR for backward compatibility.
+-
+-AMTAR=${AMTAR-"${am_missing_run}tar"}
++# Always define AMTAR for backward compatibility.  Yes, it's still used
++# in the wild :-(  We should find a proper way to deprecate it ...
++AMTAR='$${TAR-tar}'
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
+ $as_echo_n "checking how to create a ustar tar archive... " >&6; }
+ # Loop over all known methods to create a tar archive until one works.
+ _am_tools='gnutar plaintar pax cpio none'
+ _am_tools=${am_cv_prog_tar_ustar-$_am_tools}
+ # Do not fold the above two line into one, because Tru64 sh and
+@@ -2771,17 +2786,17 @@
+    ac_status=$?
+    echo "$as_me:$LINENO: \$? = $ac_status" >&5
+    (exit $ac_status); }
+     grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+   fi
+ done
+ rm -rf conftest.dir
+ 
+-if test "${am_cv_prog_tar_ustar+set}" = set; then :
++if ${am_cv_prog_tar_ustar+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   am_cv_prog_tar_ustar=$_am_tool
+ fi
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
+ $as_echo "$am_cv_prog_tar_ustar" >&6; }
+ 
+@@ -2839,16 +2854,17 @@
+ # Check whether --enable-dependency-tracking was given.
+ if test "${enable_dependency_tracking+set}" = set; then :
+   enableval=$enable_dependency_tracking;
+ fi
+ 
+ if test "x$enable_dependency_tracking" != xno; then
+   am_depcomp="$ac_aux_dir/depcomp"
+   AMDEPBACKSLASH='\'
++  am__nodep='_no'
+ fi
+  if test "x$enable_dependency_tracking" != xno; then
+   AMDEP_TRUE=
+   AMDEP_FALSE='#'
+ else
+   AMDEP_TRUE='#'
+   AMDEP_FALSE=
+ fi
+@@ -2859,17 +2875,17 @@
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -2899,17 +2915,17 @@
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -2952,17 +2968,17 @@
+ fi
+ 
+ if test -z "$CC"; then
+           if test -n "$ac_tool_prefix"; then
+     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -2992,17 +3008,17 @@
+ 
+   fi
+ fi
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   ac_prog_rejected=no
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+@@ -3051,17 +3067,17 @@
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl.exe
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -3095,17 +3111,17 @@
+ if test -z "$CC"; then
+   ac_ct_CC=$CC
+   for ac_prog in cl.exe
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -3149,18 +3165,18 @@
+   fi
+ fi
+ 
+ fi
+ 
+ 
+ test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "no acceptable C compiler found in \$PATH
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "no acceptable C compiler found in \$PATH
++See \`config.log' for more details" "$LINENO" 5; }
+ 
+ # Provide some information about the compiler.
+ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+ set X $ac_compile
+ ac_compiler=$2
+ for ac_option in --version -v -V -qversion; do
+   { { ac_try="$ac_compiler $ac_option >&5"
+ case "(($ac_try" in
+@@ -3264,19 +3280,18 @@
+ if test -z "$ac_file"; then :
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+ $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-{ as_fn_set_status 77
+-as_fn_error "C compiler cannot create executables
+-See \`config.log' for more details." "$LINENO" 5; }; }
++as_fn_error 77 "C compiler cannot create executables
++See \`config.log' for more details" "$LINENO" 5; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+ $as_echo_n "checking for C compiler default output file name... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+ $as_echo "$ac_file" >&6; }
+@@ -3308,18 +3323,18 @@
+     *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ 	  break;;
+     * ) break;;
+   esac
+ done
+ else
+   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "cannot compute suffix of executables: cannot compile and link
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "cannot compute suffix of executables: cannot compile and link
++See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ rm -f conftest conftest$ac_cv_exeext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+ $as_echo "$ac_cv_exeext" >&6; }
+ 
+ rm -f conftest.$ac_ext
+ EXEEXT=$ac_cv_exeext
+ ac_exeext=$EXEEXT
+@@ -3366,30 +3381,30 @@
+   test $ac_status = 0; }; }; then
+     cross_compiling=no
+   else
+     if test "$cross_compiling" = maybe; then
+ 	cross_compiling=yes
+     else
+ 	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "cannot run C compiled programs.
++as_fn_error $? "cannot run C compiled programs.
+ If you meant to cross compile, use \`--host'.
+-See \`config.log' for more details." "$LINENO" 5; }
++See \`config.log' for more details" "$LINENO" 5; }
+     fi
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+ $as_echo "$cross_compiling" >&6; }
+ 
+ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ ac_clean_files=$ac_clean_files_save
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+ $as_echo_n "checking for suffix of object files... " >&6; }
+-if test "${ac_cv_objext+set}" = set; then :
++if ${ac_cv_objext+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -3419,28 +3434,28 @@
+   esac
+ done
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "cannot compute suffix of object files: cannot compile
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "cannot compute suffix of object files: cannot compile
++See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ rm -f conftest.$ac_cv_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+ $as_echo "$ac_cv_objext" >&6; }
+ OBJEXT=$ac_cv_objext
+ ac_objext=$OBJEXT
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+ $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
++if ${ac_cv_c_compiler_gnu+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -3467,17 +3482,17 @@
+   GCC=yes
+ else
+   GCC=
+ fi
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+ $as_echo_n "checking whether $CC accepts -g... " >&6; }
+-if test "${ac_cv_prog_cc_g+set}" = set; then :
++if ${ac_cv_prog_cc_g+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_save_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    ac_cv_prog_cc_g=no
+    CFLAGS="-g"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -3545,17 +3560,17 @@
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+ $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+-if test "${ac_cv_prog_cc_c89+set}" = set; then :
++if ${ac_cv_prog_cc_c89+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_cv_prog_cc_c89=no
+ ac_save_CC=$CC
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+@@ -3644,25 +3659,26 @@
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ depcc="$CC"   am_compiler_list=
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
++if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -3712,17 +3728,17 @@
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+       # This compiler won't grok `-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+@@ -3778,25 +3794,26 @@
+ test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+ 
+ 
+ 
+ depcc="$CCAS"   am_compiler_list=
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CCAS_dependencies_compiler_type+set}" = set; then :
++if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -3844,17 +3861,17 @@
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+       # This compiler won't grok `-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+@@ -3909,17 +3926,17 @@
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -3949,17 +3966,17 @@
+ 
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+   ac_ct_CC=$CC
+   # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -4002,17 +4019,17 @@
+ fi
+ 
+ if test -z "$CC"; then
+           if test -n "$ac_tool_prefix"; then
+     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -4042,17 +4059,17 @@
+ 
+   fi
+ fi
+ if test -z "$CC"; then
+   # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+   ac_prog_rejected=no
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+@@ -4101,17 +4118,17 @@
+ if test -z "$CC"; then
+   if test -n "$ac_tool_prefix"; then
+   for ac_prog in cl.exe
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CC+set}" = set; then :
++if ${ac_cv_prog_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CC"; then
+   ac_cv_prog_CC="$CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -4145,17 +4162,17 @@
+ if test -z "$CC"; then
+   ac_ct_CC=$CC
+   for ac_prog in cl.exe
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CC"; then
+   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -4199,18 +4216,18 @@
+   fi
+ fi
+ 
+ fi
+ 
+ 
+ test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "no acceptable C compiler found in \$PATH
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "no acceptable C compiler found in \$PATH
++See \`config.log' for more details" "$LINENO" 5; }
+ 
+ # Provide some information about the compiler.
+ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+ set X $ac_compile
+ ac_compiler=$2
+ for ac_option in --version -v -V -qversion; do
+   { { ac_try="$ac_compiler $ac_option >&5"
+ case "(($ac_try" in
+@@ -4229,17 +4246,17 @@
+   fi
+   rm -f conftest.er1 conftest.err
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }
+ done
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+ $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
++if ${ac_cv_c_compiler_gnu+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -4266,17 +4283,17 @@
+   GCC=yes
+ else
+   GCC=
+ fi
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+ $as_echo_n "checking whether $CC accepts -g... " >&6; }
+-if test "${ac_cv_prog_cc_g+set}" = set; then :
++if ${ac_cv_prog_cc_g+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_save_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    ac_cv_prog_cc_g=no
+    CFLAGS="-g"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -4344,17 +4361,17 @@
+   if test "$GCC" = yes; then
+     CFLAGS="-O2"
+   else
+     CFLAGS=
+   fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+ $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+-if test "${ac_cv_prog_cc_c89+set}" = set; then :
++if ${ac_cv_prog_cc_c89+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_cv_prog_cc_c89=no
+ ac_save_CC=$CC
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdarg.h>
+ #include <stdio.h>
+@@ -4443,25 +4460,26 @@
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ depcc="$CC"   am_compiler_list=
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
++if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -4511,17 +4529,17 @@
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+       # This compiler won't grok `-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+@@ -4575,17 +4593,17 @@
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
+ $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
+ $as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+ fi
+ set dummy $CC; ac_cc=`$as_echo "$2" |
+ 		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+-if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then :
++if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -4704,17 +4722,17 @@
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+ $as_echo_n "checking how to run the C preprocessor... " >&6; }
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+   CPP=
+ fi
+ if test -z "$CPP"; then
+-  if test "${ac_cv_prog_CPP+set}" = set; then :
++  if ${ac_cv_prog_CPP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+       # Double quotes because CPP needs to be expanded
+     for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+     do
+       ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+@@ -4734,37 +4752,37 @@
+ 		     Syntax error
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+ 
+ else
+   # Broken: fails on valid input.
+ continue
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether nonexistent headers
+   # can be detected and how.
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+   # Broken: success on invalid input.
+ continue
+ else
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.i conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then :
+   break
+ fi
+ 
+     done
+     ac_cv_prog_CPP=$CPP
+ 
+ fi
+@@ -4793,44 +4811,44 @@
+ 		     Syntax error
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+ 
+ else
+   # Broken: fails on valid input.
+ continue
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+   # OK, works on sane cases.  Now check whether nonexistent headers
+   # can be detected and how.
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <ac_nonexistent.h>
+ _ACEOF
+ if ac_fn_c_try_cpp "$LINENO"; then :
+   # Broken: success on invalid input.
+ continue
+ else
+   # Passes both tests.
+ ac_preproc_ok=:
+ break
+ fi
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.err conftest.i conftest.$ac_ext
+ 
+ done
+ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+-rm -f conftest.err conftest.$ac_ext
++rm -f conftest.i conftest.err conftest.$ac_ext
+ if $ac_preproc_ok; then :
+ 
+ else
+   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error "C preprocessor \"$CPP\" fails sanity check
+-See \`config.log' for more details." "$LINENO" 5; }
++as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
++See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ 
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+@@ -4845,17 +4863,17 @@
+   else
+     if test -n "$ac_tool_prefix"; then
+   for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+   do
+     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_CXX+set}" = set; then :
++if ${ac_cv_prog_CXX+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$CXX"; then
+   ac_cv_prog_CXX="$CXX" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -4889,17 +4907,17 @@
+ if test -z "$CXX"; then
+   ac_ct_CXX=$CXX
+   for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
++if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_CXX"; then
+   ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -4967,17 +4985,17 @@
+   fi
+   rm -f conftest.er1 conftest.err
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }
+ done
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+ $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
++if ${ac_cv_cxx_compiler_gnu+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ int
+ main ()
+ {
+@@ -5004,17 +5022,17 @@
+   GXX=yes
+ else
+   GXX=
+ fi
+ ac_test_CXXFLAGS=${CXXFLAGS+set}
+ ac_save_CXXFLAGS=$CXXFLAGS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+ $as_echo_n "checking whether $CXX accepts -g... " >&6; }
+-if test "${ac_cv_prog_cxx_g+set}" = set; then :
++if ${ac_cv_prog_cxx_g+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+    ac_cxx_werror_flag=yes
+    ac_cv_prog_cxx_g=no
+    CXXFLAGS="-g"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -5090,25 +5108,26 @@
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ depcc="$CXX"  am_compiler_list=
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+ $as_echo_n "checking dependency style of $depcc... " >&6; }
+-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then :
++if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+   # We make a subdir and do the tests there.  Otherwise we can end up
+   # making bogus files that we don't know about and never remove.  For
+   # instance it was reported that on HP-UX the gcc test will end up
+   # making a dummy file named `D' -- because `-MD' means `put the output
+   # in D'.
++  rm -rf conftest.dir
+   mkdir conftest.dir
+   # Copy depcomp to subdir because otherwise we won't find it if we're
+   # using a relative directory.
+   cp "$am_depcomp" conftest.dir
+   cd conftest.dir
+   # We will build objects and dependencies in a subdirectory because
+   # it helps to detect inapplicable dependency modes.  For instance
+   # both Tru64's cc and ICC support -MD to output dependencies as a
+@@ -5158,17 +5177,17 @@
+       # after this tag, mechanisms are not by side-effect, so they'll
+       # only be used when explicitly requested
+       if test "x$enable_dependency_tracking" = xyes; then
+ 	continue
+       else
+ 	break
+       fi
+       ;;
+-    msvisualcpp | msvcmsys)
++    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+       # This compiler won't grok `-c -o', but also, the minuso test has
+       # not run yet.  These depmodes are late enough in the game, and
+       # so weak that their functioning should not be impacted.
+       am__obj=conftest.${OBJEXT-o}
+       am__minus_obj=
+       ;;
+     none) break ;;
+     esac
+@@ -5218,17 +5237,17 @@
+ fi
+ 
+ 
+ if test -n "$ac_tool_prefix"; then
+   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_RANLIB+set}" = set; then :
++if ${ac_cv_prog_RANLIB+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$RANLIB"; then
+   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -5258,17 +5277,17 @@
+ 
+ fi
+ if test -z "$ac_cv_prog_RANLIB"; then
+   ac_ct_RANLIB=$RANLIB
+   # Extract the first word of "ranlib", so it can be a program name with args.
+ set dummy ranlib; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
++if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ac_ct_RANLIB"; then
+   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -5318,17 +5337,17 @@
+   GCC_FALSE=
+ fi
+    # let the Makefile know if we're gcc
+ 
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+ $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+-if test "${ac_cv_path_GREP+set}" = set; then :
++if ${ac_cv_path_GREP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -z "$GREP"; then
+   ac_path_GREP_found=false
+   # Loop through the user's path and test for each of PROGNAME-LIST
+   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+ do
+@@ -5367,31 +5386,31 @@
+ esac
+ 
+       $ac_path_GREP_found && break 3
+     done
+   done
+   done
+ IFS=$as_save_IFS
+   if test -z "$ac_cv_path_GREP"; then
+-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+   fi
+ else
+   ac_cv_path_GREP=$GREP
+ fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+ $as_echo "$ac_cv_path_GREP" >&6; }
+  GREP="$ac_cv_path_GREP"
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+ $as_echo_n "checking for egrep... " >&6; }
+-if test "${ac_cv_path_EGREP+set}" = set; then :
++if ${ac_cv_path_EGREP+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+    then ac_cv_path_EGREP="$GREP -E"
+    else
+      if test -z "$EGREP"; then
+   ac_path_EGREP_found=false
+   # Loop through the user's path and test for each of PROGNAME-LIST
+@@ -5433,32 +5452,32 @@
+ esac
+ 
+       $ac_path_EGREP_found && break 3
+     done
+   done
+   done
+ IFS=$as_save_IFS
+   if test -z "$ac_cv_path_EGREP"; then
+-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+   fi
+ else
+   ac_cv_path_EGREP=$EGREP
+ fi
+ 
+    fi
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+ $as_echo "$ac_cv_path_EGREP" >&6; }
+  EGREP="$ac_cv_path_EGREP"
+ 
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+ $as_echo_n "checking for ANSI C header files... " >&6; }
+-if test "${ac_cv_header_stdc+set}" = set; then :
++if ${ac_cv_header_stdc+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <stdlib.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #include <float.h>
+@@ -5785,17 +5804,17 @@
+                 PTHREAD_CFLAGS="$flag"
+                 ;;
+ 
+ 		pthread-config)
+ 		# Extract the first word of "pthread-config", so it can be a program name with args.
+ set dummy pthread-config; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_ax_pthread_config+set}" = set; then :
++if ${ac_cv_prog_ax_pthread_config+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$ax_pthread_config"; then
+   ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -5946,17 +5965,17 @@
+         # More AIX lossage: must compile with xlc_r or cc_r
+ 	if test x"$GCC" != xyes; then
+           for ac_prog in xlc_r cc_r
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+-if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then :
++if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   if test -n "$PTHREAD_CC"; then
+   ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+ else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+@@ -6018,31 +6037,30 @@
+ 
+ # On IRIX 5.3, sys/types and inttypes.h are conflicting.
+ for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ 		  inttypes.h stdint.h unistd.h
+ do :
+   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+ "
+-eval as_val=\$$as_ac_Header
+-   if test "x$as_val" = x""yes; then :
++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+   cat >>confdefs.h <<_ACEOF
+ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+ 
+ for ac_header in a.out.h
+ do :
+   ac_fn_c_check_header_mongrel "$LINENO" "a.out.h" "ac_cv_header_a_out_h" "$ac_includes_default"
+-if test "x$ac_cv_header_a_out_h" = x""yes; then :
++if test "x$ac_cv_header_a_out_h" = xyes; then :
+   cat >>confdefs.h <<_ACEOF
+ #define HAVE_A_OUT_H 1
+ _ACEOF
+ 
+ fi
+ 
+ done
+ 
+@@ -6084,17 +6102,17 @@
+                    CFLAGS="${CFLAGS} -m32"
+                    CXXFLAGS="${CXXFLAGS} -m32"
+                    usem32=true
+                    ;;
+                  no)
+                    usem32=false
+                    ;;
+                  *)
+-                   as_fn_error "bad value ${enableval} for --enable-m32" "$LINENO" 5
++                   as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5
+                    ;;
+                esac
+ else
+   usem32=false
+ fi
+ 
+ 
+ # Check whether --enable-processor was given.
+@@ -6102,17 +6120,17 @@
+   enableval=$enable_processor; case "${enableval}" in
+                  yes)
+                    disable_processor=false
+                    ;;
+                  no)
+                    disable_processor=true
+                    ;;
+                  *)
+-                   as_fn_error "bad value ${enableval} for --disable-processor" "$LINENO" 5
++                   as_fn_error $? "bad value ${enableval} for --disable-processor" "$LINENO" 5
+                    ;;
+                esac
+ else
+   disable_processor=false
+ fi
+ 
+  if test x$disable_processor = xtrue; then
+   DISABLE_PROCESSOR_TRUE=
+@@ -6128,47 +6146,47 @@
+   enableval=$enable_tools; case "${enableval}" in
+                  yes)
+                    disable_tools=false
+                    ;;
+                  no)
+                    disable_tools=true
+                    ;;
+                  *)
+-                   as_fn_error "bad value ${enableval} for --disable-tools" "$LINENO" 5
++                   as_fn_error $? "bad value ${enableval} for --disable-tools" "$LINENO" 5
+                    ;;
+                esac
+ else
+   disable_tools=false
+ fi
+ 
+  if test x$disable_tools = xtrue; then
+   DISABLE_TOOLS_TRUE=
+   DISABLE_TOOLS_FALSE='#'
+ else
+   DISABLE_TOOLS_TRUE='#'
+   DISABLE_TOOLS_FALSE=
+ fi
+ 
+ 
+ if test x$LINUX_HOST = xfalse -a x$disable_processor = xtrue -a x$disable_tools = xtrue; then
+-   as_fn_error "--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!" "$LINENO" 5
++   as_fn_error $? "--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!" "$LINENO" 5
+ fi
+ 
+ # Check whether --enable-selftest was given.
+ if test "${enable_selftest+set}" = set; then :
+   enableval=$enable_selftest; case "${enableval}" in
+                  yes)
+                    selftest=true
+                    ;;
+                  no)
+                    selftest=false
+                    ;;
+                  *)
+-                   as_fn_error "bad value ${enableval} for --enable-selftest" "$LINENO" 5
++                   as_fn_error $? "bad value ${enableval} for --enable-selftest" "$LINENO" 5
+                    ;;
+                esac
+ else
+   selftest=false
+ fi
+ 
+  if test x$selftest = xtrue; then
+   SELFTEST_TRUE=
+@@ -6240,35 +6258,47 @@
+      t clear
+      :clear
+      s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+      t end
+      s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+      :end' >>confcache
+ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+   if test -w "$cache_file"; then
+-    test "x$cache_file" != "x/dev/null" &&
++    if test "x$cache_file" != "x/dev/null"; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+ $as_echo "$as_me: updating cache $cache_file" >&6;}
+-    cat confcache >$cache_file
++      if test ! -f "$cache_file" || test -h "$cache_file"; then
++	cat confcache >"$cache_file"
++      else
++        case $cache_file in #(
++        */* | ?:*)
++	  mv -f confcache "$cache_file"$$ &&
++	  mv -f "$cache_file"$$ "$cache_file" ;; #(
++        *)
++	  mv -f confcache "$cache_file" ;;
++	esac
++      fi
++    fi
+   else
+     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+ $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+   fi
+ fi
+ rm -f confcache
+ 
+ test "x$prefix" = xNONE && prefix=$ac_default_prefix
+ # Let make expand exec_prefix.
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+ 
+ DEFS=-DHAVE_CONFIG_H
+ 
+ ac_libobjs=
+ ac_ltlibobjs=
++U=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+   # 1. Remove the extension, and $U if already installed.
+   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+   ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+   #    will be set to the directory where LIBOBJS objects are built.
+   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+   as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+@@ -6282,61 +6312,61 @@
+   am__EXEEXT_TRUE=
+   am__EXEEXT_FALSE='#'
+ else
+   am__EXEEXT_TRUE='#'
+   am__EXEEXT_FALSE=
+ fi
+ 
+ if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+-  as_fn_error "conditional \"AMDEP\" was never defined.
++  as_fn_error $? "conditional \"AMDEP\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
++  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then
+-  as_fn_error "conditional \"am__fastdepCCAS\" was never defined.
++  as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
++  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+-  as_fn_error "conditional \"am__fastdepCXX\" was never defined.
++  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then
+-  as_fn_error "conditional \"GCC\" was never defined.
++  as_fn_error $? "conditional \"GCC\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${LINUX_HOST_TRUE}" && test -z "${LINUX_HOST_FALSE}"; then
+-  as_fn_error "conditional \"LINUX_HOST\" was never defined.
++  as_fn_error $? "conditional \"LINUX_HOST\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${ANDROID_HOST_TRUE}" && test -z "${ANDROID_HOST_FALSE}"; then
+-  as_fn_error "conditional \"ANDROID_HOST\" was never defined.
++  as_fn_error $? "conditional \"ANDROID_HOST\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${DISABLE_PROCESSOR_TRUE}" && test -z "${DISABLE_PROCESSOR_FALSE}"; then
+-  as_fn_error "conditional \"DISABLE_PROCESSOR\" was never defined.
++  as_fn_error $? "conditional \"DISABLE_PROCESSOR\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${DISABLE_TOOLS_TRUE}" && test -z "${DISABLE_TOOLS_FALSE}"; then
+-  as_fn_error "conditional \"DISABLE_TOOLS\" was never defined.
++  as_fn_error $? "conditional \"DISABLE_TOOLS\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then
+-  as_fn_error "conditional \"SELFTEST\" was never defined.
++  as_fn_error $? "conditional \"SELFTEST\" was never defined.
+ Usually this means the macro was only invoked conditionally." "$LINENO" 5
+ fi
+ 
+-: ${CONFIG_STATUS=./config.status}
++: "${CONFIG_STATUS=./config.status}"
+ ac_write_fail=0
+ ac_clean_files_save=$ac_clean_files
+ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+ $as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+ as_write_fail=0
+ cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+ #! $SHELL
+@@ -6427,16 +6457,17 @@
+ # IFS
+ # We need space, tab and new line, in precisely that order.  Quoting is
+ # there to prevent editors from complaining about space-tab.
+ # (If _AS_PATH_WALK were called with IFS unset, it would disable word
+ # splitting by setting IFS to empty value.)
+ IFS=" ""	$as_nl"
+ 
+ # Find who we are.  Look in the path if we contain no directory separator.
++as_myself=
+ case $0 in #((
+   *[\\/]* ) as_myself=$0 ;;
+   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in $PATH
+ do
+   IFS=$as_save_IFS
+   test -z "$as_dir" && as_dir=.
+     test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+@@ -6472,29 +6503,29 @@
+ export LC_ALL
+ LANGUAGE=C
+ export LANGUAGE
+ 
+ # CDPATH.
+ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+ 
+ 
+-# as_fn_error ERROR [LINENO LOG_FD]
+-# ---------------------------------
++# as_fn_error STATUS ERROR [LINENO LOG_FD]
++# ----------------------------------------
+ # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+ # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+-# script with status $?, using 1 if that was 0.
++# script with STATUS, using 1 if that was 0.
+ as_fn_error ()
+ {
+-  as_status=$?; test $as_status -eq 0 && as_status=1
+-  if test "$3"; then
+-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++  as_status=$1; test $as_status -eq 0 && as_status=1
++  if test "$4"; then
++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+   fi
+-  $as_echo "$as_me: error: $1" >&2
++  $as_echo "$as_me: error: $2" >&2
+   as_fn_exit $as_status
+ } # as_fn_error
+ 
+ 
+ # as_fn_set_status STATUS
+ # -----------------------
+ # Set $? to STATUS, without forking.
+ as_fn_set_status ()
+@@ -6680,17 +6711,17 @@
+ 	  /^X\(\/\).*/{
+ 	    s//\1/
+ 	    q
+ 	  }
+ 	  s/.*/./; q'`
+       test -d "$as_dir" && break
+     done
+     test -z "$as_dirs" || eval "mkdir $as_dirs"
+-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+ 
+ 
+ } # as_fn_mkdir_p
+ if mkdir -p . 2>/dev/null; then
+   as_mkdir_p='mkdir -p "$as_dir"'
+ else
+   test -d ./-p && rmdir ./-p
+   as_mkdir_p=false
+@@ -6734,17 +6765,17 @@
+ test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ # Save the log message, to keep $0 and so on meaningful, and to
+ # report actual input values of CONFIG_FILES etc. instead of their
+ # values after options handling.
+ ac_log="
+ This file was extended by breakpad $as_me 0.1, which was
+-generated by GNU Autoconf 2.65.  Invocation command line was
++generated by GNU Autoconf 2.68.  Invocation command line was
+ 
+   CONFIG_FILES    = $CONFIG_FILES
+   CONFIG_HEADERS  = $CONFIG_HEADERS
+   CONFIG_LINKS    = $CONFIG_LINKS
+   CONFIG_COMMANDS = $CONFIG_COMMANDS
+   $ $0 $@
+ 
+ on `(hostname || uname -n) 2>/dev/null | sed 1q`
+@@ -6800,20 +6831,20 @@
+ 
+ Report bugs to <google-breakpad-dev@googlegroups.com>."
+ 
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ ac_cs_version="\\
+ breakpad config.status 0.1
+-configured by $0, generated by GNU Autoconf 2.65,
++configured by $0, generated by GNU Autoconf 2.68,
+   with options \\"\$ac_cs_config\\"
+ 
+-Copyright (C) 2009 Free Software Foundation, Inc.
++Copyright (C) 2010 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+ 
+ ac_pwd='$ac_pwd'
+ srcdir='$srcdir'
+ INSTALL='$INSTALL'
+ MKDIR_P='$MKDIR_P'
+ AWK='$AWK'
+@@ -6821,21 +6852,26 @@
+ _ACEOF
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ # The default lists apply if the user does not specify any file.
+ ac_need_defaults=:
+ while test $# != 0
+ do
+   case $1 in
+-  --*=*)
++  --*=?*)
+     ac_option=`expr "X$1" : 'X\([^=]*\)='`
+     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+     ac_shift=:
+     ;;
++  --*=)
++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
++    ac_optarg=
++    ac_shift=:
++    ;;
+   *)
+     ac_option=$1
+     ac_optarg=$2
+     ac_shift=shift
+     ;;
+   esac
+ 
+   case $ac_option in
+@@ -6847,38 +6883,39 @@
+   --config | --confi | --conf | --con | --co | --c )
+     $as_echo "$ac_cs_config"; exit ;;
+   --debug | --debu | --deb | --de | --d | -d )
+     debug=: ;;
+   --file | --fil | --fi | --f )
+     $ac_shift
+     case $ac_optarg in
+     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
++    '') as_fn_error $? "missing file argument" ;;
+     esac
+     as_fn_append CONFIG_FILES " '$ac_optarg'"
+     ac_need_defaults=false;;
+   --header | --heade | --head | --hea )
+     $ac_shift
+     case $ac_optarg in
+     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+     esac
+     as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+     ac_need_defaults=false;;
+   --he | --h)
+     # Conflict between --help and --header
+-    as_fn_error "ambiguous option: \`$1'
++    as_fn_error $? "ambiguous option: \`$1'
+ Try \`$0 --help' for more information.";;
+   --help | --hel | -h )
+     $as_echo "$ac_cs_usage"; exit ;;
+   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+   | -silent | --silent | --silen | --sile | --sil | --si | --s)
+     ac_cs_silent=: ;;
+ 
+   # This is an error.
+-  -*) as_fn_error "unrecognized option: \`$1'
++  -*) as_fn_error $? "unrecognized option: \`$1'
+ Try \`$0 --help' for more information." ;;
+ 
+   *) as_fn_append ac_config_targets " $1"
+      ac_need_defaults=false ;;
+ 
+   esac
+   shift
+ done
+@@ -6926,17 +6963,17 @@
+ # Handling of arguments.
+ for ac_config_target in $ac_config_targets
+ do
+   case $ac_config_target in
+     "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
+     "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ 
+-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
++  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+   esac
+ done
+ 
+ 
+ # If the user did not use the arguments to specify the items to instantiate,
+ # then the envvar interface is used.  Set only those that are not.
+ # We use the long form for the default assignment because of an extremely
+ # bizarre bug on SunOS 4.1.3.
+@@ -6949,82 +6986,84 @@
+ # Have a temporary directory for convenience.  Make it in the build tree
+ # simply because there is no reason against having it here, and in addition,
+ # creating and moving files from /tmp can sometimes cause problems.
+ # Hook for its removal unless debugging.
+ # Note that there is a small window in which the directory will not be cleaned:
+ # after its creation but before its name has been assigned to `$tmp'.
+ $debug ||
+ {
+-  tmp=
++  tmp= ac_tmp=
+   trap 'exit_status=$?
+-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
++  : "${ac_tmp:=$tmp}"
++  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+ ' 0
+   trap 'as_fn_exit 1' 1 2 13 15
+ }
+ # Create a (secure) tmp directory for tmp files.
+ 
+ {
+   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+-  test -n "$tmp" && test -d "$tmp"
++  test -d "$tmp"
+ }  ||
+ {
+   tmp=./conf$$-$RANDOM
+   (umask 077 && mkdir "$tmp")
+-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
++} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
++ac_tmp=$tmp
+ 
+ # Set up the scripts for CONFIG_FILES section.
+ # No need to generate them if there are no CONFIG_FILES.
+ # This happens for instance with `./config.status config.h'.
+ if test -n "$CONFIG_FILES"; then
+ 
+ 
+ ac_cr=`echo X | tr X '\015'`
+ # On cygwin, bash can eat \r inside `` if the user requested igncr.
+ # But we know of no other shell where ac_cr would be empty at this
+ # point, so we can use a bashism as a fallback.
+ if test "x$ac_cr" = x; then
+   eval ac_cr=\$\'\\r\'
+ fi
+ ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+ if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+-  ac_cs_awk_cr='\r'
++  ac_cs_awk_cr='\\r'
+ else
+   ac_cs_awk_cr=$ac_cr
+ fi
+ 
+-echo 'BEGIN {' >"$tmp/subs1.awk" &&
++echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+ _ACEOF
+ 
+ 
+ {
+   echo "cat >conf$$subs.awk <<_ACEOF" &&
+   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+   echo "_ACEOF"
+ } >conf$$subs.sh ||
+-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
++  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ ac_delim='%!_!# '
+ for ac_last_try in false false false false false :; do
+   . ./conf$$subs.sh ||
+-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ 
+   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+   if test $ac_delim_n = $ac_delim_num; then
+     break
+   elif $ac_last_try; then
+-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+   else
+     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+   fi
+ done
+ rm -f conf$$subs.sh
+ 
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
++cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+ _ACEOF
+ sed -n '
+ h
+ s/^/S["/; s/!.*/"]=/
+ p
+ g
+ s/^[^!]*!//
+ :repl
+@@ -7062,17 +7101,17 @@
+ /^[^""]/{
+   N
+   s/\n//
+ }
+ ' >>$CONFIG_STATUS || ac_write_fail=1
+ rm -f conf$$subs.awk
+ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ _ACAWK
+-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
++cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+   for (key in S) S_is_set[key] = 1
+   FS = ""
+ 
+ }
+ {
+   line = $ 0
+   nfields = split(line, field, "@")
+   substed = 0
+@@ -7094,59 +7133,67 @@
+ 
+ _ACAWK
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+ else
+   cat
+-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
++fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
++  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+ _ACEOF
+ 
+-# VPATH may cause trouble with some makes, so we remove $(srcdir),
+-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
++# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
++# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+ # trailing colons and then remove the whole line if VPATH becomes empty
+ # (actually we leave an empty line to preserve line numbers).
+ if test "x$srcdir" = x.; then
+-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+-s/:*\$(srcdir):*/:/
+-s/:*\${srcdir}:*/:/
+-s/:*@srcdir@:*/:/
+-s/^\([^=]*=[	 ]*\):*/\1/
++  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
++h
++s///
++s/^/:/
++s/[	 ]*$/:/
++s/:\$(srcdir):/:/g
++s/:\${srcdir}:/:/g
++s/:@srcdir@:/:/g
++s/^:*//
+ s/:*$//
++x
++s/\(=[	 ]*\).*/\1/
++G
++s/\n//
+ s/^[^=]*=[	 ]*$//
+ }'
+ fi
+ 
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ fi # test -n "$CONFIG_FILES"
+ 
+ # Set up the scripts for CONFIG_HEADERS section.
+ # No need to generate them if there are no CONFIG_HEADERS.
+ # This happens for instance with `./config.status Makefile'.
+ if test -n "$CONFIG_HEADERS"; then
+-cat >"$tmp/defines.awk" <<\_ACAWK ||
++cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+ BEGIN {
+ _ACEOF
+ 
+ # Transform confdefs.h into an awk script `defines.awk', embedded as
+ # here-document in config.status, that substitutes the proper values into
+ # config.h.in to produce config.h.
+ 
+ # Create a delimiter string that does not exist in confdefs.h, to ease
+ # handling of long lines.
+ ac_delim='%!_!# '
+ for ac_last_try in false false :; do
+-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+-  if test -z "$ac_t"; then
++  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
++  if test -z "$ac_tt"; then
+     break
+   elif $ac_last_try; then
+-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
++    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+   else
+     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+   fi
+ done
+ 
+ # For the awk script, D is an array of macro values keyed by name,
+ # likewise P contains macro parameters if any.  Preserve backslash
+ # newline sequences.
+@@ -7221,30 +7268,30 @@
+       next
+     }
+   }
+ }
+ { print }
+ _ACAWK
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
++  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+ fi # test -n "$CONFIG_HEADERS"
+ 
+ 
+ eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+ shift
+ for ac_tag
+ do
+   case $ac_tag in
+   :[FHLC]) ac_mode=$ac_tag; continue;;
+   esac
+   case $ac_mode$ac_tag in
+   :[FHL]*:*);;
+-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
++  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+   :[FH]-) ac_tag=-:-;;
+   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+   esac
+   ac_save_IFS=$IFS
+   IFS=:
+   set x $ac_tag
+   IFS=$ac_save_IFS
+   shift
+@@ -7253,26 +7300,26 @@
+ 
+   case $ac_mode in
+   :L) ac_source=$1;;
+   :[FH])
+     ac_file_inputs=
+     for ac_f
+     do
+       case $ac_f in
+-      -) ac_f="$tmp/stdin";;
++      -) ac_f="$ac_tmp/stdin";;
+       *) # Look for the file first in the build tree, then in the source tree
+ 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+ 	 # because $ac_f cannot contain `:'.
+ 	 test -f "$ac_f" ||
+ 	   case $ac_f in
+ 	   [\\/$]*) false;;
+ 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ 	   esac ||
+-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
++	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+       esac
+       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+       as_fn_append ac_file_inputs " '$ac_f'"
+     done
+ 
+     # Let's still pretend it is `configure' which instantiates (i.e., don't
+     # use $as_me), people would be surprised to read:
+     #    /* config.h.  Generated by config.status.  */
+@@ -7288,18 +7335,18 @@
+     case $configure_input in #(
+     *\&* | *\|* | *\\* )
+        ac_sed_conf_input=`$as_echo "$configure_input" |
+        sed 's/[\\\\&|]/\\\\&/g'`;; #(
+     *) ac_sed_conf_input=$configure_input;;
+     esac
+ 
+     case $ac_tag in
+-    *:-:* | *:-) cat >"$tmp/stdin" \
+-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
++    *:-:* | *:-) cat >"$ac_tmp/stdin" \
++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+     esac
+     ;;
+   esac
+ 
+   ac_dir=`$as_dirname -- "$ac_file" ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ 	 X"$ac_file" : 'X\(//\)[^/]' \| \
+ 	 X"$ac_file" : 'X\(//\)$' \| \
+@@ -7425,56 +7472,57 @@
+ s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+ s&@builddir@&$ac_builddir&;t t
+ s&@abs_builddir@&$ac_abs_builddir&;t t
+ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+ s&@INSTALL@&$ac_INSTALL&;t t
+ s&@MKDIR_P@&$ac_MKDIR_P&;t t
+ $ac_datarootdir_hack
+ "
+-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+-  || as_fn_error "could not create $ac_file" "$LINENO" 5
++eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
++  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ 
+ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
++  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
++  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
++      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+-which seems to be undefined.  Please make sure it is defined." >&5
++which seems to be undefined.  Please make sure it is defined" >&5
+ $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+-which seems to be undefined.  Please make sure it is defined." >&2;}
+-
+-  rm -f "$tmp/stdin"
++which seems to be undefined.  Please make sure it is defined" >&2;}
++
++  rm -f "$ac_tmp/stdin"
+   case $ac_file in
+-  -) cat "$tmp/out" && rm -f "$tmp/out";;
+-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
++  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
++  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+   esac \
+-  || as_fn_error "could not create $ac_file" "$LINENO" 5
++  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+  ;;
+   :H)
+   #
+   # CONFIG_HEADER
+   #
+   if test x"$ac_file" != x-; then
+     {
+       $as_echo "/* $configure_input  */" \
+-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+-    } >"$tmp/config.h" \
+-      || as_fn_error "could not create $ac_file" "$LINENO" 5
+-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
++      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
++    } >"$ac_tmp/config.h" \
++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
++    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+ $as_echo "$as_me: $ac_file is unchanged" >&6;}
+     else
+       rm -f "$ac_file"
+-      mv "$tmp/config.h" "$ac_file" \
+-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
++      mv "$ac_tmp/config.h" "$ac_file" \
++	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+     fi
+   else
+     $as_echo "/* $configure_input  */" \
+-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+-      || as_fn_error "could not create -" "$LINENO" 5
++      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
++      || as_fn_error $? "could not create -" "$LINENO" 5
+   fi
+ # Compute "$ac_file"'s index in $config_headers.
+ _am_arg="$ac_file"
+ _am_stamp_count=1
+ for _am_header in $config_headers :; do
+   case $_am_header in
+     $_am_arg | $_am_arg:* )
+       break ;;
+@@ -7614,17 +7662,17 @@
+ done # for ac_tag
+ 
+ 
+ as_fn_exit 0
+ _ACEOF
+ ac_clean_files=$ac_clean_files_save
+ 
+ test $ac_write_fail = 0 ||
+-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
++  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+ 
+ 
+ # configure is writing to config.log, and then calls config.status.
+ # config.status does its own redirection, appending to config.log.
+ # Unfortunately, on DOS this fails, as config.log is still kept open
+ # by configure, so config.status won't be able to write to it; its
+ # output is simply discarded.  So we exec the FD to /dev/null,
+ # effectively closing config.log, so it can be properly (re)opened and
+@@ -7635,15 +7683,15 @@
+   ac_config_status_args=
+   test "$silent" = yes &&
+     ac_config_status_args="$ac_config_status_args --quiet"
+   exec 5>/dev/null
+   $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+   exec 5>>config.log
+   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+   # would make configure fail if this is the last instruction.
+-  $ac_cs_success || as_fn_exit $?
++  $ac_cs_success || as_fn_exit 1
+ fi
+ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+ fi
+ 
+diff --git a/src/common/dwarf_cfi_to_module.cc b/src/common/dwarf_cfi_to_module.cc
+--- a/src/common/dwarf_cfi_to_module.cc
++++ b/src/common/dwarf_cfi_to_module.cc
+@@ -122,17 +122,18 @@
+   return_address_ = return_address;
+ 
+   // Breakpad STACK CFI records must provide a .ra rule, but DWARF CFI
+   // may not establish any rule for .ra if the return address column
+   // is an ordinary register, and that register holds the return
+   // address on entry to the function. So establish an initial .ra
+   // rule citing the return address register.
+   if (return_address_ < register_names_.size())
+-    entry_->initial_rules[ra_name_] = register_names_[return_address_];
++    entry_->initial_rules[ra_name_]
++      = Module::Expr(register_names_[return_address_], 0, false);
+ 
+   return true;
+ }
+ 
+ string DwarfCFIToModule::RegisterName(int i) {
+   assert(entry_);
+   if (i < 0) {
+     assert(i == kCFARegister);
+@@ -148,69 +149,65 @@
+ 
+   reporter_->UnnamedRegister(entry_offset_, reg);
+   char buf[30];
+   sprintf(buf, "unnamed_register%u", reg);
+   return buf;
+ }
+ 
+ void DwarfCFIToModule::Record(Module::Address address, int reg,
+-                              const string &rule) {
++                              const Module::Expr &rule) {
+   assert(entry_);
+ 
+-  // Place the name in our global set of strings, and then use the string
+-  // from the set. Even though the assignment looks like a copy, all the
+-  // major std::string implementations use reference counting internally,
+-  // so the effect is to have all our data structures share copies of rules
+-  // whenever possible. Since register names are drawn from a
+-  // vector<string>, register names are already shared.
+-  string shared_rule = *common_strings_.insert(rule).first;
+-
+   // Is this one of this entry's initial rules?
+   if (address == entry_->address)
+-    entry_->initial_rules[RegisterName(reg)] = shared_rule;
++    entry_->initial_rules[RegisterName(reg)] = rule;
+   // File it under the appropriate address.
+   else
+-    entry_->rule_changes[address][RegisterName(reg)] = shared_rule;
++    entry_->rule_changes[address][RegisterName(reg)] = rule;
+ }
+ 
+ bool DwarfCFIToModule::UndefinedRule(uint64 address, int reg) {
+   reporter_->UndefinedNotSupported(entry_offset_, RegisterName(reg));
+   // Treat this as a non-fatal error.
+   return true;
+ }
+ 
+ bool DwarfCFIToModule::SameValueRule(uint64 address, int reg) {
+-  ostringstream s;
+-  s << RegisterName(reg);
+-  Record(address, reg, s.str());
++  // reg + 0
++  Module::Expr rule
++    = Module::Expr(RegisterName(reg), 0, false);
++  Record(address, reg, rule);
+   return true;
+ }
+ 
+ bool DwarfCFIToModule::OffsetRule(uint64 address, int reg,
+                                   int base_register, long offset) {
+-  ostringstream s;
+-  s << RegisterName(base_register) << " " << offset << " + ^";
+-  Record(address, reg, s.str());
++  // *(base_register + offset)
++  Module::Expr rule
++    = Module::Expr(RegisterName(base_register), offset, true);
++  Record(address, reg, rule);
+   return true;
+ }
+ 
+ bool DwarfCFIToModule::ValOffsetRule(uint64 address, int reg,
+                                      int base_register, long offset) {
+-  ostringstream s;
+-  s << RegisterName(base_register) << " " << offset << " +";
+-  Record(address, reg, s.str());
++  // base_register + offset
++  Module::Expr rule
++    = Module::Expr(RegisterName(base_register), offset, false);
++  Record(address, reg, rule);
+   return true;
+ }
+ 
+ bool DwarfCFIToModule::RegisterRule(uint64 address, int reg,
+                                     int base_register) {
+-  ostringstream s;
+-  s << RegisterName(base_register);
+-  Record(address, reg, s.str());
++  // base_register + 0
++  Module::Expr rule
++    = Module::Expr(RegisterName(base_register), 0, false);
++  Record(address, reg, rule);
+   return true;
+ }
+ 
+ bool DwarfCFIToModule::ExpressionRule(uint64 address, int reg,
+                                       const string &expression) {
+   reporter_->ExpressionsNotSupported(entry_offset_, RegisterName(reg));
+   // Treat this as a non-fatal error.
+   return true;
+diff --git a/src/common/dwarf_cfi_to_module.h b/src/common/dwarf_cfi_to_module.h
+--- a/src/common/dwarf_cfi_to_module.h
++++ b/src/common/dwarf_cfi_to_module.h
+@@ -147,17 +147,17 @@
+                                  const string &expression);
+   virtual bool End();
+ 
+  private:
+   // Return the name to use for register REG.
+   string RegisterName(int i);
+ 
+   // Record RULE for register REG at ADDRESS.
+-  void Record(Module::Address address, int reg, const string &rule);
++  void Record(Module::Address address, int reg, const Module::Expr &rule);
+ 
+   // The module to which we should add entries.
+   Module *module_;
+ 
+   // Map from register numbers to register names.
+   const vector<string> &register_names_;
+ 
+   // The reporter to use to report problems.
+diff --git a/src/common/dwarf_cfi_to_module_unittest.cc b/src/common/dwarf_cfi_to_module_unittest.cc
+--- a/src/common/dwarf_cfi_to_module_unittest.cc
++++ b/src/common/dwarf_cfi_to_module_unittest.cc
+@@ -153,69 +153,71 @@
+ }
+ 
+ TEST_F(Rule, SameValueRule) {
+   StartEntry();
+   ASSERT_TRUE(handler.SameValueRule(entry_address, 6));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial["reg6"] = "reg6";
++  expected_initial["reg6"] = Module::Expr("reg6", 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+ 
+ TEST_F(Rule, OffsetRule) {
+   StartEntry();
+   ASSERT_TRUE(handler.OffsetRule(entry_address + 1, return_reg,
+                                  DwarfCFIToModule::kCFARegister,
+                                  16927065));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   EXPECT_EQ(0U, entries[0]->initial_rules.size());
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 1][".ra"] = ".cfa 16927065 + ^";
++  expected_changes[entry_address + 1][".ra"] =
++      Module::Expr(".cfa", 16927065, true);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+ TEST_F(Rule, OffsetRuleNegative) {
+   StartEntry();
+   ASSERT_TRUE(handler.OffsetRule(entry_address + 1,
+                                  DwarfCFIToModule::kCFARegister, 4, -34530721));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   EXPECT_EQ(0U, entries[0]->initial_rules.size());
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 1][".cfa"] = "reg4 -34530721 + ^";
++  expected_changes[entry_address + 1][".cfa"] =
++      Module::Expr("reg4", -34530721, true);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+ TEST_F(Rule, ValOffsetRule) {
+   // Use an unnamed register number, to exercise that branch of RegisterName.
+   EXPECT_CALL(reporter, UnnamedRegister(_, 11));
+   StartEntry();
+   ASSERT_TRUE(handler.ValOffsetRule(entry_address + 0x5ab7,
+                                     DwarfCFIToModule::kCFARegister,
+                                     11, 61812979));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   EXPECT_EQ(0U, entries[0]->initial_rules.size());
+   Module::RuleChangeMap expected_changes;
+   expected_changes[entry_address + 0x5ab7][".cfa"] =
+-      "unnamed_register11 61812979 +";
++      Module::Expr("unnamed_register11", 61812979, false);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+ TEST_F(Rule, RegisterRule) {
+   StartEntry();
+   ASSERT_TRUE(handler.RegisterRule(entry_address, return_reg, 3));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = "reg3";
++  expected_initial[".ra"] = Module::Expr("reg3", 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+ 
+ TEST_F(Rule, ExpressionRule) {
+   EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg2"));
+   StartEntry();
+   ASSERT_TRUE(handler.ExpressionRule(entry_address + 0xf326, 2,
+@@ -239,45 +241,46 @@
+ 
+ TEST_F(Rule, DefaultReturnAddressRule) {
+   return_reg = 2;
+   StartEntry();
+   ASSERT_TRUE(handler.RegisterRule(entry_address, 0, 1));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = "reg2";
+-  expected_initial["reg0"] = "reg1";
++  expected_initial[".ra"] = Module::Expr("reg2", 0, false);
++  expected_initial["reg0"] = Module::Expr("reg1", 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+ 
+ TEST_F(Rule, DefaultReturnAddressRuleOverride) {
+   return_reg = 2;
+   StartEntry();
+   ASSERT_TRUE(handler.RegisterRule(entry_address, return_reg, 1));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = "reg1";
++  expected_initial[".ra"] = Module::Expr("reg1", 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+ 
+ TEST_F(Rule, DefaultReturnAddressRuleLater) {
+   return_reg = 2;
+   StartEntry();
+   ASSERT_TRUE(handler.RegisterRule(entry_address + 1, return_reg, 1));
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = "reg2";
++  expected_initial[".ra"] = Module::Expr("reg2", 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 1][".ra"] = "reg1";
++  expected_changes[entry_address + 1][".ra"] =
++      Module::Expr("reg1", 0, false);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+ TEST(RegisterNames, I386) {
+   vector<string> names = DwarfCFIToModule::RegisterNames::I386();
+ 
+   EXPECT_EQ("$eax", names[0]);
+   EXPECT_EQ("$ecx", names[1]);
+diff --git a/src/common/module.cc b/src/common/module.cc
+--- a/src/common/module.cc
++++ b/src/common/module.cc
+@@ -246,16 +246,34 @@
+ }
+ 
+ bool Module::ReportError() {
+   fprintf(stderr, "error writing symbol file: %s\n",
+           strerror(errno));
+   return false;
+ }
+ 
++std::ostream& operator<<(std::ostream& stream, const Module::Expr& expr) {
++  assert(!expr.invalid());
++  switch (expr.how_) {
++    case Module::kExprSimple:
++      stream << expr.ident_ << " " << expr.offset_ << " +";
++      break;
++    case Module::kExprSimpleMem:
++      stream << expr.ident_ << " " << expr.offset_ << " + ^";
++      break;
++    case Module::kExprPostfix:
++      stream << expr.postfix_; break;
++    case Module::kExprInvalid:
++    default:
++      break;
++  }
++  return stream;
++}
++
+ bool Module::WriteRuleMap(const RuleMap &rule_map, std::ostream &stream) {
+   for (RuleMap::const_iterator it = rule_map.begin();
+        it != rule_map.end(); ++it) {
+     if (it != rule_map.begin())
+       stream << ' ';
+     stream << it->first << ": " << it->second;
+   }
+   return stream.good();
+diff --git a/src/common/module.h b/src/common/module.h
+--- a/src/common/module.h
++++ b/src/common/module.h
+@@ -119,21 +119,81 @@
+   };
+ 
+   // An exported symbol.
+   struct Extern {
+     Address address;
+     string name;
+   };
+ 
+-  // A map from register names to postfix expressions that recover
+-  // their their values. This can represent a complete set of rules to
++  // Representation of an expression.  This can either be a postfix
++  // expression, in which case it is stored as a string, or a simple
++  // expression of the form (identifier + imm) or *(identifier + imm).
++  // It can also be invalid (denoting "no value").
++  enum ExprHow {
++    kExprInvalid = 1,
++    kExprPostfix,
++    kExprSimple,
++    kExprSimpleMem
++  };
++  struct Expr {
++    // Construct a simple-form expression
++    Expr(string ident, long offset, bool deref) {
++      if (ident.empty()) {
++        Expr();
++      } else {
++        postfix_ = "";
++        ident_ = ident;
++        offset_ = offset;
++        how_ = deref ? kExprSimpleMem : kExprSimple;
++      }
++    }
++    // Construct an expression from a postfix string
++    Expr(string postfix) {
++      if (postfix.empty()) {
++        Expr();
++      } else {
++        postfix_ = postfix;
++        ident_ = "";
++        offset_ = 0;
++        how_ = kExprPostfix;
++      }
++    }
++    // Construct an invalid expression
++    Expr() {
++      postfix_ = "";
++      ident_ = "";
++      offset_ = 0;
++      how_ = kExprInvalid;
++    }
++    bool invalid() const { return how_ == kExprInvalid; }
++    bool operator==(const Expr& other) const {
++      return how_ == other.how_ &&
++          ident_ == other.ident_ &&
++          offset_ == other.offset_ &&
++          postfix_ == other.postfix_;
++    }
++
++    // The identifier that gives the starting value for simple expressions.
++    string  ident_;
++    // The offset to add for simple expressions.
++    long    offset_;
++    // The Postfix expression string to evaluate for non-simple expressions.
++    string  postfix_;
++    // The operation expressed by this expression.
++    ExprHow how_;
++
++    friend std::ostream& operator<<(std::ostream& stream, const Expr& expr);
++  };
++
++  // A map from register names to expressions that recover
++  // their values. This can represent a complete set of rules to
+   // follow at some address, or a set of changes to be applied to an
+   // extant set of rules.
+-  typedef map<string, string> RuleMap;
++  typedef map<string, Expr> RuleMap;
+ 
+   // A map from addresses to RuleMaps, representing changes that take
+   // effect at given addresses.
+   typedef map<Address, RuleMap> RuleChangeMap;
+ 
+   // A range of 'STACK CFI' stack walking information. An instance of
+   // this structure corresponds to a 'STACK CFI INIT' record and the
+   // subsequent 'STACK CFI' records that fall within its range.
+diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
+--- a/src/common/module_unittest.cc
++++ b/src/common/module_unittest.cc
+@@ -125,21 +125,21 @@
+   function->lines.push_back(line1);
+ 
+   m.AddFunction(function);
+ 
+   // Some stack information.
+   Module::StackFrameEntry *entry = new Module::StackFrameEntry();
+   entry->address = 0x30f9e5c83323973dULL;
+   entry->size = 0x49fc9ca7c7c13dc2ULL;
+-  entry->initial_rules[".cfa"] = "he was a handsome man";
+-  entry->initial_rules["and"] = "what i want to know is";
++  entry->initial_rules[".cfa"] = Module::Expr("he was a handsome man");
++  entry->initial_rules["and"] = Module::Expr("what i want to know is");
+   entry->rule_changes[0x30f9e5c83323973eULL]["how"] =
+-    "do you like your blueeyed boy";
+-  entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death";
++    Module::Expr("do you like your blueeyed boy");
++  entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death");
+   m.AddStackFrameEntry(entry);
+ 
+   // Set the load address.  Doing this after adding all the data to
+   // the module must work fine.
+   m.SetLoadAddress(0x2ab698b0b6407073LL);
+ 
+   m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+@@ -229,21 +229,21 @@
+   function->lines.push_back(line1);
+ 
+   m.AddFunction(function);
+ 
+   // Some stack information.
+   Module::StackFrameEntry *entry = new Module::StackFrameEntry();
+   entry->address = 0x30f9e5c83323973dULL;
+   entry->size = 0x49fc9ca7c7c13dc2ULL;
+-  entry->initial_rules[".cfa"] = "he was a handsome man";
+-  entry->initial_rules["and"] = "what i want to know is";
++  entry->initial_rules[".cfa"] = Module::Expr("he was a handsome man");
++  entry->initial_rules["and"] = Module::Expr("what i want to know is");
+   entry->rule_changes[0x30f9e5c83323973eULL]["how"] =
+-    "do you like your blueeyed boy";
+-  entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = "Death";
++    Module::Expr("do you like your blueeyed boy");
++  entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death");
+   m.AddStackFrameEntry(entry);
+ 
+   // Set the load address.  Doing this after adding all the data to
+   // the module must work fine.
+   m.SetLoadAddress(0x2ab698b0b6407073LL);
+ 
+   m.Write(s, NO_CFI);
+   string contents = s.str();
+@@ -305,34 +305,34 @@
+   entry1->address = 0xddb5f41285aa7757ULL;
+   entry1->size = 0x1486493370dc5073ULL;
+   m.AddStackFrameEntry(entry1);
+ 
+   // Second STACK CFI entry, with initial rules but no deltas.
+   Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
+   entry2->address = 0x8064f3af5e067e38ULL;
+   entry2->size = 0x0de2a5ee55509407ULL;
+-  entry2->initial_rules[".cfa"] = "I think that I shall never see";
+-  entry2->initial_rules["stromboli"] = "a poem lovely as a tree";
+-  entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest";
++  entry2->initial_rules[".cfa"] = Module::Expr("I think that I shall never see");
++  entry2->initial_rules["stromboli"] = Module::Expr("a poem lovely as a tree");
++  entry2->initial_rules["cannoli"] = Module::Expr("a tree whose hungry mouth is prest");
+   m.AddStackFrameEntry(entry2);
+ 
+   // Third STACK CFI entry, with initial rules and deltas.
+   Module::StackFrameEntry *entry3 = new Module::StackFrameEntry();
+   entry3->address = 0x5e8d0db0a7075c6cULL;
+   entry3->size = 0x1c7edb12a7aea229ULL;
+-  entry3->initial_rules[".cfa"] = "Whose woods are these";
++  entry3->initial_rules[".cfa"] = Module::Expr("Whose woods are these");
+   entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
+-    "the village though";
++    Module::Expr("the village though");
+   entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
+-    "he will not see me stopping here";
++    Module::Expr("he will not see me stopping here");
+   entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
+-    "his house is in";
++    Module::Expr("his house is in");
+   entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
+-    "I think I know";
++    Module::Expr("I think I know");
+   m.AddStackFrameEntry(entry3);
+ 
+   // Check that Write writes STACK CFI records properly.
+   m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+                "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229"
+                " .cfa: Whose woods are these\n"
+@@ -352,33 +352,33 @@
+   // Check that GetStackFrameEntries works.
+   vector<Module::StackFrameEntry *> entries;
+   m.GetStackFrameEntries(&entries);
+   ASSERT_EQ(3U, entries.size());
+   // Check first entry.
+   EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address);
+   EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size);
+   Module::RuleMap entry1_initial;
+-  entry1_initial[".cfa"] = "Whose woods are these";
++  entry1_initial[".cfa"] = Module::Expr("Whose woods are these");
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial));
+   Module::RuleChangeMap entry1_changes;
+-  entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
+-  entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
+-  entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
++  entry1_changes[0x36682fad3763ffffULL][".cfa"] = Module::Expr("I think I know");
++  entry1_changes[0x36682fad3763ffffULL]["stromboli"] = Module::Expr("his house is in");
++  entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = Module::Expr("the village though");
+   entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
+-    "he will not see me stopping here";
++    Module::Expr("he will not see me stopping here");
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes));
+   // Check second entry.
+   EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address);
+   EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size);
+   ASSERT_EQ(3U, entries[1]->initial_rules.size());
+   Module::RuleMap entry2_initial;
+-  entry2_initial[".cfa"] = "I think that I shall never see";
+-  entry2_initial["stromboli"] = "a poem lovely as a tree";
+-  entry2_initial["cannoli"] = "a tree whose hungry mouth is prest";
++  entry2_initial[".cfa"] = Module::Expr("I think that I shall never see");
++  entry2_initial["stromboli"] = Module::Expr("a poem lovely as a tree");
++  entry2_initial["cannoli"] = Module::Expr("a tree whose hungry mouth is prest");
+   EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial));
+   ASSERT_EQ(0U, entries[1]->rule_changes.size());
+   // Check third entry.
+   EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address);
+   EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size);
+   ASSERT_EQ(0U, entries[2]->initial_rules.size());
+   ASSERT_EQ(0U, entries[2]->rule_changes.size());
+ }
+@@ -585,34 +585,34 @@
+   entry1->address = 0x2000;
+   entry1->size = 0x900;
+   m.AddStackFrameEntry(entry1);
+ 
+   // Second STACK CFI entry, with initial rules but no deltas.
+   Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
+   entry2->address = 0x3000;
+   entry2->size = 0x900;
+-  entry2->initial_rules[".cfa"] = "I think that I shall never see";
+-  entry2->initial_rules["stromboli"] = "a poem lovely as a tree";
+-  entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest";
++  entry2->initial_rules[".cfa"] = Module::Expr("I think that I shall never see");
++  entry2->initial_rules["stromboli"] = Module::Expr("a poem lovely as a tree");
++  entry2->initial_rules["cannoli"] = Module::Expr("a tree whose hungry mouth is prest");
+   m.AddStackFrameEntry(entry2);
+ 
+   // Third STACK CFI entry, with initial rules and deltas.
+   Module::StackFrameEntry *entry3 = new Module::StackFrameEntry();
+   entry3->address = 0x1000;
+   entry3->size = 0x900;
+-  entry3->initial_rules[".cfa"] = "Whose woods are these";
++  entry3->initial_rules[".cfa"] = Module::Expr("Whose woods are these");
+   entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
+-    "the village though";
++    Module::Expr("the village though");
+   entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
+-    "he will not see me stopping here";
++    Module::Expr("he will not see me stopping here");
+   entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
+-    "his house is in";
++    Module::Expr("his house is in");
+   entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
+-    "I think I know";
++    Module::Expr("I think I know");
+   m.AddStackFrameEntry(entry3);
+ 
+   Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000);
+   EXPECT_EQ(entry3, s);
+   s = m.FindStackFrameEntryByAddress(0x18FF);
+   EXPECT_EQ(entry3, s);
+ 
+   s = m.FindStackFrameEntryByAddress(0x1900);
+diff --git a/src/processor/cfi_frame_info.cc b/src/processor/cfi_frame_info.cc
+--- a/src/processor/cfi_frame_info.cc
++++ b/src/processor/cfi_frame_info.cc
+@@ -44,17 +44,17 @@
+ namespace google_breakpad {
+ 
+ template<typename V>
+ bool CFIFrameInfo::FindCallerRegs(const RegisterValueMap<V> &registers,
+                                   const MemoryRegion &memory,
+                                   RegisterValueMap<V> *caller_registers) const {
+   // If there are not rules for both .ra and .cfa in effect at this address,
+   // don't use this CFI data for stack walking.
+-  if (cfa_rule_.empty() || ra_rule_.empty())
++  if (cfa_rule_.invalid() || ra_rule_.invalid())
+     return false;
+ 
+   RegisterValueMap<V> working;
+   PostfixEvaluator<V> evaluator(&working, &memory);
+ 
+   caller_registers->clear();
+ 
+   // First, compute the CFA.
+@@ -95,20 +95,20 @@
+ template bool CFIFrameInfo::FindCallerRegs<u_int64_t>(
+     const RegisterValueMap<u_int64_t> &registers,
+     const MemoryRegion &memory,
+     RegisterValueMap<u_int64_t> *caller_registers) const;
+ 
+ string CFIFrameInfo::Serialize() const {
+   std::ostringstream stream;
+ 
+-  if (!cfa_rule_.empty()) {
++  if (!cfa_rule_.invalid()) {
+     stream << ".cfa: " << cfa_rule_;
+   }
+-  if (!ra_rule_.empty()) {
++  if (!ra_rule_.invalid()) {
+     if (static_cast<std::streamoff>(stream.tellp()) != 0)
+       stream << " ";
+     stream << ".ra: " << ra_rule_;
+   }
+   for (RuleMap::const_iterator iter = register_rules_.begin();
+        iter != register_rules_.end();
+        ++iter) {
+     if (static_cast<std::streamoff>(stream.tellp()) != 0)
+@@ -162,21 +162,22 @@
+   if (name_.empty() || expression_.empty()) return false;
+   if (name_ == ".cfa") handler_->CFARule(expression_);
+   else if (name_ == ".ra") handler_->RARule(expression_);
+   else handler_->RegisterRule(name_, expression_);
+   return true;
+ }
+ 
+ void CFIFrameInfoParseHandler::CFARule(const string &expression) {
+-  frame_info_->SetCFARule(expression);
++  // 'expression' is a postfix expression string.
++  frame_info_->SetCFARule(Module::Expr(expression));
+ }
+ 
+ void CFIFrameInfoParseHandler::RARule(const string &expression) {
+-  frame_info_->SetRARule(expression);
++  frame_info_->SetRARule(Module::Expr(expression));
+ }
+ 
+ void CFIFrameInfoParseHandler::RegisterRule(const string &name,
+                                             const string &expression) {
+-  frame_info_->SetRegisterRule(name, expression);
++  frame_info_->SetRegisterRule(name, Module::Expr(expression));
+ }
+ 
+ } // namespace google_breakpad
+diff --git a/src/processor/cfi_frame_info.h b/src/processor/cfi_frame_info.h
+--- a/src/processor/cfi_frame_info.h
++++ b/src/processor/cfi_frame_info.h
+@@ -38,16 +38,17 @@
+ #ifndef PROCESSOR_CFI_FRAME_INFO_H_
+ #define PROCESSOR_CFI_FRAME_INFO_H_
+ 
+ #include <map>
+ #include <string>
+ 
+ #include "common/using_std_string.h"
+ #include "google_breakpad/common/breakpad_types.h"
++#include "common/module.h"
+ 
+ namespace google_breakpad {
+ 
+ using std::map;
+ 
+ class MemoryRegion;
+ 
+ // A set of rules for recovering the calling frame's registers'
+@@ -61,26 +62,27 @@
+ // INIT' record that covers that instruction, and then apply the
+ // changes given by the 'STACK CFI' records up to our instruction's
+ // address. Then, use the FindCallerRegs member function to apply the
+ // rules to the callee frame's register values, yielding the caller
+ // frame's register values.
+ class CFIFrameInfo {
+  public:
+   // A map from register names onto values.
+-  template<typename ValueType> class RegisterValueMap: 
++  template<typename ValueType> class RegisterValueMap:
+     public map<string, ValueType> { };
+ 
+   // Set the expression for computing a call frame address, return
+   // address, or register's value. At least the CFA rule and the RA
+   // rule must be set before calling FindCallerRegs.
+-  void SetCFARule(const string &expression) { cfa_rule_ = expression; }
+-  void SetRARule(const string &expression)  { ra_rule_ = expression; }
+-  void SetRegisterRule(const string &register_name, const string &expression) {
+-    register_rules_[register_name] = expression;
++  void SetCFARule(const Module::Expr& rule) { cfa_rule_ = rule; }
++  void SetRARule(const Module::Expr& rule)  { ra_rule_ = rule; }
++  void SetRegisterRule(const string& register_name,
++                       const Module::Expr& rule) {
++    register_rules_[register_name] = rule;
+   }
+ 
+   // Compute the values of the calling frame's registers, according to
+   // this rule set. Use ValueType in expression evaluation; this
+   // should be u_int32_t on machines with 32-bit addresses, or
+   // u_int64_t on machines with 64-bit addresses.
+   //
+   // Return true on success, false otherwise.
+@@ -101,37 +103,33 @@
+                       RegisterValueMap<ValueType> *caller_registers) const;
+ 
+   // Serialize the rules in this object into a string in the format
+   // of STACK CFI records.
+   string Serialize() const;
+ 
+  private:
+ 
+-  // A map from register names onto evaluation rules. 
+-  typedef map<string, string> RuleMap;
++  // A map from register names onto evaluation rules.
++  typedef map<string, Module::Expr> RuleMap;
+ 
+-  // In this type, a "postfix expression" is an expression of the sort
+-  // interpreted by google_breakpad::PostfixEvaluator.
+-
+-  // A postfix expression for computing the current frame's CFA (call
++  // An expression for computing the current frame's CFA (call
+   // frame address). The CFA is a reference address for the frame that
+   // remains unchanged throughout the frame's lifetime. You should
+   // evaluate this expression with a dictionary initially populated
+   // with the values of the current frame's known registers.
+-  string cfa_rule_;
++  Module::Expr cfa_rule_;
+ 
+   // The following expressions should be evaluated with a dictionary
+   // initially populated with the values of the current frame's known
+   // registers, and with ".cfa" set to the result of evaluating the
+   // cfa_rule expression, above.
+ 
+-  // A postfix expression for computing the current frame's return
+-  // address. 
+-  string ra_rule_;
++  // An expression for computing the current frame's return address.
++  Module::Expr ra_rule_;
+ 
+   // For a register named REG, rules[REG] is a postfix expression
+   // which leaves the value of REG in the calling frame on the top of
+   // the stack. You should evaluate this expression
+   RuleMap register_rules_;
+ };
+ 
+ // A parser for STACK CFI-style rule sets.
+diff --git a/src/processor/cfi_frame_info_unittest.cc b/src/processor/cfi_frame_info_unittest.cc
+--- a/src/processor/cfi_frame_info_unittest.cc
++++ b/src/processor/cfi_frame_info_unittest.cc
+@@ -30,24 +30,26 @@
+ // Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
+ 
+ // cfi_frame_info_unittest.cc: Unit tests for CFIFrameInfo,
+ // CFIRuleParser, CFIFrameInfoParseHandler, and SimpleCFIWalker.
+ 
+ #include <string.h>
+ 
+ #include "breakpad_googletest_includes.h"
++#include "common/module.h"
+ #include "common/using_std_string.h"
+ #include "processor/cfi_frame_info.h"
+ #include "google_breakpad/processor/memory_region.h"
+ 
+ using google_breakpad::CFIFrameInfo;
+ using google_breakpad::CFIFrameInfoParseHandler;
+ using google_breakpad::CFIRuleParser;
+ using google_breakpad::MemoryRegion;
++using google_breakpad::Module;
+ using google_breakpad::SimpleCFIWalker;
+ using testing::_;
+ using testing::A;
+ using testing::AtMost;
+ using testing::DoAll;
+ using testing::Return;
+ using testing::SetArgumentPointee;
+ using testing::Test;
+@@ -81,56 +83,56 @@
+ };
+ 
+ class Simple: public CFIFixture, public Test { };
+ 
+ // FindCallerRegs should fail if no .cfa rule is provided.
+ TEST_F(Simple, NoCFA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetRARule("0");
++  cfi.SetRARule(Module::Expr("0"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+   ASSERT_EQ(".ra: 0", cfi.Serialize());
+ }
+ 
+ // FindCallerRegs should fail if no .ra rule is provided.
+ TEST_F(Simple, NoRA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("0");
++  cfi.SetCFARule(Module::Expr("0"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+   ASSERT_EQ(".cfa: 0", cfi.Serialize());
+ }
+ 
+ TEST_F(Simple, SetCFAAndRARule) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("330903416631436410");
+-  cfi.SetRARule("5870666104170902211");
++  cfi.SetCFARule(Module::Expr("330903416631436410"));
++  cfi.SetRARule(Module::Expr("5870666104170902211"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(2U, caller_registers.size());
+   ASSERT_EQ(330903416631436410ULL, caller_registers[".cfa"]);
+   ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]);
+ 
+   ASSERT_EQ(".cfa: 330903416631436410 .ra: 5870666104170902211",
+             cfi.Serialize());
+ }
+ 
+ TEST_F(Simple, SetManyRules) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -");
+-  cfi.SetRARule(".cfa 99804755 +");
+-  cfi.SetRegisterRule("register1", ".cfa 54370437 *");
+-  cfi.SetRegisterRule("vodkathumbscrewingly", "24076308 .cfa +");
+-  cfi.SetRegisterRule("pubvexingfjordschmaltzy", ".cfa 29801007 -");
+-  cfi.SetRegisterRule("uncopyrightables", "92642917 .cfa /");
++  cfi.SetCFARule(Module::Expr("$temp1 68737028 = $temp2 61072337 = $temp1 $temp2 -"));
++  cfi.SetRARule(Module::Expr(".cfa 99804755 +"));
++  cfi.SetRegisterRule("register1", Module::Expr(".cfa 54370437 *"));
++  cfi.SetRegisterRule("vodkathumbscrewingly", Module::Expr("24076308 .cfa +"));
++  cfi.SetRegisterRule("pubvexingfjordschmaltzy", Module::Expr(".cfa 29801007 -"));
++  cfi.SetRegisterRule("uncopyrightables", Module::Expr("92642917 .cfa /"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(6U, caller_registers.size());
+   ASSERT_EQ(7664691U,           caller_registers[".cfa"]);
+   ASSERT_EQ(107469446U,         caller_registers[".ra"]);
+   ASSERT_EQ(416732599139967ULL, caller_registers["register1"]);
+   ASSERT_EQ(31740999U,          caller_registers["vodkathumbscrewingly"]);
+   ASSERT_EQ(-22136316ULL,       caller_registers["pubvexingfjordschmaltzy"]);
+@@ -142,154 +144,154 @@
+             "uncopyrightables: 92642917 .cfa / "
+             "vodkathumbscrewingly: 24076308 .cfa +",
+             cfi.Serialize());
+ }
+ 
+ TEST_F(Simple, RulesOverride) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("330903416631436410");
+-  cfi.SetRARule("5870666104170902211");
+-  cfi.SetCFARule("2828089117179001");
++  cfi.SetCFARule(Module::Expr("330903416631436410"));
++  cfi.SetRARule(Module::Expr("5870666104170902211"));
++  cfi.SetCFARule(Module::Expr("2828089117179001"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(2U, caller_registers.size());
+   ASSERT_EQ(2828089117179001ULL, caller_registers[".cfa"]);
+   ASSERT_EQ(5870666104170902211ULL, caller_registers[".ra"]);
+   ASSERT_EQ(".cfa: 2828089117179001 .ra: 5870666104170902211",
+             cfi.Serialize());
+ }
+ 
+ class Scope: public CFIFixture, public Test { };
+ 
+ // There should be no value for .cfa in scope when evaluating the CFA rule.
+ TEST_F(Scope, CFALacksCFA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule(".cfa");
+-  cfi.SetRARule("0");
++  cfi.SetCFARule(Module::Expr(".cfa"));
++  cfi.SetRARule(Module::Expr("0"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+ }
+ 
+ // There should be no value for .ra in scope when evaluating the CFA rule.
+ TEST_F(Scope, CFALacksRA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule(".ra");
+-  cfi.SetRARule("0");
++  cfi.SetCFARule(Module::Expr(".ra"));
++  cfi.SetRARule(Module::Expr("0"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+ }
+ 
+ // The current frame's registers should be in scope when evaluating
+ // the CFA rule.
+ TEST_F(Scope, CFASeesCurrentRegs) {
+   ExpectNoMemoryReferences();
+ 
+   registers[".baraminology"] = 0x06a7bc63e4f13893ULL;
+   registers[".ornithorhynchus"] = 0x5e0bf850bafce9d2ULL;
+-  cfi.SetCFARule(".baraminology .ornithorhynchus +");
+-  cfi.SetRARule("0");
++  cfi.SetCFARule(Module::Expr(".baraminology .ornithorhynchus +"));
++  cfi.SetRARule(Module::Expr("0"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(2U, caller_registers.size());
+   ASSERT_EQ(0x06a7bc63e4f13893ULL + 0x5e0bf850bafce9d2ULL,
+             caller_registers[".cfa"]);
+ }
+ 
+ // .cfa should be in scope in the return address expression.
+ TEST_F(Scope, RASeesCFA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("48364076");
+-  cfi.SetRARule(".cfa");
++  cfi.SetCFARule(Module::Expr("48364076"));
++  cfi.SetRARule(Module::Expr(".cfa"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(2U, caller_registers.size());
+   ASSERT_EQ(48364076U, caller_registers[".ra"]);
+ }
+ 
+ // There should be no value for .ra in scope when evaluating the CFA rule.
+ TEST_F(Scope, RALacksRA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("0");
+-  cfi.SetRARule(".ra");
++  cfi.SetCFARule(Module::Expr("0"));
++  cfi.SetRARule(Module::Expr(".ra"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+ }
+ 
+ // The current frame's registers should be in scope in the return
+ // address expression.
+ TEST_F(Scope, RASeesCurrentRegs) {
+   ExpectNoMemoryReferences();
+ 
+   registers["noachian"] = 0x54dc4a5d8e5eb503ULL;
+-  cfi.SetCFARule("10359370");
+-  cfi.SetRARule("noachian");
++  cfi.SetCFARule(Module::Expr("10359370"));
++  cfi.SetRARule(Module::Expr("noachian"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(2U, caller_registers.size());
+   ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[".ra"]);
+ }
+ 
+ // .cfa should be in scope for register rules.
+ TEST_F(Scope, RegistersSeeCFA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("6515179");
+-  cfi.SetRARule(".cfa");
+-  cfi.SetRegisterRule("rogerian", ".cfa");
++  cfi.SetCFARule(Module::Expr("6515179"));
++  cfi.SetRARule(Module::Expr(".cfa"));
++  cfi.SetRegisterRule("rogerian", Module::Expr(".cfa"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(3U, caller_registers.size());
+   ASSERT_EQ(6515179U, caller_registers["rogerian"]);
+ }
+ 
+ // The return address should not be in scope for register rules.
+ TEST_F(Scope, RegsLackRA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("42740329");
+-  cfi.SetRARule("27045204");
+-  cfi.SetRegisterRule("$r1", ".ra");
++  cfi.SetCFARule(Module::Expr("42740329"));
++  cfi.SetRARule(Module::Expr("27045204"));
++  cfi.SetRegisterRule("$r1", Module::Expr(".ra"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+ }
+ 
+ // Register rules can see the current frame's register values.
+ TEST_F(Scope, RegsSeeRegs) {
+   ExpectNoMemoryReferences();
+ 
+   registers["$r1"] = 0x6ed3582c4bedb9adULL;
+   registers["$r2"] = 0xd27d9e742b8df6d0ULL;
+-  cfi.SetCFARule("88239303");
+-  cfi.SetRARule("30503835");
+-  cfi.SetRegisterRule("$r1", "$r1 42175211 = $r2");
+-  cfi.SetRegisterRule("$r2", "$r2 21357221 = $r1");
++  cfi.SetCFARule(Module::Expr("88239303"));
++  cfi.SetRARule(Module::Expr("30503835"));
++  cfi.SetRegisterRule("$r1", Module::Expr("$r1 42175211 = $r2"));
++  cfi.SetRegisterRule("$r2", Module::Expr("$r2 21357221 = $r1"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+   ASSERT_EQ(4U, caller_registers.size());
+   ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers["$r1"]);
+   ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers["$r2"]);
+ }
+ 
+ // Each rule's temporaries are separate.
+ TEST_F(Scope, SeparateTempsRA) {
+   ExpectNoMemoryReferences();
+ 
+-  cfi.SetCFARule("$temp1 76569129 = $temp1");
+-  cfi.SetRARule("0");
++  cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1"));
++  cfi.SetRARule(Module::Expr("0"));
+   ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                             &caller_registers));
+ 
+-  cfi.SetCFARule("$temp1 76569129 = $temp1");
+-  cfi.SetRARule("$temp1");
++  cfi.SetCFARule(Module::Expr("$temp1 76569129 = $temp1"));
++  cfi.SetRARule(Module::Expr("$temp1"));
+   ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
+                                              &caller_registers));
+ }
+ 
+ class MockCFIRuleParserHandler: public CFIRuleParser::Handler {
+  public:
+   MOCK_METHOD1(CFARule, void(const string &));
+   MOCK_METHOD1(RARule,  void(const string &));
+@@ -512,20 +514,20 @@
+       .WillRepeatedly(DoAll(SetArgumentPointee<1>(0xdc1975eba8602302ULL),
+                             Return(true)));
+   // Saved return address.
+   EXPECT_CALL(memory,
+               GetMemoryAtAddress(stack_top + 16, A<u_int64_t *>()))
+       .WillRepeatedly(DoAll(SetArgumentPointee<1>(0xba5ad6d9acce28deULL),
+                             Return(true)));
+ 
+-  call_frame_info.SetCFARule("sp 24 +");
+-  call_frame_info.SetRARule(".cfa 8 - ^");
+-  call_frame_info.SetRegisterRule("r0", ".cfa 24 - ^");
+-  call_frame_info.SetRegisterRule("r1", "r2");
++  call_frame_info.SetCFARule(Module::Expr("sp 24 +"));
++  call_frame_info.SetRARule(Module::Expr(".cfa 8 - ^"));
++  call_frame_info.SetRegisterRule("r0", Module::Expr(".cfa 24 - ^"));
++  call_frame_info.SetRegisterRule("r1", Module::Expr("r2"));
+ 
+   callee_context.r0 = 0x94e030ca79edd119ULL;
+   callee_context.r1 = 0x937b4d7e95ce52d9ULL;
+   callee_context.r2 = 0x5fe0027416b8b62aULL; // caller's r1
+   // callee_context.r3 is not valid in callee.
+   // callee_context.r4 is not valid in callee.
+   callee_context.sp = stack_top;
+   callee_context.pc = 0x25b21b224311d280ULL;
+diff --git a/src/processor/postfix_evaluator-inl.h b/src/processor/postfix_evaluator-inl.h
+--- a/src/processor/postfix_evaluator-inl.h
++++ b/src/processor/postfix_evaluator-inl.h
+@@ -226,52 +226,100 @@
+       return false;
+     }
+   }
+ 
+   return true;
+ }
+ 
+ template<typename ValueType>
+-bool PostfixEvaluator<ValueType>::Evaluate(const string &expression,
+-                                           DictionaryValidityType *assigned) {
++bool PostfixEvaluator<ValueType>::Evaluate(const Module::Expr& expr,
++                                           DictionaryValidityType* assigned) {
++  // The expression is being exevaluated only for its side effects.  Skip
++  // expressions that denote values only.
++  if (expr.how_ != Module::kExprPostfix) {
++    BPLOG(ERROR) << "Can't evaluate for side-effects: " << expr;
++    return false;
++  }
++
+   // Ensure that the stack is cleared before returning.
+   AutoStackClearer clearer(&stack_);
+ 
+-  if (!EvaluateInternal(expression, assigned))
++  if (!EvaluateInternal(expr.postfix_, assigned))
+     return false;
+ 
+   // If there's anything left on the stack, it indicates incomplete execution.
+   // This is a failure case.  If the stack is empty, evalution was complete
+   // and successful.
+   if (stack_.empty())
+     return true;
+ 
+-  BPLOG(ERROR) << "Incomplete execution: " << expression;
++  BPLOG(ERROR) << "Incomplete execution: " << expr;
+   return false;
+ }
+ 
+ template<typename ValueType>
+-bool PostfixEvaluator<ValueType>::EvaluateForValue(const string &expression,
+-                                                   ValueType *result) {
+-  // Ensure that the stack is cleared before returning.
+-  AutoStackClearer clearer(&stack_);
++bool PostfixEvaluator<ValueType>::EvaluateForValue(const Module::Expr& expr,
++                                                   ValueType* result) {
++  switch (expr.how_) {
+ 
+-  if (!EvaluateInternal(expression, NULL))
+-    return false;
++    // Postfix expression.  Give to the evaluator and return the
++    // one-and-only stack element that should be left over.
++    case Module::kExprPostfix: {
++      // Ensure that the stack is cleared before returning.
++      AutoStackClearer clearer(&stack_);
+ 
+-  // A successful execution should leave exactly one value on the stack.
+-  if (stack_.size() != 1) {
+-    BPLOG(ERROR) << "Expression yielded bad number of results: "
+-                 << "'" << expression << "'";
+-    return false;
++      if (!EvaluateInternal(expr.postfix_, NULL))
++        return false;
++
++      // A successful execution should leave exactly one value on the stack.
++      if (stack_.size() != 1) {
++        BPLOG(ERROR) << "Expression yielded bad number of results: "
++                     << "'" << expr << "'";
++        return false;
++      }
++
++      return PopValue(result);
++    }
++
++    // Simple-form expressions
++    case Module::kExprSimple:
++    case Module::kExprSimpleMem: {
++      // Look up the base value
++      typename DictionaryType::const_iterator iterator
++        = dictionary_->find(expr.ident_);
++      if (iterator == dictionary_->end()) {
++        // The identifier wasn't found in the dictionary.  Don't imply any
++        // default value, just fail.
++        BPLOG(INFO) << "Identifier " << expr.ident_
++                    << " not in dictionary (kExprSimple{Mem})";
++        return false;
++      }
++
++      // Form the sum
++      ValueType sum = iterator->second + (int64_t)expr.offset_;
++
++      // and dereference if necessary
++      if (expr.how_ == Module::kExprSimpleMem) {
++        ValueType derefd;
++        if (!memory_ || !memory_->GetMemoryAtAddress(sum, &derefd)) {
++          return false;
++        }
++        *result = derefd;
++      } else {
++        *result = sum;
++      }
++      return true;
++    }
++
++    default:
++      return false;
+   }
++}
+ 
+-  return PopValue(result);
+-}
+ 
+ template<typename ValueType>
+ typename PostfixEvaluator<ValueType>::PopResult
+ PostfixEvaluator<ValueType>::PopValueOrIdentifier(
+     ValueType *value, string *identifier) {
+   // There needs to be at least one element on the stack to pop.
+   if (!stack_.size())
+     return POP_RESULT_FAIL;
+diff --git a/src/processor/postfix_evaluator.h b/src/processor/postfix_evaluator.h
+--- a/src/processor/postfix_evaluator.h
++++ b/src/processor/postfix_evaluator.h
+@@ -70,16 +70,17 @@
+ #define PROCESSOR_POSTFIX_EVALUATOR_H__
+ 
+ 
+ #include <map>
+ #include <string>
+ #include <vector>
+ 
+ #include "common/using_std_string.h"
++#include "common/module.h"
+ 
+ namespace google_breakpad {
+ 
+ using std::map;
+ using std::vector;
+ 
+ class MemoryRegion;
+ 
+@@ -100,23 +101,23 @@
+ 
+   // Evaluate the expression, starting with an empty stack. The results of
+   // execution will be stored in one (or more) variables in the dictionary.
+   // Returns false if any failures occur during execution, leaving
+   // variables in the dictionary in an indeterminate state. If assigned is
+   // non-NULL, any keys set in the dictionary as a result of evaluation
+   // will also be set to true in assigned, providing a way to determine if
+   // an expression modifies any of its input variables.
+-  bool Evaluate(const string &expression, DictionaryValidityType *assigned);
++  bool Evaluate(const Module::Expr &expr, DictionaryValidityType *assigned);
+ 
+-  // Like Evaluate, but provides the value left on the stack to the
+-  // caller. If evaluation succeeds and leaves exactly one value on
+-  // the stack, pop that value, store it in *result, and return true.
+-  // Otherwise, return false.
+-  bool EvaluateForValue(const string &expression, ValueType *result);
++  // Like Evaluate, but expects the expression to denote a value.
++  // If evaluation succeeds and (in the case of a postfix expression)
++  // leaves exactly one value on the stack, pop that value, store it in
++  // *result, and return true. Otherwise, return false.
++  bool EvaluateForValue(const Module::Expr& expression, ValueType* result);
+ 
+   DictionaryType* dictionary() const { return dictionary_; }
+ 
+   // Reset the dictionary.  PostfixEvaluator does not take ownership.
+   void set_dictionary(DictionaryType *dictionary) {dictionary_ = dictionary; }
+ 
+  private:
+   // Return values for PopValueOrIdentifier
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/breakpad-patches/03-unique-string.patch
@@ -0,0 +1,2869 @@
+# HG changeset patch
+# Parent 1d603891eb459b1769329432ec941a1093c6e8f8
+Rework PostfixEvaluator to use a UniqueString type
+R=ted
+
+diff --git a/Makefile.am b/Makefile.am
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -139,6 +139,7 @@
+ 	src/google_breakpad/processor/symbol_supplier.h \
+ 	src/google_breakpad/processor/system_info.h \
+ 	src/common/module.cc \
++	src/common/unique_string.cc \
+ 	src/processor/address_map-inl.h \
+ 	src/processor/address_map.h \
+ 	src/processor/basic_code_module.h \
+@@ -431,6 +432,7 @@
+ 	src/common/module.cc \
+ 	src/common/stabs_reader.cc \
+ 	src/common/stabs_to_module.cc \
++	src/common/unique_string.cc \
+ 	src/common/dwarf/bytereader.cc \
+ 	src/common/dwarf/dwarf2diehandler.cc \
+ 	src/common/dwarf/dwarf2reader.cc \
+@@ -474,6 +476,7 @@
+ 	src/common/stabs_to_module.cc \
+ 	src/common/stabs_to_module_unittest.cc \
+ 	src/common/test_assembler.cc \
++	src/common/unique_string.cc \
+ 	src/common/dwarf/bytereader.cc \
+ 	src/common/dwarf/bytereader_unittest.cc \
+ 	src/common/dwarf/cfi_assembler.cc \
+@@ -562,6 +565,7 @@
+ 	-I$(top_srcdir)/src/testing
+ src_processor_basic_source_line_resolver_unittest_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/pathname_stripper.o \
+@@ -577,6 +581,7 @@
+ 	src/testing/src/gmock-all.cc
+ src_processor_cfi_frame_info_unittest_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/cfi_frame_info.o \
+ 	src/processor/logging.o \
+ 	src/processor/pathname_stripper.o \
+@@ -607,6 +612,7 @@
+ 	-I$(top_srcdir)/src/testing
+ src_processor_exploitability_unittest_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/minidump_processor.o \
+ 	src/processor/process_state.o \
+ 	src/processor/disassembler_x86.o \
+@@ -659,6 +665,7 @@
+ 	-I$(top_srcdir)/src/testing
+ src_processor_fast_source_line_resolver_unittest_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/fast_source_line_resolver.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/cfi_frame_info.o \
+@@ -697,6 +704,7 @@
+ 	-I$(top_srcdir)/src/testing
+ src_processor_minidump_processor_unittest_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/basic_code_modules.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/call_stack.o \
+@@ -811,6 +819,7 @@
+ 	src/processor/postfix_evaluator_unittest.cc
+ src_processor_postfix_evaluator_unittest_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/logging.o \
+ 	src/processor/pathname_stripper.o \
+ 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+@@ -941,6 +950,7 @@
+ 	src/processor/minidump_stackwalk.cc
+ src_processor_minidump_stackwalk_LDADD = \
+ 	src/common/module.o \
++	src/common/unique_string.o \
+ 	src/processor/basic_code_modules.o \
+ 	src/processor/basic_source_line_resolver.o \
+ 	src/processor/binarystream.o \
+diff --git a/Makefile.in b/Makefile.in
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -272,8 +272,9 @@
+ 	src/google_breakpad/processor/stackwalker.h \
+ 	src/google_breakpad/processor/symbol_supplier.h \
+ 	src/google_breakpad/processor/system_info.h \
+-	src/common/module.cc src/processor/address_map-inl.h \
+-	src/processor/address_map.h src/processor/basic_code_module.h \
++	src/common/module.cc src/common/unique_string.cc \
++	src/processor/address_map-inl.h src/processor/address_map.h \
++	src/processor/basic_code_module.h \
+ 	src/processor/basic_code_modules.cc \
+ 	src/processor/basic_code_modules.h \
+ 	src/processor/basic_source_line_resolver_types.h \
+@@ -335,6 +336,7 @@
+ 	src/processor/tokenize.h
+ @DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.$(OBJEXT) \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.$(OBJEXT) \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.$(OBJEXT) \
+@@ -523,7 +525,8 @@
+ 	src/common/stabs_reader.cc src/common/stabs_reader_unittest.cc \
+ 	src/common/stabs_to_module.cc \
+ 	src/common/stabs_to_module_unittest.cc \
+-	src/common/test_assembler.cc src/common/dwarf/bytereader.cc \
++	src/common/test_assembler.cc src/common/unique_string.cc \
++	src/common/dwarf/bytereader.cc \
+ 	src/common/dwarf/bytereader_unittest.cc \
+ 	src/common/dwarf/cfi_assembler.cc \
+ 	src/common/dwarf/dwarf2diehandler.cc \
+@@ -567,6 +570,7 @@
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/src_common_dumper_unittest-stabs_to_module.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/src_common_dumper_unittest-stabs_to_module_unittest.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/src_common_dumper_unittest-test_assembler.$(OBJEXT) \
++@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/src_common_dumper_unittest-unique_string.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/src_common_dumper_unittest-bytereader.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/src_common_dumper_unittest-bytereader_unittest.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/src_common_dumper_unittest-cfi_assembler.$(OBJEXT) \
+@@ -635,6 +639,7 @@
+ src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_basic_source_line_resolver_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@@ -669,6 +674,7 @@
+ 	$(am_src_processor_cfi_frame_info_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@@ -711,6 +717,7 @@
+ 	$(am_src_processor_exploitability_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@@ -745,6 +752,7 @@
+ src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fast_source_line_resolver_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@@ -791,6 +799,7 @@
+ 	$(am_src_processor_minidump_processor_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@@ -822,6 +831,7 @@
+ 	$(am_src_processor_minidump_stackwalk_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@@ -884,6 +894,7 @@
+ 	$(am_src_processor_postfix_evaluator_unittest_OBJECTS)
+ @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_DEPENDENCIES =  \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
+@@ -1063,7 +1074,8 @@
+ 	src/common/dwarf_cu_to_module.cc \
+ 	src/common/dwarf_line_to_module.cc src/common/language.cc \
+ 	src/common/module.cc src/common/stabs_reader.cc \
+-	src/common/stabs_to_module.cc src/common/dwarf/bytereader.cc \
++	src/common/stabs_to_module.cc src/common/unique_string.cc \
++	src/common/dwarf/bytereader.cc \
+ 	src/common/dwarf/dwarf2diehandler.cc \
+ 	src/common/dwarf/dwarf2reader.cc \
+ 	src/common/linux/dump_symbols.cc \
+@@ -1080,6 +1092,7 @@
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/module.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/stabs_reader.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/stabs_to_module.$(OBJEXT) \
++@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/unique_string.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/bytereader.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/dwarf2diehandler.$(OBJEXT) \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/dwarf2reader.$(OBJEXT) \
+@@ -1410,6 +1423,7 @@
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/symbol_supplier.h \
+ @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/system_info.h \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.cc \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.cc \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/address_map-inl.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/address_map.h \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_module.h \
+@@ -1608,6 +1622,7 @@
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/module.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/stabs_reader.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/stabs_to_module.cc \
++@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/unique_string.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/bytereader.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/dwarf2diehandler.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/dwarf2reader.cc \
+@@ -1651,6 +1666,7 @@
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/stabs_to_module.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/stabs_to_module_unittest.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/test_assembler.cc \
++@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/unique_string.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/bytereader.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/bytereader_unittest.cc \
+ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	src/common/dwarf/cfi_assembler.cc \
+@@ -1743,6 +1759,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@@ -1759,6 +1776,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+@@ -1793,6 +1811,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
+@@ -1849,6 +1868,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
+@@ -1891,6 +1911,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
+@@ -2017,6 +2038,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
+ @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+@@ -2156,6 +2178,7 @@
+ 
+ @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_LDADD = \
+ @DISABLE_PROCESSOR_FALSE@	src/common/module.o \
++@DISABLE_PROCESSOR_FALSE@	src/common/unique_string.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
+ @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
+@@ -2513,6 +2536,8 @@
+ 	$(RANLIB) src/client/linux/libbreakpad_client.a
+ src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
++src/common/unique_string.$(OBJEXT): src/common/$(am__dirstamp) \
++	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/processor/$(am__dirstamp):
+ 	@$(MKDIR_P) src/processor
+ 	@: > src/processor/$(am__dirstamp)
+@@ -2840,6 +2865,9 @@
+ src/common/src_common_dumper_unittest-test_assembler.$(OBJEXT):  \
+ 	src/common/$(am__dirstamp) \
+ 	src/common/$(DEPDIR)/$(am__dirstamp)
++src/common/src_common_dumper_unittest-unique_string.$(OBJEXT):  \
++	src/common/$(am__dirstamp) \
++	src/common/$(DEPDIR)/$(am__dirstamp)
+ src/common/dwarf/$(am__dirstamp):
+ 	@$(MKDIR_P) src/common/dwarf
+ 	@: > src/common/dwarf/$(am__dirstamp)
+@@ -3445,6 +3473,7 @@
+ 	-rm -f src/common/src_common_dumper_unittest-stabs_to_module.$(OBJEXT)
+ 	-rm -f src/common/src_common_dumper_unittest-stabs_to_module_unittest.$(OBJEXT)
+ 	-rm -f src/common/src_common_dumper_unittest-test_assembler.$(OBJEXT)
++	-rm -f src/common/src_common_dumper_unittest-unique_string.$(OBJEXT)
+ 	-rm -f src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT)
+ 	-rm -f src/common/src_common_test_assembler_unittest-test_assembler_unittest.$(OBJEXT)
+ 	-rm -f src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT)
+@@ -3457,6 +3486,7 @@
+ 	-rm -f src/common/string_conversion.$(OBJEXT)
+ 	-rm -f src/common/tests/src_client_linux_linux_client_unittest_shlib-file_utils.$(OBJEXT)
+ 	-rm -f src/common/tests/src_common_dumper_unittest-file_utils.$(OBJEXT)
++	-rm -f src/common/unique_string.$(OBJEXT)
+ 	-rm -f src/processor/address_map_unittest.$(OBJEXT)
+ 	-rm -f src/processor/basic_code_modules.$(OBJEXT)
+ 	-rm -f src/processor/basic_source_line_resolver.$(OBJEXT)
+@@ -3635,6 +3665,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-stabs_to_module.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-stabs_to_module_unittest.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-test_assembler.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_test_assembler_unittest-test_assembler.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_common_test_assembler_unittest-test_assembler_unittest.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/src_processor_minidump_unittest-test_assembler.Po@am__quote@
+@@ -3645,6 +3676,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/stabs_reader.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/stabs_to_module.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/string_conversion.Po@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/unique_string.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/android/$(DEPDIR)/breakpad_getcontext.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/android/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@src/common/android/$(DEPDIR)/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext_unittest.Po@am__quote@
+@@ -4417,6 +4449,20 @@
+ @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_common_dumper_unittest-test_assembler.obj `if test -f 'src/common/test_assembler.cc'; then $(CYGPATH_W) 'src/common/test_assembler.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/test_assembler.cc'; fi`
+ 
++src/common/src_common_dumper_unittest-unique_string.o: src/common/unique_string.cc
++@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_common_dumper_unittest-unique_string.o -MD -MP -MF src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo -c -o src/common/src_common_dumper_unittest-unique_string.o `test -f 'src/common/unique_string.cc' || echo '$(srcdir)/'`src/common/unique_string.cc
++@am__fastdepCXX_TRUE@	$(am__mv) src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Po
++@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/common/unique_string.cc' object='src/common/src_common_dumper_unittest-unique_string.o' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_common_dumper_unittest-unique_string.o `test -f 'src/common/unique_string.cc' || echo '$(srcdir)/'`src/common/unique_string.cc
++
++src/common/src_common_dumper_unittest-unique_string.obj: src/common/unique_string.cc
++@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/src_common_dumper_unittest-unique_string.obj -MD -MP -MF src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo -c -o src/common/src_common_dumper_unittest-unique_string.obj `if test -f 'src/common/unique_string.cc'; then $(CYGPATH_W) 'src/common/unique_string.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/unique_string.cc'; fi`
++@am__fastdepCXX_TRUE@	$(am__mv) src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Tpo src/common/$(DEPDIR)/src_common_dumper_unittest-unique_string.Po
++@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/common/unique_string.cc' object='src/common/src_common_dumper_unittest-unique_string.obj' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/common/src_common_dumper_unittest-unique_string.obj `if test -f 'src/common/unique_string.cc'; then $(CYGPATH_W) 'src/common/unique_string.cc'; else $(CYGPATH_W) '$(srcdir)/src/common/unique_string.cc'; fi`
++
+ src/common/dwarf/src_common_dumper_unittest-bytereader.o: src/common/dwarf/bytereader.cc
+ @am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_common_dumper_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/common/dwarf/src_common_dumper_unittest-bytereader.o -MD -MP -MF src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Tpo -c -o src/common/dwarf/src_common_dumper_unittest-bytereader.o `test -f 'src/common/dwarf/bytereader.cc' || echo '$(srcdir)/'`src/common/dwarf/bytereader.cc
+ @am__fastdepCXX_TRUE@	$(am__mv) src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Tpo src/common/dwarf/$(DEPDIR)/src_common_dumper_unittest-bytereader.Po
+diff --git a/src/common/dwarf_cfi_to_module.cc b/src/common/dwarf_cfi_to_module.cc
+--- a/src/common/dwarf_cfi_to_module.cc
++++ b/src/common/dwarf_cfi_to_module.cc
+@@ -42,14 +42,18 @@
+ 
+ using std::ostringstream;
+ 
+-vector<string> DwarfCFIToModule::RegisterNames::MakeVector(
++vector<const UniqueString*> DwarfCFIToModule::RegisterNames::MakeVector(
+     const char * const *strings,
+     size_t size) {
+-  vector<string> names(strings, strings + size);
++  vector<const UniqueString*> names(size, NULL);
++  for (size_t i = 0; i < size; i++) {
++    names[i] = toUniqueString(strings[i]);
++  }
++
+   return names;
+ }
+ 
+-vector<string> DwarfCFIToModule::RegisterNames::I386() {
++vector<const UniqueString*> DwarfCFIToModule::RegisterNames::I386() {
+   static const char *const names[] = {
+     "$eax", "$ecx", "$edx", "$ebx", "$esp", "$ebp", "$esi", "$edi",
+     "$eip", "$eflags", "$unused1",
+@@ -65,7 +69,7 @@
+   return MakeVector(names, sizeof(names) / sizeof(names[0]));
+ }
+ 
+-vector<string> DwarfCFIToModule::RegisterNames::X86_64() {
++vector<const UniqueString*> DwarfCFIToModule::RegisterNames::X86_64() {
+   static const char *const names[] = {
+     "$rax", "$rdx", "$rcx", "$rbx", "$rsi", "$rdi", "$rbp", "$rsp",
+     "$r8",  "$r9",  "$r10", "$r11", "$r12", "$r13", "$r14", "$r15",
+@@ -85,7 +89,7 @@
+ }
+ 
+ // Per ARM IHI 0040A, section 3.1
+-vector<string> DwarfCFIToModule::RegisterNames::ARM() {
++vector<const UniqueString*> DwarfCFIToModule::RegisterNames::ARM() {
+   static const char *const names[] = {
+     "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",
+     "r8",  "r9",  "r10", "r11", "r12", "sp",  "lr",  "pc",
+@@ -127,30 +131,30 @@
+   // address on entry to the function. So establish an initial .ra
+   // rule citing the return address register.
+   if (return_address_ < register_names_.size())
+-    entry_->initial_rules[ra_name_]
++    entry_->initial_rules[ustr__ZDra()]
+       = Module::Expr(register_names_[return_address_], 0, false);
+ 
+   return true;
+ }
+ 
+-string DwarfCFIToModule::RegisterName(int i) {
++const UniqueString* DwarfCFIToModule::RegisterName(int i) {
+   assert(entry_);
+   if (i < 0) {
+     assert(i == kCFARegister);
+-    return cfa_name_;
++    return ustr__ZDcfa();
+   }
+   unsigned reg = i;
+   if (reg == return_address_)
+-    return ra_name_;
++    return ustr__ZDra();
+ 
+   // Ensure that a non-empty name exists for this register value.
+-  if (reg < register_names_.size() && !register_names_[reg].empty())
++  if (reg < register_names_.size() && register_names_[reg] != ustr__empty())
+     return register_names_[reg];
+ 
+   reporter_->UnnamedRegister(entry_offset_, reg);
+   char buf[30];
+   sprintf(buf, "unnamed_register%u", reg);
+-  return buf;
++  return toUniqueString(buf);
+ }
+ 
+ void DwarfCFIToModule::Record(Module::Address address, int reg,
+@@ -233,23 +237,25 @@
+           file_.c_str(), section_.c_str(), offset, reg);
+ }
+ 
+-void DwarfCFIToModule::Reporter::UndefinedNotSupported(size_t offset,
+-                                                       const string &reg) {
++void DwarfCFIToModule::Reporter::UndefinedNotSupported(
++    size_t offset,
++    const UniqueString* reg) {
+   fprintf(stderr, "%s, section '%s': "
+           "the call frame entry at offset 0x%zx sets the rule for "
+           "register '%s' to 'undefined', but the Breakpad symbol file format"
+           " cannot express this\n",
+-          file_.c_str(), section_.c_str(), offset, reg.c_str());
++          file_.c_str(), section_.c_str(), offset, fromUniqueString(reg));
+ }
+ 
+-void DwarfCFIToModule::Reporter::ExpressionsNotSupported(size_t offset,
+-                                                         const string &reg) {
++void DwarfCFIToModule::Reporter::ExpressionsNotSupported(
++    size_t offset,
++    const UniqueString* reg) {
+   fprintf(stderr, "%s, section '%s': "
+           "the call frame entry at offset 0x%zx uses a DWARF expression to"
+           " describe how to recover register '%s', "
+           " but this translator cannot yet translate DWARF expressions to"
+           " Breakpad postfix expressions\n",
+-          file_.c_str(), section_.c_str(), offset, reg.c_str());
++          file_.c_str(), section_.c_str(), offset, fromUniqueString(reg));
+ }
+ 
+ } // namespace google_breakpad
+diff --git a/src/common/dwarf_cfi_to_module.h b/src/common/dwarf_cfi_to_module.h
+--- a/src/common/dwarf_cfi_to_module.h
++++ b/src/common/dwarf_cfi_to_module.h
+@@ -49,6 +49,7 @@
+ #include "common/module.h"
+ #include "common/dwarf/dwarf2reader.h"
+ #include "common/using_std_string.h"
++#include "common/unique_string.h"
+ 
+ namespace google_breakpad {
+ 
+@@ -83,13 +84,15 @@
+ 
+     // The DWARF CFI entry at OFFSET says that REG is undefined, but the
+     // Breakpad symbol file format cannot express this.
+-    virtual void UndefinedNotSupported(size_t offset, const string &reg);
++    virtual void UndefinedNotSupported(size_t offset,
++                                       const UniqueString* reg);
+ 
+     // The DWARF CFI entry at OFFSET says that REG uses a DWARF
+     // expression to find its value, but DwarfCFIToModule is not
+     // capable of translating DWARF expressions to Breakpad postfix
+     // expressions.
+-    virtual void ExpressionsNotSupported(size_t offset, const string &reg);
++    virtual void ExpressionsNotSupported(size_t offset,
++                                         const UniqueString* reg);
+ 
+   protected:
+     string file_, section_;
+@@ -101,18 +104,19 @@
+   class RegisterNames {
+    public:
+     // Intel's "x86" or IA-32.
+-    static vector<string> I386();
++    static vector<const UniqueString*> I386();
+ 
+     // AMD x86_64, AMD64, Intel EM64T, or Intel 64
+-    static vector<string> X86_64();
++    static vector<const UniqueString*> X86_64();
+ 
+     // ARM.
+-    static vector<string> ARM();
++    static vector<const UniqueString*> ARM();
+ 
+    private:
+     // Given STRINGS, an array of C strings with SIZE elements, return an
+     // equivalent vector<string>.
+-    static vector<string> MakeVector(const char * const *strings, size_t size);
++    static vector<const UniqueString*> MakeVector(const char * const *strings,
++                                                  size_t size);
+   };
+ 
+   // Create a handler for the dwarf2reader::CallFrameInfo parser that
+@@ -124,10 +128,11 @@
+   //
+   // Use REPORTER for reporting problems encountered in the conversion
+   // process.
+-  DwarfCFIToModule(Module *module, const vector<string> &register_names,
++  DwarfCFIToModule(Module *module,
++                   const vector<const UniqueString*> &register_names,
+                    Reporter *reporter)
+       : module_(module), register_names_(register_names), reporter_(reporter),
+-        entry_(NULL), return_address_(-1), cfa_name_(".cfa"), ra_name_(".ra") {
++        entry_(NULL), return_address_(-1) {
+   }
+   virtual ~DwarfCFIToModule() { delete entry_; }
+ 
+@@ -149,7 +154,7 @@
+ 
+  private:
+   // Return the name to use for register REG.
+-  string RegisterName(int i);
++  const UniqueString* RegisterName(int i);
+ 
+   // Record RULE for register REG at ADDRESS.
+   void Record(Module::Address address, int reg, const Module::Expr &rule);
+@@ -158,7 +163,7 @@
+   Module *module_;
+ 
+   // Map from register numbers to register names.
+-  const vector<string> &register_names_;
++  const vector<const UniqueString*> &register_names_;
+ 
+   // The reporter to use to report problems.
+   Reporter *reporter_;
+@@ -172,23 +177,6 @@
+ 
+   // The return address column for that entry.
+   unsigned return_address_;
+-
+-  // The names of the return address and canonical frame address. Putting
+-  // these here instead of using string literals allows us to share their
+-  // texts in reference-counted std::string implementations (all the
+-  // popular ones). Many, many rules cite these strings.
+-  string cfa_name_, ra_name_;
+-
+-  // A set of strings used by this CFI. Before storing a string in one of
+-  // our data structures, insert it into this set, and then use the string
+-  // from the set.
+-  // 
+-  // Because std::string uses reference counting internally, simply using
+-  // strings from this set, even if passed by value, assigned, or held
+-  // directly in structures and containers (map<string, ...>, for example),
+-  // causes those strings to share a single instance of each distinct piece
+-  // of text.
+-  set<string> common_strings_;
+ };
+ 
+ } // namespace google_breakpad
+diff --git a/src/common/dwarf_cfi_to_module_unittest.cc b/src/common/dwarf_cfi_to_module_unittest.cc
+--- a/src/common/dwarf_cfi_to_module_unittest.cc
++++ b/src/common/dwarf_cfi_to_module_unittest.cc
+@@ -50,8 +50,10 @@
+   MockCFIReporter(const string &file, const string &section)
+       : Reporter(file, section) { }
+   MOCK_METHOD2(UnnamedRegister, void(size_t offset, int reg));
+-  MOCK_METHOD2(UndefinedNotSupported, void(size_t offset, const string &reg));
+-  MOCK_METHOD2(ExpressionsNotSupported, void(size_t offset, const string &reg));
++  MOCK_METHOD2(UndefinedNotSupported, void(size_t offset,
++                                           const UniqueString* reg));
++  MOCK_METHOD2(ExpressionsNotSupported, void(size_t offset,
++                                             const UniqueString* reg));
+ };
+ 
+ struct DwarfCFIToModuleFixture {
+@@ -59,17 +61,17 @@
+       : module("module name", "module os", "module arch", "module id"),
+         reporter("reporter file", "reporter section"),
+         handler(&module, register_names, &reporter) {
+-    register_names.push_back("reg0");
+-    register_names.push_back("reg1");
+-    register_names.push_back("reg2");
+-    register_names.push_back("reg3");
+-    register_names.push_back("reg4");
+-    register_names.push_back("reg5");
+-    register_names.push_back("reg6");
+-    register_names.push_back("reg7");
+-    register_names.push_back("sp");
+-    register_names.push_back("pc");
+-    register_names.push_back("");
++    register_names.push_back(toUniqueString("reg0"));
++    register_names.push_back(toUniqueString("reg1"));
++    register_names.push_back(toUniqueString("reg2"));
++    register_names.push_back(toUniqueString("reg3"));
++    register_names.push_back(toUniqueString("reg4"));
++    register_names.push_back(toUniqueString("reg5"));
++    register_names.push_back(toUniqueString("reg6"));
++    register_names.push_back(toUniqueString("reg7"));
++    register_names.push_back(toUniqueString("sp"));
++    register_names.push_back(toUniqueString("pc"));
++    register_names.push_back(ustr__empty());
+ 
+     EXPECT_CALL(reporter, UnnamedRegister(_, _)).Times(0);
+     EXPECT_CALL(reporter, UndefinedNotSupported(_, _)).Times(0);
+@@ -77,7 +79,7 @@
+   }
+ 
+   Module module;
+-  vector<string> register_names;
++  vector<const UniqueString*> register_names;
+   MockCFIReporter reporter;
+   DwarfCFIToModule handler;
+   vector<Module::StackFrameEntry *> entries;
+@@ -132,7 +134,7 @@
+ class Rule: public RuleFixture, public Test { };
+ 
+ TEST_F(Rule, UndefinedRule) {
+-  EXPECT_CALL(reporter, UndefinedNotSupported(_, "reg7"));
++  EXPECT_CALL(reporter, UndefinedNotSupported(_, toUniqueString("reg7")));
+   StartEntry();
+   ASSERT_TRUE(handler.UndefinedRule(entry_address, 7));
+   ASSERT_TRUE(handler.End());
+@@ -143,7 +145,8 @@
+ 
+ TEST_F(Rule, RegisterWithEmptyName) {
+   EXPECT_CALL(reporter, UnnamedRegister(_, 10));
+-  EXPECT_CALL(reporter, UndefinedNotSupported(_, "unnamed_register10"));
++  EXPECT_CALL(reporter,
++              UndefinedNotSupported(_, toUniqueString("unnamed_register10")));
+   StartEntry();
+   ASSERT_TRUE(handler.UndefinedRule(entry_address, 10));
+   ASSERT_TRUE(handler.End());
+@@ -158,7 +161,8 @@
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial["reg6"] = Module::Expr("reg6", 0, false);
++  const UniqueString* reg6 = toUniqueString("reg6");
++  expected_initial[reg6] = Module::Expr(reg6, 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+@@ -172,8 +176,8 @@
+   CheckEntry();
+   EXPECT_EQ(0U, entries[0]->initial_rules.size());
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 1][".ra"] =
+-      Module::Expr(".cfa", 16927065, true);
++  expected_changes[entry_address + 1][ustr__ZDra()] =
++      Module::Expr(ustr__ZDcfa(), 16927065, true);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+@@ -185,8 +189,8 @@
+   CheckEntry();
+   EXPECT_EQ(0U, entries[0]->initial_rules.size());
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 1][".cfa"] =
+-      Module::Expr("reg4", -34530721, true);
++  expected_changes[entry_address + 1][ustr__ZDcfa()] =
++      Module::Expr(toUniqueString("reg4"), -34530721, true);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+@@ -201,8 +205,8 @@
+   CheckEntry();
+   EXPECT_EQ(0U, entries[0]->initial_rules.size());
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 0x5ab7][".cfa"] =
+-      Module::Expr("unnamed_register11", 61812979, false);
++  expected_changes[entry_address + 0x5ab7][ustr__ZDcfa()] =
++      Module::Expr(toUniqueString("unnamed_register11"), 61812979, false);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+@@ -212,13 +216,14 @@
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = Module::Expr("reg3", 0, false);
++  expected_initial[ustr__ZDra()] =
++      Module::Expr(toUniqueString("reg3"), 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+ 
+ TEST_F(Rule, ExpressionRule) {
+-  EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg2"));
++  EXPECT_CALL(reporter, ExpressionsNotSupported(_, toUniqueString("reg2")));
+   StartEntry();
+   ASSERT_TRUE(handler.ExpressionRule(entry_address + 0xf326, 2,
+                                      "it takes two to tango"));
+@@ -229,7 +234,7 @@
+ }
+ 
+ TEST_F(Rule, ValExpressionRule) {
+-  EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg0"));
++  EXPECT_CALL(reporter, ExpressionsNotSupported(_, toUniqueString("reg0")));
+   StartEntry();
+   ASSERT_TRUE(handler.ValExpressionRule(entry_address + 0x6367, 0,
+                                         "bit off more than he could chew"));
+@@ -246,8 +251,10 @@
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = Module::Expr("reg2", 0, false);
+-  expected_initial["reg0"] = Module::Expr("reg1", 0, false);
++  expected_initial[ustr__ZDra()] =
++      Module::Expr(toUniqueString("reg2"), 0, false);
++  expected_initial[toUniqueString("reg0")] =
++      Module::Expr(toUniqueString("reg1"), 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+@@ -259,7 +266,8 @@
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = Module::Expr("reg1", 0, false);
++  expected_initial[ustr__ZDra()] =
++      Module::Expr(toUniqueString("reg1"), 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   EXPECT_EQ(0U, entries[0]->rule_changes.size());
+ }
+@@ -271,39 +279,40 @@
+   ASSERT_TRUE(handler.End());
+   CheckEntry();
+   Module::RuleMap expected_initial;
+-  expected_initial[".ra"] = Module::Expr("reg2", 0, false);
++  expected_initial[ustr__ZDra()] =
++      Module::Expr(toUniqueString("reg2"), 0, false);
+   EXPECT_THAT(entries[0]->initial_rules, ContainerEq(expected_initial));
+   Module::RuleChangeMap expected_changes;
+-  expected_changes[entry_address + 1][".ra"] =
+-      Module::Expr("reg1", 0, false);
++  expected_changes[entry_address + 1][ustr__ZDra()] =
++      Module::Expr(toUniqueString("reg1"), 0, false);
+   EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
+ }
+ 
+ TEST(RegisterNames, I386) {
+-  vector<string> names = DwarfCFIToModule::RegisterNames::I386();
++  vector<const UniqueString*> names = DwarfCFIToModule::RegisterNames::I386();
+ 
+-  EXPECT_EQ("$eax", names[0]);
+-  EXPECT_EQ("$ecx", names[1]);
+-  EXPECT_EQ("$esp", names[4]);
+-  EXPECT_EQ("$eip", names[8]);
++  EXPECT_EQ(toUniqueString("$eax"), names[0]);
++  EXPECT_EQ(toUniqueString("$ecx"), names[1]);
++  EXPECT_EQ(toUniqueString("$esp"), names[4]);
++  EXPECT_EQ(toUniqueString("$eip"), names[8]);
+ }
+ 
+ TEST(RegisterNames, ARM) {
+-  vector<string> names = DwarfCFIToModule::RegisterNames::ARM();
++  vector<const UniqueString*> names = DwarfCFIToModule::RegisterNames::ARM();
+ 
+-  EXPECT_EQ("r0", names[0]);
+-  EXPECT_EQ("r10", names[10]);
+-  EXPECT_EQ("sp", names[13]);
+-  EXPECT_EQ("lr", names[14]);
+-  EXPECT_EQ("pc", names[15]);
++  EXPECT_EQ(toUniqueString("r0"), names[0]);
++  EXPECT_EQ(toUniqueString("r10"), names[10]);
++  EXPECT_EQ(toUniqueString("sp"), names[13]);
++  EXPECT_EQ(toUniqueString("lr"), names[14]);
++  EXPECT_EQ(toUniqueString("pc"), names[15]);
+ }
+ 
+ TEST(RegisterNames, X86_64) {
+-  vector<string> names = DwarfCFIToModule::RegisterNames::X86_64();
++  vector<const UniqueString*> names = DwarfCFIToModule::RegisterNames::X86_64();
+ 
+-  EXPECT_EQ("$rax", names[0]);
+-  EXPECT_EQ("$rdx", names[1]);
+-  EXPECT_EQ("$rbp", names[6]);
+-  EXPECT_EQ("$rsp", names[7]);
+-  EXPECT_EQ("$rip", names[16]);
++  EXPECT_EQ(toUniqueString("$rax"), names[0]);
++  EXPECT_EQ(toUniqueString("$rdx"), names[1]);
++  EXPECT_EQ(toUniqueString("$rbp"), names[6]);
++  EXPECT_EQ(toUniqueString("$rsp"), names[7]);
++  EXPECT_EQ(toUniqueString("$rip"), names[16]);
+ }
+diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
+--- a/src/common/linux/dump_symbols.cc
++++ b/src/common/linux/dump_symbols.cc
+@@ -268,7 +268,7 @@
+ // supported.
+ template<typename ElfClass>
+ bool DwarfCFIRegisterNames(const typename ElfClass::Ehdr* elf_header,
+-                           std::vector<string>* register_names) {
++                           std::vector<const UniqueString*>* register_names) {
+   switch (elf_header->e_machine) {
+     case EM_386:
+       *register_names = DwarfCFIToModule::RegisterNames::I386();
+@@ -296,7 +296,7 @@
+                   Module* module) {
+   // Find the appropriate set of register names for this file's
+   // architecture.
+-  std::vector<string> register_names;
++  std::vector<const UniqueString*> register_names;
+   if (!DwarfCFIRegisterNames<ElfClass>(elf_header, &register_names)) {
+     fprintf(stderr, "%s: unrecognized ELF machine architecture '%d';"
+             " cannot convert DWARF call frame information\n",
+diff --git a/src/common/mac/dump_syms.mm b/src/common/mac/dump_syms.mm
+--- a/src/common/mac/dump_syms.mm
++++ b/src/common/mac/dump_syms.mm
+@@ -310,7 +310,7 @@
+                           bool eh_frame) const {
+   // Find the appropriate set of register names for this file's
+   // architecture.
+-  vector<string> register_names;
++  vector<const UniqueString*> register_names;
+   switch (macho_reader.cpu_type()) {
+     case CPU_TYPE_X86:
+       register_names = DwarfCFIToModule::RegisterNames::I386();
+diff --git a/src/common/module.h b/src/common/module.h
+--- a/src/common/module.h
++++ b/src/common/module.h
+@@ -46,6 +46,7 @@
+ 
+ #include "common/symbol_data.h"
+ #include "common/using_std_string.h"
++#include "common/unique_string.h"
+ #include "google_breakpad/common/breakpad_types.h"
+ 
+ namespace google_breakpad {
+@@ -136,8 +137,8 @@
+   };
+   struct Expr {
+     // Construct a simple-form expression
+-    Expr(string ident, long offset, bool deref) {
+-      if (ident.empty()) {
++    Expr(const UniqueString* ident, long offset, bool deref) {
++      if (ident == ustr__empty()) {
+         Expr();
+       } else {
+         postfix_ = "";
+@@ -152,7 +153,7 @@
+         Expr();
+       } else {
+         postfix_ = postfix;
+-        ident_ = "";
++        ident_ = NULL;
+         offset_ = 0;
+         how_ = kExprPostfix;
+       }
+@@ -160,7 +161,7 @@
+     // Construct an invalid expression
+     Expr() {
+       postfix_ = "";
+-      ident_ = "";
++      ident_ = NULL;
+       offset_ = 0;
+       how_ = kExprInvalid;
+     }
+@@ -173,7 +174,7 @@
+     }
+ 
+     // The identifier that gives the starting value for simple expressions.
+-    string  ident_;
++    const UniqueString* ident_;
+     // The offset to add for simple expressions.
+     long    offset_;
+     // The Postfix expression string to evaluate for non-simple expressions.
+@@ -188,7 +189,7 @@
+   // their values. This can represent a complete set of rules to
+   // follow at some address, or a set of changes to be applied to an
+   // extant set of rules.
+-  typedef map<string, Expr> RuleMap;
++  typedef map<const UniqueString*, Expr> RuleMap;
+ 
+   // A map from addresses to RuleMaps, representing changes that take
+   // effect at given addresses.
+diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
+--- a/src/common/module_unittest.cc
++++ b/src/common/module_unittest.cc