Added the ability to _not_ skip the prologue when settings breakpoints 
by name by adding an extra parameter to the lldb_private::Target breakpoint 
setting functions.

Added a function in the DWARF symbol file plug-in that can dump errors
and prints out which DWARF file the error is happening in so we can track
down what used to be assertions easily.

Fixed the MacOSX kernel plug-in to properly read the kext images and set
the kext breakpoint to watch for kexts as they are loaded.

llvm-svn: 134990
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 75977a3..be9a12b 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -1218,16 +1218,30 @@
                     if (is_artificial == false)
                     {
                         Type *member_type = ResolveTypeUID(encoding_uid);
-                        assert(member_type);
-                        if (accessibility == eAccessNone)
-                            accessibility = default_accessibility;
-                        member_accessibilities.push_back(accessibility);
+                        if (member_type)
+                        {
+                            if (accessibility == eAccessNone)
+                                accessibility = default_accessibility;
+                            member_accessibilities.push_back(accessibility);
 
-                        GetClangASTContext().AddFieldToRecordType (class_clang_type, 
-                                                                   name, 
-                                                                   member_type->GetClangLayoutType(), 
-                                                                   accessibility, 
-                                                                   bit_size);
+                            GetClangASTContext().AddFieldToRecordType (class_clang_type, 
+                                                                       name, 
+                                                                       member_type->GetClangLayoutType(), 
+                                                                       accessibility, 
+                                                                       bit_size);
+                        }
+                        else
+                        {
+                            if (name)
+                                ReportError ("0x%8.8x: DW_TAG_member '%s' refers to type 0x%8.8x which was unable to be parsed",
+                                             die->GetOffset(),
+                                             name,
+                                             encoding_uid);
+                            else
+                                ReportError ("0x%8.8x: DW_TAG_member refers to type 0x%8.8x which was unable to be parsed",
+                                             die->GetOffset(),
+                                             encoding_uid);
+                        }
                     }
                 }
                 ++member_idx;
@@ -2237,6 +2251,19 @@
     // Return the number of variable that were appended to the list
     return sc_list.GetSize() - original_size;
 }
+void
+SymbolFileDWARF::ReportError (const char *format, ...)
+{
+    ::fprintf (stderr, 
+               "error: %s/%s ", 
+               m_obj_file->GetFileSpec().GetDirectory().GetCString(),
+               m_obj_file->GetFileSpec().GetFilename().GetCString());
+
+    va_list args;
+    va_start (args, format);
+    vfprintf (stderr, format, args);
+    va_end (args);
+}
 
 uint32_t
 SymbolFileDWARF::FindTypes(const SymbolContext& sc, const ConstString &name, bool append, uint32_t max_matches, TypeList& types)