Add a new disassembly-format specification so that the disassembler
output style can be customized.  Change the built-in default to be
more similar to gdb's disassembly formatting.

The disassembly-format for a gdb-like output is

${addr-file-or-load} <${function.name-without-args}${function.concrete-only-addr-offset-no-padding}>: 

The disassembly-format for the lldb style output is

{${function.initial-function}{${module.file.basename}`}{${function.name-without-args}}:\n}{${function.changed}\n{${module.file.basename}`}{${function.name-without-args}}:\n}{${current-pc-arrow} }{${addr-file-or-load}}: 

The two backticks in the lldb style formatter triggers the sub-expression evaluation in
CommandInterpreter::PreprocessCommand() so you can't use that one as-is ... changing to
use ' characters instead of ` would work around that.

<rdar://problem/9885398> 

llvm-svn: 219544
diff --git a/lldb/source/API/SBInstruction.cpp b/lldb/source/API/SBInstruction.cpp
index 2334cc0..eccc4e2 100644
--- a/lldb/source/API/SBInstruction.cpp
+++ b/lldb/source/API/SBInstruction.cpp
@@ -20,6 +20,7 @@
 #include "lldb/Core/DataExtractor.h"
 #include "lldb/Core/Disassembler.h"
 #include "lldb/Core/EmulateInstruction.h"
+#include "lldb/Core/Module.h"
 #include "lldb/Core/StreamFile.h"
 #include "lldb/Target/ExecutionContext.h"
 #include "lldb/Target/StackFrame.h"
@@ -170,9 +171,15 @@
 {
     if (m_opaque_sp)
     {
+        SymbolContext sc;
+        const Address &addr = m_opaque_sp->GetAddress();
+        ModuleSP module_sp (addr.GetModule());
+        if (module_sp)
+            module_sp->ResolveSymbolContextForAddress(addr, eSymbolContextEverything, sc);
         // Use the "ref()" instead of the "get()" accessor in case the SBStream 
         // didn't have a stream already created, one will get created...
-        m_opaque_sp->Dump (&s.ref(), 0, true, false, NULL);
+        const char *disassemble_format = "${addr-file-or-load}: ";
+        m_opaque_sp->Dump (&s.ref(), 0, true, false, NULL, &sc, NULL, disassemble_format);
         return true;
     }
     return false;
@@ -186,8 +193,14 @@
 
     if (m_opaque_sp)
     {
+        SymbolContext sc;
+        const Address &addr = m_opaque_sp->GetAddress();
+        ModuleSP module_sp (addr.GetModule());
+        if (module_sp)
+            module_sp->ResolveSymbolContextForAddress(addr, eSymbolContextEverything, sc);
         StreamFile out_stream (out, false);
-        m_opaque_sp->Dump (&out_stream, 0, true, false, NULL);
+        const char *disassemble_format = "${addr-file-or-load}: ";
+        m_opaque_sp->Dump (&out_stream, 0, true, false, NULL, &sc, NULL, disassemble_format);
     }
 }
 
diff --git a/lldb/source/API/SBInstructionList.cpp b/lldb/source/API/SBInstructionList.cpp
index fe22d9c..31585b3 100644
--- a/lldb/source/API/SBInstructionList.cpp
+++ b/lldb/source/API/SBInstructionList.cpp
@@ -11,7 +11,9 @@
 #include "lldb/API/SBInstruction.h"
 #include "lldb/API/SBStream.h"
 #include "lldb/Core/Disassembler.h"
+#include "lldb/Core/Module.h"
 #include "lldb/Core/Stream.h"
+#include "lldb/Symbol/SymbolContext.h"
 
 using namespace lldb;
 using namespace lldb_private;
@@ -100,12 +102,24 @@
             // exist already inside description...
             Stream &sref = description.ref();
             const uint32_t max_opcode_byte_size = m_opaque_sp->GetInstructionList().GetMaxOpcocdeByteSize();
+            const char *disassemble_format = "${addr-file-or-load}: ";
+            SymbolContext sc;
+            SymbolContext prev_sc;
             for (size_t i=0; i<num_instructions; ++i)
             {
                 Instruction *inst = m_opaque_sp->GetInstructionList().GetInstructionAtIndex (i).get();
                 if (inst == NULL)
                     break;
-                inst->Dump (&sref, max_opcode_byte_size, true, false, NULL);
+
+                const Address &addr = inst->GetAddress();
+                prev_sc = sc;
+                ModuleSP module_sp (addr.GetModule());
+                if (module_sp)
+                {
+                    module_sp->ResolveSymbolContextForAddress(addr, eSymbolContextEverything, sc);
+                }
+
+                inst->Dump (&sref, max_opcode_byte_size, true, false, NULL, &sc, &prev_sc, disassemble_format);
                 sref.EOL();
             }
             return true;