bug 839126 - Update Breakpad to SVN r1112. r=upstream. Also fix a local patch that hadn't applied properly.
☠☠ backed out by c4b69b5d4189 ☠ ☠
authorTed Mielczarek <ted.mielczarek@gmail.com>
Thu, 07 Feb 2013 12:56:27 -0500
changeset 121181 cd02e40945d646631060324b0d6aa64d3cfd6066
parent 121180 311b6c68eaf62e02291fdfce34d38e51d6ea94b1
child 121182 c4b69b5d4189630fb83c64b741c767e7b8f66623
push idunknown
push userunknown
push dateunknown
reviewersupstream
bugs839126
milestone21.0a1
bug 839126 - Update Breakpad to SVN r1112. r=upstream. Also fix a local patch that hadn't applied properly.
content/html/content/test/test_ol_attributes_reflection.html
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/breakpad-patches/06-readsymboldata-mac.patch
toolkit/crashreporter/google-breakpad/SVN-INFO
toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h
toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm
toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc
toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc
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/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_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.cc
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/minidump_stackwalk.cc
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.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/third_party/glog/google-glog.sln
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
--- a/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch
+++ b/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch
@@ -1,70 +1,46 @@
 # HG changeset patch
 # User Ted Mielczarek <ted@mielczarek.org>
 # Date 1352220493 18000
-# Node ID af59ab8ee1ff8efa2a5e9d53fa494bb17ebad582
-# Parent 1b7cd930bef43cf597e66fefba27218affa724d6
+# Node ID a38d670da97e338234375756313b2f47650e01fb
+# Parent  201b7c6793586b6b7cfcaa02f4e29700c4c12ef1
 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();
+@@ -63,7 +63,7 @@
         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)
+@@ -93,8 +93,14 @@
      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) {
+@@ -111,11 +117,50 @@
    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;
 +}
 +
@@ -105,27 +81,17 @@ diff --git a/src/common/module.cc b/src/
 +    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)
+@@ -155,8 +200,25 @@
      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(),
@@ -143,182 +109,124 @@ diff --git a/src/common/module.cc b/src/
 +  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();
-   }
+@@ -261,7 +323,7 @@
  
    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;
+@@ -168,6 +168,13 @@
      }
    };
  
 +  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
+@@ -227,6 +234,10 @@
    // 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
+@@ -234,6 +245,10 @@
    // 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
+@@ -248,6 +263,10 @@
    // 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;
- 
+@@ -301,6 +320,9 @@
    // 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.
+@@ -309,7 +331,7 @@
  
    // 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.
+@@ -334,11 +334,6 @@
    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"
+@@ -346,7 +341,12 @@
                 " 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;
+@@ -354,10 +354,18 @@
    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);
@@ -331,21 +239,17 @@ diff --git a/src/common/module_unittest.
 +  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";
+@@ -369,18 +377,10 @@
    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));
@@ -358,27 +262,17 @@ diff --git a/src/common/module_unittest.
 -  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"
+@@ -488,3 +488,150 @@
                 "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);
--- a/toolkit/crashreporter/breakpad-patches/01-dump-symbols-just-cfi.patch
+++ b/toolkit/crashreporter/breakpad-patches/01-dump-symbols-just-cfi.patch
@@ -1,43 +1,28 @@
 # HG changeset patch
 # User Ted Mielczarek <ted@mielczarek.org>
 # Date 1352220493 18000
-# Node ID 0f7f04d2a249b9a9bbc61eb350f177054ab11601
-# Parent 96b3a2bb799eb401c8a80ed6c134289f91eb7436
+# Node ID e57a7855d118e645730887e2b921dc83f89a25e7
+# Parent  a38d670da97e338234375756313b2f47650e01fb
 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,
+@@ -510,6 +510,7 @@
                   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;
+@@ -530,81 +531,85 @@
    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 =
@@ -176,132 +161,79 @@ diff --git a/src/common/linux/dump_symbo
 +          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 {
+@@ -636,7 +641,7 @@
          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>
+@@ -731,7 +736,7 @@
  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);
- 
+@@ -765,7 +770,8 @@
    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;
+@@ -803,7 +809,8 @@
      }
  
      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.
+@@ -820,7 +827,7 @@
  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);
+@@ -832,12 +839,12 @@
    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;
- }
+@@ -845,20 +852,20 @@
  
  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))
@@ -316,163 +248,111 @@ diff --git a/src/common/linux/dump_symbo
  
  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))
+@@ -866,7 +873,7 @@
      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>
+@@ -39,6 +39,7 @@
  #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
+@@ -50,10 +51,10 @@
  // 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
+@@ -61,7 +62,7 @@
  // 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 {
+@@ -48,7 +48,7 @@
  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;
+@@ -86,7 +86,7 @@
    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;
+@@ -118,11 +118,11 @@
    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;
+@@ -157,11 +157,11 @@
    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>
- 
+@@ -47,13 +47,15 @@
  #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 {
@@ -480,128 +360,83 @@ diff --git a/src/common/mac/dump_syms.h 
 -  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;
+@@ -110,9 +112,9 @@
    }
  
    // 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,
+@@ -139,6 +141,9 @@
                 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"
+@@ -55,6 +55,7 @@
  #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
+@@ -370,8 +371,12 @@
    // 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:
+@@ -380,6 +385,7 @@
    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;
+@@ -387,7 +393,7 @@
    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;
+@@ -399,13 +405,17 @@
    }
  
    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()) {
@@ -616,68 +451,43 @@ diff --git a/src/common/mac/dump_syms.mm
 +          = 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();
+@@ -429,7 +439,7 @@
    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))
+@@ -494,11 +504,11 @@
      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;
-   }
+@@ -266,62 +266,64 @@
    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())
@@ -777,48 +587,28 @@ diff --git a/src/common/module.cc b/src/
 -      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>
+@@ -44,6 +44,7 @@
  #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
+@@ -278,13 +279,15 @@
    // 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.
@@ -826,233 +616,118 @@ diff --git a/src/common/module.h b/src/c
 +  // - 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"
- 
+@@ -70,7 +70,7 @@
  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 };
+@@ -91,7 +91,7 @@
    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
+@@ -141,7 +141,7 @@
    // 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());
+@@ -197,7 +197,7 @@
    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
+@@ -245,7 +245,7 @@
    // 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);
+@@ -279,7 +279,7 @@
  
    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";
+@@ -331,7 +331,7 @@
    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");
- 
+@@ -407,7 +407,7 @@
    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");
- 
+@@ -426,7 +426,7 @@
    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";
- 
+@@ -453,7 +453,7 @@
    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";
- 
+@@ -480,7 +480,7 @@
    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.
@@ -1093,67 +768,39 @@ new file mode 100644
 +  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) {
+@@ -68,7 +68,8 @@
      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;
- };
+@@ -54,7 +54,7 @@
  
  //=============================================================================
  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;
+@@ -86,7 +86,7 @@
      }
    }
  
 -  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");
--- a/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch
+++ b/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch
@@ -1,381 +1,198 @@
 # HG changeset patch
-# Parent f98602ca29804c34e143d3fb337e6dde3e1c558c
+# User Ted Mielczarek <ted.mielczarek@gmail.com>
+# Date 1360255133 18000
+# Node ID dc6d795f6d0b9357f39ac2a291be4e1c533d3c09
+# Parent  e57a7855d118e645730887e2b921dc83f89a25e7
 Change the representation of CFI rules to avoid postfix expressions in most cases
 Patch by Julian Seward <jseward@acm.org>
+R=ted
 
 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 \
+@@ -138,6 +138,7 @@
  	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 \
+@@ -560,6 +561,7 @@
  	-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 \
+@@ -574,6 +576,7 @@
  	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 \
+@@ -603,6 +606,7 @@
  	-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 \
+@@ -654,6 +658,7 @@
  	-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 \
+@@ -691,6 +696,7 @@
  	-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)
- 
+@@ -804,6 +810,7 @@
  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
- 
+@@ -933,6 +940,7 @@
  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 @@
+@@ -1,9 +1,9 @@
 -# 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] }'
+@@ -195,6 +195,12 @@
  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 \
+@@ -266,8 +272,8 @@
  	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 \
+@@ -327,7 +333,9 @@
  	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) \
+@@ -625,7 +633,9 @@
  @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)
+@@ -658,6 +668,7 @@
  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)
+@@ -699,6 +710,7 @@
  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) \
+@@ -731,7 +743,9 @@
  @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)
+@@ -776,6 +790,7 @@
  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)
+@@ -806,6 +821,7 @@
  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)
+@@ -867,6 +883,7 @@
  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)
+@@ -1217,12 +1234,16 @@
  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 {} ';' \
@@ -385,517 +202,288 @@ diff --git a/Makefile.in b/Makefile.in
  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 \
+@@ -1388,6 +1409,7 @@
  @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 \
+@@ -1720,6 +1742,7 @@
  @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 \
+@@ -1735,6 +1758,7 @@
  @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 \
+@@ -1768,6 +1792,7 @@
  @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 \
+@@ -1823,6 +1848,7 @@
  @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 \
+@@ -1864,6 +1890,7 @@
  @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 = \
+@@ -1989,6 +2016,7 @@
  @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 = \
+@@ -2127,6 +2155,7 @@
  @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
+@@ -2294,7 +2323,7 @@
  
  .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)
+@@ -2330,10 +2359,8 @@
  $(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:
+@@ -2371,9 +2398,7 @@
  	@$(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)
+@@ -2482,10 +2507,12 @@
  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)
+@@ -2564,7 +2591,7 @@
  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)
+@@ -2616,7 +2643,7 @@
  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)
+@@ -2663,7 +2690,7 @@
  
  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)
+@@ -2756,13 +2783,13 @@
  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)
+@@ -2906,7 +2933,7 @@
  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)
+@@ -2924,13 +2951,13 @@
  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)
+@@ -2942,7 +2969,7 @@
  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)
+@@ -2954,7 +2981,7 @@
  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)
+@@ -2969,13 +2996,13 @@
  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)
+@@ -2990,7 +3017,7 @@
  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)
+@@ -3005,7 +3032,7 @@
  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)
+@@ -3017,7 +3044,7 @@
  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)
+@@ -3029,12 +3056,12 @@
  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)
+@@ -3046,13 +3073,13 @@
  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)
+@@ -3073,25 +3100,25 @@
  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):  \
@@ -915,285 +503,168 @@ diff --git a/Makefile.in b/Makefile.in
  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)
+@@ -3109,7 +3136,7 @@
  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)
+@@ -3127,13 +3154,13 @@
  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)
+@@ -3151,7 +3178,7 @@
  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)
+@@ -3163,7 +3190,7 @@
  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)
+@@ -3175,7 +3202,7 @@
  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)
+@@ -3187,7 +3214,7 @@
  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)
+@@ -3199,7 +3226,7 @@
  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)
+@@ -3220,7 +3247,7 @@
  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)
+@@ -3238,7 +3265,7 @@
  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) \
+@@ -3249,8 +3276,6 @@
  	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)
+@@ -3279,7 +3304,7 @@
  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)
+@@ -3291,7 +3316,7 @@
  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)
+@@ -3306,7 +3331,7 @@
  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)
+@@ -3321,13 +3346,13 @@
  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:
+@@ -5864,9 +5889,7 @@
  	@$(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"; \
+@@ -6001,14 +6024,15 @@
  	  fi; \
  	  dashes=`echo "$$dashes" | sed s/./=/g`; \
  	  if test "$$failed" -eq 0; then \
 -	    echo "$$grn$$dashes"; \
 +	    col="$$grn"; \
  	  else \
 -	    echo "$$red$$dashes"; \
 +	    col="$$red"; \
@@ -1205,96 +676,56 @@ diff --git a/Makefile.in b/Makefile.in
 +	  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
+@@ -6056,7 +6080,11 @@
  	$(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
+@@ -6064,7 +6092,7 @@
  	$(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*) \
+@@ -6095,6 +6123,8 @@
  	  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-$$$$/" \
+@@ -6114,6 +6144,7 @@
  	  && 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: "; \
+@@ -6142,8 +6173,16 @@
  	  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; \
@@ -1303,27 +734,17 @@ diff --git a/Makefile.in b/Makefile.in
 +	$(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
+@@ -6178,10 +6217,15 @@
  
  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 \
@@ -1333,61 +754,42 @@ diff --git a/Makefile.in b/Makefile.in
 +	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
- 
+@@ -6313,8 +6357,8 @@
  .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 @@
+@@ -1,7 +1,8 @@
 -# 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.
+@@ -13,18 +14,21 @@
  
  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.
@@ -1402,81 +804,51 @@ diff --git a/aclocal.m4 b/aclocal.m4
  # 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],
+@@ -34,7 +38,7 @@
  [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
- # -------------------------------
+@@ -50,7 +54,7 @@
  # 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
- ])
+@@ -79,12 +83,14 @@
  
  # 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.
+@@ -166,14 +172,14 @@
  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.
  #
@@ -1484,341 +856,222 @@ diff --git a/aclocal.m4 b/aclocal.m4
  # 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
+@@ -213,6 +219,7 @@
    # 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
+@@ -277,7 +284,7 @@
  	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])
+@@ -342,10 +349,13 @@
  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
+@@ -579,12 +589,15 @@
  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])
+@@ -751,12 +764,15 @@
  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
- ])
+@@ -779,13 +795,14 @@
  
  # 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],
+@@ -793,13 +810,13 @@
  [[_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.
+@@ -810,12 +827,14 @@
  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])
+@@ -892,12 +911,14 @@
  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
+@@ -920,13 +941,13 @@
  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.
+@@ -935,13 +956,13 @@
  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
+@@ -963,10 +984,11 @@
  # 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 @@
+@@ -1,13 +1,13 @@
  #! /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.)
+@@ -91,6 +91,7 @@
  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 :
+@@ -216,11 +217,18 @@
    # 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
@@ -1828,46 +1081,26 @@ diff --git a/configure b/configure
 +	  *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'`
+@@ -319,7 +327,7 @@
        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`
-   }
+@@ -359,19 +367,19 @@
  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
@@ -1885,482 +1118,271 @@ diff --git a/configure b/configure
 +    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
+@@ -533,7 +541,7 @@
  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
+@@ -632,6 +640,7 @@
  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
+@@ -799,8 +808,9 @@
    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-*)
+@@ -845,7 +855,7 @@
      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-*)
+@@ -871,7 +881,7 @@
      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-*)
+@@ -1075,7 +1085,7 @@
      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-*)
+@@ -1091,7 +1101,7 @@
      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=* \
+@@ -1121,8 +1131,8 @@
    | --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\([^=]*\)='`
+@@ -1130,7 +1140,7 @@
      # 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.
+@@ -1140,7 +1150,7 @@
      $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
+@@ -1148,13 +1158,13 @@
  
  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
+@@ -1177,7 +1187,7 @@
      [\\/$]* | ?:[\\/]* )  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.
+@@ -1191,8 +1201,8 @@
  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
- 
- 
+@@ -1207,9 +1217,9 @@
  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
+@@ -1248,11 +1258,11 @@
  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
+@@ -1292,7 +1302,7 @@
        --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
+@@ -1445,9 +1455,9 @@
  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
+@@ -1491,7 +1501,7 @@
  
  	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
+@@ -1517,7 +1527,7 @@
      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
+@@ -1528,7 +1538,7 @@
  
      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
+@@ -1566,7 +1576,7 @@
  
  	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
- 
+@@ -1608,7 +1618,7 @@
         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
+@@ -1654,7 +1664,7 @@
    # 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.
+@@ -1667,10 +1677,10 @@
  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
+@@ -1706,7 +1716,7 @@
  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
+@@ -1729,17 +1739,15 @@
  $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 ##
 -## --------------------------------------------------- ##
@@ -2371,227 +1393,145 @@ diff --git a/configure b/configure
  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
+@@ -1748,7 +1756,7 @@
  	       { $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 ()
- {
+@@ -1761,7 +1769,7 @@
    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
+@@ -1779,7 +1787,7 @@
  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
+@@ -1787,7 +1795,7 @@
  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.
+@@ -1897,11 +1905,9 @@
    {
      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
+@@ -1935,11 +1941,9 @@
  )
      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
+@@ -1952,11 +1956,9 @@
      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
+@@ -1970,11 +1972,9 @@
      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.
+@@ -2029,7 +2029,12 @@
  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
+@@ -2044,7 +2049,11 @@
      { $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
+@@ -2120,7 +2129,7 @@
  $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
- 
- 
+@@ -2136,16 +2145,22 @@
  
  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
@@ -2612,24 +1552,17 @@ diff --git a/configure b/configure
 +  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.
- 
- 
+@@ -2160,27 +2175,27 @@
  
  # 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; }
@@ -2652,1030 +1585,544 @@ diff --git a/configure b/configure
  $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
- 
+@@ -2198,14 +2213,14 @@
  
  { $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
+@@ -2213,7 +2228,7 @@
  $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.
+@@ -2249,7 +2264,7 @@
  { $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='
+@@ -2336,11 +2351,11 @@
  '
  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
+@@ -2362,7 +2377,7 @@
        # 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
+@@ -2372,7 +2387,7 @@
     # 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.
+@@ -2426,7 +2441,7 @@
  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.
+@@ -2466,7 +2481,7 @@
  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"
- 
+@@ -2519,7 +2534,7 @@
  { $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.
+@@ -2570,7 +2585,7 @@
  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
+@@ -2610,7 +2625,7 @@
  $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
+@@ -2618,7 +2633,7 @@
  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."
+@@ -2652,7 +2667,7 @@
    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"}
+@@ -2698,9 +2713,9 @@
  
  # 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
+@@ -2776,7 +2791,7 @@
  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
- 
+@@ -2844,6 +2859,7 @@
  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.
+@@ -2864,7 +2880,7 @@
  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.
+@@ -2904,7 +2920,7 @@
  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.
+@@ -2957,7 +2973,7 @@
  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.
+@@ -2997,7 +3013,7 @@
  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.
+@@ -3056,7 +3072,7 @@
  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.
+@@ -3100,7 +3116,7 @@
  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
- 
+@@ -3154,8 +3170,8 @@
  
  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
+@@ -3269,9 +3285,8 @@
  
  { { $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
+@@ -3313,8 +3328,8 @@
  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
+@@ -3371,9 +3386,9 @@
      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
+@@ -3384,7 +3399,7 @@
  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
+@@ -3424,8 +3439,8 @@
  
  { { $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
+@@ -3435,7 +3450,7 @@
  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}
+@@ -3472,7 +3487,7 @@
  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
+@@ -3550,7 +3565,7 @@
  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=
+@@ -3649,7 +3664,7 @@
  
  { $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
+@@ -3658,6 +3673,7 @@
    # 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
+@@ -3717,7 +3733,7 @@
  	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=
+@@ -3783,7 +3799,7 @@
  
  { $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
+@@ -3792,6 +3808,7 @@
    # 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
+@@ -3849,7 +3866,7 @@
  	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.
+@@ -3914,7 +3931,7 @@
  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.
+@@ -3954,7 +3971,7 @@
  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.
+@@ -4007,7 +4024,7 @@
  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.
+@@ -4047,7 +4064,7 @@
  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.
+@@ -4106,7 +4123,7 @@
  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.
+@@ -4150,7 +4167,7 @@
  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
- 
+@@ -4204,8 +4221,8 @@
  
  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
+@@ -4234,7 +4251,7 @@
  
  { $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}
+@@ -4271,7 +4288,7 @@
  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
+@@ -4349,7 +4366,7 @@
  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=
+@@ -4448,7 +4465,7 @@
  
  { $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
+@@ -4457,6 +4474,7 @@
    # 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
+@@ -4516,7 +4534,7 @@
  	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; }
+@@ -4580,7 +4598,7 @@
  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
+@@ -4709,7 +4727,7 @@
    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
+@@ -4739,7 +4757,7 @@
    # 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.
+@@ -4755,11 +4773,11 @@
  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
+@@ -4798,7 +4816,7 @@
    # 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.
+@@ -4814,18 +4832,18 @@
  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.
@@ -3688,437 +2135,224 @@ diff --git a/configure b/configure
  $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.
+@@ -4850,7 +4868,7 @@
  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.
+@@ -4894,7 +4912,7 @@
  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
+@@ -4972,7 +4990,7 @@
  
  { $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}
+@@ -5009,7 +5027,7 @@
  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=
+@@ -5095,7 +5113,7 @@
  
  { $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
+@@ -5104,6 +5122,7 @@
    # 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
+@@ -5163,7 +5182,7 @@
  	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.
+@@ -5223,7 +5242,7 @@
  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.
+@@ -5263,7 +5282,7 @@
  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
- 
- 
+@@ -5323,7 +5342,7 @@
  
  { $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
+@@ -5372,7 +5391,7 @@
    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"
- 
+@@ -5386,7 +5405,7 @@
  
  { $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
+@@ -5438,7 +5457,7 @@
    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"
- 
+@@ -5453,7 +5472,7 @@
  
  { $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.
+@@ -5790,7 +5809,7 @@
  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.
+@@ -5951,7 +5970,7 @@
  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 :
+@@ -6023,8 +6042,7 @@
    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
- 
- 
+@@ -6037,7 +6055,7 @@
  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)
+@@ -6089,7 +6107,7 @@
                     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)
+@@ -6107,7 +6125,7 @@
                     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)
+@@ -6133,7 +6151,7 @@
                     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
+@@ -6150,7 +6168,7 @@
  
  
  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)
+@@ -6163,7 +6181,7 @@
                     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}/
+@@ -6245,10 +6263,21 @@
       :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
@@ -4132,43 +2366,25 @@ diff --git a/configure b/configure
 +        *)
 +	  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
+@@ -6264,6 +6293,7 @@
  
  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=
+@@ -6287,51 +6317,51 @@
  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
@@ -4222,45 +2438,25 @@ diff --git a/configure b/configure
  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.)
+@@ -6432,6 +6462,7 @@
  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.
+@@ -6477,19 +6508,19 @@
  (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
@@ -4278,88 +2474,48 @@ diff --git a/configure b/configure
 +    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'`
+@@ -6685,7 +6716,7 @@
        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
+@@ -6739,7 +6770,7 @@
  # 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
+@@ -6805,10 +6836,10 @@
  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=:
+@@ -6826,11 +6857,16 @@
  while test $# != 0
  do
    case $1 in
 -  --*=*)
 +  --*=?*)
      ac_option=`expr "X$1" : 'X\([^=]*\)='`
      ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
      ac_shift=:
@@ -4367,142 +2523,96 @@ diff --git a/configure b/configure
 +  --*=)
 +    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 )
+@@ -6852,6 +6888,7 @@
      $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'"
+@@ -6864,7 +6901,7 @@
      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)
+@@ -6873,7 +6910,7 @@
      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" ;;
+@@ -6931,7 +6968,7 @@
      "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:
+@@ -6954,9 +6991,10 @@
  # 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.
+@@ -6964,12 +7002,13 @@
  
  {
    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\'
+@@ -6986,12 +7025,12 @@
  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" &&
+@@ -7000,18 +7039,18 @@
    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='%!_!# '
@@ -4515,55 +2625,35 @@ diff --git a/configure b/configure
    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
+@@ -7019,7 +7058,7 @@
  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
+@@ -7067,7 +7106,7 @@
  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
+@@ -7099,21 +7138,29 @@
    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
@@ -4592,142 +2682,88 @@ diff --git a/configure b/configure
  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.
+@@ -7125,7 +7172,7 @@
  # 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
+@@ -7137,11 +7184,11 @@
  # 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 }
+@@ -7226,7 +7273,7 @@
  _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;;
+@@ -7239,7 +7286,7 @@
    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=
+@@ -7258,7 +7305,7 @@
      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
+@@ -7267,7 +7314,7 @@
  	   [\\/$]*) 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;;
+@@ -7293,8 +7340,8 @@
      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
+@@ -7430,23 +7477,24 @@
  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
  
@@ -4753,18 +2789,17 @@ diff --git a/configure b/configure
 +  -) 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
-   #
+@@ -7455,21 +7503,21 @@
    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"
@@ -4784,86 +2819,48 @@ diff --git a/configure b/configure
      $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
+@@ -7619,7 +7667,7 @@
  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
+@@ -7640,7 +7688,7 @@
    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
+@@ -127,7 +127,8 @@
    // 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;
+@@ -153,23 +154,15 @@
  }
  
  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
@@ -4880,19 +2877,17 @@ diff --git a/src/common/dwarf_cfi_to_mod
 +    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;
+@@ -179,33 +172,37 @@
  }
  
  bool DwarfCFIToModule::SameValueRule(uint64 address, int reg) {
 -  ostringstream s;
 -  s << RegisterName(reg);
 -  Record(address, reg, s.str());
 +  // reg + 0
 +  Module::Expr rule
@@ -4932,184 +2927,116 @@ diff --git a/src/common/dwarf_cfi_to_mod
 -  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.
+@@ -152,7 +152,7 @@
    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));
+@@ -158,7 +158,7 @@
    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());
+@@ -172,7 +172,8 @@
    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());
+@@ -184,7 +185,8 @@
    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();
+@@ -200,7 +202,7 @@
    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));
+@@ -210,7 +212,7 @@
    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));
+@@ -244,8 +246,8 @@
    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));
+@@ -257,7 +259,7 @@
    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));
+@@ -269,10 +271,11 @@
    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));
+@@ -256,6 +256,24 @@
    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_ << " +";
@@ -5124,30 +3051,20 @@ diff --git a/src/common/module.cc b/src/
 +      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;
+@@ -124,11 +124,71 @@
      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).
@@ -5212,82 +3129,52 @@ diff --git a/src/common/module.h b/src/c
 +  // 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.
+@@ -130,11 +130,11 @@
    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.
+@@ -234,11 +234,11 @@
    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.
+@@ -310,24 +310,24 @@
    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");
@@ -5310,27 +3197,17 @@ diff --git a/src/common/module_unittest.
 -    "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.
+@@ -357,23 +357,23 @@
    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";
@@ -5352,27 +3229,17 @@ diff --git a/src/common/module_unittest.
 -  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.
+@@ -590,24 +590,24 @@
    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");
@@ -5395,72 +3262,42 @@ diff --git a/src/common/module_unittest.
 -    "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,
+@@ -49,7 +49,7 @@
                                    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;
- 
+@@ -100,10 +100,10 @@
  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;
+@@ -167,16 +167,17 @@
  }
  
  void CFIFrameInfoParseHandler::CFARule(const string &expression) {
 -  frame_info_->SetCFARule(expression);
 +  // 'expression' is a postfix expression string.
 +  frame_info_->SetCFARule(Module::Expr(expression));
  }
  
@@ -5474,40 +3311,25 @@ diff --git a/src/processor/cfi_frame_inf
 -  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>
+@@ -43,6 +43,7 @@
  
  #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.
+@@ -66,16 +67,17 @@
  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
@@ -5520,27 +3342,17 @@ diff --git a/src/processor/cfi_frame_inf
 +  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;
+@@ -106,27 +108,23 @@
  
   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;
  
@@ -5564,95 +3376,65 @@ diff --git a/src/processor/cfi_frame_inf
 -  // 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.
- 
+@@ -35,6 +35,7 @@
  #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;
+@@ -43,6 +44,7 @@
  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.
+@@ -86,7 +88,7 @@
  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.
+@@ -96,7 +98,7 @@
  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());
- }
- 
+@@ -105,8 +107,8 @@
  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());
- }
- 
+@@ -120,12 +122,12 @@
  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 -");
@@ -5661,183 +3443,137 @@ diff --git a/src/processor/cfi_frame_inf
 +  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());
- }
- 
+@@ -147,9 +149,9 @@
  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.
+@@ -165,8 +167,8 @@
  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.
+@@ -175,8 +177,8 @@
  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();
+@@ -188,8 +190,8 @@
  
    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.
+@@ -201,8 +203,8 @@
  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.
+@@ -213,8 +215,8 @@
  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) {
+@@ -225,8 +227,8 @@
    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.
+@@ -237,9 +239,9 @@
  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.
+@@ -250,9 +252,9 @@
  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();
+@@ -263,10 +265,10 @@
  
    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.
+@@ -278,13 +280,13 @@
  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,
@@ -5845,55 +3581,35 @@ diff --git a/src/processor/cfi_frame_inf
  
 -  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 *>()))
+@@ -517,10 +519,10 @@
        .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;
+@@ -231,12 +231,19 @@
  }
  
  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
@@ -5906,18 +3622,17 @@ diff --git a/src/processor/postfix_evalu
    // 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.
+@@ -245,28 +252,69 @@
    if (stack_.empty())
      return true;
  
 -  BPLOG(ERROR) << "Incomplete execution: " << expression;
 +  BPLOG(ERROR) << "Incomplete execution: " << expr;
    return false;
  }
  
@@ -5991,48 +3706,28 @@ diff --git a/src/processor/postfix_evalu
    }
 +}
  
 -  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>
+@@ -75,6 +75,7 @@
  #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
+@@ -105,13 +106,13 @@
    // 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
@@ -6042,13 +3737,8 @@ diff --git a/src/processor/postfix_evalu
 +  // 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
--- a/toolkit/crashreporter/breakpad-patches/03-unique-string.patch
+++ b/toolkit/crashreporter/breakpad-patches/03-unique-string.patch
@@ -1,10 +1,13 @@
 # HG changeset patch
-# Parent 1d603891eb459b1769329432ec941a1093c6e8f8
+# User Ted Mielczarek <ted.mielczarek@gmail.com>
+# Date 1360255134 18000
+# Node ID 229852c0b835929a56f207996034cf072307b343
+# Parent  dc6d795f6d0b9357f39ac2a291be4e1c533d3c09
 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 \
@@ -356,23 +359,24 @@ diff --git a/Makefile.in b/Makefile.in
 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(
+-    const char * const *strings,
 +vector<const UniqueString*> DwarfCFIToModule::RegisterNames::MakeVector(
-     const char * const *strings,
++    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]);
++  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[] = {
@@ -424,17 +428,17 @@ diff --git a/src/common/dwarf_cfi_to_mod
 -  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);
++  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,
@@ -442,31 +446,31 @@ diff --git a/src/common/dwarf_cfi_to_mod
 +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));
++          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));
++          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"
@@ -572,252 +576,272 @@ diff --git a/src/common/dwarf_cfi_to_mod
 -  // 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 @@
+@@ -42,6 +42,11 @@
+ 
+ using google_breakpad::Module;
+ using google_breakpad::DwarfCFIToModule;
++using google_breakpad::ToUniqueString;
++using google_breakpad::UniqueString;
++using google_breakpad::ustr__ZDcfa;
++using google_breakpad::ustr__ZDra;
++using google_breakpad::ustr__empty;
+ using testing::ContainerEq;
+ using testing::Test;
+ using testing::_;
+@@ -50,8 +55,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 @@
+@@ -59,17 +66,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(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 @@
+@@ -77,7 +84,7 @@
    }
  
    Module module;
 -  vector<string> register_names;
 +  vector<const UniqueString*> register_names;
    MockCFIReporter reporter;
    DwarfCFIToModule handler;
    vector<Module::StackFrameEntry *> entries;
-@@ -132,7 +134,7 @@
+@@ -132,7 +139,7 @@
  class Rule: public RuleFixture, public Test { };
  
  TEST_F(Rule, UndefinedRule) {
 -  EXPECT_CALL(reporter, UndefinedNotSupported(_, "reg7"));
-+  EXPECT_CALL(reporter, UndefinedNotSupported(_, toUniqueString("reg7")));
++  EXPECT_CALL(reporter, UndefinedNotSupported(_, ToUniqueString("reg7")));
    StartEntry();
    ASSERT_TRUE(handler.UndefinedRule(entry_address, 7));
    ASSERT_TRUE(handler.End());
-@@ -143,7 +145,8 @@
+@@ -143,7 +150,8 @@
  
  TEST_F(Rule, RegisterWithEmptyName) {
    EXPECT_CALL(reporter, UnnamedRegister(_, 10));
 -  EXPECT_CALL(reporter, UndefinedNotSupported(_, "unnamed_register10"));
 +  EXPECT_CALL(reporter,
-+              UndefinedNotSupported(_, toUniqueString("unnamed_register10")));
++              UndefinedNotSupported(_, ToUniqueString("unnamed_register10")));
    StartEntry();
    ASSERT_TRUE(handler.UndefinedRule(entry_address, 10));
    ASSERT_TRUE(handler.End());
-@@ -158,7 +161,8 @@
+@@ -158,7 +166,8 @@
    ASSERT_TRUE(handler.End());
    CheckEntry();
    Module::RuleMap expected_initial;
 -  expected_initial["reg6"] = Module::Expr("reg6", 0, false);
-+  const UniqueString* reg6 = toUniqueString("reg6");
++  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 @@
+@@ -172,8 +181,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 @@
+@@ -185,8 +194,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);
++      Module::Expr(ToUniqueString("reg4"), -34530721, true);
    EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
  }
  
-@@ -201,8 +205,8 @@
+@@ -201,8 +210,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);
++      Module::Expr(ToUniqueString("unnamed_register11"), 61812979, false);
    EXPECT_THAT(entries[0]->rule_changes, ContainerEq(expected_changes));
  }
  
-@@ -212,13 +216,14 @@
+@@ -212,13 +221,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);
++      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")));
++  EXPECT_CALL(reporter, ExpressionsNotSupported(_, ToUniqueString("reg2")));
    StartEntry();
    ASSERT_TRUE(handler.ExpressionRule(entry_address + 0xf326, 2,
                                       "it takes two to tango"));
-@@ -229,7 +234,7 @@
+@@ -229,7 +239,7 @@
  }
  
  TEST_F(Rule, ValExpressionRule) {
 -  EXPECT_CALL(reporter, ExpressionsNotSupported(_, "reg0"));
-+  EXPECT_CALL(reporter, ExpressionsNotSupported(_, toUniqueString("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 @@
+@@ -246,8 +256,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);
++      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 @@
+@@ -259,7 +271,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);
++      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 @@
+@@ -271,39 +284,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);
++      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);
++      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]);
++  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]);
++  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]);
++  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 @@
+@@ -81,6 +81,7 @@
+ using google_breakpad::IsValidElf;
+ using google_breakpad::Module;
+ using google_breakpad::StabsToModule;
++using google_breakpad::UniqueString;
+ using google_breakpad::scoped_ptr;
+ 
+ //
+@@ -268,7 +269,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 @@
+@@ -296,7 +297,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",
@@ -828,16 +852,56 @@ diff --git a/src/common/mac/dump_syms.mm
                            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.cc b/src/common/module.cc
+--- a/src/common/module.cc
++++ b/src/common/module.cc
+@@ -38,6 +38,7 @@
+ #include <stdio.h>
+ #include <string.h>
+ 
++#include <algorithm>
+ #include <iostream>
+ #include <utility>
+ 
+@@ -275,11 +276,25 @@
+ }
+ 
+ bool Module::WriteRuleMap(const RuleMap &rule_map, std::ostream &stream) {
++  // Visit the register rules in alphabetical order.  Because
++  // rule_map has the elements in some arbitrary order,
++  // get the names out into a vector, sort them, and visit in
++  // sorted order.
++  std::vector<const UniqueString*> rr_names;
+   for (RuleMap::const_iterator it = rule_map.begin();
+        it != rule_map.end(); ++it) {
+-    if (it != rule_map.begin())
+-      stream << ' ';
+-    stream << it->first << ": " << it->second;
++    rr_names.push_back(it->first);
++  }
++
++  std::sort(rr_names.begin(), rr_names.end(), LessThan_UniqueString);
++
++  // Now visit the register rules in alphabetical order.
++  for (std::vector<const UniqueString*>::const_iterator name = rr_names.begin();
++       name != rr_names.end();
++       ++name) {
++    if (name != rr_names.begin())
++      stream << " ";
++    stream << FromUniqueString(*name) << ": " << rule_map.find(*name)->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
 @@ -46,6 +46,7 @@
  
  #include "common/symbol_data.h"
  #include "common/using_std_string.h"
 +#include "common/unique_string.h"
@@ -889,298 +953,349 @@ diff --git a/src/common/module.h b/src/c
 -  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
-@@ -130,17 +130,20 @@
+@@ -45,6 +45,8 @@
+ #include "common/using_std_string.h"
+ 
+ using google_breakpad::Module;
++using google_breakpad::ToUniqueString;
++using google_breakpad::ustr__ZDcfa;
+ using std::stringstream;
+ using std::vector;
+ using testing::ContainerEq;
+@@ -130,11 +132,13 @@
    Module::StackFrameEntry *entry = new Module::StackFrameEntry();
    entry->address = 0x30f9e5c83323973dULL;
    entry->size = 0x49fc9ca7c7c13dc2ULL;
 -  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"] =
 -    Module::Expr("do you like your blueeyed boy");
 -  entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death");
 +  entry->initial_rules[ustr__ZDcfa()] = Module::Expr("he was a handsome man");
-+  entry->initial_rules[toUniqueString("and")] =
++  entry->initial_rules[ToUniqueString("and")] =
 +      Module::Expr("what i want to know is");
-+  entry->rule_changes[0x30f9e5c83323973eULL][toUniqueString("how")] =
++  entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("how")] =
 +      Module::Expr("do you like your blueeyed boy");
-+  entry->rule_changes[0x30f9e5c83323973eULL][toUniqueString("Mister")] =
++  entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("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);
- 
-+  /*TODO: fix this test. registers are not serialized alphabetically.
-   m.Write(s, ALL_SYMBOL_DATA);
-   string contents = s.str();
-   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
-@@ -157,6 +160,7 @@
-                " Mister: Death"
-                " how: do you like your blueeyed boy\n",
-                contents.c_str());
-+  */
- }
- 
- TEST(Write, OmitUnusedFiles) {
 @@ -234,11 +238,13 @@
    Module::StackFrameEntry *entry = new Module::StackFrameEntry();
    entry->address = 0x30f9e5c83323973dULL;
    entry->size = 0x49fc9ca7c7c13dc2ULL;
 -  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"] =
 -    Module::Expr("do you like your blueeyed boy");
 -  entry->rule_changes[0x30f9e5c83323973eULL]["Mister"] = Module::Expr("Death");
 +  entry->initial_rules[ustr__ZDcfa()] = Module::Expr("he was a handsome man");
-+  entry->initial_rules[toUniqueString("and")] =
++  entry->initial_rules[ToUniqueString("and")] =
 +      Module::Expr("what i want to know is");
-+  entry->rule_changes[0x30f9e5c83323973eULL][toUniqueString("how")] =
++  entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("how")] =
 +      Module::Expr("do you like your blueeyed boy");
-+  entry->rule_changes[0x30f9e5c83323973eULL][toUniqueString("Mister")] =
++  entry->rule_changes[0x30f9e5c83323973eULL][ToUniqueString("Mister")] =
 +      Module::Expr("Death");
    m.AddStackFrameEntry(entry);
  
    // Set the load address.  Doing this after adding all the data to
-@@ -310,27 +316,31 @@
+@@ -310,23 +316,26 @@
    Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
    entry2->address = 0x8064f3af5e067e38ULL;
    entry2->size = 0x0de2a5ee55509407ULL;
 -  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");
 +  entry2->initial_rules[ustr__ZDcfa()] =
 +      Module::Expr("I think that I shall never see");
-+  entry2->initial_rules[toUniqueString("stromboli")] =
++  entry2->initial_rules[ToUniqueString("stromboli")] =
 +      Module::Expr("a poem lovely as a tree");
-+  entry2->initial_rules[toUniqueString("cannoli")] =
++  entry2->initial_rules[ToUniqueString("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"] = Module::Expr("Whose woods are these");
 -  entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
 +  entry3->initial_rules[ustr__ZDcfa()] = Module::Expr("Whose woods are these");
-+  entry3->rule_changes[0x47ceb0f63c269d7fULL][toUniqueString("calzone")] =
++  entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] =
      Module::Expr("the village though");
 -  entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
-+  entry3->rule_changes[0x47ceb0f63c269d7fULL][toUniqueString("cannoli")] =
++  entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] =
      Module::Expr("he will not see me stopping here");
 -  entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
-+  entry3->rule_changes[0x36682fad3763ffffULL][toUniqueString("stromboli")] =
++  entry3->rule_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] =
      Module::Expr("his house is in");
 -  entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
 +  entry3->rule_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] =
      Module::Expr("I think I know");
    m.AddStackFrameEntry(entry3);
  
-   // Check that Write writes STACK CFI records properly.
-+  /*TODO: fix this test
-   m.Write(s, ALL_SYMBOL_DATA);
-   string contents = s.str();
-   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
-@@ -348,6 +358,7 @@
-                " 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;
-@@ -357,23 +368,29 @@
+@@ -357,23 +366,29 @@
    EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address);
    EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size);
    Module::RuleMap entry1_initial;
 -  entry1_initial[".cfa"] = Module::Expr("Whose woods are these");
 +  entry1_initial[ustr__ZDcfa()] = Module::Expr("Whose woods are these");
    EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial));
    Module::RuleChangeMap entry1_changes;
 -  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"] =
 -    Module::Expr("he will not see me stopping here");
 +  entry1_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] =
 +      Module::Expr("I think I know");
-+  entry1_changes[0x36682fad3763ffffULL][toUniqueString("stromboli")] =
++  entry1_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] =
 +      Module::Expr("his house is in");
-+  entry1_changes[0x47ceb0f63c269d7fULL][toUniqueString("calzone")] =
++  entry1_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] =
 +      Module::Expr("the village though");
-+  entry1_changes[0x47ceb0f63c269d7fULL][toUniqueString("cannoli")] =
++  entry1_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] =
 +      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"] = 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");
 +  entry2_initial[ustr__ZDcfa()] =
 +      Module::Expr("I think that I shall never see");
-+  entry2_initial[toUniqueString("stromboli")] =
++  entry2_initial[ToUniqueString("stromboli")] =
 +      Module::Expr("a poem lovely as a tree");
-+  entry2_initial[toUniqueString("cannoli")] =
++  entry2_initial[ToUniqueString("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.
-@@ -590,23 +607,26 @@
+@@ -590,23 +605,26 @@
    Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
    entry2->address = 0x3000;
    entry2->size = 0x900;
 -  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");
 +  entry2->initial_rules[ustr__ZDcfa()] =
 +      Module::Expr("I think that I shall never see");
-+  entry2->initial_rules[toUniqueString("stromboli")] =
++  entry2->initial_rules[ToUniqueString("stromboli")] =
 +      Module::Expr("a poem lovely as a tree");
-+  entry2->initial_rules[toUniqueString("cannoli")] =
++  entry2->initial_rules[ToUniqueString("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"] = Module::Expr("Whose woods are these");
 -  entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
 +  entry3->initial_rules[ustr__ZDcfa()] = Module::Expr("Whose woods are these");
-+  entry3->rule_changes[0x47ceb0f63c269d7fULL][toUniqueString("calzone")] =
++  entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("calzone")] =
      Module::Expr("the village though");
 -  entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
-+  entry3->rule_changes[0x47ceb0f63c269d7fULL][toUniqueString("cannoli")] =
++  entry3->rule_changes[0x47ceb0f63c269d7fULL][ToUniqueString("cannoli")] =
      Module::Expr("he will not see me stopping here");
 -  entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
-+  entry3->rule_changes[0x36682fad3763ffffULL][toUniqueString("stromboli")] =
++  entry3->rule_changes[0x36682fad3763ffffULL][ToUniqueString("stromboli")] =
      Module::Expr("his house is in");
 -  entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
 +  entry3->rule_changes[0x36682fad3763ffffULL][ustr__ZDcfa()] =
      Module::Expr("I think I know");
    m.AddStackFrameEntry(entry3);
  
 diff --git a/src/common/unique_string.cc b/src/common/unique_string.cc
 new file mode 100644
 --- /dev/null
 +++ b/src/common/unique_string.cc
-@@ -0,0 +1,75 @@
+@@ -0,0 +1,110 @@
++// 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.
++
++#include <string>
++#include <map>
 +
 +#include <stdlib.h>
 +#include <string.h>
-+#include <stdio.h> // for debugging only
 +
-+#include <string>
-+#include <map>
 +#include "common/unique_string.h"
 +
++namespace google_breakpad {
++
 +///////////////////////////////////////////////////////////////////
 +// UniqueString
 +//
 +class UniqueString {
 + public:
 +  UniqueString(string str) { str_ = strdup(str.c_str()); }
-+  ~UniqueString() { free((void*)str_); }
++  ~UniqueString() { free(reinterpret_cast<void*>(const_cast<char*>(str_))); }
 +  const char* str_;
 +};
 +
 +class UniqueStringUniverse {
 + public:
 +  UniqueStringUniverse() {};
-+  const UniqueString* findOrCopy(string str)
-+  {
-+    std::map<string, UniqueString*>::iterator it;
-+    it = map_.find(str);
++  const UniqueString* FindOrCopy(string str) {
++    std::map<string, UniqueString*>::iterator it = map_.find(str);
 +    if (it == map_.end()) {
 +      UniqueString* ustr = new UniqueString(str);
 +      map_[str] = ustr;
-+      fprintf(stderr, "UniqueString %d = \"%s\"\n",
-+              (int)map_.size(), str.c_str());
 +      return ustr;
 +    } else {
 +      return it->second;
 +    }
 +  }
 + private:
 +  std::map<string, UniqueString*> map_;
 +};
++
 +//
 +///////////////////////////////////////////////////////////////////
 +
 +
 +static UniqueStringUniverse* sUSU = NULL;
 +
 +
 +// This isn't threadsafe.
-+const UniqueString* toUniqueString(string str)
-+{
++const UniqueString* ToUniqueString(string str) {
 +  if (!sUSU) {
 +    sUSU = new UniqueStringUniverse();
 +  }
-+  return sUSU->findOrCopy(str);
++  return sUSU->FindOrCopy(str);
 +}
 +
 +// This isn't threadsafe.
-+const UniqueString* toUniqueString_n(char* str, size_t n)
-+{
++const UniqueString* ToUniqueString_n(const char* str, size_t n) {
 +  if (!sUSU) {
 +    sUSU = new UniqueStringUniverse();
 +  }
-+  string key(str);
-+  key.resize(n);
-+  return sUSU->findOrCopy(key);
++  string key(str, n);
++  return sUSU->FindOrCopy(key);
 +}
 +
-+const char index(const UniqueString* us, int ix)
++const char Index(const UniqueString* us, int ix)
 +{
 +  return us->str_[ix];
 +}
 +
-+const char* const fromUniqueString(const UniqueString* ustr)
++const char* const FromUniqueString(const UniqueString* ustr)
 +{
 +  return ustr->str_;
 +}
++
++int StrcmpUniqueString(const UniqueString* us1, const UniqueString* us2) {
++  return strcmp(us1->str_, us2->str_);
++}
++
++bool LessThan_UniqueString(const UniqueString* us1, const UniqueString* us2) {
++  int r = StrcmpUniqueString(us1, us2);
++  return r < 0;
++}
++
++}  // namespace google_breakpad
 diff --git a/src/common/unique_string.h b/src/common/unique_string.h
 new file mode 100644
 --- /dev/null
 +++ b/src/common/unique_string.h
-@@ -0,0 +1,202 @@
+@@ -0,0 +1,239 @@
++// 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_UNIQUE_STRING_H
-+#define COMMON_UNIQUE_STRING_H
++#ifndef COMMON_UNIQUE_STRING_H_
++#define COMMON_UNIQUE_STRING_H_
 +
 +#include <string>
 +#include "common/using_std_string.h"
 +
++namespace google_breakpad {
++
 +// Abstract type
 +class UniqueString;
 +
-+// Unique-ify a string.  |toUniqueString| can never return NULL.
-+const UniqueString* toUniqueString(string);
++// Unique-ify a string.  |ToUniqueString| can never return NULL.
++const UniqueString* ToUniqueString(string);
 +
 +// ditto, starting instead from the first n characters of a C string
-+const UniqueString* toUniqueString_n(char* str, size_t n);
++const UniqueString* ToUniqueString_n(const char* str, size_t n);
 +
 +// Pull chars out of the string.  No range checking.
-+const char index(const UniqueString*, int);
++const char Index(const UniqueString*, int);
 +
 +// Get the contained C string (debugging only)
-+const char* const fromUniqueString(const UniqueString*);
++const char* const FromUniqueString(const UniqueString*);
 +
++// Do a strcmp-style comparison on the contained C string
++int StrcmpUniqueString(const UniqueString*, const UniqueString*);
++
++// Less-than comparison of two UniqueStrings, usable for std::sort.
++bool LessThan_UniqueString(const UniqueString*, const UniqueString*);
 +
 +// Some handy pre-uniqified strings.  Z is an escape character:
 +//   ZS        '$'
 +//   ZD        '.'
 +//   Zeq       '='
 +//   Zplus     '+'
 +//   Zstar     '*'
 +//   Zslash    '/'
@@ -1192,208 +1307,231 @@ new file mode 100644
 +// to be different.
 +//
 +// Unfortunately these have to be written as functions so as to
 +// make them safe to use in static initialisers.
 +
 +// ""
 +inline static const UniqueString* ustr__empty() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("");
++  if (!us) us = ToUniqueString("");
 +  return us;
 +}
 +
 +// "$eip"
 +inline static const UniqueString* ustr__ZSeip() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("$eip");
++  if (!us) us = ToUniqueString("$eip");
 +  return us;
 +}
 +
 +// "$ebp"
 +inline static const UniqueString* ustr__ZSebp() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("$ebp");
++  if (!us) us = ToUniqueString("$ebp");
 +  return us;
 +}
 +
 +// "$esp"
 +inline static const UniqueString* ustr__ZSesp() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("$esp");
++  if (!us) us = ToUniqueString("$esp");
 +  return us;
 +}
 +
 +// "$ebx"
 +inline static const UniqueString* ustr__ZSebx() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("$ebx");
++  if (!us) us = ToUniqueString("$ebx");
 +  return us;
 +}
 +
 +// "$esi"
 +inline static const UniqueString* ustr__ZSesi() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("$esi");
++  if (!us) us = ToUniqueString("$esi");
 +  return us;
 +}
 +
 +// "$edi"
 +inline static const UniqueString* ustr__ZSedi() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("$edi");
++  if (!us) us = ToUniqueString("$edi");
 +  return us;
 +}
 +
 +// ".cbCalleeParams"
 +inline static const UniqueString* ustr__ZDcbCalleeParams() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".cbCalleeParams");
++  if (!us) us = ToUniqueString(".cbCalleeParams");
 +  return us;
 +}
 +
 +// ".cbSavedRegs"
 +inline static const UniqueString* ustr__ZDcbSavedRegs() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".cbSavedRegs");
++  if (!us) us = ToUniqueString(".cbSavedRegs");
 +  return us;
 +}
 +
 +// ".cbLocals"
 +inline static const UniqueString* ustr__ZDcbLocals() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".cbLocals");
++  if (!us) us = ToUniqueString(".cbLocals");
 +  return us;
 +}
 +
 +// ".raSearchStart"
 +inline static const UniqueString* ustr__ZDraSearchStart() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".raSearchStart");
++  if (!us) us = ToUniqueString(".raSearchStart");
 +  return us;
 +}
 +
 +// ".raSearch"
 +inline static const UniqueString* ustr__ZDraSearch() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".raSearch");
++  if (!us) us = ToUniqueString(".raSearch");
 +  return us;
 +}
 +
 +// ".cbParams"
 +inline static const UniqueString* ustr__ZDcbParams() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".cbParams");
++  if (!us) us = ToUniqueString(".cbParams");
 +  return us;
 +}
 +
 +// "+"
 +inline static const UniqueString* ustr__Zplus() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("+");
++  if (!us) us = ToUniqueString("+");
 +  return us;
 +}
 +
 +// "-"
 +inline static const UniqueString* ustr__Zminus() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("-");
++  if (!us) us = ToUniqueString("-");
 +  return us;
 +}
 +
 +// "*"
 +inline static const UniqueString* ustr__Zstar() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("*");
++  if (!us) us = ToUniqueString("*");
 +  return us;
 +}
 +
 +// "/"
 +inline static const UniqueString* ustr__Zslash() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("/");
++  if (!us) us = ToUniqueString("/");
 +  return us;
 +}
 +
 +// "%"
 +inline static const UniqueString* ustr__Zpercent() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("%");
++  if (!us) us = ToUniqueString("%");
 +  return us;
 +}
 +
 +// "@"
 +inline static const UniqueString* ustr__Zat() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("@");
++  if (!us) us = ToUniqueString("@");
 +  return us;
 +}
 +
 +// "^"
 +inline static const UniqueString* ustr__Zcaret() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("^");
++  if (!us) us = ToUniqueString("^");
 +  return us;
 +}
 +
 +// "="
 +inline static const UniqueString* ustr__Zeq() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString("=");
++  if (!us) us = ToUniqueString("=");
 +  return us;
 +}
 +
 +// ".cfa"
 +inline static const UniqueString* ustr__ZDcfa() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".cfa");
++  if (!us) us = ToUniqueString(".cfa");
 +  return us;
 +}
 +
 +// ".ra"
 +inline static const UniqueString* ustr__ZDra() {
 +  static const UniqueString* us = NULL;
-+  if (!us) us = toUniqueString(".ra");
++  if (!us) us = ToUniqueString(".ra");
 +  return us;
 +}
 +
-+#endif /* ndef COMMON_UNIQUE_STRING_H */
++}  // namespace google_breakpad
++
++#endif  // COMMON_UNIQUE_STRING_H_
 diff --git a/src/processor/basic_source_line_resolver_unittest.cc b/src/processor/basic_source_line_resolver_unittest.cc
 --- a/src/processor/basic_source_line_resolver_unittest.cc
 +++ b/src/processor/basic_source_line_resolver_unittest.cc
-@@ -112,10 +112,10 @@
+@@ -48,11 +48,20 @@
+ using google_breakpad::BasicSourceLineResolver;
+ using google_breakpad::CFIFrameInfo;
+ using google_breakpad::CodeModule;
++using google_breakpad::FromUniqueString;
+ using google_breakpad::MemoryRegion;
+ using google_breakpad::StackFrame;
++using google_breakpad::ToUniqueString;
+ using google_breakpad::WindowsFrameInfo;
+ using google_breakpad::linked_ptr;
+ using google_breakpad::scoped_ptr;
++using google_breakpad::ustr__ZDcfa;
++using google_breakpad::ustr__ZDra;
++using google_breakpad::ustr__ZSebx;
++using google_breakpad::ustr__ZSebp;
++using google_breakpad::ustr__ZSedi;
++using google_breakpad::ustr__ZSesi;
++using google_breakpad::ustr__ZSesp;
+ 
+ class TestCodeModule : public CodeModule {
+  public:
+@@ -112,10 +121,10 @@
      const CFIFrameInfo::RegisterValueMap<u_int32_t> &expected,
      const CFIFrameInfo::RegisterValueMap<u_int32_t> &actual) {
    CFIFrameInfo::RegisterValueMap<u_int32_t>::const_iterator a;
 -  a = actual.find(".cfa");
 +  a = actual.find(ustr__ZDcfa());
    if (a == actual.end())
      return false;
 -  a = actual.find(".ra");
 +  a = actual.find(ustr__ZDra());
    if (a == actual.end())
      return false;
    for (a = actual.begin(); a != actual.end(); a++) {
-@@ -123,13 +123,13 @@
+@@ -123,13 +132,13 @@
        expected.find(a->first);
      if (e == expected.end()) {
        fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n",
 -              file, line, a->first.c_str(), a->second);
-+              file, line, fromUniqueString(a->first), a->second);
++              file, line, FromUniqueString(a->first), a->second);
        return false;
      }
      if (e->second != a->second) {
        fprintf(stderr,
                "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n",
 -              file, line, a->first.c_str(), a->second, e->second);
-+              file, line, fromUniqueString(a->first), a->second, e->second);
++              file, line, FromUniqueString(a->first), a->second, e->second);
        return false;
      }
      // Don't complain if this doesn't recover all registers. Although
-@@ -259,21 +259,21 @@
+@@ -259,21 +268,21 @@
  
    // Regardless of which instruction evaluation takes place at, it
    // should produce the same values for the caller's registers.
 -  expected_caller_registers[".cfa"] = 0x1001c;
 -  expected_caller_registers[".ra"]  = 0xf6438648;
 -  expected_caller_registers["$ebp"] = 0x10038;
 -  expected_caller_registers["$ebx"] = 0x98ecadc3;
 -  expected_caller_registers["$esi"] = 0x878f7524;
@@ -1416,74 +1554,82 @@ diff --git a/src/processor/basic_source_
 +  current_registers[ustr__ZSesp()] = 0x10018;
 +  current_registers[ustr__ZSebp()] = 0x10038;
 +  current_registers[ustr__ZSebx()] = 0x98ecadc3;
 +  current_registers[ustr__ZSesi()] = 0x878f7524;
 +  current_registers[ustr__ZSedi()] = 0x6312f9a5;
    cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -283,7 +283,7 @@
+@@ -283,7 +292,7 @@
                                expected_caller_registers, caller_registers));
  
    frame.instruction = 0x3d41;
 -  current_registers["$esp"] = 0x10014;
 +  current_registers[ustr__ZSesp()] = 0x10014;
    cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -293,7 +293,7 @@
+@@ -293,7 +302,7 @@
                                expected_caller_registers, caller_registers));
  
    frame.instruction = 0x3d43;
 -  current_registers["$ebp"] = 0x10014;
 +  current_registers[ustr__ZSebp()] = 0x10014;
    cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -303,7 +303,7 @@
+@@ -303,7 +312,7 @@
                    expected_caller_registers, caller_registers);
  
    frame.instruction = 0x3d54;
 -  current_registers["$ebx"] = 0x6864f054U;
 +  current_registers[ustr__ZSebx()] = 0x6864f054U;
    cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -313,7 +313,7 @@
+@@ -313,7 +322,7 @@
                    expected_caller_registers, caller_registers);
  
    frame.instruction = 0x3d5a;
 -  current_registers["$esi"] = 0x6285f79aU;
 +  current_registers[ustr__ZSesi()] = 0x6285f79aU;
    cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -323,7 +323,7 @@
+@@ -323,7 +332,7 @@
                    expected_caller_registers, caller_registers);
  
    frame.instruction = 0x3d84;
 -  current_registers["$edi"] = 0x64061449U;
 +  current_registers[ustr__ZSedi()] = 0x64061449U;
    cfi_frame_info.reset(resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
 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
-@@ -66,7 +66,7 @@
+@@ -36,6 +36,7 @@
+ 
+ #include <string.h>
+ 
++#include <algorithm>
+ #include <sstream>
+ 
+ #include "common/scoped_ptr.h"
+@@ -66,7 +67,7 @@
    // Then, compute the return address.
    V ra;
    working = registers;
 -  working[".cfa"] = cfa;
 +  working[ustr__ZDcfa()] = cfa;
    if (!evaluator.EvaluateForValue(ra_rule_, &ra))
      return false;
  
-@@ -75,14 +75,14 @@
+@@ -75,14 +76,14 @@
         it != register_rules_.end(); it++) {
      V value;
      working = registers;
 -    working[".cfa"] = cfa;
 +    working[ustr__ZDcfa()] = cfa;
      if (!evaluator.EvaluateForValue(it->second, &value))
        return false;
      (*caller_registers)[it->first] = value;
@@ -1491,61 +1637,83 @@ diff --git a/src/processor/cfi_frame_inf
  
 -  (*caller_registers)[".ra"] = ra;
 -  (*caller_registers)[".cfa"] = cfa;
 +  (*caller_registers)[ustr__ZDra()] = ra;
 +  (*caller_registers)[ustr__ZDcfa()] = cfa;
  
    return true;
  }
-@@ -113,7 +113,7 @@
+@@ -108,12 +109,29 @@
+       stream << " ";
+     stream << ".ra: " << ra_rule_;
+   }
++
++  // Visit the register rules in alphabetical order.  Because
++  // register_rules_ has the elements in some arbitrary order,
++  // get the names out into a vector, sort them, and visit in
++  // sorted order.
++  std::vector<const UniqueString*> rr_names;
+   for (RuleMap::const_iterator iter = register_rules_.begin();
+        iter != register_rules_.end();
         ++iter) {
++    rr_names.push_back(iter->first);
++  }
++
++  std::sort(rr_names.begin(), rr_names.end(), LessThan_UniqueString);
++
++  // Now visit the register rules in alphabetical order.
++  for (std::vector<const UniqueString*>::const_iterator name = rr_names.begin();
++       name != rr_names.end();
++       ++name) {
++    const UniqueString* nm = *name;
++    Module::Expr rule = register_rules_.at(nm);
      if (static_cast<std::streamoff>(stream.tellp()) != 0)
        stream << " ";
 -    stream << iter->first << ": " << iter->second;
-+    stream << fromUniqueString(iter->first) << ": " << iter->second;
++    stream << FromUniqueString(nm) << ": " << rule;
    }
  
    return stream.str();
-@@ -125,7 +125,7 @@
+@@ -125,7 +143,7 @@
    memcpy(working_copy.get(), rule_set.data(), rule_set_len);
    working_copy[rule_set_len] = '\0';
  
 -  name_.clear();
 +  name_ = ustr__empty();
    expression_.clear();
  
    char *cursor;
-@@ -142,10 +142,10 @@
+@@ -142,10 +160,10 @@
        // Names can't be empty.
        if (token_len < 2) return false;
        // If there is any pending content, report it.
 -      if (!name_.empty() || !expression_.empty()) {
 +      if (name_ != ustr__empty() || !expression_.empty()) {
          if (!Report()) return false;
        }
 -      name_.assign(token, token_len - 1);
-+      name_ = toUniqueString_n(token, token_len - 1);
++      name_ = ToUniqueString_n(token, token_len - 1);
        expression_.clear();
      } else {
        // Another expression component.
-@@ -159,9 +159,9 @@
+@@ -159,9 +177,9 @@
  }
  
  bool CFIRuleParser::Report() {
 -  if (name_.empty() || expression_.empty()) return false;
 -  if (name_ == ".cfa") handler_->CFARule(expression_);
 -  else if (name_ == ".ra") handler_->RARule(expression_);
 +  if (name_ == ustr__empty() || expression_.empty()) return false;
 +  if (name_ == ustr__ZDcfa()) handler_->CFARule(expression_);
 +  else if (name_ == ustr__ZDra()) handler_->RARule(expression_);
    else handler_->RegisterRule(name_, expression_);
    return true;
  }
-@@ -175,7 +175,7 @@
+@@ -175,7 +193,7 @@
    frame_info_->SetRARule(Module::Expr(expression));
  }
  
 -void CFIFrameInfoParseHandler::RegisterRule(const string &name,
 +void CFIFrameInfoParseHandler::RegisterRule(const UniqueString* name,
                                              const string &expression) {
    frame_info_->SetRegisterRule(name, Module::Expr(expression));
  }
@@ -1630,40 +1798,55 @@ diff --git a/src/processor/cfi_frame_inf
 -    const char *alternate_name;
 +    const UniqueString* alternate_name;
  
      // True if the callee is expected to preserve the value of this
      // register. If this flag is true for some register R, and the STACK
 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
-@@ -112,8 +112,8 @@
+@@ -43,9 +43,14 @@
+ using google_breakpad::CFIFrameInfo;
+ using google_breakpad::CFIFrameInfoParseHandler;
+ using google_breakpad::CFIRuleParser;
++using google_breakpad::FromUniqueString;
+ using google_breakpad::MemoryRegion;
+ using google_breakpad::Module;
+ using google_breakpad::SimpleCFIWalker;
++using google_breakpad::ToUniqueString;
++using google_breakpad::UniqueString;
++using google_breakpad::ustr__ZDcfa;
++using google_breakpad::ustr__ZDra;
+ using testing::_;
+ using testing::A;
+ using testing::AtMost;
+@@ -112,8 +117,8 @@
    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(330903416631436410ULL, caller_registers[ustr__ZDcfa()]);
 +  ASSERT_EQ(5870666104170902211ULL, caller_registers[ustr__ZDra()]);
  
    ASSERT_EQ(".cfa: 330903416631436410 .ra: 5870666104170902211",
              cfi.Serialize());
-@@ -124,19 +124,26 @@
+@@ -124,19 +129,25 @@
  
    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 /"));
 +
-+  const UniqueString* reg1 = toUniqueString("register1");
-+  const UniqueString* reg2 = toUniqueString("vodkathumbscrewingly");
-+  const UniqueString* reg3 = toUniqueString("pubvexingfjordschmaltzy");
-+  const UniqueString* reg4 = toUniqueString("uncopyrightables");
++  const UniqueString* reg1 = ToUniqueString("register1");
++  const UniqueString* reg2 = ToUniqueString("vodkathumbscrewingly");
++  const UniqueString* reg3 = ToUniqueString("pubvexingfjordschmaltzy");
++  const UniqueString* reg4 = ToUniqueString("uncopyrightables");
 +
 +  cfi.SetRegisterRule(reg1, Module::Expr(".cfa 54370437 *"));
 +  cfi.SetRegisterRule(reg2, Module::Expr("24076308 .cfa +"));
 +  cfi.SetRegisterRule(reg3, Module::Expr(".cfa 29801007 -"));
 +  cfi.SetRegisterRule(reg4, Module::Expr("92642917 .cfa /"));
    ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
                                              &caller_registers));
    ASSERT_EQ(6U, caller_registers.size());
@@ -1674,120 +1857,111 @@ diff --git a/src/processor/cfi_frame_inf
 -  ASSERT_EQ(-22136316ULL,       caller_registers["pubvexingfjordschmaltzy"]);
 -  ASSERT_EQ(12U,                caller_registers["uncopyrightables"]);
 +  ASSERT_EQ(7664691U,           caller_registers[ustr__ZDcfa()]);
 +  ASSERT_EQ(107469446U,         caller_registers[ustr__ZDra()]);
 +  ASSERT_EQ(416732599139967ULL, caller_registers[reg1]);
 +  ASSERT_EQ(31740999U,          caller_registers[reg2]);
 +  ASSERT_EQ(-22136316ULL,       caller_registers[reg3]);
 +  ASSERT_EQ(12U,                caller_registers[reg4]);
-+  /*TODO: fix this test, Serialize no longer serializes alphabetically
    ASSERT_EQ(".cfa: $temp1 68737028 = $temp2 61072337 = $temp1 $temp2 - "
              ".ra: .cfa 99804755 + "
              "pubvexingfjordschmaltzy: .cfa 29801007 - "
-@@ -144,6 +151,7 @@
-             "uncopyrightables: 92642917 .cfa / "
-             "vodkathumbscrewingly: 24076308 .cfa +",
-             cfi.Serialize());
-+  */
- }
- 
- TEST_F(Simple, RulesOverride) {
-@@ -155,8 +163,8 @@
+@@ -155,8 +166,8 @@
    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(2828089117179001ULL, caller_registers[ustr__ZDcfa()]);
 +  ASSERT_EQ(5870666104170902211ULL, caller_registers[ustr__ZDra()]);
    ASSERT_EQ(".cfa: 2828089117179001 .ra: 5870666104170902211",
              cfi.Serialize());
  }
-@@ -188,15 +196,17 @@
+@@ -188,15 +199,17 @@
  TEST_F(Scope, CFASeesCurrentRegs) {
    ExpectNoMemoryReferences();
  
 -  registers[".baraminology"] = 0x06a7bc63e4f13893ULL;
 -  registers[".ornithorhynchus"] = 0x5e0bf850bafce9d2ULL;
-+  const UniqueString* reg1 = toUniqueString(".baraminology");
-+  const UniqueString* reg2 = toUniqueString(".ornithorhynchus");
++  const UniqueString* reg1 = ToUniqueString(".baraminology");
++  const UniqueString* reg2 = ToUniqueString(".ornithorhynchus");
 +  registers[reg1] = 0x06a7bc63e4f13893ULL;
 +  registers[reg2] = 0x5e0bf850bafce9d2ULL;
    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"]);
 +            caller_registers[ustr__ZDcfa()]);
  }
  
  // .cfa should be in scope in the return address expression.
-@@ -208,7 +218,7 @@
+@@ -208,7 +221,7 @@
    ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
                                              &caller_registers));
    ASSERT_EQ(2U, caller_registers.size());
 -  ASSERT_EQ(48364076U, caller_registers[".ra"]);
 +  ASSERT_EQ(48364076U, caller_registers[ustr__ZDra()]);
  }
  
  // There should be no value for .ra in scope when evaluating the CFA rule.
-@@ -226,13 +236,14 @@
+@@ -226,13 +239,14 @@
  TEST_F(Scope, RASeesCurrentRegs) {
    ExpectNoMemoryReferences();
  
 -  registers["noachian"] = 0x54dc4a5d8e5eb503ULL;
    cfi.SetCFARule(Module::Expr("10359370"));
 -  cfi.SetRARule(Module::Expr("noachian"));
-+  const UniqueString* reg1 = toUniqueString("noachian");
++  const UniqueString* reg1 = ToUniqueString("noachian");
 +  registers[reg1] = 0x54dc4a5d8e5eb503ULL;
 +  cfi.SetRARule(Module::Expr(reg1, 0, false));
    ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
                                              &caller_registers));
    ASSERT_EQ(2U, caller_registers.size());
 -  ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[".ra"]);
 +  ASSERT_EQ(0x54dc4a5d8e5eb503ULL, caller_registers[ustr__ZDra()]);
  }
  
  // .cfa should be in scope for register rules.
-@@ -241,11 +252,12 @@
+@@ -241,11 +255,12 @@
  
    cfi.SetCFARule(Module::Expr("6515179"));
    cfi.SetRARule(Module::Expr(".cfa"));
 -  cfi.SetRegisterRule("rogerian", Module::Expr(".cfa"));
-+  const UniqueString* reg1 = toUniqueString("rogerian");
++  const UniqueString* reg1 = ToUniqueString("rogerian");
 +  cfi.SetRegisterRule(reg1, 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"]);
 +  ASSERT_EQ(6515179U, caller_registers[reg1]);
  }
  
  // The return address should not be in scope for register rules.
-@@ -254,7 +266,8 @@
+@@ -254,7 +269,8 @@
  
    cfi.SetCFARule(Module::Expr("42740329"));
    cfi.SetRARule(Module::Expr("27045204"));
 -  cfi.SetRegisterRule("$r1", Module::Expr(".ra"));
-+  const UniqueString* reg1 = toUniqueString("$r1");
++  const UniqueString* reg1 = ToUniqueString("$r1");
 +  cfi.SetRegisterRule(reg1, Module::Expr(".ra"));
    ASSERT_FALSE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
                                               &caller_registers));
  }
-@@ -263,17 +276,19 @@
+@@ -263,17 +279,19 @@
  TEST_F(Scope, RegsSeeRegs) {
    ExpectNoMemoryReferences();
  
 -  registers["$r1"] = 0x6ed3582c4bedb9adULL;
 -  registers["$r2"] = 0xd27d9e742b8df6d0ULL;
-+  const UniqueString* reg1 = toUniqueString("$r1");
-+  const UniqueString* reg2 = toUniqueString("$r2");
++  const UniqueString* reg1 = ToUniqueString("$r1");
++  const UniqueString* reg2 = ToUniqueString("$r2");
 +  registers[reg1] = 0x6ed3582c4bedb9adULL;
 +  registers[reg2] = 0xd27d9e742b8df6d0ULL;
    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"));
 +  cfi.SetRegisterRule(reg1, Module::Expr("$r1 42175211 = $r2"));
 +  cfi.SetRegisterRule(reg2, Module::Expr("$r2 21357221 = $r1"));
@@ -1796,90 +1970,90 @@ diff --git a/src/processor/cfi_frame_inf
    ASSERT_EQ(4U, caller_registers.size());
 -  ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers["$r1"]);
 -  ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers["$r2"]);
 +  ASSERT_EQ(0xd27d9e742b8df6d0ULL, caller_registers[reg1]);
 +  ASSERT_EQ(0x6ed3582c4bedb9adULL, caller_registers[reg2]);
  }
  
  // Each rule's temporaries are separate.
-@@ -295,7 +310,7 @@
+@@ -295,7 +313,7 @@
   public:
    MOCK_METHOD1(CFARule, void(const string &));
    MOCK_METHOD1(RARule,  void(const string &));
 -  MOCK_METHOD2(RegisterRule, void(const string &, const string &));
 +  MOCK_METHOD2(RegisterRule, void(const UniqueString*, const string &));
  };
  
  // A fixture class for testing CFIRuleParser.
-@@ -366,7 +381,7 @@
+@@ -366,7 +384,7 @@
  }
  
  TEST_F(Parser, Reg) {
 -  EXPECT_CALL(mock_handler, RegisterRule("nemo", "mellifluous"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("nemo"), "mellifluous"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("nemo"), "mellifluous"))
        .WillOnce(Return());
    EXPECT_TRUE(parser.Parse("nemo: mellifluous"));
  }
-@@ -374,18 +389,18 @@
+@@ -374,18 +392,18 @@
  TEST_F(Parser, CFARARegs) {
    EXPECT_CALL(mock_handler, CFARule("cfa expression")).WillOnce(Return());
    EXPECT_CALL(mock_handler, RARule("ra expression")).WillOnce(Return());
 -  EXPECT_CALL(mock_handler, RegisterRule("galba", "praetorian"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("galba"), "praetorian"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("galba"), "praetorian"))
        .WillOnce(Return());
 -  EXPECT_CALL(mock_handler, RegisterRule("otho", "vitellius"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("otho"), "vitellius"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("otho"), "vitellius"))
        .WillOnce(Return());
    EXPECT_TRUE(parser.Parse(".cfa: cfa expression .ra: ra expression "
                      "galba: praetorian otho: vitellius"));
  }
  
  TEST_F(Parser, Whitespace) {
 -  EXPECT_CALL(mock_handler, RegisterRule("r1", "r1 expression"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("r1"), "r1 expression"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "r1 expression"))
        .WillOnce(Return());
 -  EXPECT_CALL(mock_handler, RegisterRule("r2", "r2 expression"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("r2"), "r2 expression"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r2"), "r2 expression"))
        .WillOnce(Return());
    EXPECT_TRUE(parser.Parse(" r1:\tr1\nexpression \tr2:\t\rr2\r\n "
                             "expression  \n"));
-@@ -396,21 +411,21 @@
+@@ -396,21 +414,21 @@
  }
  
  TEST_F(Parser, EmptyName) {
 -  EXPECT_CALL(mock_handler, RegisterRule("reg", _))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("reg"), _))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("reg"), _))
        .Times(AtMost(1))
        .WillRepeatedly(Return());
    EXPECT_FALSE(parser.Parse("reg: expr1 : expr2"));
  }
  
  TEST_F(Parser, RuleLoneColon) {
 -  EXPECT_CALL(mock_handler, RegisterRule("r1", "expr"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("r1"), "expr"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "expr"))
        .Times(AtMost(1))
        .WillRepeatedly(Return());
    EXPECT_FALSE(parser.Parse(" r1:   expr   :"));
  }
  
  TEST_F(Parser, RegNoExprRule) {
 -  EXPECT_CALL(mock_handler, RegisterRule("r1", "expr"))
-+  EXPECT_CALL(mock_handler, RegisterRule(toUniqueString("r1"), "expr"))
++  EXPECT_CALL(mock_handler, RegisterRule(ToUniqueString("r1"), "expr"))
        .Times(AtMost(1))
        .WillRepeatedly(Return());
    EXPECT_FALSE(parser.Parse("r0: r1:   expr"));
-@@ -427,29 +442,29 @@
+@@ -427,29 +445,29 @@
  TEST_F(ParseHandler, CFARARule) {
    handler.CFARule("reg-for-cfa");
    handler.RARule("reg-for-ra");
 -  registers["reg-for-cfa"] = 0x268a9a4a3821a797ULL;
 -  registers["reg-for-ra"] = 0x6301b475b8b91c02ULL;
-+  registers[toUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL;
-+  registers[toUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL;
++  registers[ToUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL;
++  registers[ToUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL;
    ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
                                              &caller_registers));
 -  ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[".cfa"]);
 -  ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[".ra"]);
 +  ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[ustr__ZDcfa()]);
 +  ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[ustr__ZDra()]);
  }
  
@@ -1887,102 +2061,127 @@ diff --git a/src/processor/cfi_frame_inf
    handler.CFARule("reg-for-cfa");
    handler.RARule("reg-for-ra");
 -  handler.RegisterRule("reg1", "reg-for-reg1");
 -  handler.RegisterRule("reg2", "reg-for-reg2");
 -  registers["reg-for-cfa"] = 0x268a9a4a3821a797ULL;
 -  registers["reg-for-ra"] = 0x6301b475b8b91c02ULL;
 -  registers["reg-for-reg1"] = 0x06cde8e2ff062481ULL;
 -  registers["reg-for-reg2"] = 0xff0c4f76403173e2ULL;
-+  handler.RegisterRule(toUniqueString("reg1"), "reg-for-reg1");
-+  handler.RegisterRule(toUniqueString("reg2"), "reg-for-reg2");
-+  registers[toUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL;
-+  registers[toUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL;
-+  registers[toUniqueString("reg-for-reg1")] = 0x06cde8e2ff062481ULL;
-+  registers[toUniqueString("reg-for-reg2")] = 0xff0c4f76403173e2ULL;
++  handler.RegisterRule(ToUniqueString("reg1"), "reg-for-reg1");
++  handler.RegisterRule(ToUniqueString("reg2"), "reg-for-reg2");
++  registers[ToUniqueString("reg-for-cfa")] = 0x268a9a4a3821a797ULL;
++  registers[ToUniqueString("reg-for-ra")] = 0x6301b475b8b91c02ULL;
++  registers[ToUniqueString("reg-for-reg1")] = 0x06cde8e2ff062481ULL;
++  registers[ToUniqueString("reg-for-reg2")] = 0xff0c4f76403173e2ULL;
    ASSERT_TRUE(cfi.FindCallerRegs<u_int64_t>(registers, memory,
                                              &caller_registers));
 -  ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[".cfa"]);
 -  ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[".ra"]);
 -  ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers["reg1"]);
 -  ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers["reg2"]);
 +  ASSERT_EQ(0x268a9a4a3821a797ULL, caller_registers[ustr__ZDcfa()]);
 +  ASSERT_EQ(0x6301b475b8b91c02ULL, caller_registers[ustr__ZDra()]);
-+  ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers[toUniqueString("reg1")]);
-+  ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers[toUniqueString("reg2")]);
++  ASSERT_EQ(0x06cde8e2ff062481ULL, caller_registers[ToUniqueString("reg1")]);
++  ASSERT_EQ(0xff0c4f76403173e2ULL, caller_registers[ToUniqueString("reg2")]);
  }
  
  struct SimpleCFIWalkerFixture {
-@@ -480,13 +495,13 @@
+@@ -480,13 +498,13 @@
  
  SimpleCFIWalkerFixture::CFIWalker::RegisterSet
  SimpleCFIWalkerFixture::register_map[7] = {
 -  { "r0", NULL,   true,  R0_VALID, &RawContext::r0 },
 -  { "r1", NULL,   true,  R1_VALID, &RawContext::r1 },
 -  { "r2", NULL,   false, R2_VALID, &RawContext::r2 },
 -  { "r3", NULL,   false, R3_VALID, &RawContext::r3 },
 -  { "r4", NULL,   true,  R4_VALID, &RawContext::r4 },
 -  { "sp", ".cfa", true,  SP_VALID, &RawContext::sp },
 -  { "pc", ".ra",  true,  PC_VALID, &RawContext::pc },
-+  { toUniqueString("r0"), NULL,   true,  R0_VALID, &RawContext::r0 },
-+  { toUniqueString("r1"), NULL,   true,  R1_VALID, &RawContext::r1 },
-+  { toUniqueString("r2"), NULL,   false, R2_VALID, &RawContext::r2 },
-+  { toUniqueString("r3"), NULL,   false, R3_VALID, &RawContext::r3 },
-+  { toUniqueString("r4"), NULL,   true,  R4_VALID, &RawContext::r4 },
-+  { toUniqueString("sp"), ustr__ZDcfa(), true,  SP_VALID, &RawContext::sp },
-+  { toUniqueString("pc"), ustr__ZDra(),  true,  PC_VALID, &RawContext::pc },
++  { ToUniqueString("r0"), NULL,   true,  R0_VALID, &RawContext::r0 },
++  { ToUniqueString("r1"), NULL,   true,  R1_VALID, &RawContext::r1 },
++  { ToUniqueString("r2"), NULL,   false, R2_VALID, &RawContext::r2 },
++  { ToUniqueString("r3"), NULL,   false, R3_VALID, &RawContext::r3 },
++  { ToUniqueString("r4"), NULL,   true,  R4_VALID, &RawContext::r4 },
++  { ToUniqueString("sp"), ustr__ZDcfa(), true,  SP_VALID, &RawContext::sp },
++  { ToUniqueString("pc"), ustr__ZDra(),  true,  PC_VALID, &RawContext::pc },
  };
  
  class SimpleWalker: public SimpleCFIWalkerFixture, public Test { };
-@@ -521,8 +536,10 @@
+@@ -521,8 +539,10 @@
  
    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"));
-+  call_frame_info.SetRegisterRule(toUniqueString("r0"),
++  call_frame_info.SetRegisterRule(ToUniqueString("r0"),
 +                                  Module::Expr(".cfa 24 - ^"));
-+  call_frame_info.SetRegisterRule(toUniqueString("r1"),
++  call_frame_info.SetRegisterRule(ToUniqueString("r1"),
 +                                  Module::Expr("r2"));
  
    callee_context.r0 = 0x94e030ca79edd119ULL;
    callee_context.r1 = 0x937b4d7e95ce52d9ULL;
 diff --git a/src/processor/fast_source_line_resolver_unittest.cc b/src/processor/fast_source_line_resolver_unittest.cc
 --- a/src/processor/fast_source_line_resolver_unittest.cc
 +++ b/src/processor/fast_source_line_resolver_unittest.cc
-@@ -124,10 +124,10 @@
+@@ -56,15 +56,24 @@
+ using google_breakpad::SourceLineResolverBase;
+ using google_breakpad::BasicSourceLineResolver;
+ using google_breakpad::FastSourceLineResolver;
++using google_breakpad::FromUniqueString;
+ using google_breakpad::ModuleSerializer;
+ using google_breakpad::ModuleComparer;
+ using google_breakpad::CFIFrameInfo;
+ using google_breakpad::CodeModule;
+ using google_breakpad::MemoryRegion;
+ using google_breakpad::StackFrame;
++using google_breakpad::ToUniqueString;
+ using google_breakpad::WindowsFrameInfo;
+ using google_breakpad::linked_ptr;
+ using google_breakpad::scoped_ptr;
++using google_breakpad::ustr__ZDcfa;
++using google_breakpad::ustr__ZDra;
++using google_breakpad::ustr__ZSebx;
++using google_breakpad::ustr__ZSebp;
++using google_breakpad::ustr__ZSedi;
++using google_breakpad::ustr__ZSesi;
++using google_breakpad::ustr__ZSesp;
+ 
+ class TestCodeModule : public CodeModule {
+  public:
+@@ -124,10 +133,10 @@
      const CFIFrameInfo::RegisterValueMap<u_int32_t> &expected,
      const CFIFrameInfo::RegisterValueMap<u_int32_t> &actual) {
    CFIFrameInfo::RegisterValueMap<u_int32_t>::const_iterator a;
 -  a = actual.find(".cfa");
 +  a = actual.find(ustr__ZDcfa());
    if (a == actual.end())
      return false;
 -  a = actual.find(".ra");
 +  a = actual.find(ustr__ZDra());
    if (a == actual.end())
      return false;
    for (a = actual.begin(); a != actual.end(); a++) {
-@@ -135,13 +135,13 @@
+@@ -135,13 +144,13 @@
        expected.find(a->first);
      if (e == expected.end()) {
        fprintf(stderr, "%s:%d: unexpected register '%s' recovered, value 0x%x\n",
 -              file, line, a->first.c_str(), a->second);
-+              file, line, fromUniqueString(a->first), a->second);
++              file, line, FromUniqueString(a->first), a->second);
        return false;
      }
      if (e->second != a->second) {
        fprintf(stderr,
                "%s:%d: register '%s' recovered value was 0x%x, expected 0x%x\n",
 -              file, line, a->first.c_str(), a->second, e->second);
-+              file, line, fromUniqueString(a->first), a->second, e->second);
++              file, line, FromUniqueString(a->first), a->second, e->second);
        return false;
      }
      // Don't complain if this doesn't recover all registers. Although
-@@ -287,21 +287,21 @@
+@@ -287,21 +296,21 @@
  
    // Regardless of which instruction evaluation takes place at, it
    // should produce the same values for the caller's registers.
 -  expected_caller_registers[".cfa"] = 0x1001c;
 -  expected_caller_registers[".ra"]  = 0xf6438648;
 -  expected_caller_registers["$ebp"] = 0x10038;
 -  expected_caller_registers["$ebx"] = 0x98ecadc3;
 -  expected_caller_registers["$esi"] = 0x878f7524;
@@ -2005,53 +2204,53 @@ diff --git a/src/processor/fast_source_l
 +  current_registers[ustr__ZSesp()] = 0x10018;
 +  current_registers[ustr__ZSebp()] = 0x10038;
 +  current_registers[ustr__ZSebx()] = 0x98ecadc3;
 +  current_registers[ustr__ZSesi()] = 0x878f7524;
 +  current_registers[ustr__ZSedi()] = 0x6312f9a5;
    cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -311,7 +311,7 @@
+@@ -311,7 +320,7 @@
                                expected_caller_registers, caller_registers));
  
    frame.instruction = 0x3d41;
 -  current_registers["$esp"] = 0x10014;
 +  current_registers[ustr__ZSesp()] = 0x10014;
    cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -321,7 +321,7 @@
+@@ -321,7 +330,7 @@
                                expected_caller_registers, caller_registers));
  
    frame.instruction = 0x3d43;
 -  current_registers["$ebp"] = 0x10014;
 +  current_registers[ustr__ZSebp()] = 0x10014;
    cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -331,7 +331,7 @@
+@@ -331,7 +340,7 @@
                    expected_caller_registers, caller_registers);
  
    frame.instruction = 0x3d54;
 -  current_registers["$ebx"] = 0x6864f054U;
 +  current_registers[ustr__ZSebx()] = 0x6864f054U;
    cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -341,7 +341,7 @@
+@@ -341,7 +350,7 @@
                    expected_caller_registers, caller_registers);
  
    frame.instruction = 0x3d5a;
 -  current_registers["$esi"] = 0x6285f79aU;
 +  current_registers[ustr__ZSesi()] = 0x6285f79aU;
    cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
-@@ -351,7 +351,7 @@
+@@ -351,7 +360,7 @@
                    expected_caller_registers, caller_registers);
  
    frame.instruction = 0x3d84;
 -  current_registers["$edi"] = 0x64061449U;
 +  current_registers[ustr__ZSedi()] = 0x64061449U;
    cfi_frame_info.reset(fast_resolver.FindCFIFrameInfo(&frame));
    ASSERT_TRUE(cfi_frame_info.get());
    ASSERT_TRUE(cfi_frame_info.get()
@@ -2084,30 +2283,30 @@ diff --git a/src/processor/postfix_evalu
 +    const UniqueString* identifier;
      if (PopValueOrIdentifier(NULL, &identifier) != POP_RESULT_IDENTIFIER) {
        BPLOG(ERROR) << "PopValueOrIdentifier returned a value, but an "
                        "identifier is needed to assign " <<
                        HexString(value) << ": " << expression;
        return false;
      }
 -    if (identifier.empty() || identifier[0] != '$') {
-+    if (identifier == ustr__empty() || index(identifier,0) != '$') {
++    if (identifier == ustr__empty() || Index(identifier,0) != '$') {
        BPLOG(ERROR) << "Can't assign " << HexString(value) << " to " <<
                        identifier << ": " << expression;
        return false;
 @@ -192,11 +194,30 @@
      if (assigned)
        (*assigned)[identifier] = true;
    } else {
 -    // The token is not an operator, it's a literal value or an identifier.
 -    // Push it onto the stack as-is.  Use push_back instead of PushValue
 -    // because PushValue pushes ValueType as a string, but token is already
 -    // a string.
 -    stack_.push_back(token);
-+    // Push it onto the stack as-is, but first convert it either to a 
++    // Push it onto the stack as-is, but first convert it either to a
 +    // ValueType (if a literal) or to a UniqueString* (if an identifier).
 +    //
 +    // First, try to treat the value as a literal. Literals may have leading
 +    // '-' sign, and the entire remaining string must be parseable as
 +    // ValueType. If this isn't possible, it can't be a literal, so treat it
 +    // as an identifier instead.
 +    //
 +    // Some versions of the libstdc++, the GNU standard C++ library, have
@@ -2119,17 +2318,17 @@ diff --git a/src/processor/postfix_evalu
 +    bool negative = false;
 +    if (token_stream.peek() == '-') {
 +      negative = true;
 +      token_stream.get();
 +    }
 +    if (token_stream >> literal && token_stream.peek() == EOF) {
 +      PushValue(negative ? (-literal) : literal);
 +    } else {
-+      PushIdentifier(toUniqueString(token));
++      PushIdentifier(ToUniqueString(token));
 +    }
    }
    return true;
  }
 @@ -241,7 +262,7 @@
    }
  
    // Ensure that the stack is cleared before returning.
@@ -2207,17 +2406,17 @@ diff --git a/src/processor/postfix_evalu
    PopResult result;
    if ((result = PopValueOrIdentifier(&literal, &token)) == POP_RESULT_FAIL) {
      return false;
 @@ -379,7 +378,8 @@
      if (iterator == dictionary_->end()) {
        // The identifier wasn't found in the dictionary.  Don't imply any
        // default value, just fail.
 -      BPLOG(INFO) << "Identifier " << token << " not in dictionary";
-+      BPLOG(INFO) << "Identifier " << fromUniqueString(token)
++      BPLOG(INFO) << "Identifier " << FromUniqueString(token)
 +                  << " not in dictionary";
        return false;
      }
  
 @@ -399,9 +399,14 @@
  
  template<typename ValueType>
  void PostfixEvaluator<ValueType>::PushValue(const ValueType &value) {
@@ -2297,51 +2496,74 @@ diff --git a/src/processor/postfix_evalu
 -  vector<string> stack_;
 +  vector<StackElem<ValueType> > stack_;
  };
  
  }  // namespace google_breakpad
 diff --git a/src/processor/postfix_evaluator_unittest.cc b/src/processor/postfix_evaluator_unittest.cc
 --- a/src/processor/postfix_evaluator_unittest.cc
 +++ b/src/processor/postfix_evaluator_unittest.cc
-@@ -100,7 +100,7 @@
+@@ -48,8 +48,22 @@
+ 
+ 
+ using std::map;
++using google_breakpad::FromUniqueString;
+ using google_breakpad::MemoryRegion;
+ using google_breakpad::PostfixEvaluator;
++using google_breakpad::ToUniqueString;
++using google_breakpad::UniqueString;
++using google_breakpad::ustr__ZDcbParams;
++using google_breakpad::ustr__ZDcbSavedRegs;
++using google_breakpad::ustr__ZDcfa;
++using google_breakpad::ustr__ZDra;
++using google_breakpad::ustr__ZDraSearchStart;
++using google_breakpad::ustr__ZSebx;
++using google_breakpad::ustr__ZSebp;
++using google_breakpad::ustr__ZSedi;
++using google_breakpad::ustr__ZSeip;
++using google_breakpad::ustr__ZSesi;
++using google_breakpad::ustr__ZSesp;
+ 
+ 
+ // FakeMemoryRegion is used to test PostfixEvaluator's dereference (^)
+@@ -100,7 +114,7 @@
  
    // Identifiers and their expected values upon completion of the Evaluate
    // tests in the set.
 -  map<string, unsigned int> *validate_data;
 +  map<const UniqueString*, unsigned int> *validate_data;
  };
  
  
-@@ -152,29 +152,29 @@
+@@ -152,29 +166,29 @@
      { "$rAlign 36 8 @ =",  true },   // $rAlign = 36 @ 8
      { "$rAdd3 2 2 + =$rMul2 9 6 * =", true } // smashed-equals tokenization
    };
 -  map<string, unsigned int> validate_data_0;
 -  validate_data_0["$rAdd"]   = 8;
 -  validate_data_0["$rAdd2"]  = 4;
 -  validate_data_0["$rSub"]   = 3;
 -  validate_data_0["$rMul"]   = 54;
 -  validate_data_0["$rDivQ"]  = 1;
 -  validate_data_0["$rDivM"]  = 3;
 -  validate_data_0["$rDeref"] = 10;
 -  validate_data_0["$rAlign"] = 32;
 -  validate_data_0["$rAdd3"]  = 4;
 -  validate_data_0["$rMul2"]  = 54;
 +  map<const UniqueString*, unsigned int> validate_data_0;
-+  validate_data_0[toUniqueString("$rAdd")]   = 8;
-+  validate_data_0[toUniqueString("$rAdd2")]  = 4;
-+  validate_data_0[toUniqueString("$rSub")]   = 3;
-+  validate_data_0[toUniqueString("$rMul")]   = 54;
-+  validate_data_0[toUniqueString("$rDivQ")]  = 1;
-+  validate_data_0[toUniqueString("$rDivM")]  = 3;
-+  validate_data_0[toUniqueString("$rDeref")] = 10;
-+  validate_data_0[toUniqueString("$rAlign")] = 32;
-+  validate_data_0[toUniqueString("$rAdd3")]  = 4;
-+  validate_data_0[toUniqueString("$rMul2")]  = 54;
++  validate_data_0[ToUniqueString("$rAdd")]   = 8;
++  validate_data_0[ToUniqueString("$rAdd2")]  = 4;
++  validate_data_0[ToUniqueString("$rSub")]   = 3;
++  validate_data_0[ToUniqueString("$rMul")]   = 54;
++  validate_data_0[ToUniqueString("$rDivQ")]  = 1;
++  validate_data_0[ToUniqueString("$rDivM")]  = 3;
++  validate_data_0[ToUniqueString("$rDeref")] = 10;
++  validate_data_0[ToUniqueString("$rAlign")] = 32;
++  validate_data_0[ToUniqueString("$rAdd3")]  = 4;
++  validate_data_0[ToUniqueString("$rMul2")]  = 54;
  
    // The second test set simulates a couple of MSVC program strings.
    // The data is fudged a little bit because the tests use FakeMemoryRegion
    // instead of a real stack snapshot, but the program strings are real and
    // the implementation doesn't know or care that the data is not real.
    PostfixEvaluator<unsigned int>::DictionaryType dictionary_1;
 -  dictionary_1["$ebp"] = 0xbfff0010;
 -  dictionary_1["$eip"] = 0x10000000;
@@ -2353,48 +2575,48 @@ diff --git a/src/processor/postfix_evalu
 +  dictionary_1[ustr__ZSeip()] = 0x10000000;
 +  dictionary_1[ustr__ZSesp()] = 0xbfff0000;
 +  dictionary_1[ustr__ZDcbSavedRegs()] = 4;
 +  dictionary_1[ustr__ZDcbParams()] = 4;
 +  dictionary_1[ustr__ZDraSearchStart()] = 0xbfff0020;
    const EvaluateTest evaluate_tests_1[] = {
      { "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = "
        "$L $T0 .cbSavedRegs - = $P $T0 8 + .cbParams + =", true },
-@@ -193,18 +193,18 @@
+@@ -193,18 +207,18 @@
        "$ebx $T0 28 - ^ =",
        true }
    };
 -  map<string, unsigned int> validate_data_1;
 -  validate_data_1["$T0"]  = 0xbfff0012;
 -  validate_data_1["$T1"]  = 0xbfff0020;
 -  validate_data_1["$T2"]  = 0xbfff0019;
 -  validate_data_1["$eip"] = 0xbfff0021;
 -  validate_data_1["$ebp"] = 0xbfff0012;
 -  validate_data_1["$esp"] = 0xbfff0024;
 -  validate_data_1["$L"]   = 0xbfff000e;
 -  validate_data_1["$P"]   = 0xbfff0028;
 -  validate_data_1["$ebx"] = 0xbffefff7;
 -  validate_data_1[".cbSavedRegs"] = 4;
 -  validate_data_1[".cbParams"] = 4;
 +  map<const UniqueString*, unsigned int> validate_data_1;
-+  validate_data_1[toUniqueString("$T0")]  = 0xbfff0012;
-+  validate_data_1[toUniqueString("$T1")]  = 0xbfff0020;
-+  validate_data_1[toUniqueString("$T2")]  = 0xbfff0019;
++  validate_data_1[ToUniqueString("$T0")]  = 0xbfff0012;
++  validate_data_1[ToUniqueString("$T1")]  = 0xbfff0020;
++  validate_data_1[ToUniqueString("$T2")]  = 0xbfff0019;
 +  validate_data_1[ustr__ZSeip()] = 0xbfff0021;
 +  validate_data_1[ustr__ZSebp()] = 0xbfff0012;
 +  validate_data_1[ustr__ZSesp()] = 0xbfff0024;
-+  validate_data_1[toUniqueString("$L")]   = 0xbfff000e;
-+  validate_data_1[toUniqueString("$P")]   = 0xbfff0028;
++  validate_data_1[ToUniqueString("$L")]   = 0xbfff000e;
++  validate_data_1[ToUniqueString("$P")]   = 0xbfff0028;
 +  validate_data_1[ustr__ZSebx()] = 0xbffefff7;
 +  validate_data_1[ustr__ZDcbSavedRegs()] = 4;
 +  validate_data_1[ustr__ZDcbParams()] = 4;
  
    EvaluateTestSet evaluate_test_sets[] = {
      { &dictionary_0, evaluate_tests_0,
-@@ -256,14 +256,16 @@
+@@ -256,14 +270,16 @@
      }
  
      // Validate the results.
 -    for (map<string, unsigned int>::const_iterator validate_iterator =
 +    for (map<const UniqueString*, unsigned int>::const_iterator
 +            validate_iterator =
              evaluate_test_set->validate_data->begin();
          validate_iterator != evaluate_test_set->validate_data->end();
@@ -2404,52 +2626,52 @@ diff --git a/src/processor/postfix_evalu
        unsigned int expected_value = validate_iterator->second;
  
 -      map<string, unsigned int>::const_iterator dictionary_iterator =
 +      map<const UniqueString*, unsigned int>::const_iterator
 +          dictionary_iterator =
            evaluate_test_set->dictionary->find(identifier);
  
        // The identifier must exist in the dictionary.
-@@ -272,7 +274,7 @@
+@@ -272,7 +288,7 @@
                          "validate identifier \"%s\", "
                          "expected %d, observed not found\n",
                  evaluate_test_set_index, evaluate_test_set_count,
 -                identifier.c_str(), expected_value);
-+                fromUniqueString(identifier), expected_value);
++                FromUniqueString(identifier), expected_value);
          return false;
        }
  
-@@ -283,13 +285,13 @@
+@@ -283,13 +299,13 @@
                          "validate identifier \"%s\", "
                          "expected %d, observed %d\n",
                  evaluate_test_set_index, evaluate_test_set_count,
 -                identifier.c_str(), expected_value, observed_value);
-+                fromUniqueString(identifier), expected_value, observed_value);
++                FromUniqueString(identifier), expected_value, observed_value);
          return false;
        }
  
        // The value must be set in the "assigned" dictionary if it was a
        // variable.  It must not have been assigned if it was a constant.
 -      bool expected_assigned = identifier[0] == '$';
-+      bool expected_assigned = fromUniqueString(identifier)[0] == '$';
++      bool expected_assigned = FromUniqueString(identifier)[0] == '$';
        bool observed_assigned = false;
        PostfixEvaluator<unsigned int>::DictionaryValidityType::const_iterator
            iterator_assigned = assigned.find(identifier);
-@@ -301,7 +303,8 @@
+@@ -301,7 +317,8 @@
                          "validate assignment of \"%s\", "
                          "expected %d, observed %d\n",
                  evaluate_test_set_index, evaluate_test_set_count,
 -                identifier.c_str(), expected_assigned, observed_assigned);
-+                fromUniqueString(identifier), expected_assigned,
++                FromUniqueString(identifier), expected_assigned,
 +                observed_assigned);
          return false;
        }
      }
-@@ -309,12 +312,12 @@
+@@ -309,12 +326,12 @@
  
    // EvaluateForValue tests.
    PostfixEvaluator<unsigned int>::DictionaryType dictionary_2;
 -  dictionary_2["$ebp"] = 0xbfff0010;
 -  dictionary_2["$eip"] = 0x10000000;
 -  dictionary_2["$esp"] = 0xbfff0000;
 -  dictionary_2[".cbSavedRegs"] = 4;
 -  dictionary_2[".cbParams"] = 4;
@@ -2458,165 +2680,165 @@ diff --git a/src/processor/postfix_evalu
 +  dictionary_2[ustr__ZSeip()] = 0x10000000;
 +  dictionary_2[ustr__ZSesp()] = 0xbfff0000;
 +  dictionary_2[ustr__ZDcbSavedRegs()] = 4;
 +  dictionary_2[ustr__ZDcbParams()] = 4;
 +  dictionary_2[ustr__ZDraSearchStart()] = 0xbfff0020;
    const EvaluateForValueTest evaluate_for_value_tests_2[] = {
      { "28907223",               true,  28907223 },      // simple constant
      { "89854293 40010015 +",    true,  89854293 + 40010015 }, // arithmetic
-@@ -329,14 +332,14 @@
+@@ -329,14 +346,14 @@
    const int evaluate_for_value_tests_2_size
        = (sizeof (evaluate_for_value_tests_2)
           / sizeof (evaluate_for_value_tests_2[0]));
 -  map<string, unsigned int> validate_data_2;
 -  validate_data_2["$eip"] = 0x10000000;
 -  validate_data_2["$ebp"] = 0xbfff000c;
 -  validate_data_2["$esp"] = 0xbfff0000;
 -  validate_data_2["$new"] = 0x10000000;
 -  validate_data_2[".cbSavedRegs"] = 4;
 -  validate_data_2[".cbParams"] = 4;
 -  validate_data_2[".raSearchStart"] = 0xbfff0020;
 +  map<const UniqueString*, unsigned int> validate_data_2;
 +  validate_data_2[ustr__ZSeip()] = 0x10000000;
 +  validate_data_2[ustr__ZSebp()] = 0xbfff000c;
 +  validate_data_2[ustr__ZSesp()] = 0xbfff0000;
-+  validate_data_2[toUniqueString("$new")] = 0x10000000;
++  validate_data_2[ToUniqueString("$new")] = 0x10000000;
 +  validate_data_2[ustr__ZDcbSavedRegs()] = 4;
 +  validate_data_2[ustr__ZDcbParams()] = 4;
 +  validate_data_2[ustr__ZDraSearchStart()] = 0xbfff0020;
  
    postfix_evaluator.set_dictionary(&dictionary_2);
    for (int i = 0; i < evaluate_for_value_tests_2_size; i++) {
-@@ -358,30 +361,33 @@
+@@ -358,30 +375,33 @@
      }
    }
  
 -  for (map<string, unsigned int>::iterator v = validate_data_2.begin();
 +  for (map<const UniqueString*, unsigned int>::iterator v =
 +         validate_data_2.begin();
         v != validate_data_2.end(); v++) {
 -    map<string, unsigned int>::iterator a = dictionary_2.find(v->first);
 +    map<const UniqueString*, unsigned int>::iterator a =
 +        dictionary_2.find(v->first);
      if (a == dictionary_2.end()) {
        fprintf(stderr, "FAIL: evaluate for value dictionary check: "
                "expected dict[\"%s\"] to be 0x%x, but it was unset\n",
 -              v->first.c_str(), v->second);
-+              fromUniqueString(v->first), v->second);
++              FromUniqueString(v->first), v->second);
        return false;
      } else if (a->second != v->second) {
        fprintf(stderr, "FAIL: evaluate for value dictionary check: "
                "expected dict[\"%s\"] to be 0x%x, but it was 0x%x\n",
 -              v->first.c_str(), v->second, a->second);
-+              fromUniqueString(v->first), v->second, a->second);
++              FromUniqueString(v->first), v->second, a->second);
        return false;
      } 
      dictionary_2.erase(a);
    }
    
 -  map<string, unsigned int>::iterator remaining = dictionary_2.begin();
 +  map<const UniqueString*, unsigned int>::iterator remaining =
 +      dictionary_2.begin();
    if (remaining != dictionary_2.end()) {
      fprintf(stderr, "FAIL: evaluation of test expressions put unexpected "
              "values in dictionary:\n");
      for (; remaining != dictionary_2.end(); remaining++)
        fprintf(stderr, "    dict[\"%s\"] == 0x%x\n",
 -              remaining->first.c_str(), remaining->second);
-+              fromUniqueString(remaining->first), remaining->second);
++              FromUniqueString(remaining->first), remaining->second);
      return false;
    }
  
 diff --git a/src/processor/stackwalker_amd64.cc b/src/processor/stackwalker_amd64.cc
 --- a/src/processor/stackwalker_amd64.cc
 +++ b/src/processor/stackwalker_amd64.cc
 @@ -54,39 +54,39 @@
    // flags here really means that the walker should assume they're
    // unchanged if the CFI doesn't mention them --- clearly wrong for $rip
    // and $rsp.
 -  { "$rax", NULL, false,
-+  { toUniqueString("$rax"), NULL, false,
++  { ToUniqueString("$rax"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_RAX, &MDRawContextAMD64::rax },
 -  { "$rdx", NULL, false,
-+  { toUniqueString("$rdx"), NULL, false,
++  { ToUniqueString("$rdx"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_RDX, &MDRawContextAMD64::rdx },
 -  { "$rcx", NULL, false,
-+  { toUniqueString("$rcx"), NULL, false,
++  { ToUniqueString("$rcx"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_RCX, &MDRawContextAMD64::rcx },
 -  { "$rbx", NULL, true,
-+  { toUniqueString("$rbx"), NULL, true,
++  { ToUniqueString("$rbx"), NULL, true,
      StackFrameAMD64::CONTEXT_VALID_RBX, &MDRawContextAMD64::rbx },
 -  { "$rsi", NULL, false,
-+  { toUniqueString("$rsi"), NULL, false,
++  { ToUniqueString("$rsi"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_RSI, &MDRawContextAMD64::rsi },
 -  { "$rdi", NULL, false,
-+  { toUniqueString("$rdi"), NULL, false,
++  { ToUniqueString("$rdi"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_RDI, &MDRawContextAMD64::rdi },
 -  { "$rbp", NULL, true,
-+  { toUniqueString("$rbp"), NULL, true,
++  { ToUniqueString("$rbp"), NULL, true,
      StackFrameAMD64::CONTEXT_VALID_RBP, &MDRawContextAMD64::rbp },
 -  { "$rsp", ".cfa", false,
-+  { toUniqueString("$rsp"), toUniqueString(".cfa"), false,
++  { ToUniqueString("$rsp"), ToUniqueString(".cfa"), false,
      StackFrameAMD64::CONTEXT_VALID_RSP, &MDRawContextAMD64::rsp },
 -  { "$r8", NULL, false,
-+  { toUniqueString("$r8"), NULL, false,
++  { ToUniqueString("$r8"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_R8,  &MDRawContextAMD64::r8 },
 -  { "$r9", NULL, false,
-+  { toUniqueString("$r9"), NULL, false,
++  { ToUniqueString("$r9"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_R9,  &MDRawContextAMD64::r9 },
 -  { "$r10", NULL, false,
-+  { toUniqueString("$r10"), NULL, false,
++  { ToUniqueString("$r10"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_R10, &MDRawContextAMD64::r10 },
 -  { "$r11", NULL, false,
-+  { toUniqueString("$r11"), NULL, false,
++  { ToUniqueString("$r11"), NULL, false,
      StackFrameAMD64::CONTEXT_VALID_R11, &MDRawContextAMD64::r11 },
 -  { "$r12", NULL, true,
-+  { toUniqueString("$r12"), NULL, true,
++  { ToUniqueString("$r12"), NULL, true,
      StackFrameAMD64::CONTEXT_VALID_R12, &MDRawContextAMD64::r12 },
 -  { "$r13", NULL, true,
-+  { toUniqueString("$r13"), NULL, true,
++  { ToUniqueString("$r13"), NULL, true,
      StackFrameAMD64::CONTEXT_VALID_R13, &MDRawContextAMD64::r13 },
 -  { "$r14", NULL, true,
-+  { toUniqueString("$r14"), NULL, true,
++  { ToUniqueString("$r14"), NULL, true,
      StackFrameAMD64::CONTEXT_VALID_R14, &MDRawContextAMD64::r14 },
 -  { "$r15", NULL, true,
-+  { toUniqueString("$r15"), NULL, true,
++  { ToUniqueString("$r15"), NULL, true,
      StackFrameAMD64::CONTEXT_VALID_R15, &MDRawContextAMD64::r15 },
 -  { "$rip", ".ra", false,
-+  { toUniqueString("$rip"), toUniqueString(".ra"), false,
++  { ToUniqueString("$rip"), ToUniqueString(".ra"), false,
      StackFrameAMD64::CONTEXT_VALID_RIP, &MDRawContextAMD64::rip },
  };
  
 diff --git a/src/processor/stackwalker_arm.cc b/src/processor/stackwalker_arm.cc
 --- a/src/processor/stackwalker_arm.cc
 +++ b/src/processor/stackwalker_arm.cc
 @@ -81,11 +81,20 @@
      CFIFrameInfo* cfi_frame_info) {
    StackFrameARM* last_frame = static_cast<StackFrameARM*>(frames.back());
  
 -  static const char* register_names[] = {
 -    "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",
 -    "r8",  "r9",  "r10", "r11", "r12", "sp",  "lr",  "pc",
 -    "f0",  "f1",  "f2",  "f3",  "f4",  "f5",  "f6",  "f7",
 -    "fps", "cpsr",
 +  static const UniqueString *register_names[] = {
-+    toUniqueString("r0"),  toUniqueString("r1"),
-+    toUniqueString("r2"),  toUniqueString("r3"),
-+    toUniqueString("r4"),  toUniqueString("r5"),
-+    toUniqueString("r6"),  toUniqueString("r7"),
-+    toUniqueString("r8"),  toUniqueString("r9"),
-+    toUniqueString("r10"), toUniqueString("r11"),
-+    toUniqueString("r12"), toUniqueString("sp"),
-+    toUniqueString("lr"),  toUniqueString("pc"),
-+    toUniqueString("f0"),  toUniqueString("f1"),
-+    toUniqueString("f2"),  toUniqueString("f3"),
-+    toUniqueString("f4"),  toUniqueString("f5"),
-+    toUniqueString("f6"),  toUniqueString("f7"),
-+    toUniqueString("fps"), toUniqueString("cpsr"),
++    ToUniqueString("r0"),  ToUniqueString("r1"),
++    ToUniqueString("r2"),  ToUniqueString("r3"),
++    ToUniqueString("r4"),  ToUniqueString("r5"),
++    ToUniqueString("r6"),  ToUniqueString("r7"),
++    ToUniqueString("r8"),  ToUniqueString("r9"),
++    ToUniqueString("r10"), ToUniqueString("r11"),
++    ToUniqueString("r12"), ToUniqueString("sp"),
++    ToUniqueString("lr"),  ToUniqueString("pc"),
++    ToUniqueString("f0"),  ToUniqueString("f1"),
++    ToUniqueString("f2"),  ToUniqueString("f3"),
++    ToUniqueString("f4"),  ToUniqueString("f5"),
++    ToUniqueString("f6"),  ToUniqueString("f7"),
++    ToUniqueString("fps"), ToUniqueString("cpsr"),
      NULL
    };
  
 @@ -124,7 +133,7 @@
    // If the CFI doesn't recover the PC explicitly, then use .ra.
    if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) {
      CFIFrameInfo::RegisterValueMap<u_int32_t>::iterator entry =
 -      caller_registers.find(".ra");
@@ -2636,41 +2858,41 @@ diff --git a/src/processor/stackwalker_a
 diff --git a/src/processor/stackwalker_x86.cc b/src/processor/stackwalker_x86.cc
 --- a/src/processor/stackwalker_x86.cc
 +++ b/src/processor/stackwalker_x86.cc
 @@ -58,23 +58,23 @@
    // restored upon return. But the callee_saves flags here really means
    // that the walker should assume they're unchanged if the CFI doesn't
    // mention them, which is clearly wrong for $eip and $esp.
 -  { "$eip", ".ra",  false,
-+  { toUniqueString("$eip"), toUniqueString(".ra"),  false,
++  { ToUniqueString("$eip"), ToUniqueString(".ra"),  false,
      StackFrameX86::CONTEXT_VALID_EIP, &MDRawContextX86::eip },
 -  { "$esp", ".cfa", false,
-+  { toUniqueString("$esp"), toUniqueString(".cfa"), false,
++  { ToUniqueString("$esp"), ToUniqueString(".cfa"), false,
      StackFrameX86::CONTEXT_VALID_ESP, &MDRawContextX86::esp },
 -  { "$ebp", NULL,   true,
-+  { toUniqueString("$ebp"), NULL,   true,
++  { ToUniqueString("$ebp"), NULL,   true,
      StackFrameX86::CONTEXT_VALID_EBP, &MDRawContextX86::ebp },
 -  { "$eax", NULL,   false,
-+  { toUniqueString("$eax"), NULL,   false,
++  { ToUniqueString("$eax"), NULL,   false,
      StackFrameX86::CONTEXT_VALID_EAX, &MDRawContextX86::eax },
 -  { "$ebx", NULL,   true,
-+  { toUniqueString("$ebx"), NULL,   true,
++  { ToUniqueString("$ebx"), NULL,   true,
      StackFrameX86::CONTEXT_VALID_EBX, &MDRawContextX86::ebx },
 -  { "$ecx", NULL,   false,
-+  { toUniqueString("$ecx"), NULL,   false,
++  { ToUniqueString("$ecx"), NULL,   false,
      StackFrameX86::CONTEXT_VALID_ECX, &MDRawContextX86::ecx },
 -  { "$edx", NULL,   false,
-+  { toUniqueString("$edx"), NULL,   false,
++  { ToUniqueString("$edx"), NULL,   false,
      StackFrameX86::CONTEXT_VALID_EDX, &MDRawContextX86::edx },
 -  { "$esi", NULL,   true,
-+  { toUniqueString("$esi"), NULL,   true,
++  { ToUniqueString("$esi"), NULL,   true,
      StackFrameX86::CONTEXT_VALID_ESI, &MDRawContextX86::esi },
 -  { "$edi", NULL,   true,
-+  { toUniqueString("$edi"), NULL,   true,
++  { ToUniqueString("$edi"), NULL,   true,
      StackFrameX86::CONTEXT_VALID_EDI, &MDRawContextX86::edi },
  };
  
 @@ -199,16 +199,16 @@
    // here.
    PostfixEvaluator<u_int32_t>::DictionaryType dictionary;
    // Provide the current register values.
 -  dictionary["$ebp"] = last_frame->context.ebp;
@@ -2810,60 +3032,87 @@ diff --git a/src/processor/stackwalker_x
 +  if (dictionary_validity.find(ustr__ZSedi()) != dictionary_validity.end()) {
 +    frame->context.edi = dictionary[ustr__ZSedi()];
      frame->context_validity |= StackFrameX86::CONTEXT_VALID_EDI;
    }
  
 diff --git a/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj b/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
 --- a/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
 +++ b/src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
-@@ -103,6 +103,9 @@
+@@ -103,6 +103,12 @@
  		D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; };
  		D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
  		D21F97E911CBA1FF00239E38 /* test_assembler.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FAE0911665B5700407530 /* test_assembler.cc */; };
 +		D24997CC16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; };
 +		D24997CD16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; };
 +		D24997CE16B6C16800E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; };
++		D2499A0016B9BA6A00E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; };
++		D2499A0216B9BA9600E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; };
++		D2499A0316B9BA9D00E588C5 /* unique_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = D24997CA16B6C16800E588C5 /* unique_string.cc */; };
  /* End PBXBuildFile section */
  
  /* Begin PBXContainerItemProxy section */
-@@ -343,6 +346,8 @@
+@@ -343,6 +349,8 @@
  		B8C5B5111166531A00D34F4E /* dump_syms */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = dump_syms; sourceTree = BUILT_PRODUCTS_DIR; };
  		B8E8CA0C1156C854009E61B2 /* byteswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = byteswap.h; path = ../../../common/mac/byteswap.h; sourceTree = SOURCE_ROOT; };
  		D21F97D211CBA0F200239E38 /* test_assembler_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = test_assembler_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
 +		D24997CA16B6C16800E588C5 /* unique_string.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = unique_string.cc; path = ../../../common/unique_string.cc; sourceTree = "<group>"; };
 +		D24997CB16B6C16800E588C5 /* unique_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = unique_string.h; path = ../../../common/unique_string.h; sourceTree = "<group>"; };
  		F95B422B0E0E22D100DBDE83 /* bytereader-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "bytereader-inl.h"; path = "../../../common/dwarf/bytereader-inl.h"; sourceTree = SOURCE_ROOT; };
  		F95B422C0E0E22D100DBDE83 /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
  		F95B422D0E0E22D100DBDE83 /* bytereader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bytereader.h; path = ../../../common/dwarf/bytereader.h; sourceTree = SOURCE_ROOT; };
-@@ -536,6 +541,8 @@
+@@ -536,6 +544,8 @@
  		B88FAE1C11665FFD00407530 /* MODULE */ = {
  			isa = PBXGroup;
  			children = (
 +				D24997CA16B6C16800E588C5 /* unique_string.cc */,
 +				D24997CB16B6C16800E588C5 /* unique_string.h */,
  				B88FAE1E1166603300407530 /* dwarf_cu_to_module.cc */,
  				B88FAE1F1166603300407530 /* dwarf_cu_to_module.h */,
  				B88FB0D6116CEC0600407530 /* dwarf_cu_to_module_unittest.cc */,
-@@ -988,6 +995,7 @@
+@@ -945,6 +955,7 @@
+ 			isa = PBXSourcesBuildPhase;
+ 			buildActionMask = 2147483647;
+ 			files = (
++				D2499A0216B9BA9600E588C5 /* unique_string.cc in Sources */,
+ 				B84A91FB116CF7AF006C210E /* module.cc in Sources */,
+ 				B84A91FC116CF7AF006C210E /* stabs_to_module.cc in Sources */,
+ 				B84A91FD116CF7AF006C210E /* stabs_to_module_unittest.cc in Sources */,
+@@ -988,6 +999,7 @@
  			files = (
  				B88FB0BD116CEAE000407530 /* module_unittest.cc in Sources */,
  				B88FB0C4116CEB4100407530 /* module.cc in Sources */,
 +				D24997CE16B6C16800E588C5 /* unique_string.cc in Sources */,
  			);
  			runOnlyForDeploymentPostprocessing = 0;
  		};
-@@ -1028,6 +1036,7 @@
+@@ -1004,6 +1016,7 @@
+ 			isa = PBXSourcesBuildPhase;
+ 			buildActionMask = 2147483647;
+ 			files = (
++				D2499A0316B9BA9D00E588C5 /* unique_string.cc in Sources */,
+ 				B88FB0FA116CF00E00407530 /* dwarf_line_to_module.cc in Sources */,
+ 				B88FB0FE116CF02400407530 /* module.cc in Sources */,
+ 				B88FB0FB116CF00E