[Lldb-commits] [PATCH] Add FreeBSD-specific signal support to elf-core

Greg Clayton gclayton at apple.com
Wed Apr 16 18:16:58 PDT 2014


Looks fine.

On Apr 16, 2014, at 11:11 AM, Ed Maste <emaste at freebsd.org> wrote:

> Right now elf-core supports only the generic signal set.  Override GetUnixSignals in ProcessElfCore, and return the OS-specific signal set, if we have one.
> 
> This requires a trivial change to move FreeBSDSignals to Plugins/Process/Utility, not shown in this diff.  The equivalent change to support Linux signals in elf-core is straightforward, but we don't (yet) identify Linux cores in a foolproof way.
> 
> 
> http://reviews.llvm.org/D3401
> 
> Files:
>  source/Plugins/Process/elf-core/ProcessElfCore.cpp
>  source/Plugins/Process/elf-core/ProcessElfCore.h
> 
> Index: source/Plugins/Process/elf-core/ProcessElfCore.cpp
> ===================================================================
> --- source/Plugins/Process/elf-core/ProcessElfCore.cpp
> +++ source/Plugins/Process/elf-core/ProcessElfCore.cpp
> @@ -25,6 +25,7 @@
> 
> #include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
> #include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
> +#include "Plugins/Process/Utility/FreeBSDSignals.h"
> 
> // Project includes
> #include "ProcessElfCore.h"
> @@ -105,6 +106,8 @@
>     m_core_module_sp (),
>     m_core_file (core_file),
>     m_dyld_plugin_name (),
> +    m_os(llvm::Triple::UnknownOS),
> +    m_signals_sp (),
>     m_thread_data_valid(false),
>     m_thread_data(),
>     m_core_aranges ()
> @@ -229,6 +232,15 @@
>     if (arch.IsValid())
>         m_target.SetArchitecture(arch);
> 
> +    switch (m_os)
> +    {
> +        case llvm::Triple::FreeBSD:
> +            m_signals_sp.reset(new FreeBSDSignals());
> +            break;
> +        default:
> +            break;
> +    }
> +
>     return error;
> }
> 
> @@ -342,6 +354,8 @@
> ProcessElfCore::Clear()
> {
>     m_thread_list.Clear();
> +    m_os = llvm::Triple::UnknownOS;
> +    m_signals_sp.reset();
> }
> 
> void
> @@ -486,6 +500,7 @@
>         DataExtractor note_data (segment_data, note_start, note_size);
>         if (note.n_name == "FreeBSD")
>         {
> +            m_os = llvm::Triple::FreeBSD;
>             switch (note.n_type)
>             {
>                 case NT_FREEBSD_PRSTATUS:
> Index: source/Plugins/Process/elf-core/ProcessElfCore.h
> ===================================================================
> --- source/Plugins/Process/elf-core/ProcessElfCore.h
> +++ source/Plugins/Process/elf-core/ProcessElfCore.h
> @@ -104,6 +104,18 @@
>     IsAlive ();
> 
>     //------------------------------------------------------------------
> +    // Process Signals
> +    //------------------------------------------------------------------
> +    virtual lldb_private::UnixSignals &
> +    GetUnixSignals()
> +    {
> +        if (m_signals_sp)
> +            return *m_signals_sp;
> +        else
> +            return Process::GetUnixSignals();
> +    }
> +
> +    //------------------------------------------------------------------
>     // Process Memory
>     //------------------------------------------------------------------
>     virtual size_t
> @@ -142,6 +154,9 @@
>     std::string  m_dyld_plugin_name;
>     DISALLOW_COPY_AND_ASSIGN (ProcessElfCore);
> 
> +    llvm::Triple::OSType m_os;
> +    std::shared_ptr<lldb_private::UnixSignals> m_signals_sp;
> +
>     // True if m_thread_contexts contains valid entries
>     bool m_thread_data_valid;
> <D3401.1.patch>_______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits




More information about the lldb-commits mailing list