Fix llvm-nm to mach OS X's nm on some tests.

There is still a long way to go for llvm-nm, but at least we now match
nm's letter output in the cases we test for.

llvm-svn: 193912
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index 3040094..f48bb8a 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -594,24 +594,35 @@
 error_code MachOObjectFile::getSymbolNMTypeChar(DataRefImpl Symb,
                                                 char &Res) const {
   nlist_base Entry = getSymbolTableEntryBase(this, Symb);
-  uint8_t Type = Entry.n_type;
-  uint16_t Flags = Entry.n_desc;
+  uint8_t NType = Entry.n_type;
 
   char Char;
-  switch (Type & MachO::N_TYPE) {
+  switch (NType & MachO::N_TYPE) {
     case MachO::N_UNDF:
       Char = 'u';
       break;
     case MachO::N_ABS:
-    case MachO::N_SECT:
       Char = 's';
       break;
+    case MachO::N_SECT: {
+      section_iterator Sec = end_sections();
+      getSymbolSection(Symb, Sec);
+      DataRefImpl Ref = Sec->getRawDataRefImpl();
+      StringRef SectionName;
+      getSectionName(Ref, SectionName);
+      StringRef SegmentName = getSectionFinalSegmentName(Ref);
+      if (SegmentName == "__TEXT" && SectionName == "__text")
+        Char = 't';
+      else
+        Char = 's';
+    }
+      break;
     default:
       Char = '?';
       break;
   }
 
-  if (Flags & (MachO::N_EXT | MachO::N_PEXT))
+  if (NType & (MachO::N_EXT | MachO::N_PEXT))
     Char = toupper(static_cast<unsigned char>(Char));
   Res = Char;
   return object_error::success;
@@ -630,7 +641,7 @@
   if ((MachOType & MachO::N_TYPE) == MachO::N_UNDF)
     Result |= SymbolRef::SF_Undefined;
 
-  if (MachOFlags & MachO::N_STAB)
+  if (MachOType & MachO::N_STAB)
     Result |= SymbolRef::SF_FormatSpecific;
 
   if (MachOType & MachO::N_EXT) {