[dsymutil] Upstream unobfuscation logic.

The unobufscation support for BCSymbolMaps was the last piece of code
that hasn't been upstreamed yet. This patch contains a reworked version
of the existing code and relevant tests.

Differential revision: https://reviews.llvm.org/D56346

llvm-svn: 350580
diff --git a/llvm/tools/dsymutil/NonRelocatableStringpool.cpp b/llvm/tools/dsymutil/NonRelocatableStringpool.cpp
index d82ff84..b8392a1 100644
--- a/llvm/tools/dsymutil/NonRelocatableStringpool.cpp
+++ b/llvm/tools/dsymutil/NonRelocatableStringpool.cpp
@@ -16,6 +16,8 @@
   if (S.empty() && !Strings.empty())
     return EmptyString;
 
+  if (Translator)
+    S = Translator(S);
   auto I = Strings.insert({S, DwarfStringPoolEntry()});
   auto &Entry = I.first->second;
   if (I.second || !Entry.isIndexed()) {
@@ -29,6 +31,10 @@
 
 StringRef NonRelocatableStringpool::internString(StringRef S) {
   DwarfStringPoolEntry Entry{nullptr, 0, DwarfStringPoolEntry::NotIndexed};
+
+  if (Translator)
+    S = Translator(S);
+
   auto InsertResult = Strings.insert({S, Entry});
   return InsertResult.first->getKey();
 }