[Lldb-commits] [lldb] r162860 - in /lldb/trunk: examples/python/ include/lldb/Core/ include/lldb/Host/ include/lldb/Interpreter/ include/lldb/Symbol/ include/lldb/Target/ lldb.xcodeproj/ source/API/ source/Breakpoint/ source/Commands/ source/Core/ ...

Malea, Daniel daniel.malea at intel.com
Thu Aug 30 08:48:14 PDT 2012


Hi Greg,

I noticed a few build problems on Linux (Ubuntu 11.10 with clang 3.1 and libstdc++) after this commit:

/home/daniel/dev/lldb/llvm/tools/lldb/source/Breakpoint/BreakpointID.cpp:105:28: error: no member named 'sscanf' in the global namespace
    int n_items_parsed = ::sscanf (input,
                         ~~^
and

/home/daniel/dev/lldb/llvm/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp:78:30: error: member access into incomplete type 'lldb_private::Module'
        if (module != NULL && module->GetObjectFile() != NULL)
                                    ^

Both problems can be fixed with the attached patch that adds the missing includes to the appropriate .cpp files.


Cheers,
Dan



On 2012-08-29, at 5:13 PM, Greg Clayton wrote:

> Author: gclayton
> Date: Wed Aug 29 16:13:06 2012
> New Revision: 162860
>
> URL: http://llvm.org/viewvc/llvm-project?rev=162860&view=rev
> Log:
> <rdar://problem/11757916>
>
> Make breakpoint setting by file and line much more efficient by only looking for inlined breakpoint locations if we are setting a breakpoint in anything but a source implementation file. Implementing this complex for a many reasons. Turns out that parsing compile units lazily had some issues with respect to how we need to do things with DWARF in .o files. So the fixes in the checkin for this makes these changes:
> - Add a new setting called "target.inline-breakpoint-strategy" which can be set to "never", "always", or "headers". "never" will never try and set any inlined breakpoints (fastest). "always" always looks for inlined breakpoint locations (slowest, but most accurate). "headers", which is the default setting, will only look for inlined breakpoint locations if the breakpoint is set in what are consudered to be header files, which is realy defined as "not in an implementation source file".
> - modify the breakpoint setting by file and line to check the current "target.inline-breakpoint-strategy" setting and act accordingly
> - Modify compile units to be able to get their language and other info lazily. This allows us to create compile units from the debug map and not have to fill all of the details in, and then lazily discover this information as we go on debuggging. This is needed to avoid parsing all .o files when setting breakpoints in implementation only files (no inlines). Otherwise we would need to parse the .o file, the object file (mach-o in our case) and the symbol file (DWARF in the object file) just to see what the compile unit was.
> - modify the "SymbolFileDWARFDebugMap" to subclass lldb_private::Module so that the virtual "GetObjectFile()" and "GetSymbolVendor()" functions can be intercepted when the .o file contenst are later lazilly needed. Prior to this fix, when we first instantiated the "SymbolFileDWARFDebugMap" class, we would also make modules, object files and symbol files for every .o file in the debug map because we needed to fix up the sections in the .o files with information that is in the executable debug map. Now we lazily do this in the DebugMapModule::GetObjectFile()
>
> Cleaned up header includes a bit as well.
>
>
> Added:
>    lldb/trunk/include/lldb/Core/ModuleSpec.h
> Modified:
>    lldb/trunk/examples/python/crashlog.py
>    lldb/trunk/examples/python/symbolication.py
>    lldb/trunk/include/lldb/Core/FileLineResolver.h
>    lldb/trunk/include/lldb/Core/Language.h
>    lldb/trunk/include/lldb/Core/Module.h
>    lldb/trunk/include/lldb/Core/SearchFilter.h
>    lldb/trunk/include/lldb/Host/FileSpec.h
>    lldb/trunk/include/lldb/Interpreter/CommandCompletions.h
>    lldb/trunk/include/lldb/Symbol/CompileUnit.h
>    lldb/trunk/include/lldb/Symbol/ObjectFile.h
>    lldb/trunk/include/lldb/Symbol/Symbol.h
>    lldb/trunk/include/lldb/Symbol/SymbolFile.h
>    lldb/trunk/include/lldb/Symbol/SymbolVendor.h
>    lldb/trunk/include/lldb/Target/Target.h
>    lldb/trunk/lldb.xcodeproj/project.pbxproj
>    lldb/trunk/source/API/SBFrame.cpp
>    lldb/trunk/source/API/SBInstruction.cpp
>    lldb/trunk/source/API/SBModule.cpp
>    lldb/trunk/source/API/SBProcess.cpp
>    lldb/trunk/source/API/SBSection.cpp
>    lldb/trunk/source/API/SBTarget.cpp
>    lldb/trunk/source/API/SBValue.cpp
>    lldb/trunk/source/Breakpoint/Breakpoint.cpp
>    lldb/trunk/source/Breakpoint/BreakpointID.cpp
>    lldb/trunk/source/Breakpoint/BreakpointLocation.cpp
>    lldb/trunk/source/Breakpoint/BreakpointLocationList.cpp
>    lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp
>    lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp
>    lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp
>    lldb/trunk/source/Commands/CommandCompletions.cpp
>    lldb/trunk/source/Commands/CommandObjectArgs.cpp
>    lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp
>    lldb/trunk/source/Commands/CommandObjectDisassemble.cpp
>    lldb/trunk/source/Commands/CommandObjectDisassemble.h
>    lldb/trunk/source/Commands/CommandObjectMemory.cpp
>    lldb/trunk/source/Commands/CommandObjectPlatform.cpp
>    lldb/trunk/source/Commands/CommandObjectProcess.cpp
>    lldb/trunk/source/Commands/CommandObjectSource.cpp
>    lldb/trunk/source/Commands/CommandObjectTarget.cpp
>    lldb/trunk/source/Commands/CommandObjectThread.cpp
>    lldb/trunk/source/Core/Address.cpp
>    lldb/trunk/source/Core/AddressResolverFileLine.cpp
>    lldb/trunk/source/Core/AddressResolverName.cpp
>    lldb/trunk/source/Core/ConstString.cpp
>    lldb/trunk/source/Core/Debugger.cpp
>    lldb/trunk/source/Core/Disassembler.cpp
>    lldb/trunk/source/Core/FileLineResolver.cpp
>    lldb/trunk/source/Core/Module.cpp
>    lldb/trunk/source/Core/ModuleList.cpp
>    lldb/trunk/source/Core/SearchFilter.cpp
>    lldb/trunk/source/Core/SourceManager.cpp
>    lldb/trunk/source/Core/ValueObject.cpp
>    lldb/trunk/source/Core/ValueObjectVariable.cpp
>    lldb/trunk/source/Expression/ClangASTSource.cpp
>    lldb/trunk/source/Expression/ClangUserExpression.cpp
>    lldb/trunk/source/Host/common/FileSpec.cpp
>    lldb/trunk/source/Host/macosx/Symbols.cpp
>    lldb/trunk/source/Interpreter/OptionValue.cpp
>    lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
>    lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
>    lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
>    lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
>    lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h
>    lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
>    lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
>    lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp
>    lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
>    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCSymbolVendor.cpp
>    lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
>    lldb/trunk/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
>    lldb/trunk/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp
>    lldb/trunk/source/Plugins/Platform/Linux/PlatformLinux.cpp
>    lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
>    lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
>    lldb/trunk/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
>    lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
>    lldb/trunk/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
>    lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
>    lldb/trunk/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp
>    lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
>    lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp
>    lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.h
>    lldb/trunk/source/Plugins/Process/mach-core/ThreadMachCore.cpp
>    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
>    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
>    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
>    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
>    lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
>    lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
>    lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
>    lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
>    lldb/trunk/source/Symbol/CompileUnit.cpp
>    lldb/trunk/source/Symbol/ObjectFile.cpp
>    lldb/trunk/source/Symbol/Symbol.cpp
>    lldb/trunk/source/Symbol/SymbolContext.cpp
>    lldb/trunk/source/Symbol/SymbolVendor.cpp
>    lldb/trunk/source/Symbol/Variable.cpp
>    lldb/trunk/source/Symbol/VariableList.cpp
>    lldb/trunk/source/Target/ObjCLanguageRuntime.cpp
>    lldb/trunk/source/Target/Platform.cpp
>    lldb/trunk/source/Target/Process.cpp
>    lldb/trunk/source/Target/StackFrame.cpp
>    lldb/trunk/source/Target/Target.cpp
>    lldb/trunk/source/Target/TargetList.cpp
>    lldb/trunk/source/Target/ThreadPlanCallFunction.cpp
>    lldb/trunk/source/Target/ThreadPlanStepOut.cpp
>    lldb/trunk/source/Target/ThreadPlanTracer.cpp
>    lldb/trunk/test/functionalities/breakpoint/inlined_breakpoints/TestInlinedBreakpoints.py
>    lldb/trunk/test/types/AbstractBase.py
>
> Modified: lldb/trunk/examples/python/crashlog.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/python/crashlog.py?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/examples/python/crashlog.py (original)
> +++ lldb/trunk/examples/python/crashlog.py Wed Aug 29 16:13:06 2012
> @@ -587,6 +587,14 @@
>         print 'error: no images in crash log'
>         return
>
> +    if options.dump_image_list:
> +        print "Binary Images:"
> +        for image in crash_log.images:
> +            if options.verbose:
> +                print image.debug_dump()
> +            else:
> +                print image
> +
>     target = crash_log.create_target ()
>     if not target:
>         return
> @@ -678,11 +686,6 @@
>                 print frame
>         print
>
> -    if options.dump_image_list:
> -        print "Binary Images:"
> -        for image in crash_log.images:
> -            print image
> -
> def CreateSymbolicateCrashLogOptions(command_name, description, add_interactive_options):
>     usage = "usage: %prog [options] <FILE> [FILE ...]"
>     option_parser = optparse.OptionParser(description=description, prog='crashlog',usage=usage)
>
> Modified: lldb/trunk/examples/python/symbolication.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/examples/python/symbolication.py?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/examples/python/symbolication.py (original)
> +++ lldb/trunk/examples/python/symbolication.py Wed Aug 29 16:13:06 2012
> @@ -214,7 +214,21 @@
>
>     def dump(self, prefix):
>         print "%s%s" % (prefix, self)
> -
> +
> +    def debug_dump(self):
> +        print 'path = "%s"' % (self.path)
> +        print 'resolved_path = "%s"' % (self.resolved_path)
> +        print 'resolved = %i' % (self.resolved)
> +        print 'unavailable = %i' % (self.unavailable)
> +        print 'uuid = %s' % (self.uuid)
> +        print 'section_infos = %s' % (self.section_infos)
> +        print 'identifier = "%s"' % (self.identifier)
> +        print 'version = %s' % (self.version)
> +        print 'arch = %s' % (self.arch)
> +        print 'module = %s' % (self.module)
> +        print 'symfile = "%s"' % (self.symfile)
> +        print 'slide = %i (0x%x)' % (self.slide, self.slide)
> +
>     def __str__(self):
>         s = "%s %s %s" % (self.get_uuid(), self.version, self.get_resolved_path())
>         for section_info in self.section_infos:
>
> Modified: lldb/trunk/include/lldb/Core/FileLineResolver.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/FileLineResolver.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/FileLineResolver.h (original)
> +++ lldb/trunk/include/lldb/Core/FileLineResolver.h Wed Aug 29 16:13:06 2012
> @@ -12,6 +12,7 @@
>
> // Project includes
> #include "lldb/Core/AddressResolver.h"
> +#include "lldb/Symbol/SymbolContext.h"
>
> namespace lldb_private {
>
>
> Modified: lldb/trunk/include/lldb/Core/Language.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Language.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/Language.h (original)
> +++ lldb/trunk/include/lldb/Core/Language.h Wed Aug 29 16:13:06 2012
> @@ -74,7 +74,7 @@
>     ///     The enumeration value that describes the programming
>     ///     language that an object is associated with.
>     //------------------------------------------------------------------
> -    lldb::LanguageType
> +    virtual lldb::LanguageType
>     GetLanguage() const;
>
>     //------------------------------------------------------------------
>
> Modified: lldb/trunk/include/lldb/Core/Module.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Module.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/Module.h (original)
> +++ lldb/trunk/include/lldb/Core/Module.h Wed Aug 29 16:13:06 2012
> @@ -11,270 +11,16 @@
> #define liblldb_Module_h_
>
> #include "lldb/Core/ArchSpec.h"
> -#include "lldb/Core/Section.h"
> #include "lldb/Core/UUID.h"
> -#include "lldb/Symbol/ObjectFile.h"
> +#include "lldb/Host/FileSpec.h"
> #include "lldb/Host/Mutex.h"
> #include "lldb/Host/TimeValue.h"
> #include "lldb/Symbol/ClangASTContext.h"
> -#include "lldb/Symbol/CompileUnit.h"
> -#include "lldb/Symbol/SymbolContext.h"
> -#include "lldb/Symbol/Symtab.h"
> -#include "lldb/Symbol/TypeList.h"
> +#include "lldb/Symbol/SymbolContextScope.h"
> #include "lldb/Target/PathMappingList.h"
>
> -
> namespace lldb_private {
>
> -class ModuleSpec
> -{
> -public:
> -    ModuleSpec () :
> -        m_file (),
> -        m_platform_file (),
> -        m_symbol_file (),
> -        m_arch (),
> -        m_uuid (),
> -        m_object_name (),
> -        m_object_offset (0),
> -        m_source_mappings ()
> -    {
> -    }
> -
> -    ModuleSpec (const FileSpec &file_spec) :
> -        m_file (file_spec),
> -        m_platform_file (),
> -        m_symbol_file (),
> -        m_arch (),
> -        m_uuid (),
> -        m_object_name (),
> -        m_object_offset (0),
> -        m_source_mappings ()
> -    {
> -    }
> -
> -    ModuleSpec (const FileSpec &file_spec, const ArchSpec &arch) :
> -        m_file (file_spec),
> -        m_platform_file (),
> -        m_symbol_file (),
> -        m_arch (arch),
> -        m_uuid (),
> -        m_object_name (),
> -        m_object_offset (0),
> -        m_source_mappings ()
> -    {
> -    }
> -
> -    ModuleSpec (const ModuleSpec &rhs) :
> -        m_file (rhs.m_file),
> -        m_platform_file (rhs.m_platform_file),
> -        m_symbol_file (rhs.m_symbol_file),
> -        m_arch (rhs.m_arch),
> -        m_uuid (rhs.m_uuid),
> -        m_object_name (rhs.m_object_name),
> -        m_object_offset (rhs.m_object_offset),
> -        m_source_mappings (rhs.m_source_mappings)
> -    {
> -    }
> -
> -    ModuleSpec &
> -    operator = (const ModuleSpec &rhs)
> -    {
> -        if (this != &rhs)
> -        {
> -            m_file = rhs.m_file;
> -            m_platform_file = rhs.m_platform_file;
> -            m_symbol_file = rhs.m_symbol_file;
> -            m_arch = rhs.m_arch;
> -            m_uuid = rhs.m_uuid;
> -            m_object_name = rhs.m_object_name;
> -            m_object_offset = rhs.m_object_offset;
> -            m_source_mappings = rhs.m_source_mappings;
> -        }
> -        return *this;
> -    }
> -
> -    FileSpec *
> -    GetFileSpecPtr ()
> -    {
> -        if (m_file)
> -            return &m_file;
> -        return NULL;
> -    }
> -
> -    const FileSpec *
> -    GetFileSpecPtr () const
> -    {
> -        if (m_file)
> -            return &m_file;
> -        return NULL;
> -    }
> -
> -    FileSpec &
> -    GetFileSpec ()
> -    {
> -        return m_file;
> -    }
> -    const FileSpec &
> -    GetFileSpec () const
> -    {
> -        return m_file;
> -    }
> -
> -    FileSpec *
> -    GetPlatformFileSpecPtr ()
> -    {
> -        if (m_platform_file)
> -            return &m_platform_file;
> -        return NULL;
> -    }
> -
> -    const FileSpec *
> -    GetPlatformFileSpecPtr () const
> -    {
> -        if (m_platform_file)
> -            return &m_platform_file;
> -        return NULL;
> -    }
> -
> -    FileSpec &
> -    GetPlatformFileSpec ()
> -    {
> -        return m_platform_file;
> -    }
> -
> -    const FileSpec &
> -    GetPlatformFileSpec () const
> -    {
> -        return m_platform_file;
> -    }
> -
> -    FileSpec *
> -    GetSymbolFileSpecPtr ()
> -    {
> -        if (m_symbol_file)
> -            return &m_symbol_file;
> -        return NULL;
> -    }
> -
> -    const FileSpec *
> -    GetSymbolFileSpecPtr () const
> -    {
> -        if (m_symbol_file)
> -            return &m_symbol_file;
> -        return NULL;
> -    }
> -
> -    FileSpec &
> -    GetSymbolFileSpec ()
> -    {
> -        return m_symbol_file;
> -    }
> -
> -    const FileSpec &
> -    GetSymbolFileSpec () const
> -    {
> -        return m_symbol_file;
> -    }
> -
> -
> -    ArchSpec *
> -    GetArchitecturePtr ()
> -    {
> -        if (m_arch.IsValid())
> -            return &m_arch;
> -        return NULL;
> -    }
> -
> -    const ArchSpec *
> -    GetArchitecturePtr () const
> -    {
> -        if (m_arch.IsValid())
> -            return &m_arch;
> -        return NULL;
> -    }
> -
> -    ArchSpec &
> -    GetArchitecture ()
> -    {
> -        return m_arch;
> -    }
> -
> -    const ArchSpec &
> -    GetArchitecture () const
> -    {
> -        return m_arch;
> -    }
> -
> -    UUID *
> -    GetUUIDPtr ()
> -    {
> -        if (m_uuid.IsValid())
> -            return &m_uuid;
> -        return NULL;
> -    }
> -
> -    const UUID *
> -    GetUUIDPtr () const
> -    {
> -        if (m_uuid.IsValid())
> -            return &m_uuid;
> -        return NULL;
> -    }
> -
> -    UUID &
> -    GetUUID ()
> -    {
> -        return m_uuid;
> -    }
> -
> -    const UUID &
> -    GetUUID () const
> -    {
> -        return m_uuid;
> -    }
> -
> -    ConstString &
> -    GetObjectName ()
> -    {
> -        return m_object_name;
> -    }
> -
> -    const ConstString &
> -    GetObjectName () const
> -    {
> -        return m_object_name;
> -    }
> -
> -    uint64_t
> -    GetObjectOffset () const
> -    {
> -        return m_object_offset;
> -    }
> -
> -    void
> -    SetObjectOffset (uint64_t object_offset)
> -    {
> -        m_object_offset = object_offset;
> -    }
> -
> -    PathMappingList &
> -    GetSourceMappingList () const
> -    {
> -        return m_source_mappings;
> -    }
> -
> -protected:
> -    FileSpec m_file;
> -    FileSpec m_platform_file;
> -    FileSpec m_symbol_file;
> -    ArchSpec m_arch;
> -    UUID m_uuid;
> -    ConstString m_object_name;
> -    uint64_t m_object_offset;
> -    mutable PathMappingList m_source_mappings;
> -};
> -
> //----------------------------------------------------------------------
> /// @class Module Module.h "lldb/Core/Module.h"
> /// @brief A class that describes an executable image and its associated
> @@ -299,9 +45,6 @@
>     public SymbolContextScope
> {
> public:
> -    friend class ModuleList;
> -    friend bool ObjectFile::SetModulesArchitecture (const ArchSpec &new_arch);
> -
>        // Static functions that can track the lifetime of moodule objects.
>        // This is handy because we might have Module objects that are in
>        // shared pointers that aren't in the global module list (from
> @@ -826,7 +569,7 @@
>     ///     returned. The returned pointer is owned by this object and
>     ///     remains valid as long as the object is around.
>     //------------------------------------------------------------------
> -    ObjectFile *
> +    virtual ObjectFile *
>     GetObjectFile ();
>
>     // Load an object file from memory.
> @@ -848,7 +591,7 @@
>     ///     will be returned. The returned pointer is owned by this
>     ///     object and remains valid as long as the object is around.
>     //------------------------------------------------------------------
> -    SymbolVendor*
> +    virtual SymbolVendor*
>     GetSymbolVendor(bool can_create = true);
>
>     //------------------------------------------------------------------
> @@ -1179,6 +922,10 @@
>     bool
>     SetArchitecture (const ArchSpec &new_arch);
>
> +
> +    friend class ModuleList;
> +    friend class ObjectFile;
> +
> private:
>
>     uint32_t
>
> Added: lldb/trunk/include/lldb/Core/ModuleSpec.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ModuleSpec.h?rev=162860&view=auto
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/ModuleSpec.h (added)
> +++ lldb/trunk/include/lldb/Core/ModuleSpec.h Wed Aug 29 16:13:06 2012
> @@ -0,0 +1,271 @@
> +//===-- ModuleSpec.h --------------------------------------------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef liblldb_ModuleSpec_h_
> +#define liblldb_ModuleSpec_h_
> +
> +#include "lldb/Core/ArchSpec.h"
> +#include "lldb/Core/UUID.h"
> +#include "lldb/Host/FileSpec.h"
> +#include "lldb/Target/PathMappingList.h"
> +
> +namespace lldb_private {
> +
> +class ModuleSpec
> +{
> +public:
> +    ModuleSpec () :
> +        m_file (),
> +        m_platform_file (),
> +        m_symbol_file (),
> +        m_arch (),
> +        m_uuid (),
> +        m_object_name (),
> +        m_object_offset (0),
> +        m_source_mappings ()
> +    {
> +    }
> +
> +    ModuleSpec (const FileSpec &file_spec) :
> +        m_file (file_spec),
> +        m_platform_file (),
> +        m_symbol_file (),
> +        m_arch (),
> +        m_uuid (),
> +        m_object_name (),
> +        m_object_offset (0),
> +        m_source_mappings ()
> +    {
> +    }
> +
> +    ModuleSpec (const FileSpec &file_spec, const ArchSpec &arch) :
> +        m_file (file_spec),
> +        m_platform_file (),
> +        m_symbol_file (),
> +        m_arch (arch),
> +        m_uuid (),
> +        m_object_name (),
> +        m_object_offset (0),
> +        m_source_mappings ()
> +    {
> +    }
> +
> +    ModuleSpec (const ModuleSpec &rhs) :
> +        m_file (rhs.m_file),
> +        m_platform_file (rhs.m_platform_file),
> +        m_symbol_file (rhs.m_symbol_file),
> +        m_arch (rhs.m_arch),
> +        m_uuid (rhs.m_uuid),
> +        m_object_name (rhs.m_object_name),
> +        m_object_offset (rhs.m_object_offset),
> +        m_source_mappings (rhs.m_source_mappings)
> +    {
> +    }
> +
> +    ModuleSpec &
> +    operator = (const ModuleSpec &rhs)
> +    {
> +        if (this != &rhs)
> +        {
> +            m_file = rhs.m_file;
> +            m_platform_file = rhs.m_platform_file;
> +            m_symbol_file = rhs.m_symbol_file;
> +            m_arch = rhs.m_arch;
> +            m_uuid = rhs.m_uuid;
> +            m_object_name = rhs.m_object_name;
> +            m_object_offset = rhs.m_object_offset;
> +            m_source_mappings = rhs.m_source_mappings;
> +        }
> +        return *this;
> +    }
> +
> +    FileSpec *
> +    GetFileSpecPtr ()
> +    {
> +        if (m_file)
> +            return &m_file;
> +        return NULL;
> +    }
> +
> +    const FileSpec *
> +    GetFileSpecPtr () const
> +    {
> +        if (m_file)
> +            return &m_file;
> +        return NULL;
> +    }
> +
> +    FileSpec &
> +    GetFileSpec ()
> +    {
> +        return m_file;
> +    }
> +    const FileSpec &
> +    GetFileSpec () const
> +    {
> +        return m_file;
> +    }
> +
> +    FileSpec *
> +    GetPlatformFileSpecPtr ()
> +    {
> +        if (m_platform_file)
> +            return &m_platform_file;
> +        return NULL;
> +    }
> +
> +    const FileSpec *
> +    GetPlatformFileSpecPtr () const
> +    {
> +        if (m_platform_file)
> +            return &m_platform_file;
> +        return NULL;
> +    }
> +
> +    FileSpec &
> +    GetPlatformFileSpec ()
> +    {
> +        return m_platform_file;
> +    }
> +
> +    const FileSpec &
> +    GetPlatformFileSpec () const
> +    {
> +        return m_platform_file;
> +    }
> +
> +    FileSpec *
> +    GetSymbolFileSpecPtr ()
> +    {
> +        if (m_symbol_file)
> +            return &m_symbol_file;
> +        return NULL;
> +    }
> +
> +    const FileSpec *
> +    GetSymbolFileSpecPtr () const
> +    {
> +        if (m_symbol_file)
> +            return &m_symbol_file;
> +        return NULL;
> +    }
> +
> +    FileSpec &
> +    GetSymbolFileSpec ()
> +    {
> +        return m_symbol_file;
> +    }
> +
> +    const FileSpec &
> +    GetSymbolFileSpec () const
> +    {
> +        return m_symbol_file;
> +    }
> +
> +
> +    ArchSpec *
> +    GetArchitecturePtr ()
> +    {
> +        if (m_arch.IsValid())
> +            return &m_arch;
> +        return NULL;
> +    }
> +
> +    const ArchSpec *
> +    GetArchitecturePtr () const
> +    {
> +        if (m_arch.IsValid())
> +            return &m_arch;
> +        return NULL;
> +    }
> +
> +    ArchSpec &
> +    GetArchitecture ()
> +    {
> +        return m_arch;
> +    }
> +
> +    const ArchSpec &
> +    GetArchitecture () const
> +    {
> +        return m_arch;
> +    }
> +
> +    UUID *
> +    GetUUIDPtr ()
> +    {
> +        if (m_uuid.IsValid())
> +            return &m_uuid;
> +        return NULL;
> +    }
> +
> +    const UUID *
> +    GetUUIDPtr () const
> +    {
> +        if (m_uuid.IsValid())
> +            return &m_uuid;
> +        return NULL;
> +    }
> +
> +    UUID &
> +    GetUUID ()
> +    {
> +        return m_uuid;
> +    }
> +
> +    const UUID &
> +    GetUUID () const
> +    {
> +        return m_uuid;
> +    }
> +
> +    ConstString &
> +    GetObjectName ()
> +    {
> +        return m_object_name;
> +    }
> +
> +    const ConstString &
> +    GetObjectName () const
> +    {
> +        return m_object_name;
> +    }
> +
> +    uint64_t
> +    GetObjectOffset () const
> +    {
> +        return m_object_offset;
> +    }
> +
> +    void
> +    SetObjectOffset (uint64_t object_offset)
> +    {
> +        m_object_offset = object_offset;
> +    }
> +
> +    PathMappingList &
> +    GetSourceMappingList () const
> +    {
> +        return m_source_mappings;
> +    }
> +
> +protected:
> +    FileSpec m_file;
> +    FileSpec m_platform_file;
> +    FileSpec m_symbol_file;
> +    ArchSpec m_arch;
> +    UUID m_uuid;
> +    ConstString m_object_name;
> +    uint64_t m_object_offset;
> +    mutable PathMappingList m_source_mappings;
> +};
> +
> +} // namespace lldb_private
> +
> +#endif  // liblldb_ModuleSpec_h_
>
> Modified: lldb/trunk/include/lldb/Core/SearchFilter.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/SearchFilter.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Core/SearchFilter.h (original)
> +++ lldb/trunk/include/lldb/Core/SearchFilter.h Wed Aug 29 16:13:06 2012
> @@ -15,11 +15,7 @@
> // Other libraries and framework includes
> // Project includes
> #include "lldb/lldb-private.h"
> -#include "lldb/Core/Stream.h"
> -#include "lldb/Host/FileSpec.h"
> -#include "lldb/Core/Address.h"
> -#include "lldb/Symbol/SymbolContext.h"
> -#include "lldb/Core/Module.h"
> +#include "lldb/Core/FileSpecList.h"
>
> namespace lldb_private {
>
>
> Modified: lldb/trunk/include/lldb/Host/FileSpec.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/FileSpec.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Host/FileSpec.h (original)
> +++ lldb/trunk/include/lldb/Host/FileSpec.h Wed Aug 29 16:13:06 2012
> @@ -330,6 +330,18 @@
>     const ConstString &
>     GetFilename () const;
>
> +    //------------------------------------------------------------------
> +    /// Returns true if the filespec represents an implementation source
> +    /// file (files with a ".c", ".cpp", ".m", ".mm" (many more)
> +    /// extension).
> +    ///
> +    /// @return
> +    ///     \b true if the filespec represents an implementation source
> +    ///     file, \b false otherwise.
> +    //------------------------------------------------------------------
> +    bool
> +    IsSourceImplementationFile () const;
> +
>     TimeValue
>     GetModificationTime () const;
>
>
> Modified: lldb/trunk/include/lldb/Interpreter/CommandCompletions.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/CommandCompletions.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Interpreter/CommandCompletions.h (original)
> +++ lldb/trunk/include/lldb/Interpreter/CommandCompletions.h Wed Aug 29 16:13:06 2012
> @@ -12,6 +12,8 @@
>
> // C Includes
> // C++ Includes
> +#include <set>
> +
> // Other libraries and framework includes
> // Project includes
> #include "lldb/lldb-private.h"
>
> Modified: lldb/trunk/include/lldb/Symbol/CompileUnit.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompileUnit.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/CompileUnit.h (original)
> +++ lldb/trunk/include/lldb/Symbol/CompileUnit.h Wed Aug 29 16:13:06 2012
> @@ -10,9 +10,9 @@
> #ifndef liblldb_CompUnit_h_
> #define liblldb_CompUnit_h_
>
> +#include "lldb/lldb-enumerations.h"
> #include "lldb/Symbol/Function.h"
> #include "lldb/Core/FileSpecList.h"
> -#include "lldb/Core/Language.h"
> #include "lldb/Core/ModuleChild.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Core/UserID.h"
> @@ -36,7 +36,6 @@
>     public ModuleChild,
>     public FileSpec,
>     public UserID,
> -    public Language,
>     public SymbolContextScope
> {
> public:
> @@ -143,6 +142,15 @@
>     virtual void
>     DumpSymbolContext(Stream *s);
>
> +    lldb::LanguageType
> +    GetLanguage();
> +
> +    void
> +    SetLanguage(lldb::LanguageType language)
> +    {
> +        m_flags.Set(flagsParsedLanguage);
> +        m_language = language;
> +    }
>
>     void
>     GetDescription(Stream *s, lldb::DescriptionLevel level) const;
> @@ -388,6 +396,7 @@
>
> protected:
>     void *m_user_data; ///< User data for the SymbolFile parser to store information into.
> +    lldb::LanguageType m_language; ///< The programming language enumeration value.
>     Flags m_flags; ///< Compile unit flags that help with partial parsing.
>     std::vector<lldb::FunctionSP> m_functions; ///< The sparsely populated list of shared pointers to functions
>                                          ///< that gets populated as functions get partially parsed.
> @@ -398,10 +407,11 @@
> private:
>     enum
>     {
> -        flagsParsedAllFunctions = (1 << 0), ///< Have we already parsed all our functions
> -        flagsParsedVariables    = (1 << 1), ///< Have we already parsed globals and statics?
> -        flagsParsedSupportFiles = (1 << 2), ///< Have we already parsed the support files for this compile unit?
> -        flagsParsedLineTable    = (1 << 3)  ///< Have we parsed the line table already?
> +        flagsParsedAllFunctions = (1u << 0), ///< Have we already parsed all our functions
> +        flagsParsedVariables    = (1u << 1), ///< Have we already parsed globals and statics?
> +        flagsParsedSupportFiles = (1u << 2), ///< Have we already parsed the support files for this compile unit?
> +        flagsParsedLineTable    = (1u << 3),  ///< Have we parsed the line table already?
> +        flagsParsedLanguage     = (1u << 4)   ///< Have we parsed the line table already?
>     };
>
>     DISALLOW_COPY_AND_ASSIGN (CompileUnit);
>
> Modified: lldb/trunk/include/lldb/Symbol/ObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ObjectFile.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/ObjectFile.h (original)
> +++ lldb/trunk/include/lldb/Symbol/ObjectFile.h Wed Aug 29 16:13:06 2012
> @@ -175,6 +175,37 @@
>                 lldb::addr_t header_addr,
>                 lldb::DataBufferSP &file_data_sp);
>
> +
> +    //------------------------------------------------------------------
> +    /// Split a path into a file path with object name.
> +    ///
> +    /// For paths like "/tmp/foo.a(bar.o)" we often need to split a path
> +    /// up into the actual path name and into the object name so we can
> +    /// make a valid object file from it.
> +    ///
> +    /// @param[in] path_with_object
> +    ///     A path that might contain an archive path with a .o file
> +    ///     specified in parens in the basename of the path.
> +    ///
> +    /// @param[out] archive_file
> +    ///     If \b true is returned, \a file_spec will be filled in with
> +    ///     the path to the archive.
> +    ///
> +    /// @param[out] archive_object
> +    ///     If \b true is returned, \a object will be filled in with
> +    ///     the name of the object inside the archive.
> +    ///
> +    /// @return
> +    ///     \b true if the path matches the pattern of archive + object
> +    ///     and \a archive_file and \a archive_object are modified,
> +    ///     \b false otherwise and \a archive_file and \a archive_object
> +    ///     are guaranteed to be remain unchanged.
> +    //------------------------------------------------------------------
> +    static bool
> +    SplitArchivePathWithObject (const char *path_with_object,
> +                                lldb_private::FileSpec &archive_file,
> +                                lldb_private::ConstString &archive_object);
> +
>     //------------------------------------------------------------------
>     /// Gets the address size in bytes for the current object file.
>     ///
>
> Modified: lldb/trunk/include/lldb/Symbol/Symbol.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Symbol.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/Symbol.h (original)
> +++ lldb/trunk/include/lldb/Symbol/Symbol.h Wed Aug 29 16:13:06 2012
> @@ -91,7 +91,7 @@
>     }
>
>     const ConstString &
> -    GetName ()
> +    GetName () const
>     {
>         return m_mangled.GetName();
>     }
>
> Modified: lldb/trunk/include/lldb/Symbol/SymbolFile.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/SymbolFile.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/SymbolFile.h (original)
> +++ lldb/trunk/include/lldb/Symbol/SymbolFile.h Wed Aug 29 16:13:06 2012
> @@ -120,6 +120,7 @@
>     virtual uint32_t        GetNumCompileUnits() = 0;
>     virtual lldb::CompUnitSP  ParseCompileUnitAtIndex(uint32_t index) = 0;
>
> +    virtual lldb::LanguageType ParseCompileUnitLanguage (const SymbolContext& sc) = 0;
>     virtual size_t          ParseCompileUnitFunctions (const SymbolContext& sc) = 0;
>     virtual bool            ParseCompileUnitLineTable (const SymbolContext& sc) = 0;
>     virtual bool            ParseCompileUnitSupportFiles (const SymbolContext& sc, FileSpecList& support_files) = 0;
>
> Modified: lldb/trunk/include/lldb/Symbol/SymbolVendor.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/SymbolVendor.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Symbol/SymbolVendor.h (original)
> +++ lldb/trunk/include/lldb/Symbol/SymbolVendor.h Wed Aug 29 16:13:06 2012
> @@ -62,6 +62,9 @@
>     virtual void
>     Dump(Stream *s);
>
> +    virtual lldb::LanguageType
> +    ParseCompileUnitLanguage (const SymbolContext& sc);
> +
>     virtual size_t
>     ParseCompileUnitFunctions (const SymbolContext& sc);
>
>
> Modified: lldb/trunk/include/lldb/Target/Target.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Target.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/include/lldb/Target/Target.h (original)
> +++ lldb/trunk/include/lldb/Target/Target.h Wed Aug 29 16:13:06 2012
> @@ -19,6 +19,7 @@
> #include "lldb/Breakpoint/BreakpointList.h"
> #include "lldb/Breakpoint/BreakpointLocationCollection.h"
> #include "lldb/Breakpoint/WatchpointList.h"
> +#include "lldb/Core/ArchSpec.h"
> #include "lldb/Core/Broadcaster.h"
> #include "lldb/Core/Event.h"
> #include "lldb/Core/ModuleList.h"
> @@ -39,6 +40,14 @@
>
> extern OptionEnumValueElement g_dynamic_value_types[];
>
> +typedef enum InlineStrategy
> +{
> +    eInlineBreakpointsNever = 0,
> +    eInlineBreakpointsHeaders,
> +    eInlineBreakpointsAlways
> +} InlineStrategy;
> +
> +
> //----------------------------------------------------------------------
> // TargetProperties
> //----------------------------------------------------------------------
> @@ -71,6 +80,9 @@
>     void
>     SetDisableSTDIO (bool b);
>
> +    InlineStrategy
> +    GetInlineStrategy () const;
> +
>     bool
>     GetRunArguments (Args &args) const;
>
> @@ -312,7 +324,7 @@
>     CreateBreakpoint (const FileSpecList *containingModules,
>                       const FileSpec &file,
>                       uint32_t line_no,
> -                      bool check_inlines,
> +                      LazyBool check_inlines = eLazyBoolCalculate,
>                       LazyBool skip_prologue = eLazyBoolCalculate,
>                       bool internal = false);
>
>
> Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
> +++ lldb/trunk/lldb.xcodeproj/project.pbxproj Wed Aug 29 16:13:06 2012
> @@ -78,6 +78,7 @@
>                260CC65215D0440D002BF2E0 /* OptionValueString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 260CC64515D0440D002BF2E0 /* OptionValueString.cpp */; };
>                260CC65315D0440D002BF2E0 /* OptionValueUInt64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 260CC64615D0440D002BF2E0 /* OptionValueUInt64.cpp */; };
>                260CC65415D0440D002BF2E0 /* OptionValueUUID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 260CC64715D0440D002BF2E0 /* OptionValueUUID.cpp */; };
> +             260D9B2715EC369500960137 /* ModuleSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 260D9B2615EC369500960137 /* ModuleSpec.h */; };
>                260E07C6136FA69E00CF21D3 /* OptionGroupUUID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 260E07C5136FA69E00CF21D3 /* OptionGroupUUID.cpp */; };
>                260E07C8136FAB9200CF21D3 /* OptionGroupFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 260E07C7136FAB9200CF21D3 /* OptionGroupFile.cpp */; };
>                261744781168585B005ADD65 /* SBType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 261744771168585B005ADD65 /* SBType.cpp */; };
> @@ -802,6 +803,7 @@
>                260CC64515D0440D002BF2E0 /* OptionValueString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionValueString.cpp; path = source/Interpreter/OptionValueString.cpp; sourceTree = "<group>"; };
>                260CC64615D0440D002BF2E0 /* OptionValueUInt64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionValueUInt64.cpp; path = source/Interpreter/OptionValueUInt64.cpp; sourceTree = "<group>"; };
>                260CC64715D0440D002BF2E0 /* OptionValueUUID.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionValueUUID.cpp; path = source/Interpreter/OptionValueUUID.cpp; sourceTree = "<group>"; };
> +             260D9B2615EC369500960137 /* ModuleSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ModuleSpec.h; path = include/lldb/Core/ModuleSpec.h; sourceTree = "<group>"; };
>                260E07C3136FA68900CF21D3 /* OptionGroupUUID.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionGroupUUID.h; path = include/lldb/Interpreter/OptionGroupUUID.h; sourceTree = "<group>"; };
>                260E07C5136FA69E00CF21D3 /* OptionGroupUUID.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionGroupUUID.cpp; path = source/Interpreter/OptionGroupUUID.cpp; sourceTree = "<group>"; };
>                260E07C7136FAB9200CF21D3 /* OptionGroupFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptionGroupFile.cpp; path = source/Interpreter/OptionGroupFile.cpp; sourceTree = "<group>"; };
> @@ -2511,6 +2513,7 @@
>                                26BC7E8210F1B85900F91463 /* ModuleChild.cpp */,
>                                26BC7D6C10F1B77400F91463 /* ModuleList.h */,
>                                26BC7E8310F1B85900F91463 /* ModuleList.cpp */,
> +                             260D9B2615EC369500960137 /* ModuleSpec.h */,
>                                26651A15133BF9CC005B64B7 /* Opcode.h */,
>                                26651A17133BF9DF005B64B7 /* Opcode.cpp */,
>                                266DFE9813FD658300D0C574 /* OperatingSystem.h */,
> @@ -3388,6 +3391,7 @@
>                                26491E3B15E1DB8600CBFFC2 /* OptionValueRegex.h in Headers */,
>                                2697A39515E404BA003E682C /* OptionValueArch.h in Headers */,
>                                2698699D15E6CBD0002415FF /* OperatingSystemPython.h in Headers */,
> +                             260D9B2715EC369500960137 /* ModuleSpec.h in Headers */,
>                        );
>                        runOnlyForDeploymentPostprocessing = 0;
>                };
>
> Modified: lldb/trunk/source/API/SBFrame.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBFrame.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBFrame.cpp (original)
> +++ lldb/trunk/source/API/SBFrame.cpp Wed Aug 29 16:13:06 2012
> @@ -24,6 +24,8 @@
> #include "lldb/Expression/ClangUserExpression.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Symbol/Block.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Symbol.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Symbol/Variable.h"
>
> Modified: lldb/trunk/source/API/SBInstruction.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBInstruction.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBInstruction.cpp (original)
> +++ lldb/trunk/source/API/SBInstruction.cpp Wed Aug 29 16:13:06 2012
> @@ -17,6 +17,7 @@
>
> #include "lldb/Core/ArchSpec.h"
> #include "lldb/Core/DataBufferHeap.h"
> +#include "lldb/Core/DataExtractor.h"
> #include "lldb/Core/Disassembler.h"
> #include "lldb/Core/EmulateInstruction.h"
> #include "lldb/Core/StreamFile.h"
>
> Modified: lldb/trunk/source/API/SBModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBModule.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBModule.cpp (original)
> +++ lldb/trunk/source/API/SBModule.cpp Wed Aug 29 16:13:06 2012
> @@ -15,10 +15,13 @@
> #include "lldb/API/SBSymbolContextList.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/ValueObjectList.h"
> #include "lldb/Core/ValueObjectVariable.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolVendor.h"
> +#include "lldb/Symbol/Symtab.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Target/Target.h"
>
>
> Modified: lldb/trunk/source/API/SBProcess.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBProcess.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBProcess.cpp (original)
> +++ lldb/trunk/source/API/SBProcess.cpp Wed Aug 29 16:13:06 2012
> @@ -15,6 +15,7 @@
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Core/StreamFile.h"
>
> Modified: lldb/trunk/source/API/SBSection.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBSection.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBSection.cpp (original)
> +++ lldb/trunk/source/API/SBSection.cpp Wed Aug 29 16:13:06 2012
> @@ -16,6 +16,7 @@
> #include "lldb/Core/Module.h"
> #include "lldb/Core/Section.h"
> #include "lldb/Core/StreamString.h"
> +#include "lldb/Symbol/ObjectFile.h"
>
>
> using namespace lldb;
>
> Modified: lldb/trunk/source/API/SBTarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBTarget.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBTarget.cpp (original)
> +++ lldb/trunk/source/API/SBTarget.cpp Wed Aug 29 16:13:06 2012
> @@ -31,14 +31,18 @@
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Disassembler.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/RegularExpression.h"
> #include "lldb/Core/SearchFilter.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/STLUtils.h"
> #include "lldb/Core/ValueObjectList.h"
> #include "lldb/Core/ValueObjectVariable.h"
> #include "lldb/Host/FileSpec.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Interpreter/Args.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolVendor.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Target/LanguageRuntime.h"
> @@ -1182,9 +1186,9 @@
>     {
>         Mutex::Locker api_locker (target_sp->GetAPIMutex());
>
> -        const bool check_inlines = true;
> -        const bool internal = false;
> +        const LazyBool check_inlines = eLazyBoolCalculate;
>         const LazyBool skip_prologue = eLazyBoolCalculate;
> +        const bool internal = false;
>         *sb_bp = target_sp->CreateBreakpoint (NULL, *sb_file_spec, line, check_inlines, skip_prologue, internal);
>     }
>
>
> Modified: lldb/trunk/source/API/SBValue.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBValue.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/API/SBValue.cpp (original)
> +++ lldb/trunk/source/API/SBValue.cpp Wed Aug 29 16:13:06 2012
> @@ -21,6 +21,7 @@
> #include "lldb/Core/Log.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/Scalar.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Core/StreamFile.h"
> #include "lldb/Core/Value.h"
>
> Modified: lldb/trunk/source/Breakpoint/Breakpoint.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/Breakpoint.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/Breakpoint.cpp (original)
> +++ lldb/trunk/source/Breakpoint/Breakpoint.cpp Wed Aug 29 16:13:06 2012
> @@ -22,6 +22,7 @@
> #include "lldb/Core/Log.h"
> #include "lldb/Core/ModuleList.h"
> #include "lldb/Core/SearchFilter.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Symbol/SymbolContext.h"
>
> Modified: lldb/trunk/source/Breakpoint/BreakpointID.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointID.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/BreakpointID.cpp (original)
> +++ lldb/trunk/source/Breakpoint/BreakpointID.cpp Wed Aug 29 16:13:06 2012
> @@ -15,6 +15,7 @@
>
> #include "lldb/Breakpoint/BreakpointID.h"
> #include "lldb/Breakpoint/Breakpoint.h"
> +#include "lldb/Core/Stream.h"
>
> using namespace lldb;
> using namespace lldb_private;
>
> Modified: lldb/trunk/source/Breakpoint/BreakpointLocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointLocation.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/BreakpointLocation.cpp (original)
> +++ lldb/trunk/source/Breakpoint/BreakpointLocation.cpp Wed Aug 29 16:13:06 2012
> @@ -13,16 +13,18 @@
>
> // Other libraries and framework includes
> // Project includes
> +#include "lldb/lldb-private-log.h"
> #include "lldb/Breakpoint/BreakpointLocation.h"
> #include "lldb/Breakpoint/BreakpointID.h"
> #include "lldb/Breakpoint/StoppointCallbackContext.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/StreamString.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Symbol.h"
> #include "lldb/Target/Target.h"
> -#include "lldb/Target/ThreadPlan.h"
> #include "lldb/Target/Process.h"
> -#include "lldb/Core/StreamString.h"
> -#include "lldb/lldb-private-log.h"
> #include "lldb/Target/Thread.h"
> #include "lldb/Target/ThreadSpec.h"
>
>
> Modified: lldb/trunk/source/Breakpoint/BreakpointLocationList.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointLocationList.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/BreakpointLocationList.cpp (original)
> +++ lldb/trunk/source/Breakpoint/BreakpointLocationList.cpp Wed Aug 29 16:13:06 2012
> @@ -14,8 +14,7 @@
> // Project includes
> #include "lldb/Breakpoint/BreakpointLocationList.h"
> #include "lldb/Breakpoint/BreakpointLocation.h"
> -#include "lldb/Core/ModuleList.h"
> -#include "lldb/Target/Target.h"
> +#include "lldb/Core/Section.h"
>
> using namespace lldb;
> using namespace lldb_private;
>
> Modified: lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp (original)
> +++ lldb/trunk/source/Breakpoint/BreakpointResolverFileLine.cpp Wed Aug 29 16:13:06 2012
> @@ -15,8 +15,10 @@
> // Project includes
> #include "lldb/Breakpoint/BreakpointLocation.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/StreamString.h"
> -#include "lldb/Target/Target.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/lldb-private-log.h"
>
> using namespace lldb;
>
> Modified: lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp (original)
> +++ lldb/trunk/source/Breakpoint/BreakpointResolverFileRegex.cpp Wed Aug 29 16:13:06 2012
> @@ -17,6 +17,7 @@
> #include "lldb/Core/SourceManager.h"
> #include "lldb/Core/Log.h"
> #include "lldb/Core/StreamString.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Target/Target.h"
> #include "lldb/lldb-private-log.h"
>
>
> Modified: lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp (original)
> +++ lldb/trunk/source/Breakpoint/BreakpointResolverName.cpp Wed Aug 29 16:13:06 2012
> @@ -15,9 +15,13 @@
> // Project includes
> #include "lldb/Breakpoint/BreakpointLocation.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Symbol/ClangNamespaceDecl.h"
> -#include "lldb/Target/Target.h"
> +#include "lldb/Symbol/Block.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Symbol.h"
> +#include "lldb/Symbol/SymbolContext.h"
>
> using namespace lldb;
> using namespace lldb_private;
>
> Modified: lldb/trunk/source/Commands/CommandCompletions.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandCompletions.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandCompletions.cpp (original)
> +++ lldb/trunk/source/Commands/CommandCompletions.cpp Wed Aug 29 16:13:06 2012
> @@ -21,9 +21,11 @@
> #include "lldb/Host/FileSpec.h"
> #include "lldb/Core/FileSpecList.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Interpreter/CommandCompletions.h"
> #include "lldb/Interpreter/CommandInterpreter.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Target/Target.h"
> #include "lldb/Utility/CleanUp.h"
>
>
> Modified: lldb/trunk/source/Commands/CommandObjectArgs.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectArgs.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectArgs.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectArgs.cpp Wed Aug 29 16:13:06 2012
> @@ -14,13 +14,14 @@
> // Other libraries and framework includes
> // Project includes
> #include "lldb/Interpreter/Args.h"
> +#include "lldb/Core/Debugger.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/Value.h"
> #include "lldb/Expression/ClangExpression.h"
> #include "lldb/Expression/ClangExpressionVariable.h"
> #include "lldb/Expression/ClangFunction.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Interpreter/CommandInterpreter.h"
> -#include "lldb/Core/Debugger.h"
> #include "lldb/Interpreter/CommandReturnObject.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/Variable.h"
>
> Modified: lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp Wed Aug 29 16:13:06 2012
> @@ -91,7 +91,6 @@
>             m_filenames (),
>             m_line_num (0),
>             m_column (0),
> -            m_check_inlines (true),
>             m_func_names (),
>             m_func_name_type_mask (eFunctionNameTypeNone),
>             m_func_regexp (),
> @@ -104,7 +103,7 @@
>             m_thread_name(),
>             m_queue_name(),
>             m_catch_bp (false),
> -            m_throw_bp (false),
> +            m_throw_bp (true),
>             m_language (eLanguageTypeUnknown),
>             m_skip_prologue (eLazyBoolCalculate)
>         {
> @@ -285,18 +284,19 @@
>             m_line_num = 0;
>             m_column = 0;
>             m_func_names.clear();
> -            m_func_name_type_mask = 0;
> +            m_func_name_type_mask = eFunctionNameTypeNone;
>             m_func_regexp.clear();
> -            m_load_addr = LLDB_INVALID_ADDRESS;
> +            m_source_text_regexp.clear();
>             m_modules.Clear();
> +            m_load_addr = LLDB_INVALID_ADDRESS;
>             m_ignore_count = 0;
>             m_thread_id = LLDB_INVALID_THREAD_ID;
>             m_thread_index = UINT32_MAX;
>             m_thread_name.clear();
>             m_queue_name.clear();
> -            m_language = eLanguageTypeUnknown;
>             m_catch_bp = false;
>             m_throw_bp = true;
> +            m_language = eLanguageTypeUnknown;
>             m_skip_prologue = eLazyBoolCalculate;
>         }
>
> @@ -316,7 +316,6 @@
>         FileSpecList m_filenames;
>         uint32_t m_line_num;
>         uint32_t m_column;
> -        bool m_check_inlines;
>         std::vector<std::string> m_func_names;
>         uint32_t m_func_name_type_mask;
>         std::string m_func_regexp;
> @@ -398,11 +397,14 @@
>                     }
>                     else
>                         file = m_options.m_filenames.GetFileSpecAtIndex(0);
> -
> +
> +                    // Only check for inline functions if
> +                    LazyBool check_inlines = eLazyBoolCalculate;
> +
>                     bp = target->CreateBreakpoint (&(m_options.m_modules),
>                                                    file,
>                                                    m_options.m_line_num,
> -                                                   m_options.m_check_inlines,
> +                                                   check_inlines,
>                                                    m_options.m_skip_prologue,
>                                                    internal).get();
>                 }
>
> Modified: lldb/trunk/source/Commands/CommandObjectDisassemble.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectDisassemble.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectDisassemble.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectDisassemble.cpp Wed Aug 29 16:13:06 2012
> @@ -14,16 +14,17 @@
> // Other libraries and framework includes
> // Project includes
> #include "lldb/Core/AddressRange.h"
> +#include "lldb/Core/Disassembler.h"
> +#include "lldb/Core/SourceManager.h"
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Interpreter/CommandCompletions.h"
> #include "lldb/Interpreter/CommandInterpreter.h"
> #include "lldb/Interpreter/CommandReturnObject.h"
> -#include "lldb/Core/Disassembler.h"
> #include "lldb/Interpreter/Options.h"
> -#include "lldb/Core/SourceManager.h"
> -#include "lldb/Target/StackFrame.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/Symbol.h"
> #include "lldb/Target/Process.h"
> +#include "lldb/Target/StackFrame.h"
> #include "lldb/Target/Target.h"
>
> #define DEFAULT_DISASM_BYTE_SIZE 32
>
> Modified: lldb/trunk/source/Commands/CommandObjectDisassemble.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectDisassemble.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectDisassemble.h (original)
> +++ lldb/trunk/source/Commands/CommandObjectDisassemble.h Wed Aug 29 16:13:06 2012
> @@ -14,6 +14,7 @@
> // C++ Includes
> // Other libraries and framework includes
> // Project includes
> +#include "lldb/Core/ArchSpec.h"
> #include "lldb/Interpreter/CommandObject.h"
> #include "lldb/Interpreter/Options.h"
>
>
> Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Wed Aug 29 16:13:06 2012
> @@ -16,6 +16,7 @@
> #include "lldb/Core/DataBufferHeap.h"
> #include "lldb/Core/DataExtractor.h"
> #include "lldb/Core/Debugger.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/ValueObjectMemory.h"
> #include "lldb/Interpreter/Args.h"
> @@ -26,7 +27,7 @@
> #include "lldb/Interpreter/OptionGroupOutputFile.h"
> #include "lldb/Interpreter/OptionGroupValueObjectDisplay.h"
> #include "lldb/Interpreter/OptionValueString.h"
> -#include "lldb/Symbol/ClangNamespaceDecl.h"
> +#include "lldb/Symbol/TypeList.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/StackFrame.h"
>
>
> Modified: lldb/trunk/source/Commands/CommandObjectPlatform.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectPlatform.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectPlatform.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectPlatform.cpp Wed Aug 29 16:13:06 2012
> @@ -15,6 +15,7 @@
> // Project includes
> #include "lldb/Core/DataExtractor.h"
> #include "lldb/Core/Debugger.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Interpreter/CommandInterpreter.h"
>
> Modified: lldb/trunk/source/Commands/CommandObjectProcess.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectProcess.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectProcess.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectProcess.cpp Wed Aug 29 16:13:06 2012
> @@ -17,6 +17,7 @@
> #include "lldb/Breakpoint/BreakpointLocation.h"
> #include "lldb/Breakpoint/BreakpointSite.h"
> #include "lldb/Core/State.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Interpreter/Options.h"
>
> Modified: lldb/trunk/source/Commands/CommandObjectSource.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectSource.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectSource.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectSource.cpp Wed Aug 29 16:13:06 2012
> @@ -16,10 +16,13 @@
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/FileLineResolver.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/SourceManager.h"
> #include "lldb/Interpreter/CommandInterpreter.h"
> #include "lldb/Interpreter/CommandReturnObject.h"
> #include "lldb/Host/FileSpec.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/TargetList.h"
> #include "lldb/Interpreter/CommandCompletions.h"
>
> Modified: lldb/trunk/source/Commands/CommandObjectTarget.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectTarget.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectTarget.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectTarget.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,8 @@
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/InputReader.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/Section.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/Timer.h"
> @@ -34,6 +36,7 @@
> #include "lldb/Interpreter/OptionGroupUInt64.h"
> #include "lldb/Interpreter/OptionGroupUUID.h"
> #include "lldb/Interpreter/OptionGroupValueObjectDisplay.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/FuncUnwinders.h"
> #include "lldb/Symbol/LineTable.h"
> #include "lldb/Symbol/ObjectFile.h"
>
> Modified: lldb/trunk/source/Commands/CommandObjectThread.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectThread.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Commands/CommandObjectThread.cpp (original)
> +++ lldb/trunk/source/Commands/CommandObjectThread.cpp Wed Aug 29 16:13:06 2012
> @@ -13,15 +13,16 @@
> // C++ Includes
> // Other libraries and framework includes
> // Project includes
> -#include "lldb/Interpreter/Options.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/SourceManager.h"
> -
> #include "lldb/Host/Host.h"
> -
> #include "lldb/Interpreter/CommandInterpreter.h"
> #include "lldb/Interpreter/CommandReturnObject.h"
> -
> +#include "lldb/Interpreter/Options.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/LineTable.h"
> +#include "lldb/Symbol/LineEntry.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
> #include "lldb/Target/Target.h"
> @@ -31,8 +32,7 @@
> #include "lldb/Target/ThreadPlanStepOut.h"
> #include "lldb/Target/ThreadPlanStepRange.h"
> #include "lldb/Target/ThreadPlanStepInRange.h"
> -#include "lldb/Symbol/LineTable.h"
> -#include "lldb/Symbol/LineEntry.h"
> +
>
> using namespace lldb;
> using namespace lldb_private;
>
> Modified: lldb/trunk/source/Core/Address.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Address.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/Address.cpp (original)
> +++ lldb/trunk/source/Core/Address.cpp Wed Aug 29 16:13:06 2012
> @@ -10,7 +10,9 @@
> #include "lldb/Core/Address.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/Section.h"
> +#include "lldb/Symbol/Block.h"
> #include "lldb/Symbol/ObjectFile.h"
> +#include "lldb/Symbol/Type.h"
> #include "lldb/Symbol/Variable.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Target/ExecutionContext.h"
>
> Modified: lldb/trunk/source/Core/AddressResolverFileLine.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/AddressResolverFileLine.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/AddressResolverFileLine.cpp (original)
> +++ lldb/trunk/source/Core/AddressResolverFileLine.cpp Wed Aug 29 16:13:06 2012
> @@ -12,6 +12,8 @@
> // Project includes
> #include "lldb/Core/Log.h"
> #include "lldb/Core/StreamString.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/SymbolContext.h"
> #include "lldb/lldb-private-log.h"
>
> using namespace lldb;
>
> Modified: lldb/trunk/source/Core/AddressResolverName.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/AddressResolverName.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/AddressResolverName.cpp (original)
> +++ lldb/trunk/source/Core/AddressResolverName.cpp Wed Aug 29 16:13:06 2012
> @@ -11,8 +11,12 @@
>
> // Project includes
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Symbol/ClangNamespaceDecl.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/SymbolContext.h"
> +#include "lldb/Symbol/Symbol.h"
> #include "lldb/lldb-private-log.h"
>
> using namespace lldb;
>
> Modified: lldb/trunk/source/Core/ConstString.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ConstString.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/ConstString.cpp (original)
> +++ lldb/trunk/source/Core/ConstString.cpp Wed Aug 29 16:13:06 2012
> @@ -100,6 +100,18 @@
>     }
>
>     const char *
> +    GetConstCStringWithStringRef (const llvm::StringRef &string_ref)
> +    {
> +        if (string_ref.data())
> +        {
> +            Mutex::Locker locker (m_mutex);
> +            StringPoolEntryType& entry = m_string_map.GetOrCreateValue (string_ref, (StringPoolValueType)NULL);
> +            return entry.getKeyData();
> +        }
> +        return NULL;
> +    }
> +
> +    const char *
>     GetConstCStringAndSetMangledCounterPart (const char *demangled_cstr, const char *mangled_ccstr)
>     {
>         if (demangled_cstr)
>
> Modified: lldb/trunk/source/Core/Debugger.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Debugger.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/Debugger.cpp (original)
> +++ lldb/trunk/source/Core/Debugger.cpp Wed Aug 29 16:13:06 2012
> @@ -19,6 +19,7 @@
> #include "lldb/Core/DataVisualization.h"
> #include "lldb/Core/FormatManager.h"
> #include "lldb/Core/InputReader.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/RegisterValue.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/StreamAsynchronousIO.h"
> @@ -31,6 +32,10 @@
> #include "lldb/Interpreter/CommandInterpreter.h"
> #include "lldb/Interpreter/OptionValueSInt64.h"
> #include "lldb/Interpreter/OptionValueString.h"
> +#include "lldb/Symbol/ClangASTContext.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Symbol.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Target/TargetList.h"
> #include "lldb/Target/Process.h"
>
> Modified: lldb/trunk/source/Core/Disassembler.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Disassembler.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/Disassembler.cpp (original)
> +++ lldb/trunk/source/Core/Disassembler.cpp Wed Aug 29 16:13:06 2012
> @@ -29,6 +29,7 @@
> #include "lldb/Interpreter/OptionValueString.h"
> #include "lldb/Interpreter/OptionValueUInt64.h"
> #include "lldb/Symbol/ClangNamespaceDecl.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
>
> Modified: lldb/trunk/source/Core/FileLineResolver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/FileLineResolver.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/FileLineResolver.cpp (original)
> +++ lldb/trunk/source/Core/FileLineResolver.cpp Wed Aug 29 16:13:06 2012
> @@ -13,6 +13,7 @@
> #include "lldb/lldb-private-log.h"
> #include "lldb/Core/Log.h"
> #include "lldb/Core/StreamString.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/LineTable.h"
>
> using namespace lldb;
>
> Modified: lldb/trunk/source/Core/Module.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Module.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/Module.cpp (original)
> +++ lldb/trunk/source/Core/Module.cpp Wed Aug 29 16:13:06 2012
> @@ -12,11 +12,14 @@
> #include "lldb/Core/DataBufferHeap.h"
> #include "lldb/Core/Log.h"
> #include "lldb/Core/ModuleList.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/RegularExpression.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/Timer.h"
> #include "lldb/Host/Host.h"
> #include "lldb/lldb-private-log.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Symbol/SymbolVendor.h"
>
> Modified: lldb/trunk/source/Core/ModuleList.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ModuleList.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/ModuleList.cpp (original)
> +++ lldb/trunk/source/Core/ModuleList.cpp Wed Aug 29 16:13:06 2012
> @@ -15,6 +15,7 @@
> // Project includes
> #include "lldb/Core/Log.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Host/Symbols.h"
> #include "lldb/Symbol/ClangNamespaceDecl.h"
>
> Modified: lldb/trunk/source/Core/SearchFilter.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/SearchFilter.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/SearchFilter.cpp (original)
> +++ lldb/trunk/source/Core/SearchFilter.cpp Wed Aug 29 16:13:06 2012
> @@ -14,6 +14,8 @@
>
> #include "lldb/lldb-private.h"
> #include "lldb/Core/SearchFilter.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Target/Target.h"
>
> using namespace lldb;
> @@ -368,26 +370,25 @@
> bool
> SearchFilterByModule::ModulePasses (const FileSpec &spec)
> {
> -    if (FileSpec::Compare(spec, m_module_spec, false) == 0)
> -        return true;
> -    else
> -        return false;
> +    // Do a full match only if "spec" has a directory
> +    const bool full_match = spec.GetDirectory();
> +    return FileSpec::Equal(spec, m_module_spec, full_match);
> }
>
> bool
> -SearchFilterByModule::SymbolContextPasses
> -(
> - const SymbolContext &context,
> - lldb::SymbolContextItem scope
> - )
> +SearchFilterByModule::SymbolContextPasses (const SymbolContext &sc,
> +                                           lldb::SymbolContextItem scope)
> {
> -    if (!(scope & eSymbolContextModule))
> -        return false;
> -
> -    if (context.module_sp && FileSpec::Compare (context.module_sp->GetFileSpec(), m_module_spec, false) == 0)
> -        return true;
> -    else
> -        return false;
> +    if (scope & eSymbolContextModule)
> +    {
> +        if (sc.module_sp)
> +        {
> +            // Match the full path only if "m_module_spec" has a directory
> +            const bool full_match = m_module_spec.GetDirectory();
> +            return FileSpec::Equal (sc.module_sp->GetFileSpec(), m_module_spec, full_match);
> +        }
> +    }
> +    return false;
> }
>
> bool
> @@ -434,7 +435,8 @@
>     for (size_t i = 0; i < num_modules; i++)
>     {
>         Module* module = target_modules.GetModulePointerAtIndexUnlocked(i);
> -        if (FileSpec::Compare (m_module_spec, module->GetFileSpec(), false) == 0)
> +        const bool full_match = m_module_spec.GetDirectory();
> +        if (FileSpec::Equal (m_module_spec, module->GetFileSpec(), full_match))
>         {
>             SymbolContext matchingContext(m_target_sp, module->shared_from_this());
>             Searcher::CallbackReturn shouldContinue;
> @@ -723,7 +725,7 @@
>         return false;
>     if (!(scope & eSymbolContextCompUnit))
>         return false;
> -    if (context.comp_unit && m_cu_spec_list.FindFileIndex(0, static_cast<FileSpec>(context.comp_unit), false) == UINT32_MAX)
> +    if (context.comp_unit && m_cu_spec_list.FindFileIndex(0, context.comp_unit, false) == UINT32_MAX)
>         return false;
>     return true;
> }
> @@ -745,7 +747,7 @@
> bool
> SearchFilterByModuleListAndCU::CompUnitPasses (CompileUnit &compUnit)
> {
> -    return m_cu_spec_list.FindFileIndex(0, static_cast<FileSpec>(compUnit), false) != UINT32_MAX;
> +    return m_cu_spec_list.FindFileIndex(0, compUnit, false) != UINT32_MAX;
> }
>
> void
>
> Modified: lldb/trunk/source/Core/SourceManager.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/SourceManager.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/SourceManager.cpp (original)
> +++ lldb/trunk/source/Core/SourceManager.cpp Wed Aug 29 16:13:06 2012
> @@ -15,8 +15,11 @@
> // Project includes
> #include "lldb/Core/DataBuffer.h"
> #include "lldb/Core/Debugger.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Symbol/ClangNamespaceDecl.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Target/Target.h"
>
>
> Modified: lldb/trunk/source/Core/ValueObject.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/ValueObject.cpp (original)
> +++ lldb/trunk/source/Core/ValueObject.cpp Wed Aug 29 16:13:06 2012
> @@ -22,6 +22,7 @@
> #include "lldb/Core/DataVisualization.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/ValueObjectChild.h"
> #include "lldb/Core/ValueObjectConstResult.h"
>
> Modified: lldb/trunk/source/Core/ValueObjectVariable.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObjectVariable.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Core/ValueObjectVariable.cpp (original)
> +++ lldb/trunk/source/Core/ValueObjectVariable.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,7 @@
> #include "lldb/Core/ValueObjectList.h"
> #include "lldb/Core/Value.h"
>
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Symbol/SymbolContextScope.h"
>
> Modified: lldb/trunk/source/Expression/ClangASTSource.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangASTSource.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Expression/ClangASTSource.cpp (original)
> +++ lldb/trunk/source/Expression/ClangASTSource.cpp Wed Aug 29 16:13:06 2012
> @@ -17,6 +17,7 @@
> #include "lldb/Expression/ClangASTSource.h"
> #include "lldb/Expression/ClangExpression.h"
> #include "lldb/Symbol/ClangNamespaceDecl.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/SymbolVendor.h"
> #include "lldb/Target/ObjCLanguageRuntime.h"
> #include "lldb/Target/Target.h"
>
> Modified: lldb/trunk/source/Expression/ClangUserExpression.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangUserExpression.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Expression/ClangUserExpression.cpp (original)
> +++ lldb/trunk/source/Expression/ClangUserExpression.cpp Wed Aug 29 16:13:06 2012
> @@ -30,6 +30,7 @@
> #include "lldb/Expression/ClangUserExpression.h"
> #include "lldb/Expression/ExpressionSourceCode.h"
> #include "lldb/Host/Host.h"
> +#include "lldb/Symbol/Block.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
>
> Modified: lldb/trunk/source/Host/common/FileSpec.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/FileSpec.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Host/common/FileSpec.cpp (original)
> +++ lldb/trunk/source/Host/common/FileSpec.cpp Wed Aug 29 16:13:06 2012
> @@ -28,6 +28,7 @@
> #include "lldb/Host/FileSpec.h"
> #include "lldb/Core/DataBufferHeap.h"
> #include "lldb/Core/DataBufferMemoryMap.h"
> +#include "lldb/Core/RegularExpression.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Utility/CleanUp.h"
> @@ -702,15 +703,14 @@
> ConstString
> FileSpec::GetFileNameExtension () const
> {
> -    const char *filename = m_filename.GetCString();
> -    if (filename == NULL)
> -        return ConstString();
> -
> -    const char* dot_pos = strrchr(filename, '.');
> -    if (dot_pos == NULL)
> -        return ConstString();
> -
> -    return ConstString(dot_pos+1);
> +    if (m_filename)
> +    {
> +        const char *filename = m_filename.GetCString();
> +        const char* dot_pos = strrchr(filename, '.');
> +        if (dot_pos && dot_pos[1] != '\0')
> +            return ConstString(dot_pos+1);
> +    }
> +    return ConstString();
> }
>
> ConstString
> @@ -944,3 +944,26 @@
>     return eEnumerateDirectoryResultNext;
> }
>
> +//------------------------------------------------------------------
> +/// Returns true if the filespec represents an implementation source
> +/// file (files with a ".c", ".cpp", ".m", ".mm" (many more)
> +/// extension).
> +///
> +/// @return
> +///     \b true if the filespec represents an implementation source
> +///     file, \b false otherwise.
> +//------------------------------------------------------------------
> +bool
> +FileSpec::IsSourceImplementationFile () const
> +{
> +    ConstString extension (GetFileNameExtension());
> +    if (extension)
> +    {
> +        static RegularExpression g_source_file_regex ("^(c|m|mm|cpp|c\\+\\+|cxx|cc|cp|s|asm|f|f77|f90|f95|f03|for|ftn|fpp|ada|adb|ads)$",
> +                                                      REG_EXTENDED | REG_ICASE);
> +        return g_source_file_regex.Execute (extension.GetCString());
> +    }
> +    return false;
> +}
> +
> +
>
> Modified: lldb/trunk/source/Host/macosx/Symbols.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Symbols.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Host/macosx/Symbols.cpp (original)
> +++ lldb/trunk/source/Host/macosx/Symbols.cpp Wed Aug 29 16:13:06 2012
> @@ -22,6 +22,7 @@
> #include "lldb/Core/DataBuffer.h"
> #include "lldb/Core/DataExtractor.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/Timer.h"
> #include "lldb/Core/UUID.h"
>
> Modified: lldb/trunk/source/Interpreter/OptionValue.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValue.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Interpreter/OptionValue.cpp (original)
> +++ lldb/trunk/source/Interpreter/OptionValue.cpp Wed Aug 29 16:13:06 2012
> @@ -347,7 +347,7 @@
> {
>     const OptionValueEnumeration *option_value = GetAsEnumeration();
>     if (option_value)
> -        option_value->GetCurrentValue();
> +        return option_value->GetCurrentValue();
>     return fail_value;
> }
>
>
> Modified: lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp (original)
> +++ lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp Wed Aug 29 16:13:06 2012
> @@ -14,6 +14,7 @@
>
> #include "lldb/Core/Address.h"
> #include "lldb/Core/DataExtractor.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Target/ExecutionContext.h"
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp Wed Aug 29 16:13:06 2012
> @@ -13,7 +13,9 @@
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Log.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/State.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/ObjCLanguageRuntime.h"
> @@ -302,6 +304,31 @@
>     return is_loaded;
> }
>
> +uint32_t
> +DynamicLoaderDarwinKernel::OSKextLoadedKextSummary::GetAddressByteSize ()
> +{
> +    if (module_sp)
> +        return module_sp->GetArchitecture().GetAddressByteSize();
> +    return 0;
> +}
> +
> +lldb::ByteOrder
> +DynamicLoaderDarwinKernel::OSKextLoadedKextSummary::GetByteOrder()
> +{
> +    if (module_sp)
> +        return module_sp->GetArchitecture().GetByteOrder();
> +    return lldb::endian::InlHostByteOrder();
> +}
> +
> +lldb_private::ArchSpec
> +DynamicLoaderDarwinKernel::OSKextLoadedKextSummary::GetArchitecture () const
> +{
> +    if (module_sp)
> +        return module_sp->GetArchitecture();
> +    return lldb_private::ArchSpec ();
> +}
> +
> +
> //----------------------------------------------------------------------
> // Load the kernel module and initialize the "m_kernel" member. Return
> // true _only_ if the kernel is loaded the first time through (subsequent
> @@ -826,3 +853,25 @@
>     return 1;
> }
>
> +lldb::ByteOrder
> +DynamicLoaderDarwinKernel::GetByteOrderFromMagic (uint32_t magic)
> +{
> +    switch (magic)
> +    {
> +        case llvm::MachO::HeaderMagic32:
> +        case llvm::MachO::HeaderMagic64:
> +            return lldb::endian::InlHostByteOrder();
> +
> +        case llvm::MachO::HeaderMagic32Swapped:
> +        case llvm::MachO::HeaderMagic64Swapped:
> +            if (lldb::endian::InlHostByteOrder() == lldb::eByteOrderBig)
> +                return lldb::eByteOrderLittle;
> +            else
> +                return lldb::eByteOrderBig;
> +
> +        default:
> +            break;
> +    }
> +    return lldb::eByteOrderInvalid;
> +}
> +
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h Wed Aug 29 16:13:06 2012
> @@ -119,26 +119,8 @@
>     }
>
>     static lldb::ByteOrder
> -    GetByteOrderFromMagic (uint32_t magic)
> -    {
> -        switch (magic)
> -        {
> -            case llvm::MachO::HeaderMagic32:
> -            case llvm::MachO::HeaderMagic64:
> -                return lldb::endian::InlHostByteOrder();
> -
> -            case llvm::MachO::HeaderMagic32Swapped:
> -            case llvm::MachO::HeaderMagic64Swapped:
> -                if (lldb::endian::InlHostByteOrder() == lldb::eByteOrderBig)
> -                    return lldb::eByteOrderLittle;
> -                else
> -                    return lldb::eByteOrderBig;
> +    GetByteOrderFromMagic (uint32_t magic);
>
> -            default:
> -                break;
> -        }
> -        return lldb::eByteOrderInvalid;
> -    }
>     enum
>     {
>         KERNEL_MODULE_MAX_NAME = 64u,
> @@ -229,28 +211,13 @@
>         }
>
>         uint32_t
> -        GetAddressByteSize ()
> -        {
> -            if (module_sp)
> -                return module_sp->GetArchitecture().GetAddressByteSize();
> -            return 0;
> -        }
> +        GetAddressByteSize ();
>
>         lldb::ByteOrder
> -        GetByteOrder()
> -        {
> -            if (module_sp)
> -                return module_sp->GetArchitecture().GetByteOrder();
> -            return lldb::endian::InlHostByteOrder();
> -        }
> +        GetByteOrder();
>
>         lldb_private::ArchSpec
> -        GetArchitecture () const
> -        {
> -            if (module_sp)
> -                return module_sp->GetArchitecture();
> -            return lldb_private::ArchSpec ();
> -        }
> +        GetArchitecture () const;
>
>         void
>         PutToLog (lldb_private::Log *log) const;
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp Wed Aug 29 16:13:06 2012
> @@ -15,8 +15,11 @@
> #include "lldb/Core/DataBufferHeap.h"
> #include "lldb/Core/Log.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/State.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/ObjCLanguageRuntime.h"
> #include "lldb/Target/RegisterContext.h"
> @@ -1771,3 +1774,50 @@
>     return 1;
> }
>
> +uint32_t
> +DynamicLoaderMacOSXDYLD::AddrByteSize()
> +{
> +    switch (m_dyld.header.magic)
> +    {
> +        case llvm::MachO::HeaderMagic32:
> +        case llvm::MachO::HeaderMagic32Swapped:
> +            return 4;
> +
> +        case llvm::MachO::HeaderMagic64:
> +        case llvm::MachO::HeaderMagic64Swapped:
> +            return 8;
> +
> +        default:
> +            break;
> +    }
> +    return 0;
> +}
> +
> +lldb::ByteOrder
> +DynamicLoaderMacOSXDYLD::GetByteOrderFromMagic (uint32_t magic)
> +{
> +    switch (magic)
> +    {
> +        case llvm::MachO::HeaderMagic32:
> +        case llvm::MachO::HeaderMagic64:
> +            return lldb::endian::InlHostByteOrder();
> +
> +        case llvm::MachO::HeaderMagic32Swapped:
> +        case llvm::MachO::HeaderMagic64Swapped:
> +            if (lldb::endian::InlHostByteOrder() == lldb::eByteOrderBig)
> +                return lldb::eByteOrderLittle;
> +            else
> +                return lldb::eByteOrderBig;
> +
> +        default:
> +            break;
> +    }
> +    return lldb::eByteOrderInvalid;
> +}
> +
> +lldb::ByteOrder
> +DynamicLoaderMacOSXDYLD::DYLDImageInfo::GetByteOrder()
> +{
> +    return DynamicLoaderMacOSXDYLD::GetByteOrderFromMagic(header.magic);
> +}
> +
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h Wed Aug 29 16:13:06 2012
> @@ -118,45 +118,10 @@
>                          lldb::user_id_t break_loc_id);
>
>     uint32_t
> -    AddrByteSize()
> -    {
> -        switch (m_dyld.header.magic)
> -        {
> -            case llvm::MachO::HeaderMagic32:
> -            case llvm::MachO::HeaderMagic32Swapped:
> -                return 4;
> -
> -            case llvm::MachO::HeaderMagic64:
> -            case llvm::MachO::HeaderMagic64Swapped:
> -                return 8;
> -
> -            default:
> -                break;
> -        }
> -        return 0;
> -    }
> +    AddrByteSize();
>
>     static lldb::ByteOrder
> -    GetByteOrderFromMagic (uint32_t magic)
> -    {
> -        switch (magic)
> -        {
> -            case llvm::MachO::HeaderMagic32:
> -            case llvm::MachO::HeaderMagic64:
> -                return lldb::endian::InlHostByteOrder();
> -
> -            case llvm::MachO::HeaderMagic32Swapped:
> -            case llvm::MachO::HeaderMagic64Swapped:
> -                if (lldb::endian::InlHostByteOrder() == lldb::eByteOrderBig)
> -                    return lldb::eByteOrderLittle;
> -                else
> -                    return lldb::eByteOrderBig;
> -
> -            default:
> -                break;
> -        }
> -        return lldb::eByteOrderInvalid;
> -    }
> +    GetByteOrderFromMagic (uint32_t magic);
>
>     bool
>     ReadMachHeader (lldb::addr_t addr,
> @@ -269,26 +234,7 @@
>         }
>
>         lldb::ByteOrder
> -        GetByteOrder()
> -        {
> -            switch (header.magic)
> -            {
> -            case llvm::MachO::HeaderMagic32:        // MH_MAGIC
> -            case llvm::MachO::HeaderMagic64:        // MH_MAGIC_64
> -                return lldb::endian::InlHostByteOrder();
> -
> -            case llvm::MachO::HeaderMagic32Swapped: // MH_CIGAM
> -            case llvm::MachO::HeaderMagic64Swapped: // MH_CIGAM_64
> -                if (lldb::endian::InlHostByteOrder() == lldb::eByteOrderLittle)
> -                    return lldb::eByteOrderBig;
> -                else
> -                    return lldb::eByteOrderLittle;
> -            default:
> -                assert (!"invalid header.magic value");
> -                break;
> -            }
> -            return lldb::endian::InlHostByteOrder();
> -        }
> +        GetByteOrder();
>
>         lldb_private::ArchSpec
>         GetArchitecture () const
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp Wed Aug 29 16:13:06 2012
> @@ -13,6 +13,7 @@
> #include "lldb/Core/ArchSpec.h"
> #include "lldb/Core/Error.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/Target.h"
>
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp Wed Aug 29 16:13:06 2012
> @@ -12,6 +12,10 @@
> // Other libraries and framework includes
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> +#include "lldb/Core/Section.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/Target.h"
> #include "lldb/Target/Thread.h"
>
> Modified: lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp (original)
> +++ lldb/trunk/source/Plugins/DynamicLoader/Static/DynamicLoaderStatic.cpp Wed Aug 29 16:13:06 2012
> @@ -9,6 +9,8 @@
>
> #include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Section.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/Target.h"
>
> #include "DynamicLoaderStatic.h"
>
> Modified: lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp (original)
> +++ lldb/trunk/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp Wed Aug 29 16:13:06 2012
> @@ -19,6 +19,8 @@
> #include "lldb/Core/ValueObject.h"
> #include "lldb/Core/ValueObjectMemory.h"
> #include "lldb/Symbol/ClangASTContext.h"
> +#include "lldb/Symbol/Symbol.h"
> +#include "lldb/Symbol/TypeList.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
> #include "lldb/Target/StopInfo.h"
>
> Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp (original)
> +++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp Wed Aug 29 16:13:06 2012
> @@ -25,11 +25,13 @@
> #include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/Scalar.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/ValueObjectConstResult.h"
> #include "lldb/Expression/ClangFunction.h"
> #include "lldb/Expression/ClangUtilityFunction.h"
> #include "lldb/Symbol/ClangASTContext.h"
> +#include "lldb/Symbol/Symbol.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
>
> Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCSymbolVendor.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCSymbolVendor.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCSymbolVendor.cpp (original)
> +++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCSymbolVendor.cpp Wed Aug 29 16:13:06 2012
> @@ -10,6 +10,7 @@
> #include "AppleObjCSymbolVendor.h"
>
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/Target.h"
>
>
> Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp (original)
> +++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp Wed Aug 29 16:13:06 2012
> @@ -26,6 +26,7 @@
> #include "lldb/Expression/ClangUtilityFunction.h"
> #include "lldb/Host/FileSpec.h"
> #include "lldb/Symbol/ClangASTContext.h"
> +#include "lldb/Symbol/Symbol.h"
> #include "lldb/Target/ObjCLanguageRuntime.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
>
> Modified: lldb/trunk/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp (original)
> +++ lldb/trunk/source/Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.cpp Wed Aug 29 16:13:06 2012
> @@ -15,7 +15,6 @@
> #include "lldb/Core/ArchSpec.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> -#include "lldb/Core/RegularExpression.h"
> #include "lldb/Core/Timer.h"
> #include "lldb/Host/Mutex.h"
> #include "lldb/Symbol/ObjectFile.h"
>
> Modified: lldb/trunk/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp (original)
> +++ lldb/trunk/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,8 @@
> // Project includes
> #include "lldb/Core/Error.h"
> #include "lldb/Core/Debugger.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Host/Host.h"
>
>
> Modified: lldb/trunk/source/Plugins/Platform/Linux/PlatformLinux.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Linux/PlatformLinux.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Platform/Linux/PlatformLinux.cpp (original)
> +++ lldb/trunk/source/Plugins/Platform/Linux/PlatformLinux.cpp Wed Aug 29 16:13:06 2012
> @@ -20,6 +20,7 @@
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/ModuleList.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Host/FileSpec.h"
>
> Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp (original)
> +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp Wed Aug 29 16:13:06 2012
> @@ -16,7 +16,10 @@
> #include "lldb/Breakpoint/BreakpointLocation.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Error.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Host/Host.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/Target.h"
>
> using namespace lldb;
>
> Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp (original)
> +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformRemoteiOS.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,7 @@
> #include "lldb/Core/Error.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/ModuleList.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Host/FileSpec.h"
>
> Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp (original)
> +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,7 @@
> #include "lldb/Core/Error.h"
> #include "lldb/Core/Module.h"
> #include "lldb/Core/ModuleList.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Host/FileSpec.h"
>
> Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp Wed Aug 29 16:13:06 2012
> @@ -16,8 +16,10 @@
> #include "lldb/Core/ConnectionFileDescriptor.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/State.h"
> #include "lldb/Host/Host.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/Target.h"
> #include "lldb/Target/Thread.h"
>
>
> Modified: lldb/trunk/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp Wed Aug 29 16:13:06 2012
> @@ -10,6 +10,7 @@
> #include "InferiorCallPOSIX.h"
> #include "lldb/Core/StreamFile.h"
> #include "lldb/Core/ValueObject.h"
> +#include "lldb/Symbol/ClangASTContext.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
>
> Modified: lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/Utility/RegisterContextLLDB.cpp Wed Aug 29 16:13:06 2012
> @@ -13,13 +13,15 @@
> #include "lldb/Core/AddressRange.h"
> #include "lldb/Core/DataBufferHeap.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/RegisterValue.h"
> #include "lldb/Core/Value.h"
> +#include "lldb/Expression/DWARFExpression.h"
> #include "lldb/Symbol/FuncUnwinders.h"
> #include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolContext.h"
> #include "lldb/Symbol/Symbol.h"
> -#include "lldb/Expression/DWARFExpression.h"
> #include "lldb/Target/ABI.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
>
> Modified: lldb/trunk/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/Utility/UnwindMacOSXFrameBackchain.cpp Wed Aug 29 16:13:06 2012
> @@ -12,6 +12,9 @@
> // Other libraries and framework includes
> // Project includes
> #include "lldb/Core/ArchSpec.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Symbol.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/Target.h"
>
> Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Wed Aug 29 16:13:06 2012
> @@ -31,6 +31,7 @@
> #include "lldb/Host/FileSpec.h"
> #include "lldb/Core/InputReader.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/StreamFile.h"
>
> Modified: lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.cpp Wed Aug 29 16:13:06 2012
> @@ -18,8 +18,12 @@
> // Other libraries and framework includes
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/State.h"
> #include "lldb/Host/Host.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/Target.h"
> #include "lldb/Target/Thread.h"
>
> @@ -452,3 +456,8 @@
> }
>
>
> +lldb_private::ObjectFile *
> +ProcessMachCore::GetCoreObjectFile ()
> +{
> +    return m_core_module_sp->GetObjectFile();
> +}
>
> Modified: lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.h (original)
> +++ lldb/trunk/source/Plugins/Process/mach-core/ProcessMachCore.h Wed Aug 29 16:13:06 2012
> @@ -121,10 +121,7 @@
>                       lldb_private::ThreadList &new_thread_list);
>
>     lldb_private::ObjectFile *
> -    GetCoreObjectFile ()
> -    {
> -        return m_core_module_sp->GetObjectFile();
> -    }
> +    GetCoreObjectFile ();
> private:
>     bool
>     GetDynamicLoaderAddress (lldb::addr_t addr);
>
> Modified: lldb/trunk/source/Plugins/Process/mach-core/ThreadMachCore.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/mach-core/ThreadMachCore.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/Process/mach-core/ThreadMachCore.cpp (original)
> +++ lldb/trunk/source/Plugins/Process/mach-core/ThreadMachCore.cpp Wed Aug 29 16:13:06 2012
> @@ -16,6 +16,7 @@
> #include "lldb/Core/DataExtractor.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/State.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
> #include "lldb/Target/StopInfo.h"
>
> Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
> +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Wed Aug 29 16:13:06 2012
> @@ -229,7 +229,7 @@
> TypeList *
> SymbolFileDWARF::GetTypeList ()
> {
> -    if (m_debug_map_symfile)
> +    if (GetDebugMapSymfile ())
>         return m_debug_map_symfile->GetTypeList();
>     return m_obj_file->GetModule()->GetTypeList();
>
> @@ -263,6 +263,7 @@
> SymbolFileDWARF::SymbolFileDWARF(ObjectFile* objfile) :
>     SymbolFile (objfile),
>     UserID (0),  // Used by SymbolFileDWARFDebugMap to when this class parses .o files to contain the .o file index/ID
> +    m_debug_map_module_wp (),
>     m_debug_map_symfile (NULL),
>     m_clang_tu_decl (NULL),
>     m_flags(),
> @@ -321,7 +322,7 @@
> UniqueDWARFASTTypeMap &
> SymbolFileDWARF::GetUniqueDWARFASTTypeMap ()
> {
> -    if (m_debug_map_symfile)
> +    if (GetDebugMapSymfile ())
>         return m_debug_map_symfile->GetUniqueDWARFASTTypeMap ();
>     return m_unique_ast_type_map;
> }
> @@ -329,7 +330,7 @@
> ClangASTContext &
> SymbolFileDWARF::GetClangASTContext ()
> {
> -    if (m_debug_map_symfile)
> +    if (GetDebugMapSymfile ())
>         return m_debug_map_symfile->GetClangASTContext ();
>
>     ClangASTContext &ast = m_obj_file->GetModule()->GetClangASTContext();
> @@ -659,11 +660,27 @@
> }
>
> DWARFCompileUnit*
> -SymbolFileDWARF::GetDWARFCompileUnitForUID(lldb::user_id_t cu_uid)
> +SymbolFileDWARF::GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit)
> {
>     DWARFDebugInfo* info = DebugInfo();
> -    if (info && UserIDMatches(cu_uid))
> -        return info->GetCompileUnit((dw_offset_t)cu_uid).get();
> +    if (info)
> +    {
> +        if (GetDebugMapSymfile ())
> +        {
> +            // The debug map symbol file made the compile units for this DWARF
> +            // file which is .o file with DWARF in it, and we should have
> +            // only 1 compile unit which is at offset zero in the DWARF.
> +            // TODO: modify to support LTO .o files where each .o file might
> +            // have multiple DW_TAG_compile_unit tags.
> +            return info->GetCompileUnit(0).get();
> +        }
> +        else
> +        {
> +            // Just a normal DWARF file whose user ID for the compile unit is
> +            // the DWARF offset itself
> +            return info->GetCompileUnit((dw_offset_t)comp_unit->GetID()).get();
> +        }
> +    }
>     return NULL;
> }
>
> @@ -704,59 +721,58 @@
>         }
>         else
>         {
> -            ModuleSP module_sp (m_obj_file->GetModule());
> -            if (module_sp)
> +            if (GetDebugMapSymfile ())
> +            {
> +                // Let the debug map create the compile unit
> +                cu_sp = m_debug_map_symfile->GetCompileUnit(this);
> +                dwarf_cu->SetUserData(cu_sp.get());
> +            }
> +            else
>             {
> -                const DWARFDebugInfoEntry * cu_die = dwarf_cu->GetCompileUnitDIEOnly ();
> -                if (cu_die)
> +                ModuleSP module_sp (m_obj_file->GetModule());
> +                if (module_sp)
>                 {
> -                    const char * cu_die_name = cu_die->GetName(this, dwarf_cu);
> -                    const char * cu_comp_dir = cu_die->GetAttributeValueAsString(this, dwarf_cu, DW_AT_comp_dir, NULL);
> -                    LanguageType cu_language = (LanguageType)cu_die->GetAttributeValueAsUnsigned(this, dwarf_cu, DW_AT_language, 0);
> -                    if (cu_die_name)
> -                    {
> -                        std::string ramapped_file;
> -                        FileSpec cu_file_spec;
> -
> -                        if (cu_die_name[0] == '/' || cu_comp_dir == NULL || cu_comp_dir[0] == '\0')
> -                        {
> -                            // If we have a full path to the compile unit, we don't need to resolve
> -                            // the file.  This can be expensive e.g. when the source files are NFS mounted.
> -                            if (module_sp->RemapSourceFile(cu_die_name, ramapped_file))
> -                                cu_file_spec.SetFile (ramapped_file.c_str(), false);
> -                            else
> -                                cu_file_spec.SetFile (cu_die_name, false);
> -                        }
> -                        else
> -                        {
> -                            std::string fullpath(cu_comp_dir);
> -                            if (*fullpath.rbegin() != '/')
> -                                fullpath += '/';
> -                            fullpath += cu_die_name;
> -                            if (module_sp->RemapSourceFile (fullpath.c_str(), ramapped_file))
> -                                cu_file_spec.SetFile (ramapped_file.c_str(), false);
> +                    const DWARFDebugInfoEntry * cu_die = dwarf_cu->GetCompileUnitDIEOnly ();
> +                    if (cu_die)
> +                    {
> +                        const char * cu_die_name = cu_die->GetName(this, dwarf_cu);
> +                        const char * cu_comp_dir = cu_die->GetAttributeValueAsString(this, dwarf_cu, DW_AT_comp_dir, NULL);
> +                        LanguageType cu_language = (LanguageType)cu_die->GetAttributeValueAsUnsigned(this, dwarf_cu, DW_AT_language, 0);
> +                        if (cu_die_name)
> +                        {
> +                            std::string ramapped_file;
> +                            FileSpec cu_file_spec;
> +
> +                            if (cu_die_name[0] == '/' || cu_comp_dir == NULL || cu_comp_dir[0] == '\0')
> +                            {
> +                                // If we have a full path to the compile unit, we don't need to resolve
> +                                // the file.  This can be expensive e.g. when the source files are NFS mounted.
> +                                if (module_sp->RemapSourceFile(cu_die_name, ramapped_file))
> +                                    cu_file_spec.SetFile (ramapped_file.c_str(), false);
> +                                else
> +                                    cu_file_spec.SetFile (cu_die_name, false);
> +                            }
>                             else
> -                                cu_file_spec.SetFile (fullpath.c_str(), false);
> -                        }
> -
> -                        cu_sp.reset(new CompileUnit (module_sp,
> -                                                     dwarf_cu,
> -                                                     cu_file_spec,
> -                                                     MakeUserID(dwarf_cu->GetOffset()),
> -                                                     cu_language));
> -                        if (cu_sp)
> -                        {
> -                            dwarf_cu->SetUserData(cu_sp.get());
> -
> -                            if (m_debug_map_symfile)
>                             {
> -                                // Let the symbol file register the compile unit with
> -                                // the symbol vendor using its compile unit index
> -                                // when we are doing DWARF in .o files + debug map
> -                                m_debug_map_symfile->SetCompileUnit(this, cu_sp);
> +                                std::string fullpath(cu_comp_dir);
> +                                if (*fullpath.rbegin() != '/')
> +                                    fullpath += '/';
> +                                fullpath += cu_die_name;
> +                                if (module_sp->RemapSourceFile (fullpath.c_str(), ramapped_file))
> +                                    cu_file_spec.SetFile (ramapped_file.c_str(), false);
> +                                else
> +                                    cu_file_spec.SetFile (fullpath.c_str(), false);
>                             }
> -                            else
> +
> +                            cu_sp.reset(new CompileUnit (module_sp,
> +                                                         dwarf_cu,
> +                                                         cu_file_spec,
> +                                                         MakeUserID(dwarf_cu->GetOffset()),
> +                                                         cu_language));
> +                            if (cu_sp)
>                             {
> +                                dwarf_cu->SetUserData(cu_sp.get());
> +
>                                 // Figure out the compile unit index if we weren't given one
>                                 if (cu_idx == UINT32_MAX)
>                                     DebugInfo()->GetCompileUnit(dwarf_cu->GetOffset(), &cu_idx);
> @@ -897,18 +913,33 @@
>     return NULL;
> }
>
> +lldb::LanguageType
> +SymbolFileDWARF::ParseCompileUnitLanguage (const SymbolContext& sc)
> +{
> +    assert (sc.comp_unit);
> +    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
> +    if (dwarf_cu)
> +    {
> +        const DWARFDebugInfoEntry *die = dwarf_cu->GetCompileUnitDIEOnly();
> +        const uint32_t language = die->GetAttributeValueAsUnsigned(this, dwarf_cu, DW_AT_language, 0);
> +        if (language)
> +            return (lldb::LanguageType)language;
> +    }
> +    return eLanguageTypeUnknown;
> +}
> +
> size_t
> SymbolFileDWARF::ParseCompileUnitFunctions(const SymbolContext &sc)
> {
>     assert (sc.comp_unit);
>     size_t functions_added = 0;
> -    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnitForUID(sc.comp_unit->GetID());
> +    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
>     if (dwarf_cu)
>     {
>         DWARFDIECollection function_dies;
> -        const size_t num_funtions = dwarf_cu->AppendDIEsWithTag (DW_TAG_subprogram, function_dies);
> +        const size_t num_functions = dwarf_cu->AppendDIEsWithTag (DW_TAG_subprogram, function_dies);
>         size_t func_idx;
> -        for (func_idx = 0; func_idx < num_funtions; ++func_idx)
> +        for (func_idx = 0; func_idx < num_functions; ++func_idx)
>         {
>             const DWARFDebugInfoEntry *die = function_dies.GetDIEPtrAtIndex(func_idx);
>             if (sc.comp_unit->FindFunctionByUID (MakeUserID(die->GetOffset())).get() == NULL)
> @@ -926,7 +957,7 @@
> SymbolFileDWARF::ParseCompileUnitSupportFiles (const SymbolContext& sc, FileSpecList& support_files)
> {
>     assert (sc.comp_unit);
> -    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnitForUID(sc.comp_unit->GetID());
> +    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
>     assert (dwarf_cu);
>     const DWARFDebugInfoEntry * cu_die = dwarf_cu->GetCompileUnitDIEOnly();
>
> @@ -1129,7 +1160,7 @@
>     if (sc.comp_unit->GetLineTable() != NULL)
>         return true;
>
> -    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnitForUID(sc.comp_unit->GetID());
> +    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
>     if (dwarf_cu)
>     {
>         const DWARFDebugInfoEntry *dwarf_cu_die = dwarf_cu->GetCompileUnitDIEOnly();
> @@ -1146,7 +1177,7 @@
>                         m_obj_file->GetSectionList(),
>                         0,
>                         0,
> -                        m_debug_map_symfile != NULL,
> +                        GetDebugMapSymfile () != NULL,
>                         false,
>                         DWARFDebugLine::Row(),
>                         SectionSP(),
> @@ -2462,7 +2493,8 @@
>             for (cu_idx = 0; (dwarf_cu = debug_info->GetCompileUnitAtIndex(cu_idx)) != NULL; ++cu_idx)
>             {
>                 CompileUnit *dc_cu = GetCompUnitForDWARFCompUnit(dwarf_cu, cu_idx);
> -                bool file_spec_matches_cu_file_spec = dc_cu != NULL && FileSpec::Compare(file_spec, *dc_cu, false) == 0;
> +                const bool full_match = file_spec.GetDirectory();
> +                bool file_spec_matches_cu_file_spec = dc_cu != NULL && FileSpec::Equal(file_spec, *dc_cu, full_match);
>                 if (check_inlines || file_spec_matches_cu_file_spec)
>                 {
>                     SymbolContext sc (m_obj_file->GetModule());
> @@ -4339,7 +4371,7 @@
>                 }
>             }
>         }
> -        if (m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolNo && m_debug_map_symfile)
> +        if (m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolNo && GetDebugMapSymfile ())
>             return m_debug_map_symfile->Supports_DW_AT_APPLE_objc_complete_type (this);
>     }
>     return m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolYes;
> @@ -5399,7 +5431,7 @@
>                             // know it is false), so the real definition is in here somewhere
>                             type_sp = FindCompleteObjCDefinitionTypeForDIE (die, type_name_const_str, true);
>
> -                            if (!type_sp && m_debug_map_symfile)
> +                            if (!type_sp && GetDebugMapSymfile ())
>                             {
>                                 // We weren't able to find a full declaration in
>                                 // this DWARF, see if we have a declaration anywhere
> @@ -5453,7 +5485,7 @@
>                         //type_sp = FindDefinitionTypeForDIE (dwarf_cu, die, type_name_const_str);
>                         type_sp = FindDefinitionTypeForDWARFDeclContext (die_decl_ctx);
>
> -                        if (!type_sp && m_debug_map_symfile)
> +                        if (!type_sp && GetDebugMapSymfile ())
>                         {
>                             // We weren't able to find a full declaration in
>                             // this DWARF, see if we have a declaration anywhere
> @@ -6333,7 +6365,7 @@
> {
>     assert(sc.comp_unit && sc.function);
>     size_t functions_added = 0;
> -    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnitForUID(sc.comp_unit->GetID());
> +    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
>     if (dwarf_cu)
>     {
>         dw_offset_t function_die_offset = sc.function->GetID();
> @@ -6354,7 +6386,7 @@
>     // At least a compile unit must be valid
>     assert(sc.comp_unit);
>     size_t types_added = 0;
> -    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnitForUID(sc.comp_unit->GetID());
> +    DWARFCompileUnit* dwarf_cu = GetDWARFCompileUnit(sc.comp_unit);
>     if (dwarf_cu)
>     {
>         if (sc.function)
> @@ -6619,7 +6651,7 @@
>                         {
>                             scope = eValueTypeVariableGlobal;
>
> -                            if (m_debug_map_symfile)
> +                            if (GetDebugMapSymfile ())
>                             {
>                                 // When leaving the DWARF in the .o files on darwin,
>                                 // when we have a global variable that wasn't initialized,
> @@ -7153,4 +7185,20 @@
> }
>
>
> +SymbolFileDWARFDebugMap *
> +SymbolFileDWARF::GetDebugMapSymfile ()
> +{
> +    if (m_debug_map_symfile == NULL && !m_debug_map_module_wp.expired())
> +    {
> +        lldb::ModuleSP module_sp (m_debug_map_module_wp.lock());
> +        if (module_sp)
> +        {
> +            SymbolVendor *sym_vendor = module_sp->GetSymbolVendor();
> +            if (sym_vendor)
> +                m_debug_map_symfile = (SymbolFileDWARFDebugMap *)sym_vendor->GetSymbolFile();
> +        }
> +    }
> +    return m_debug_map_symfile;
> +}
> +
>
>
> Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h (original)
> +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h Wed Aug 29 16:13:06 2012
> @@ -43,6 +43,7 @@
> //----------------------------------------------------------------------
> // Forward Declarations for this DWARF plugin
> //----------------------------------------------------------------------
> +class DebugMapModule;
> class DWARFAbbreviationDeclaration;
> class DWARFAbbreviationDeclarationSet;
> class DWARFileUnit;
> @@ -62,7 +63,7 @@
> {
> public:
>     friend class SymbolFileDWARFDebugMap;
> -
> +    friend class DebugMapModule;
>     //------------------------------------------------------------------
>     // Static Functions
>     //------------------------------------------------------------------
> @@ -95,6 +96,7 @@
>     virtual uint32_t        GetNumCompileUnits();
>     virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index);
>
> +    virtual lldb::LanguageType ParseCompileUnitLanguage (const lldb_private::SymbolContext& sc);
>     virtual size_t          ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
>     virtual bool            ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc);
>     virtual bool            ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList& support_files);
> @@ -301,7 +303,7 @@
>
>     DISALLOW_COPY_AND_ASSIGN (SymbolFileDWARF);
>     lldb::CompUnitSP        ParseCompileUnit (DWARFCompileUnit* dwarf_cu, uint32_t cu_idx);
> -    DWARFCompileUnit*       GetDWARFCompileUnitForUID(lldb::user_id_t cu_uid);
> +    DWARFCompileUnit*       GetDWARFCompileUnit(lldb_private::CompileUnit *comp_unit);
>     DWARFCompileUnit*       GetNextUnparsedDWARFCompileUnit(DWARFCompileUnit* prev_cu);
>     lldb_private::CompileUnit*      GetCompUnitForDWARFCompUnit(DWARFCompileUnit* dwarf_cu, uint32_t cu_idx = UINT32_MAX);
>     bool                    GetFunction (DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry* func_die, lldb_private::SymbolContext& sc);
> @@ -440,10 +442,13 @@
>
>     void                    DumpIndexes();
>
> -    void                    SetDebugMapSymfile (SymbolFileDWARFDebugMap *debug_map_symfile)
> +    void                    SetDebugMapModule (const lldb::ModuleSP &module_sp)
>                             {
> -                                m_debug_map_symfile = debug_map_symfile;
> +                                m_debug_map_module_wp = module_sp;
>                             }
> +
> +    SymbolFileDWARFDebugMap *
> +                            GetDebugMapSymfile ();
>
>     const DWARFDebugInfoEntry *
>                             FindBlockContainingSpecification (dw_offset_t func_die_offset,
> @@ -532,6 +537,7 @@
>                                 DWARFCompileUnit* dst_cu,
>                                 const DWARFDebugInfoEntry *dst_class_die);
>
> +    lldb::ModuleWP                  m_debug_map_module_wp;
>     SymbolFileDWARFDebugMap *       m_debug_map_symfile;
>     clang::TranslationUnitDecl *    m_clang_tu_decl;
>     lldb_private::Flags             m_flags;
>
> Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp (original)
> +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp Wed Aug 29 16:13:06 2012
> @@ -13,10 +13,14 @@
> #include "lldb/Core/ModuleList.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/RegularExpression.h"
> +#include "lldb/Core/Section.h"
> +#if defined(DEBUG_OSO_DMAP)
> #include "lldb/Core/StreamFile.h"
> +#endif
> #include "lldb/Core/Timer.h"
>
> #include "lldb/Symbol/ClangExternalASTSourceCallbacks.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolVendor.h"
> #include "lldb/Symbol/VariableList.h"
> @@ -27,6 +31,248 @@
> using namespace lldb;
> using namespace lldb_private;
>
> +// Subclass lldb_private::Module so we can intercept the "Module::GetObjectFile()"
> +// (so we can fixup the object file sections) and also for "Module::GetSymbolVendor()"
> +// (so we can fixup the symbol file id.
> +
> +class DebugMapModule : public Module
> +{
> +public:
> +    DebugMapModule (const ModuleSP &exe_module_sp,
> +                    uint32_t cu_idx,
> +                    const FileSpec& file_spec,
> +                    const ArchSpec& arch,
> +                    const ConstString *object_name,
> +                    off_t object_offset) :
> +        Module (file_spec, arch, object_name, object_offset),
> +        m_exe_module_wp (exe_module_sp),
> +        m_cu_idx (cu_idx)
> +    {
> +    }
> +
> +    virtual ObjectFile *
> +    GetObjectFile ()
> +    {
> +        Mutex::Locker locker (m_mutex);
> +        if (m_did_load_objfile == false)
> +        {
> +            ModuleSP exe_module_sp (m_exe_module_wp.lock());
> +            if (exe_module_sp)
> +            {
> +                ObjectFile *exe_objfile = exe_module_sp->GetObjectFile();
> +                ObjectFile *oso_objfile = Module::GetObjectFile();
> +                SymbolVendor *exe_sym_vendor = exe_module_sp->GetSymbolVendor();
> +
> +                if (exe_objfile && oso_objfile && exe_sym_vendor)
> +                {
> +                    SymbolFileDWARFDebugMap *exe_symfile = (SymbolFileDWARFDebugMap *)exe_sym_vendor->GetSymbolFile();
> +                    if (exe_symfile)
> +                    {
> +                        SymbolFileDWARFDebugMap::CompileUnitInfo *comp_unit_info = exe_symfile->GetCompUnitInfo (this);
> +                        if (comp_unit_info)
> +                        {
> +                            // Set the ID of the symbol file DWARF to the index of the OSO
> +                            // shifted left by 32 bits to provide a unique prefix for any
> +                            // UserID's that get created in the symbol file.
> +                            //comp_unit_info->exe_sections_sp.reset(new SectionList);
> +
> +                            Symtab *exe_symtab = exe_objfile->GetSymtab();
> +                            ModuleSP oso_module_sp (oso_objfile->GetModule());
> +                            Symtab *oso_symtab = oso_objfile->GetSymtab();
> +                            //#define DEBUG_OSO_DMAP    // Do not check in with this defined...
> +#if defined(DEBUG_OSO_DMAP)
> +                            StreamFile s(stdout);
> +                            s << "OSO symtab:\n";
> +                            oso_symtab->Dump(&s, NULL);
> +                            s << "OSO sections before:\n";
> +                            oso_objfile->GetSectionList()->Dump(&s, NULL, true);
> +#endif
> +
> +                            ///const uint32_t fun_resolve_flags = SymbolContext::Module | eSymbolContextCompUnit | eSymbolContextFunction;
> +                            //SectionList *oso_sections = oso_objfile->Sections();
> +                            // Now we need to make sections that map from zero based object
> +                            // file addresses to where things eneded up in the main executable.
> +
> +                            assert (comp_unit_info->first_symbol_index != UINT32_MAX);
> +                            // End index is one past the last valid symbol index
> +                            const uint32_t oso_end_idx = comp_unit_info->last_symbol_index + 1;
> +                            uint32_t sect_id = 0x10000;
> +                            for (uint32_t idx = comp_unit_info->first_symbol_index + 2; // Skip the N_SO and N_OSO
> +                                 idx < oso_end_idx;
> +                                 ++idx)
> +                            {
> +                                Symbol *exe_symbol = exe_symtab->SymbolAtIndex(idx);
> +                                if (exe_symbol)
> +                                {
> +                                    if (exe_symbol->IsDebug() == false)
> +                                        continue;
> +
> +                                    switch (exe_symbol->GetType())
> +                                    {
> +                                        default:
> +                                            break;
> +
> +                                        case eSymbolTypeCode:
> +                                        {
> +                                            // For each N_FUN, or function that we run into in the debug map
> +                                            // we make a new section that we add to the sections found in the
> +                                            // .o file. This new section has the file address set to what the
> +                                            // addresses are in the .o file, and the load address is adjusted
> +                                            // to match where it ended up in the final executable! We do this
> +                                            // before we parse any dwarf info so that when it goes get parsed
> +                                            // all section/offset addresses that get registered will resolve
> +                                            // correctly to the new addresses in the main executable.
> +
> +                                            // First we find the original symbol in the .o file's symbol table
> +                                            Symbol *oso_fun_symbol = oso_symtab->FindFirstSymbolWithNameAndType(exe_symbol->GetMangled().GetName(Mangled::ePreferMangled), eSymbolTypeCode, Symtab::eDebugNo, Symtab::eVisibilityAny);
> +                                            if (oso_fun_symbol)
> +                                            {
> +                                                // If we found the symbol, then we
> +                                                SectionSP exe_fun_section (exe_symbol->GetAddress().GetSection());
> +                                                SectionSP oso_fun_section (oso_fun_symbol->GetAddress().GetSection());
> +                                                if (oso_fun_section)
> +                                                {
> +                                                    // Now we create a section that we will add as a child of the
> +                                                    // section in which the .o symbol (the N_FUN) exists.
> +
> +                                                    // We use the exe_symbol size because the one in the .o file
> +                                                    // will just be a symbol with no size, and the exe_symbol
> +                                                    // size will reflect any size changes (ppc has been known to
> +                                                    // shrink function sizes when it gets rid of jump islands that
> +                                                    // aren't needed anymore).
> +                                                    SectionSP oso_fun_section_sp (new Section (oso_fun_symbol->GetAddress().GetSection(),
> +                                                                                               oso_module_sp,                         // Module (the .o file)
> +                                                                                               sect_id++,                          // Section ID starts at 0x10000 and increments so the section IDs don't overlap with the standard mach IDs
> +                                                                                               exe_symbol->GetMangled().GetName(Mangled::ePreferMangled), // Name the section the same as the symbol for which is was generated!
> +                                                                                               eSectionTypeDebug,
> +                                                                                               oso_fun_symbol->GetAddress().GetOffset(),  // File VM address offset in the current section
> +                                                                                               exe_symbol->GetByteSize(),          // File size (we need the size from the executable)
> +                                                                                               0, 0, 0));
> +
> +                                                    oso_fun_section_sp->SetLinkedLocation (exe_fun_section,
> +                                                                                           exe_symbol->GetAddress().GetFileAddress() - exe_fun_section->GetFileAddress());
> +                                                    oso_fun_section->GetChildren().AddSection(oso_fun_section_sp);
> +                                                }
> +                                            }
> +                                        }
> +                                            break;
> +
> +                                        case eSymbolTypeData:
> +                                        {
> +                                            // For each N_GSYM we remap the address for the global by making
> +                                            // a new section that we add to the sections found in the .o file.
> +                                            // This new section has the file address set to what the
> +                                            // addresses are in the .o file, and the load address is adjusted
> +                                            // to match where it ended up in the final executable! We do this
> +                                            // before we parse any dwarf info so that when it goes get parsed
> +                                            // all section/offset addresses that get registered will resolve
> +                                            // correctly to the new addresses in the main executable. We
> +                                            // initially set the section size to be 1 byte, but will need to
> +                                            // fix up these addresses further after all globals have been
> +                                            // parsed to span the gaps, or we can find the global variable
> +                                            // sizes from the DWARF info as we are parsing.
> +
> +                                            // Next we find the non-stab entry that corresponds to the N_GSYM in the .o file
> +                                            Symbol *oso_gsym_symbol = oso_symtab->FindFirstSymbolWithNameAndType (exe_symbol->GetMangled().GetName(),
> +                                                                                                                  eSymbolTypeData,
> +                                                                                                                  Symtab::eDebugNo,
> +                                                                                                                  Symtab::eVisibilityAny);
> +
> +                                            if (exe_symbol && oso_gsym_symbol && exe_symbol->ValueIsAddress() && oso_gsym_symbol->ValueIsAddress())
> +                                            {
> +                                                // If we found the symbol, then we
> +                                                SectionSP exe_gsym_section (exe_symbol->GetAddress().GetSection());
> +                                                SectionSP oso_gsym_section (oso_gsym_symbol->GetAddress().GetSection());
> +                                                if (oso_gsym_section)
> +                                                {
> +                                                    SectionSP oso_gsym_section_sp (new Section (oso_gsym_symbol->GetAddress().GetSection(),
> +                                                                                                oso_module_sp,                         // Module (the .o file)
> +                                                                                                sect_id++,                          // Section ID starts at 0x10000 and increments so the section IDs don't overlap with the standard mach IDs
> +                                                                                                exe_symbol->GetMangled().GetName(Mangled::ePreferMangled), // Name the section the same as the symbol for which is was generated!
> +                                                                                                eSectionTypeDebug,
> +                                                                                                oso_gsym_symbol->GetAddress().GetOffset(),  // File VM address offset in the current section
> +                                                                                                1,                                   // We don't know the size of the global, just do the main address for now.
> +                                                                                                0, 0, 0));
> +
> +                                                    oso_gsym_section_sp->SetLinkedLocation (exe_gsym_section,
> +                                                                                            exe_symbol->GetAddress().GetFileAddress() - exe_gsym_section->GetFileAddress());
> +                                                    oso_gsym_section->GetChildren().AddSection(oso_gsym_section_sp);
> +                                                }
> +                                            }
> +                                        }
> +                                            break;
> +                                    }
> +                                }
> +                            }
> +                            oso_objfile->GetSectionList()->Finalize(); // Now that we're done adding sections, finalize to build fast-lookup caches
> +#if defined(DEBUG_OSO_DMAP)
> +                            s << "OSO sections after:\n";
> +                            oso_objfile->GetSectionList()->Dump(&s, NULL, true);
> +#endif
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +        return m_objfile_sp.get();
> +    }
> +
> +    virtual SymbolVendor*
> +    GetSymbolVendor(bool can_create = true)
> +    {
> +        // Scope for locker
> +        if (m_symfile_ap.get() || can_create == false)
> +            return m_symfile_ap.get();
> +
> +        ModuleSP exe_module_sp (m_exe_module_wp.lock());
> +        if (exe_module_sp)
> +        {
> +            // Now get the object file outside of a locking scope
> +            ObjectFile *oso_objfile = GetObjectFile ();
> +            if (oso_objfile)
> +            {
> +                Mutex::Locker locker (m_mutex);
> +                SymbolVendor* symbol_vendor = Module::GetSymbolVendor(can_create);
> +                if (symbol_vendor)
> +                {
> +                    // Set a a pointer to this class to set our OSO DWARF file know
> +                    // that the DWARF is being used along with a debug map and that
> +                    // it will have the remapped sections that we do below.
> +                    SymbolFileDWARF *oso_symfile = (SymbolFileDWARF *)symbol_vendor->GetSymbolFile();
> +
> +                    if (!oso_symfile)
> +                        return NULL;
> +
> +                    ObjectFile *exe_objfile = exe_module_sp->GetObjectFile();
> +                    SymbolVendor *exe_sym_vendor = exe_module_sp->GetSymbolVendor();
> +
> +                    if (exe_objfile && exe_sym_vendor)
> +                    {
> +                        if (oso_symfile->GetNumCompileUnits() == 1)
> +                        {
> +                            oso_symfile->SetDebugMapModule(exe_module_sp);
> +                            // Set the ID of the symbol file DWARF to the index of the OSO
> +                            // shifted left by 32 bits to provide a unique prefix for any
> +                            // UserID's that get created in the symbol file.
> +                            oso_symfile->SetID (((uint64_t)m_cu_idx + 1ull) << 32ull);
> +                        }
> +                        else
> +                        {
> +                            oso_symfile->SetID (UINT64_MAX);
> +                        }
> +                    }
> +                    return symbol_vendor;
> +                }
> +            }
> +        }
> +        return NULL;
> +    }
> +
> +protected:
> +    ModuleWP m_exe_module_wp;
> +    const uint32_t m_cu_idx;
> +};
> +
> void
> SymbolFileDWARFDebugMap::Initialize()
> {
> @@ -93,7 +339,7 @@
>
>
> void
> -SymbolFileDWARFDebugMap::InitOSO ()
> +SymbolFileDWARFDebugMap::InitOSO()
> {
>     if (m_flags.test(kHaveInitializedOSOs))
>         return;
> @@ -110,9 +356,10 @@
>         LogSP log (LogChannelDWARF::GetLogIfAll(DWARF_LOG_DEBUG_MAP));
>
>         std::vector<uint32_t> oso_indexes;
> +#if defined(DEBUG_OSO_DMAP)
> //      StreamFile s(stdout);
> //      symtab->Dump(&s, NULL, eSortOrderNone);
> -
> +#endif
>         // When a mach-o symbol is encoded, the n_type field is encoded in bits
>         // 23:16, and the n_desc field is encoded in bits 15:0.
>         //
> @@ -138,24 +385,30 @@
>
>             for (uint32_t i=0; i<oso_index_count; ++i)
>             {
> -                m_compile_unit_infos[i].so_symbol = symtab->SymbolAtIndex(oso_indexes[i] - 1);
> -                if (m_compile_unit_infos[i].so_symbol->GetSiblingIndex() == 0)
> -                    m_compile_unit_infos[i].so_symbol = symtab->SymbolAtIndex(oso_indexes[i] - 2);
> -                m_compile_unit_infos[i].oso_symbol = symtab->SymbolAtIndex(oso_indexes[i]);
> -                uint32_t sibling_idx = m_compile_unit_infos[i].so_symbol->GetSiblingIndex();
> +                const Symbol *so_symbol = symtab->SymbolAtIndex(oso_indexes[i] - 1);
> +                const Symbol *oso_symbol = symtab->SymbolAtIndex(oso_indexes[i]);
> +                assert (so_symbol);
> +                assert (oso_symbol);
> +                assert (so_symbol->GetType() == eSymbolTypeSourceFile);
> +                assert (oso_symbol->GetType() == eSymbolTypeObjectFile);
> +                m_compile_unit_infos[i].so_file.SetFile(so_symbol->GetName().AsCString(), true);
> +                m_compile_unit_infos[i].oso_file.SetFile(oso_symbol->GetName().AsCString(), true);
> +                uint32_t sibling_idx = so_symbol->GetSiblingIndex();
>                 // The sibling index can't be less that or equal to the current index "i"
>                 if (sibling_idx <= i)
>                 {
> -                    m_obj_file->GetModule()->ReportError ("N_SO in symbol with UID %u has invalid sibling in debug map, please file a bug and attach the binary listed in this error", m_compile_unit_infos[i].so_symbol->GetID());
> +                    m_obj_file->GetModule()->ReportError ("N_SO in symbol with UID %u has invalid sibling in debug map, please file a bug and attach the binary listed in this error", so_symbol->GetID());
>                 }
>                 else
>                 {
> -                    m_compile_unit_infos[i].last_symbol = symtab->SymbolAtIndex (sibling_idx - 1);
> -                    m_compile_unit_infos[i].first_symbol_index = symtab->GetIndexForSymbol(m_compile_unit_infos[i].so_symbol);
> -                    m_compile_unit_infos[i].last_symbol_index = symtab->GetIndexForSymbol(m_compile_unit_infos[i].last_symbol);
> +                    const Symbol* last_symbol = symtab->SymbolAtIndex (sibling_idx - 1);
> +                    m_compile_unit_infos[i].first_symbol_index = symtab->GetIndexForSymbol(so_symbol);
> +                    m_compile_unit_infos[i].last_symbol_index = symtab->GetIndexForSymbol(last_symbol);
> +                    m_compile_unit_infos[i].first_symbol_id = so_symbol->GetID();
> +                    m_compile_unit_infos[i].last_symbol_id = last_symbol->GetID();
>
>                     if (log)
> -                        log->Printf("Initialized OSO 0x%8.8x: file=%s", i, m_compile_unit_infos[i].oso_symbol->GetName().GetCString());
> +                        log->Printf("Initialized OSO 0x%8.8x: file=%s", i, oso_symbol->GetName().GetCString());
>                 }
>             }
>         }
> @@ -176,19 +429,33 @@
> {
>     if (comp_unit_info->oso_module_sp.get() == NULL && comp_unit_info->symbol_file_supported)
>     {
> -        Symbol *oso_symbol = comp_unit_info->oso_symbol;
> -        if (oso_symbol)
> +        if (!comp_unit_info->oso_file.Exists())
>         {
> -            FileSpec oso_file_spec(oso_symbol->GetMangled().GetName().AsCString(), true);
> -            // Always create a new module for .o files. Why? Because we
> -            // use the debug map, to add new sections to each .o file and
> -            // even though a .o file might not have changed, the sections
> -            // that get added to the .o file can change.
> -            comp_unit_info->oso_module_sp.reset (new Module (oso_file_spec,
> -                                                             m_obj_file->GetModule()->GetArchitecture(),
> -                                                             NULL,
> -                                                             0));
> +            char path[PATH_MAX*2];
> +            comp_unit_info->oso_file.GetPath(path, sizeof(path));
> +            if (ObjectFile::SplitArchivePathWithObject (path,
> +                                                        comp_unit_info->oso_file,
> +                                                        comp_unit_info->oso_object))
> +            {
> +                comp_unit_info->oso_file.GetPath(path, sizeof(path));
> +                //printf ("resolved archive '%s' and object '%s'\n", path, comp_unit_info->oso_object.GetCString());
> +            }
> +            else
> +            {
> +                comp_unit_info->symbol_file_supported = false;
> +                return false;
> +            }
>         }
> +        // Always create a new module for .o files. Why? Because we
> +        // use the debug map, to add new sections to each .o file and
> +        // even though a .o file might not have changed, the sections
> +        // that get added to the .o file can change.
> +        comp_unit_info->oso_module_sp.reset (new DebugMapModule (GetObjectFile()->GetModule(),
> +                                                                 GetCompUnitInfoIndex(comp_unit_info),
> +                                                                 comp_unit_info->oso_file,
> +                                                                 m_obj_file->GetModule()->GetArchitecture(),
> +                                                                 comp_unit_info->oso_object ? &comp_unit_info->oso_object : NULL,
> +                                                                 0));
>     }
>     return comp_unit_info->oso_module_sp.get();
> }
> @@ -199,19 +466,11 @@
> {
>     if (oso_idx < m_compile_unit_infos.size())
>     {
> -        if (!m_compile_unit_infos[oso_idx].so_file)
> +        if (m_compile_unit_infos[oso_idx].so_file)
>         {
> -
> -            if (m_compile_unit_infos[oso_idx].so_symbol == NULL)
> -                return false;
> -
> -            std::string so_path (m_compile_unit_infos[oso_idx].so_symbol->GetMangled().GetName().AsCString());
> -            if (m_compile_unit_infos[oso_idx].so_symbol[1].GetType() == eSymbolTypeSourceFile)
> -                so_path += m_compile_unit_infos[oso_idx].so_symbol[1].GetMangled().GetName().AsCString();
> -            m_compile_unit_infos[oso_idx].so_file.SetFile(so_path.c_str(), true);
> +            file_spec = m_compile_unit_infos[oso_idx].so_file;
> +            return true;
>         }
> -        file_spec = m_compile_unit_infos[oso_idx].so_file;
> -        return true;
>     }
>     return false;
> }
> @@ -270,182 +529,13 @@
> SymbolFileDWARF *
> SymbolFileDWARFDebugMap::GetSymbolFileByCompUnitInfo (CompileUnitInfo *comp_unit_info)
> {
> -    if (comp_unit_info->oso_symbol_vendor == NULL && comp_unit_info->symbol_file_supported)
> +    Module *oso_module = GetModuleByCompUnitInfo (comp_unit_info);
> +    if (oso_module)
>     {
> -        ObjectFile *oso_objfile = GetObjectFileByCompUnitInfo (comp_unit_info);
> -
> -        if (oso_objfile)
> -        {
> -            comp_unit_info->oso_symbol_vendor = oso_objfile->GetModule()->GetSymbolVendor();
> -//          SymbolFileDWARF *oso_dwarf = new SymbolFileDWARF(oso_objfile);
> -//          comp_unit_info->oso_dwarf_sp.reset (oso_dwarf);
> -            if (comp_unit_info->oso_symbol_vendor)
> -            {
> -                // Set a a pointer to this class to set our OSO DWARF file know
> -                // that the DWARF is being used along with a debug map and that
> -                // it will have the remapped sections that we do below.
> -                SymbolFileDWARF *oso_symfile = (SymbolFileDWARF *)comp_unit_info->oso_symbol_vendor->GetSymbolFile();
> -
> -                if (!oso_symfile)
> -                    return NULL;
> -
> -                if (oso_symfile->GetNumCompileUnits() != 1)
> -                {
> -                    oso_symfile->GetObjectFile()->GetModule()->ReportError ("DWARF for object file '%s' contains multiple translation units!",
> -                                                                            oso_symfile->GetObjectFile()->GetFileSpec().GetFilename().AsCString());
> -                    comp_unit_info->symbol_file_supported = false;
> -                    comp_unit_info->oso_module_sp.reset();
> -                    comp_unit_info->oso_compile_unit_sp.reset();
> -                    comp_unit_info->oso_symbol_vendor = NULL;
> -                    return NULL;
> -                }
> -
> -                oso_symfile->SetDebugMapSymfile(this);
> -                // Set the ID of the symbol file DWARF to the index of the OSO
> -                // shifted left by 32 bits to provide a unique prefix for any
> -                // UserID's that get created in the symbol file.
> -                oso_symfile->SetID (((uint64_t)GetCompUnitInfoIndex(comp_unit_info) + 1ull) << 32ull);
> -                comp_unit_info->debug_map_sections_sp.reset(new SectionList);
> -
> -                Symtab *exe_symtab = m_obj_file->GetSymtab();
> -                ModuleSP oso_module_sp (oso_objfile->GetModule());
> -                Symtab *oso_symtab = oso_objfile->GetSymtab();
> -//#define DEBUG_OSO_DMAP    // Do not check in with this defined...
> -#if defined(DEBUG_OSO_DMAP)
> -                StreamFile s(stdout);
> -                s << "OSO symtab:\n";
> -                oso_symtab->Dump(&s, NULL);
> -                s << "OSO sections before:\n";
> -                oso_objfile->GetSectionList()->Dump(&s, NULL, true);
> -#endif
> -
> -                ///const uint32_t fun_resolve_flags = SymbolContext::Module | eSymbolContextCompUnit | eSymbolContextFunction;
> -                //SectionList *oso_sections = oso_objfile->Sections();
> -                // Now we need to make sections that map from zero based object
> -                // file addresses to where things eneded up in the main executable.
> -                uint32_t oso_start_idx = exe_symtab->GetIndexForSymbol (comp_unit_info->oso_symbol);
> -                assert (oso_start_idx != UINT32_MAX);
> -                oso_start_idx += 1;
> -                const uint32_t oso_end_idx = comp_unit_info->so_symbol->GetSiblingIndex();
> -                uint32_t sect_id = 0x10000;
> -                for (uint32_t idx = oso_start_idx; idx < oso_end_idx; ++idx)
> -                {
> -                    Symbol *exe_symbol = exe_symtab->SymbolAtIndex(idx);
> -                    if (exe_symbol)
> -                    {
> -                        if (exe_symbol->IsDebug() == false)
> -                            continue;
> -
> -                        switch (exe_symbol->GetType())
> -                        {
> -                        default:
> -                            break;
> -
> -                        case eSymbolTypeCode:
> -                            {
> -                                // For each N_FUN, or function that we run into in the debug map
> -                                // we make a new section that we add to the sections found in the
> -                                // .o file. This new section has the file address set to what the
> -                                // addresses are in the .o file, and the load address is adjusted
> -                                // to match where it ended up in the final executable! We do this
> -                                // before we parse any dwarf info so that when it goes get parsed
> -                                // all section/offset addresses that get registered will resolve
> -                                // correctly to the new addresses in the main executable.
> -
> -                                // First we find the original symbol in the .o file's symbol table
> -                                Symbol *oso_fun_symbol = oso_symtab->FindFirstSymbolWithNameAndType(exe_symbol->GetMangled().GetName(Mangled::ePreferMangled), eSymbolTypeCode, Symtab::eDebugNo, Symtab::eVisibilityAny);
> -                                if (oso_fun_symbol)
> -                                {
> -                                    // If we found the symbol, then we
> -                                    SectionSP exe_fun_section (exe_symbol->GetAddress().GetSection());
> -                                    SectionSP oso_fun_section (oso_fun_symbol->GetAddress().GetSection());
> -                                    if (oso_fun_section)
> -                                    {
> -                                        // Now we create a section that we will add as a child of the
> -                                        // section in which the .o symbol (the N_FUN) exists.
> -
> -                                        // We use the exe_symbol size because the one in the .o file
> -                                        // will just be a symbol with no size, and the exe_symbol
> -                                        // size will reflect any size changes (ppc has been known to
> -                                        // shrink function sizes when it gets rid of jump islands that
> -                                        // aren't needed anymore).
> -                                        SectionSP oso_fun_section_sp (new Section (oso_fun_symbol->GetAddress().GetSection(),
> -                                                                                        oso_module_sp,                         // Module (the .o file)
> -                                                                                        sect_id++,                          // Section ID starts at 0x10000 and increments so the section IDs don't overlap with the standard mach IDs
> -                                                                                        exe_symbol->GetMangled().GetName(Mangled::ePreferMangled), // Name the section the same as the symbol for which is was generated!
> -                                                                                        eSectionTypeDebug,
> -                                                                                        oso_fun_symbol->GetAddress().GetOffset(),  // File VM address offset in the current section
> -                                                                                        exe_symbol->GetByteSize(),          // File size (we need the size from the executable)
> -                                                                                        0, 0, 0));
> -
> -                                        oso_fun_section_sp->SetLinkedLocation (exe_fun_section,
> -                                                                               exe_symbol->GetAddress().GetFileAddress() - exe_fun_section->GetFileAddress());
> -                                        oso_fun_section->GetChildren().AddSection(oso_fun_section_sp);
> -                                        comp_unit_info->debug_map_sections_sp->AddSection(oso_fun_section_sp);
> -                                    }
> -                                }
> -                            }
> -                            break;
> -
> -                        case eSymbolTypeData:
> -                            {
> -                                // For each N_GSYM we remap the address for the global by making
> -                                // a new section that we add to the sections found in the .o file.
> -                                // This new section has the file address set to what the
> -                                // addresses are in the .o file, and the load address is adjusted
> -                                // to match where it ended up in the final executable! We do this
> -                                // before we parse any dwarf info so that when it goes get parsed
> -                                // all section/offset addresses that get registered will resolve
> -                                // correctly to the new addresses in the main executable. We
> -                                // initially set the section size to be 1 byte, but will need to
> -                                // fix up these addresses further after all globals have been
> -                                // parsed to span the gaps, or we can find the global variable
> -                                // sizes from the DWARF info as we are parsing.
> -
> -                                // Next we find the non-stab entry that corresponds to the N_GSYM in the .o file
> -                                Symbol *oso_gsym_symbol = oso_symtab->FindFirstSymbolWithNameAndType (exe_symbol->GetMangled().GetName(),
> -                                                                                                      eSymbolTypeData,
> -                                                                                                      Symtab::eDebugNo,
> -                                                                                                      Symtab::eVisibilityAny);
> -
> -                                if (exe_symbol && oso_gsym_symbol && exe_symbol->ValueIsAddress() && oso_gsym_symbol->ValueIsAddress())
> -                                {
> -                                    // If we found the symbol, then we
> -                                    SectionSP exe_gsym_section (exe_symbol->GetAddress().GetSection());
> -                                    SectionSP oso_gsym_section (oso_gsym_symbol->GetAddress().GetSection());
> -                                    if (oso_gsym_section)
> -                                    {
> -                                        SectionSP oso_gsym_section_sp (new Section (oso_gsym_symbol->GetAddress().GetSection(),
> -                                                                                    oso_module_sp,                         // Module (the .o file)
> -                                                                                    sect_id++,                          // Section ID starts at 0x10000 and increments so the section IDs don't overlap with the standard mach IDs
> -                                                                                    exe_symbol->GetMangled().GetName(Mangled::ePreferMangled), // Name the section the same as the symbol for which is was generated!
> -                                                                                    eSectionTypeDebug,
> -                                                                                    oso_gsym_symbol->GetAddress().GetOffset(),  // File VM address offset in the current section
> -                                                                                    1,                                   // We don't know the size of the global, just do the main address for now.
> -                                                                                    0, 0, 0));
> -
> -                                        oso_gsym_section_sp->SetLinkedLocation (exe_gsym_section,
> -                                                                                exe_symbol->GetAddress().GetFileAddress() - exe_gsym_section->GetFileAddress());
> -                                        oso_gsym_section->GetChildren().AddSection(oso_gsym_section_sp);
> -                                        comp_unit_info->debug_map_sections_sp->AddSection(oso_gsym_section_sp);
> -                                    }
> -                                }
> -                            }
> -                            break;
> -                        }
> -                    }
> -                }
> -                oso_objfile->GetSectionList()->Finalize(); // Now that we're done adding sections, finalize to build fast-lookup caches
> -                comp_unit_info->debug_map_sections_sp->Finalize();
> -#if defined(DEBUG_OSO_DMAP)
> -                s << "OSO sections after:\n";
> -                oso_objfile->GetSectionList()->Dump(&s, NULL, true);
> -#endif
> -            }
> -        }
> +        SymbolVendor *sym_vendor = oso_module->GetSymbolVendor();
> +        if (sym_vendor)
> +            return (SymbolFileDWARF *)sym_vendor->GetSymbolFile();
>     }
> -    if (comp_unit_info->oso_symbol_vendor)
> -        return (SymbolFileDWARF *)comp_unit_info->oso_symbol_vendor->GetSymbolFile();
>     return NULL;
> }
>
> @@ -468,16 +558,19 @@
>                                          SymbolFile::VariableTypes |
>                                          SymbolFile::LineTables;
>
> -        for (uint32_t oso_idx=0; oso_idx<oso_index_count; ++oso_idx)
> -        {
> -            SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex (oso_idx);
> -            if (oso_dwarf)
> -            {
> -                uint32_t oso_abilities = oso_dwarf->GetAbilities();
> -                if ((oso_abilities & dwarf_abilities) == dwarf_abilities)
> -                    return oso_abilities;
> -            }
> -        }
> +        InitOSO();
> +        if (!m_compile_unit_infos.empty())
> +            return dwarf_abilities;
> +//        for (uint32_t oso_idx=0; oso_idx<oso_index_count; ++oso_idx)
> +//        {
> +//            SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex (oso_idx);
> +//            if (oso_dwarf)
> +//            {
> +//                uint32_t oso_abilities = oso_dwarf->GetAbilities();
> +//                if ((oso_abilities & dwarf_abilities) == dwarf_abilities)
> +//                    return oso_abilities;
> +//            }
> +//        }
>     }
>     return 0;
> }
> @@ -501,30 +594,34 @@
>         if (m_compile_unit_infos[cu_idx].oso_compile_unit_sp.get() == NULL &&
>             m_compile_unit_infos[cu_idx].symbol_file_supported)
>         {
> -            SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex (cu_idx);
> -            if (oso_dwarf)
> +            FileSpec so_file_spec;
> +            if (GetFileSpecForSO (cu_idx, so_file_spec))
>             {
> -                // There is only one compile unit for N_OSO entry right now, so
> -                // it will always exist at index zero.
> -                m_compile_unit_infos[cu_idx].oso_compile_unit_sp = m_compile_unit_infos[cu_idx].oso_symbol_vendor->GetCompileUnitAtIndex (0);
> -            }
> +                Module *oso_module = GetModuleByOSOIndex (cu_idx);
> +                if (oso_module)
> +                {
> +                     // User zero as the ID to match the compile unit at offset
> +                     // zero in each .o file since each .o file can only have
> +                     // one compile unit for now.
> +                    lldb::user_id_t cu_id = 0;
> +                    m_compile_unit_infos[cu_idx].oso_compile_unit_sp.reset (new CompileUnit (oso_module->shared_from_this(),
> +                                                                                             NULL,
> +                                                                                             so_file_spec,
> +                                                                                             cu_id,
> +                                                                                             eLanguageTypeUnknown));
> +                }
>
> -            if (m_compile_unit_infos[cu_idx].oso_compile_unit_sp.get() == NULL)
> -            {
> -                // We weren't able to get the DWARF for this N_OSO entry (the
> -                // .o file may be missing or not at the specified path), make
> -                // one up as best we can from the debug map. We set the uid
> -                // of the compile unit to the symbol index with the MSBit set
> -                // so that it doesn't collide with any uid values from the DWARF
> -                Symbol *so_symbol = m_compile_unit_infos[cu_idx].so_symbol;
> -                if (so_symbol)
> +                if (!m_compile_unit_infos[cu_idx].oso_compile_unit_sp)
>                 {
>                     m_compile_unit_infos[cu_idx].oso_compile_unit_sp.reset(new CompileUnit (m_obj_file->GetModule(),
>                                                                                             NULL,
> -                                                                                            so_symbol->GetMangled().GetName().AsCString(),
> +                                                                                            so_file_spec,
>                                                                                             cu_idx,
>                                                                                             eLanguageTypeUnknown));
> -
> +                }
> +
> +                if (m_compile_unit_infos[cu_idx].oso_compile_unit_sp)
> +                {
>                     // Let our symbol vendor know about this compile unit
>                     m_obj_file->GetModule()->GetSymbolVendor()->SetCompileUnitAtIndex (cu_idx,
>                                                                                        m_compile_unit_infos[cu_idx].oso_compile_unit_sp);
> @@ -549,6 +646,28 @@
>     return NULL;
> }
>
> +
> +SymbolFileDWARFDebugMap::CompileUnitInfo *
> +SymbolFileDWARFDebugMap::GetCompUnitInfo (const lldb_private::Module *module)
> +{
> +    const uint32_t cu_count = GetNumCompileUnits();
> +    for (uint32_t i=0; i<cu_count; ++i)
> +    {
> +        if (module == m_compile_unit_infos[i].oso_module_sp.get())
> +            return &m_compile_unit_infos[i];
> +    }
> +    return NULL;
> +}
> +
> +lldb::LanguageType
> +SymbolFileDWARFDebugMap::ParseCompileUnitLanguage (const SymbolContext& sc)
> +{
> +    SymbolFileDWARF *oso_dwarf = GetSymbolFile (sc);
> +    if (oso_dwarf)
> +        return oso_dwarf->ParseCompileUnitLanguage (sc);
> +    return eLanguageTypeUnknown;
> +}
> +
> size_t
> SymbolFileDWARFDebugMap::ParseCompileUnitFunctions (const SymbolContext& sc)
> {
> @@ -602,7 +721,7 @@
> {
>     SymbolFileDWARF *oso_dwarf = GetSymbolFile (sc);
>     if (oso_dwarf)
> -        return oso_dwarf->ParseTypes (sc);
> +        return oso_dwarf->ParseVariablesForContext (sc);
>     return 0;
> }
>
> @@ -669,24 +788,31 @@
> uint32_t
> SymbolFileDWARFDebugMap::ResolveSymbolContext (const FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list)
> {
> -    uint32_t initial = sc_list.GetSize();
> +    const uint32_t initial = sc_list.GetSize();
>     const uint32_t cu_count = GetNumCompileUnits();
>
> -    FileSpec so_file_spec;
>     for (uint32_t i=0; i<cu_count; ++i)
>     {
> -        if (GetFileSpecForSO (i, so_file_spec))
> +        // If we are checking for inlines, then we need to look through all
> +        // compile units no matter if "file_spec" matches.
> +        bool resolve = check_inlines;
> +
> +        if (!resolve)
>         {
> -            // By passing false to the comparison we will be able to match
> -            // and files given a filename only. If both file_spec and
> -            // so_file_spec have directories, we will still do a full match.
> -            if (FileSpec::Compare (file_spec, so_file_spec, false) == 0)
> +            FileSpec so_file_spec;
> +            if (GetFileSpecForSO (i, so_file_spec))
>             {
> -                SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex (i);
> -                if (oso_dwarf)
> -                    oso_dwarf->ResolveSymbolContext(file_spec, line, check_inlines, resolve_scope, sc_list);
> +                // Match the full path if the incoming file_spec has a directory (not just a basename)
> +                const bool full_match = file_spec.GetDirectory();
> +                resolve = FileSpec::Equal (file_spec, so_file_spec, full_match);
>             }
>         }
> +        if (resolve)
> +        {
> +            SymbolFileDWARF *oso_dwarf = GetSymbolFileByOSOIndex (i);
> +            if (oso_dwarf)
> +                oso_dwarf->ResolveSymbolContext(file_spec, line, check_inlines, resolve_scope, sc_list);
> +        }
>     }
>     return sc_list.GetSize() - initial;
> }
> @@ -825,10 +951,10 @@
> {
>     const user_id_t symbol_id = *symbol_idx_ptr;
>
> -    if (symbol_id < comp_unit_info->so_symbol->GetID())
> +    if (symbol_id < comp_unit_info->first_symbol_id)
>         return -1;
>
> -    if (symbol_id <= comp_unit_info->last_symbol->GetID())
> +    if (symbol_id <= comp_unit_info->last_symbol_id)
>         return 0;
>
>     return 1;
> @@ -1113,23 +1239,49 @@
>     return 1;
> }
>
> -void
> -SymbolFileDWARFDebugMap::SetCompileUnit (SymbolFileDWARF *oso_dwarf, const CompUnitSP &cu_sp)
> +lldb::CompUnitSP
> +SymbolFileDWARFDebugMap::GetCompileUnit (SymbolFileDWARF *oso_dwarf)
> {
> -    const uint32_t cu_count = GetNumCompileUnits();
> -    for (uint32_t cu_idx=0; cu_idx<cu_count; ++cu_idx)
> +    if (oso_dwarf)
>     {
> -        if (m_compile_unit_infos[cu_idx].oso_symbol_vendor &&
> -            m_compile_unit_infos[cu_idx].oso_symbol_vendor->GetSymbolFile() == oso_dwarf)
> +        const uint32_t cu_count = GetNumCompileUnits();
> +        for (uint32_t cu_idx=0; cu_idx<cu_count; ++cu_idx)
>         {
> -            if (m_compile_unit_infos[cu_idx].oso_compile_unit_sp)
> +            SymbolFileDWARF *oso_symfile = GetSymbolFileByCompUnitInfo (&m_compile_unit_infos[cu_idx]);
> +            if (oso_symfile == oso_dwarf)
>             {
> -                assert (m_compile_unit_infos[cu_idx].oso_compile_unit_sp.get() == cu_sp.get());
> +                if (!m_compile_unit_infos[cu_idx].oso_compile_unit_sp)
> +                    m_compile_unit_infos[cu_idx].oso_compile_unit_sp = ParseCompileUnitAtIndex (cu_idx);
> +
> +                return m_compile_unit_infos[cu_idx].oso_compile_unit_sp;
>             }
> -            else
> +        }
> +    }
> +    assert(!"this shouldn't happen");
> +    return lldb::CompUnitSP();
> +}
> +
> +
> +void
> +SymbolFileDWARFDebugMap::SetCompileUnit (SymbolFileDWARF *oso_dwarf, const CompUnitSP &cu_sp)
> +{
> +    if (oso_dwarf)
> +    {
> +        const uint32_t cu_count = GetNumCompileUnits();
> +        for (uint32_t cu_idx=0; cu_idx<cu_count; ++cu_idx)
> +        {
> +            SymbolFileDWARF *oso_symfile = GetSymbolFileByCompUnitInfo (&m_compile_unit_infos[cu_idx]);
> +            if (oso_symfile == oso_dwarf)
>             {
> -                m_compile_unit_infos[cu_idx].oso_compile_unit_sp = cu_sp;
> -                m_obj_file->GetModule()->GetSymbolVendor()->SetCompileUnitAtIndex(cu_idx, cu_sp);
> +                if (m_compile_unit_infos[cu_idx].oso_compile_unit_sp)
> +                {
> +                    assert (m_compile_unit_infos[cu_idx].oso_compile_unit_sp.get() == cu_sp.get());
> +                }
> +                else
> +                {
> +                    m_compile_unit_infos[cu_idx].oso_compile_unit_sp = cu_sp;
> +                    m_obj_file->GetModule()->GetSymbolVendor()->SetCompileUnitAtIndex(cu_idx, cu_sp);
> +                }
>             }
>         }
>     }
>
> Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h (original)
> +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h Wed Aug 29 16:13:06 2012
> @@ -24,10 +24,12 @@
> class DWARFCompileUnit;
> class DWARFDebugInfoEntry;
> class DWARFDeclContext;
> +class DebugMapModule;
>
> class SymbolFileDWARFDebugMap : public lldb_private::SymbolFile
> {
> public:
> +
>     //------------------------------------------------------------------
>     // Static Functions
>     //------------------------------------------------------------------
> @@ -62,6 +64,7 @@
>     virtual uint32_t        GetNumCompileUnits ();
>     virtual lldb::CompUnitSP ParseCompileUnitAtIndex (uint32_t index);
>
> +    virtual lldb::LanguageType ParseCompileUnitLanguage (const lldb_private::SymbolContext& sc);
>     virtual size_t          ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
>     virtual bool            ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc);
>     virtual bool            ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList &support_files);
> @@ -125,39 +128,41 @@
>     };
>
>     friend class SymbolFileDWARF;
> -
> +    friend class DebugMapModule;
>     //------------------------------------------------------------------
>     // Class specific types
>     //------------------------------------------------------------------
>     struct CompileUnitInfo
>     {
>         lldb_private::FileSpec so_file;
> -        lldb_private::Symbol *so_symbol;
> -        lldb_private::Symbol *oso_symbol;
> -        lldb_private::Symbol *last_symbol;
> +        lldb_private::FileSpec oso_file;
> +        lldb_private::ConstString oso_object; // for archives this will be the .o file in the "oso_file"
> +//        lldb_private::Symbol *so_symbol;
> +//        lldb_private::Symbol *oso_symbol;
> +//        lldb_private::Symbol *last_symbol;
>         uint32_t first_symbol_index;
>         uint32_t last_symbol_index;
> +        uint32_t first_symbol_id;
> +        uint32_t last_symbol_id;
>         lldb::ModuleSP oso_module_sp;
>         lldb::CompUnitSP oso_compile_unit_sp;
> -        lldb_private::SymbolVendor *oso_symbol_vendor;
> -        std::vector<uint32_t> function_indexes;
> -        std::vector<uint32_t> static_indexes;
> -        STD_SHARED_PTR(lldb_private::SectionList) debug_map_sections_sp;
> +//        SymbolFileDWARF *oso_symfile;
>         bool symbol_file_supported;
>
>         CompileUnitInfo() :
>             so_file (),
> -            so_symbol (NULL),
> -            oso_symbol (NULL),
> -            last_symbol (NULL),
> +            oso_file (),
> +            oso_object (),
> +//            so_symbol (NULL),
> +//            oso_symbol (NULL),
> +//            last_symbol (NULL),
>             first_symbol_index (UINT32_MAX),
>             last_symbol_index (UINT32_MAX),
> +            first_symbol_id (UINT32_MAX),
> +            last_symbol_id (UINT32_MAX),
>             oso_module_sp (),
>             oso_compile_unit_sp (),
> -            oso_symbol_vendor (NULL),
> -            function_indexes (),
> -            static_indexes (),
> -            debug_map_sections_sp (),
> +//            oso_symfile (NULL),
>             symbol_file_supported (true)
>         {
>         }
> @@ -180,6 +185,9 @@
>     CompileUnitInfo *
>     GetCompUnitInfo (const lldb_private::SymbolContext& sc);
>
> +    CompileUnitInfo *
> +    GetCompUnitInfo (const lldb_private::Module *oso_module);
> +
>     lldb_private::Module *
>     GetModuleByCompUnitInfo (CompileUnitInfo *comp_unit_info);
>
> @@ -227,6 +235,9 @@
>     void
>     SetCompileUnit (SymbolFileDWARF *oso_dwarf, const lldb::CompUnitSP &cu_sp);
>
> +    lldb::CompUnitSP
> +    GetCompileUnit (SymbolFileDWARF *oso_dwarf);
> +
>     lldb::TypeSP
>     FindDefinitionTypeForDWARFDeclContext (const DWARFDeclContext &die_decl_ctx);
>
>
> Modified: lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp (original)
> +++ lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.cpp Wed Aug 29 16:13:06 2012
> @@ -12,13 +12,14 @@
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/RegularExpression.h"
> #include "lldb/Core/Timer.h"
> +#include "lldb/Symbol/CompileUnit.h"
> +#include "lldb/Symbol/Function.h"
> #include "lldb/Symbol/ObjectFile.h"
> -#include "lldb/Symbol/Symtab.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/Symbol.h"
> -#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/SymbolContext.h"
> -#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Symtab.h"
> +#include "lldb/Symbol/TypeList.h"
>
> using namespace lldb;
> using namespace lldb_private;
> @@ -157,6 +158,13 @@
>     return cu_sp;
> }
>
> +lldb::LanguageType
> +SymbolFileSymtab::ParseCompileUnitLanguage (const SymbolContext& sc)
> +{
> +    return eLanguageTypeUnknown;
> +}
> +
> +
> size_t
> SymbolFileSymtab::ParseCompileUnitFunctions (const SymbolContext &sc)
> {
>
> Modified: lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h (original)
> +++ lldb/trunk/source/Plugins/SymbolFile/Symtab/SymbolFileSymtab.h Wed Aug 29 16:13:06 2012
> @@ -54,6 +54,9 @@
>     virtual lldb::CompUnitSP
>     ParseCompileUnitAtIndex(uint32_t index);
>
> +    virtual lldb::LanguageType
> +    ParseCompileUnitLanguage (const lldb_private::SymbolContext& sc);
> +
>     virtual size_t
>     ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc);
>
>
> Modified: lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp (original)
> +++ lldb/trunk/source/Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.cpp Wed Aug 29 16:13:06 2012
> @@ -16,6 +16,7 @@
> #include <AvailabilityMacros.h>
>
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/Section.h"
> #include "lldb/Core/StreamString.h"
>
> Modified: lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp (original)
> +++ lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp Wed Aug 29 16:13:06 2012
> @@ -14,6 +14,7 @@
> #include "lldb/Core/Address.h"
> #include "lldb/Core/ArchSpec.h"
> #include "lldb/Core/DataBufferHeap.h"
> +#include "lldb/Core/DataExtractor.h"
> #include "lldb/Core/Disassembler.h"
> #include "lldb/Core/Error.h"
> #include "lldb/Core/Log.h"
>
> Modified: lldb/trunk/source/Symbol/CompileUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompileUnit.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/CompileUnit.cpp (original)
> +++ lldb/trunk/source/Symbol/CompileUnit.cpp Wed Aug 29 16:13:06 2012
> @@ -8,8 +8,9 @@
> //===----------------------------------------------------------------------===//
>
> #include "lldb/Symbol/CompileUnit.h"
> -#include "lldb/Symbol/LineTable.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/Language.h"
> +#include "lldb/Symbol/LineTable.h"
> #include "lldb/Symbol/SymbolVendor.h"
> #include "lldb/Symbol/VariableList.h"
>
> @@ -20,14 +21,16 @@
>     ModuleChild(module_sp),
>     FileSpec (pathname, false),
>     UserID(cu_sym_id),
> -    Language (language),
>     m_user_data (user_data),
> +    m_language (language),
>     m_flags (0),
>     m_functions (),
>     m_support_files (),
>     m_line_table_ap (),
>     m_variables()
> {
> +    if (language != eLanguageTypeUnknown)
> +        m_flags.Set(flagsParsedLanguage);
>     assert(module_sp);
> }
>
> @@ -35,14 +38,16 @@
>     ModuleChild(module_sp),
>     FileSpec (fspec),
>     UserID(cu_sym_id),
> -    Language (language),
>     m_user_data (user_data),
> +    m_language (language),
>     m_flags (0),
>     m_functions (),
>     m_support_files (),
>     m_line_table_ap (),
>     m_variables()
> {
> +    if (language != eLanguageTypeUnknown)
> +        m_flags.Set(flagsParsedLanguage);
>     assert(module_sp);
> }
>
> @@ -80,7 +85,8 @@
> void
> CompileUnit::GetDescription(Stream *s, lldb::DescriptionLevel level) const
> {
> -    *s << "id = " << (const UserID&)*this << ", file = \"" << (const FileSpec&)*this << "\", language = \"" << (const Language&)*this << '"';
> +    Language language(m_language);
> +    *s << "id = " << (const UserID&)*this << ", file = \"" << (const FileSpec&)*this << "\", language = \"" << language << '"';
> }
>
>
> @@ -208,6 +214,26 @@
> }
>
>
> +lldb::LanguageType
> +CompileUnit::GetLanguage()
> +{
> +    if (m_language == eLanguageTypeUnknown)
> +    {
> +        if (m_flags.IsClear(flagsParsedLanguage))
> +        {
> +            m_flags.Set(flagsParsedLanguage);
> +            SymbolVendor* symbol_vendor = GetModule()->GetSymbolVendor();
> +            if (symbol_vendor)
> +            {
> +                SymbolContext sc;
> +                CalculateSymbolContext(&sc);
> +                m_language = symbol_vendor->ParseCompileUnitLanguage(sc);
> +            }
> +        }
> +    }
> +    return m_language;
> +}
> +
> LineTable*
> CompileUnit::GetLineTable()
> {
> @@ -298,7 +324,8 @@
>     // "file_spec" has an empty directory, then only compare the basenames
>     // when finding file indexes
>     std::vector<uint32_t> file_indexes;
> -    bool file_spec_matches_cu_file_spec = FileSpec::Equal(file_spec, *this, !file_spec.GetDirectory().IsEmpty());
> +    const bool full_match = file_spec.GetDirectory();
> +    bool file_spec_matches_cu_file_spec = FileSpec::Equal(file_spec, *this, full_match);
>
>     // If we are not looking for inlined functions and our file spec doesn't
>     // match then we are done...
>
> Modified: lldb/trunk/source/Symbol/ObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ObjectFile.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/ObjectFile.cpp (original)
> +++ lldb/trunk/source/Symbol/ObjectFile.cpp Wed Aug 29 16:13:06 2012
> @@ -15,11 +15,13 @@
> #include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/RegularExpression.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/Timer.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/ObjectContainer.h"
> #include "lldb/Symbol/SymbolFile.h"
> #include "lldb/Target/Process.h"
> +#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
>
> using namespace lldb;
> using namespace lldb_private;
> @@ -39,7 +41,7 @@
>         if (file)
>         {
>             // Memory map the entire file contents
> -            if (!file_data_sp)
> +            if (!file_data_sp && file_size > 0)
>             {
>                 assert (file_offset == 0);
>                 file_data_sp = file->MemoryMapFileContents(file_offset, file_size);
> @@ -51,22 +53,15 @@
>                 char path_with_object[PATH_MAX*2];
>                 module_sp->GetFileSpec().GetPath(path_with_object, sizeof(path_with_object));
>
> -                RegularExpression g_object_regex("(.*)\\(([^\\)]+)\\)$");
> -                if (g_object_regex.Execute (path_with_object, 2))
> +                FileSpec archive_file;
> +                ConstString archive_object;
> +                if (ObjectFile::SplitArchivePathWithObject (path_with_object, archive_file, archive_object))
>                 {
> -                    FileSpec archive_file;
> -                    std::string path;
> -                    std::string object;
> -                    if (g_object_regex.GetMatchAtIndex (path_with_object, 1, path) &&
> -                        g_object_regex.GetMatchAtIndex (path_with_object, 2, object))
> +                    file_size = archive_file.GetByteSize();
> +                    if (file_size > 0)
>                     {
> -                        archive_file.SetFile (path.c_str(), false);
> -                        file_size = archive_file.GetByteSize();
> -                        if (file_size > 0)
> -                        {
> -                            module_sp->SetFileSpecAndObjectName (archive_file, ConstString(object.c_str()));
> -                            file_data_sp = archive_file.MemoryMapFileContents(file_offset, file_size);
> -                        }
> +                        module_sp->SetFileSpecAndObjectName (archive_file, archive_object);
> +                        file_data_sp = archive_file.MemoryMapFileContents(file_offset, file_size);
>                     }
>                 }
>             }
> @@ -455,3 +450,23 @@
>     return 0;
> }
>
> +
> +bool
> +ObjectFile::SplitArchivePathWithObject (const char *path_with_object, FileSpec &archive_file, ConstString &archive_object)
> +{
> +    RegularExpression g_object_regex("(.*)\\(([^\\)]+)\\)$");
> +    if (g_object_regex.Execute (path_with_object, 2))
> +    {
> +        std::string path;
> +        std::string obj;
> +        if (g_object_regex.GetMatchAtIndex (path_with_object, 1, path) &&
> +            g_object_regex.GetMatchAtIndex (path_with_object, 2, obj))
> +        {
> +            archive_file.SetFile (path.c_str(), false);
> +            archive_object.SetCString(obj.c_str());
> +            return true;
> +        }
> +    }
> +    return false;
> +}
> +
>
> Modified: lldb/trunk/source/Symbol/Symbol.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Symbol.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/Symbol.cpp (original)
> +++ lldb/trunk/source/Symbol/Symbol.cpp Wed Aug 29 16:13:06 2012
> @@ -12,6 +12,8 @@
> #include "lldb/Core/Module.h"
> #include "lldb/Core/Section.h"
> #include "lldb/Core/Stream.h"
> +#include "lldb/Symbol/ObjectFile.h"
> +#include "lldb/Symbol/Symtab.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/Target.h"
>
>
> Modified: lldb/trunk/source/Symbol/SymbolContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/SymbolContext.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/SymbolContext.cpp (original)
> +++ lldb/trunk/source/Symbol/SymbolContext.cpp Wed Aug 29 16:13:06 2012
> @@ -11,6 +11,7 @@
>
> #include "lldb/Core/Log.h"
> #include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Host/Host.h"
> #include "lldb/Interpreter/Args.h"
> #include "lldb/Symbol/Block.h"
>
> Modified: lldb/trunk/source/Symbol/SymbolVendor.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/SymbolVendor.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/SymbolVendor.cpp (original)
> +++ lldb/trunk/source/Symbol/SymbolVendor.cpp Wed Aug 29 16:13:06 2012
> @@ -15,6 +15,8 @@
> // Project includes
> #include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> +#include "lldb/Core/Stream.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Symbol/SymbolFile.h"
>
> @@ -150,6 +152,20 @@
>     return m_compile_units.size();
> }
>
> +lldb::LanguageType
> +SymbolVendor::ParseCompileUnitLanguage (const SymbolContext& sc)
> +{
> +    ModuleSP module_sp(GetModule());
> +    if (module_sp)
> +    {
> +        lldb_private::Mutex::Locker locker(module_sp->GetMutex());
> +        if (m_sym_file_ap.get())
> +            return m_sym_file_ap->ParseCompileUnitLanguage(sc);
> +    }
> +    return eLanguageTypeUnknown;
> +}
> +
> +
> size_t
> SymbolVendor::ParseCompileUnitFunctions (const SymbolContext &sc)
> {
>
> Modified: lldb/trunk/source/Symbol/Variable.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Variable.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/Variable.cpp (original)
> +++ lldb/trunk/source/Symbol/Variable.cpp Wed Aug 29 16:13:06 2012
> @@ -9,6 +9,7 @@
>
> #include "lldb/Symbol/Variable.h"
>
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/Stream.h"
> #include "lldb/Core/RegularExpression.h"
> #include "lldb/Core/ValueObject.h"
>
> Modified: lldb/trunk/source/Symbol/VariableList.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/VariableList.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Symbol/VariableList.cpp (original)
> +++ lldb/trunk/source/Symbol/VariableList.cpp Wed Aug 29 16:13:06 2012
> @@ -52,9 +52,12 @@
> void
> VariableList::AddVariables(VariableList *variable_list)
> {
> -    std::copy(  variable_list->m_variables.begin(), // source begin
> -                variable_list->m_variables.end(),   // source end
> -                back_inserter(m_variables));        // destination
> +    if (variable_list)
> +    {
> +        std::copy(variable_list->m_variables.begin(), // source begin
> +                  variable_list->m_variables.end(),   // source end
> +                  back_inserter(m_variables));        // destination
> +    }
> }
>
> void
>
> Modified: lldb/trunk/source/Target/ObjCLanguageRuntime.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ObjCLanguageRuntime.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/ObjCLanguageRuntime.cpp (original)
> +++ lldb/trunk/source/Target/ObjCLanguageRuntime.cpp Wed Aug 29 16:13:06 2012
> @@ -9,10 +9,12 @@
> #include "clang/AST/Type.h"
>
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/ValueObject.h"
> #include "lldb/Symbol/ClangASTContext.h"
> #include "lldb/Symbol/Type.h"
> +#include "lldb/Symbol/TypeList.h"
> #include "lldb/Target/ObjCLanguageRuntime.h"
> #include "lldb/Target/Target.h"
>
>
> Modified: lldb/trunk/source/Target/Platform.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Platform.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/Platform.cpp (original)
> +++ lldb/trunk/source/Target/Platform.cpp Wed Aug 29 16:13:06 2012
> @@ -16,6 +16,7 @@
> #include "lldb/Breakpoint/BreakpointIDList.h"
> #include "lldb/Core/Error.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/ModuleSpec.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Host/FileSpec.h"
> #include "lldb/Host/Host.h"
>
> Modified: lldb/trunk/source/Target/Process.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/Process.cpp (original)
> +++ lldb/trunk/source/Target/Process.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,7 @@
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/InputReader.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/PluginManager.h"
> #include "lldb/Core/State.h"
> #include "lldb/Expression/ClangUserExpression.h"
>
> Modified: lldb/trunk/source/Target/StackFrame.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/StackFrame.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/StackFrame.cpp (original)
> +++ lldb/trunk/source/Target/StackFrame.cpp Wed Aug 29 16:13:06 2012
> @@ -19,7 +19,10 @@
> #include "lldb/Core/Value.h"
> #include "lldb/Core/ValueObjectVariable.h"
> #include "lldb/Core/ValueObjectConstResult.h"
> +#include "lldb/Symbol/CompileUnit.h"
> #include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Symbol.h"
> +#include "lldb/Symbol/SymbolContextScope.h"
> #include "lldb/Symbol/VariableList.h"
> #include "lldb/Target/ExecutionContext.h"
> #include "lldb/Target/Process.h"
>
> Modified: lldb/trunk/source/Target/Target.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/Target.cpp (original)
> +++ lldb/trunk/source/Target/Target.cpp Wed Aug 29 16:13:06 2012
> @@ -22,6 +22,9 @@
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Event.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> +#include "lldb/Core/ModuleSpec.h"
> +#include "lldb/Core/Section.h"
> #include "lldb/Core/StreamString.h"
> #include "lldb/Core/Timer.h"
> #include "lldb/Core/ValueObject.h"
> @@ -226,9 +229,9 @@
>
> BreakpointSP
> Target::CreateSourceRegexBreakpoint (const FileSpecList *containingModules,
> -                  const FileSpecList *source_file_spec_list,
> -                  RegularExpression &source_regex,
> -                  bool internal)
> +                                     const FileSpecList *source_file_spec_list,
> +                                     RegularExpression &source_regex,
> +                                     bool internal)
> {
>     SearchFilterSP filter_sp(GetSearchFilterForModuleAndCUList (containingModules, source_file_spec_list));
>     BreakpointResolverSP resolver_sp(new BreakpointResolverFileRegex (NULL, source_regex));
> @@ -240,13 +243,37 @@
> Target::CreateBreakpoint (const FileSpecList *containingModules,
>                           const FileSpec &file,
>                           uint32_t line_no,
> -                          bool check_inlines,
> +                          LazyBool check_inlines,
>                           LazyBool skip_prologue,
>                           bool internal)
> {
>     SearchFilterSP filter_sp(GetSearchFilterForModuleList (containingModules));
>
> -    BreakpointResolverSP resolver_sp(new BreakpointResolverFileLine (NULL, file, line_no, check_inlines,
> +    if (check_inlines == eLazyBoolCalculate)
> +    {
> +        const InlineStrategy inline_strategy = GetInlineStrategy();
> +        switch (inline_strategy)
> +        {
> +            case eInlineBreakpointsNever:
> +                check_inlines = eLazyBoolNo;
> +                break;
> +
> +            case eInlineBreakpointsHeaders:
> +                if (file.IsSourceImplementationFile())
> +                    check_inlines = eLazyBoolNo;
> +                else
> +                    check_inlines = eLazyBoolYes;
> +                break;
> +
> +            case eInlineBreakpointsAlways:
> +                check_inlines = eLazyBoolYes;
> +                break;
> +        }
> +    }
> +    BreakpointResolverSP resolver_sp(new BreakpointResolverFileLine (NULL,
> +                                                                     file,
> +                                                                     line_no,
> +                                                                     check_inlines,
>                                                                      skip_prologue == eLazyBoolCalculate ? GetSkipPrologue() : skip_prologue));
>     return CreateBreakpoint (filter_sp, resolver_sp, internal);
> }
> @@ -2092,6 +2119,15 @@
>     { 0, NULL, NULL }
> };
>
> +static OptionEnumValueElement
> +g_inline_breakpoint_enums[] =
> +{
> +    { eInlineBreakpointsNever,   "never",     "Never look for inline breakpoint locations (fastest). This setting should only be used if you know that no inlining occurs in your programs."},
> +    { eInlineBreakpointsHeaders, "headers",   "Only check for inline breakpoint locations when setting breakpoints in header files, but not when setting breakpoint in implementation source files (default)."},
> +    { eInlineBreakpointsAlways,  "always",    "Always look for inline breakpoint locations when setting file and line breakpoints (slower but most accurate)."},
> +    { 0, NULL, NULL }
> +};
> +
> static PropertyDefinition
> g_properties[] =
> {
> @@ -2117,6 +2153,13 @@
>     { "error-path"                         , OptionValue::eTypeFileSpec  , false, 0                         , NULL, NULL, "The file/path to be used by the executable program for writing its standard error." },
>     { "disable-aslr"                       , OptionValue::eTypeBoolean   , false, true                      , NULL, NULL, "Disable Address Space Layout Randomization (ASLR)" },
>     { "disable-stdio"                      , OptionValue::eTypeBoolean   , false, false                     , NULL, NULL, "Disable stdin/stdout for process (e.g. for a GUI application)" },
> +    { "inline-breakpoint-strategy"         , OptionValue::eTypeEnum      , false, eInlineBreakpointsHeaders , NULL, g_inline_breakpoint_enums, "The strategy to use when settings breakpoints by file and line. "
> +        "Breakpoint locations can end up being inlined by the compiler, so that a compile unit 'a.c' might contain an inlined function from another source file. "
> +        "Usually this is limitted to breakpoint locations from inlined functions from header or other include files, or more accurately non-implementation source files. "
> +        "Sometimes code might #include implementation files and cause inlined breakpoint locations in inlined implementation files. "
> +        "Always checking for inlined breakpoint locations can be expensive (memory and time), so we try to minimize the "
> +        "times we look for inlined locations. This setting allows you to control exactly which strategy is used when settings "
> +        "file and line breakpoints." },
>     { NULL                                 , OptionValue::eTypeInvalid   , false, 0                         , NULL, NULL, NULL }
> };
> enum
> @@ -2138,7 +2181,8 @@
>     ePropertyOutputPath,
>     ePropertyErrorPath,
>     ePropertyDisableASLR,
> -    ePropertyDisableSTDIO
> +    ePropertyDisableSTDIO,
> +    ePropertyInlineStrategy
> };
>
>
> @@ -2314,6 +2358,13 @@
>     m_collection_sp->SetPropertyAtIndexAsBoolean (NULL, idx, b);
> }
>
> +InlineStrategy
> +TargetProperties::GetInlineStrategy () const
> +{
> +    const uint32_t idx = ePropertyInlineStrategy;
> +    return (InlineStrategy)m_collection_sp->GetPropertyAtIndexAsEnumeration (NULL, idx, g_properties[idx].default_uint_value);
> +}
> +
> bool
> TargetProperties::GetRunArguments (Args &args) const
> {
>
> Modified: lldb/trunk/source/Target/TargetList.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/TargetList.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/TargetList.cpp (original)
> +++ lldb/trunk/source/Target/TargetList.cpp Wed Aug 29 16:13:06 2012
> @@ -14,6 +14,7 @@
> #include "lldb/Core/Broadcaster.h"
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Event.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/Timer.h"
> #include "lldb/Host/Host.h"
>
> Modified: lldb/trunk/source/Target/ThreadPlanCallFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanCallFunction.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/ThreadPlanCallFunction.cpp (original)
> +++ lldb/trunk/source/Target/ThreadPlanCallFunction.cpp Wed Aug 29 16:13:06 2012
> @@ -19,7 +19,9 @@
> #include "lldb/Breakpoint/BreakpointLocation.h"
> #include "lldb/Core/Address.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/Stream.h"
> +#include "lldb/Symbol/ObjectFile.h"
> #include "lldb/Target/LanguageRuntime.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
>
> Modified: lldb/trunk/source/Target/ThreadPlanStepOut.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanStepOut.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/ThreadPlanStepOut.cpp (original)
> +++ lldb/trunk/source/Target/ThreadPlanStepOut.cpp Wed Aug 29 16:13:06 2012
> @@ -18,6 +18,9 @@
> #include "lldb/Core/Log.h"
> #include "lldb/Core/Value.h"
> #include "lldb/Core/ValueObjectConstResult.h"
> +#include "lldb/Symbol/Block.h"
> +#include "lldb/Symbol/Function.h"
> +#include "lldb/Symbol/Type.h"
> #include "lldb/Target/Process.h"
> #include "lldb/Target/RegisterContext.h"
> #include "lldb/Target/StopInfo.h"
>
> Modified: lldb/trunk/source/Target/ThreadPlanTracer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadPlanTracer.cpp?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/source/Target/ThreadPlanTracer.cpp (original)
> +++ lldb/trunk/source/Target/ThreadPlanTracer.cpp Wed Aug 29 16:13:06 2012
> @@ -19,6 +19,7 @@
> #include "lldb/Core/Debugger.h"
> #include "lldb/Core/Disassembler.h"
> #include "lldb/Core/Log.h"
> +#include "lldb/Core/Module.h"
> #include "lldb/Core/State.h"
> #include "lldb/Core/Value.h"
> #include "lldb/Symbol/TypeList.h"
>
> Modified: lldb/trunk/test/functionalities/breakpoint/inlined_breakpoints/TestInlinedBreakpoints.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/breakpoint/inlined_breakpoints/TestInlinedBreakpoints.py?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/test/functionalities/breakpoint/inlined_breakpoints/TestInlinedBreakpoints.py (original)
> +++ lldb/trunk/test/functionalities/breakpoint/inlined_breakpoints/TestInlinedBreakpoints.py Wed Aug 29 16:13:06 2012
> @@ -37,9 +37,20 @@
>         exe = os.path.join(os.getcwd(), "a.out")
>         self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
>
> +        # Set a breakpoint and fail because it is in an inlined source implemenation file
>         self.expect("breakpoint set -f basic_type.cpp -l %d" % self.line,
>                     BREAKPOINT_CREATED,
> -            startstr = "Breakpoint created: 1: file ='basic_type.cpp', line = %d, locations = 1" %
> +            startstr = "Breakpoint created: 1: file ='basic_type.cpp', line = %d, locations = 0 (pending)" % self.line)
> +
> +        # Now enable breakpoints in implementation files and see the breakpoint set succeed
> +        self.runCmd('settings set target.inline-breakpoint-strategy always')
> +        # And add hooks to restore the settings during tearDown().
> +        self.addTearDownHook(
> +            lambda: self.runCmd("settings set target.inline-breakpoint-strategy headers"))
> +
> +        self.expect("breakpoint set -f basic_type.cpp -l %d" % self.line,
> +                    BREAKPOINT_CREATED,
> +            startstr = "Breakpoint created: 2: file ='basic_type.cpp', line = %d, locations = 1" %
>                         self.line)
>
>         self.runCmd("run", RUN_SUCCEEDED)
>
> Modified: lldb/trunk/test/types/AbstractBase.py
> URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/types/AbstractBase.py?rev=162860&r1=162859&r2=162860&view=diff
> ==============================================================================
> --- lldb/trunk/test/types/AbstractBase.py (original)
> +++ lldb/trunk/test/types/AbstractBase.py Wed Aug 29 16:13:06 2012
> @@ -107,6 +107,13 @@
>                 gl.append((var, val))
>         #print "golden list:", gl
>
> +        # This test uses a #include of a the "basic_type.cpp" so we need to enable
> +        # always setting inlined breakpoints.
> +        self.runCmd('settings set target.inline-breakpoint-strategy always')
> +        # And add hooks to restore the settings during tearDown().
> +        self.addTearDownHook(
> +            lambda: self.runCmd("settings set target.inline-breakpoint-strategy headers"))
> +
>         # Bring the program to the point where we can issue a series of
>         # 'frame variable -T' command.
>         if blockCaptured:
> @@ -184,6 +191,13 @@
>                 gl.append((var, val))
>         #print "golden list:", gl
>
> +        # This test uses a #include of a the "basic_type.cpp" so we need to enable
> +        # always setting inlined breakpoints.
> +        self.runCmd('settings set target.inline-breakpoint-strategy always')
> +        # And add hooks to restore the settings during tearDown().
> +        self.addTearDownHook(
> +            lambda: self.runCmd("settings set target.inline-breakpoint-strategy headers"))
> +
>         # Bring the program to the point where we can issue a series of
>         # 'expr' command.
>         if blockCaptured:
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

-------------- next part --------------
A non-text attachment was scrubbed...
Name: lldb_missing_includes_linux_fix.patch
Type: application/octet-stream
Size: 845 bytes
Desc: lldb_missing_includes_linux_fix.patch
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20120830/8e92e9dc/attachment.obj>


More information about the lldb-commits mailing list