<div dir="ltr">Greg,<div><br></div><div>I modified the patch to compile only on Linux/FreeBSD system. I did a quick compilation on a borrowed MacMini and it passed. Please let me know what you think of the attached patch.</div>

<div><br></div><div>Thanks</div><div>Samuel</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jul 12, 2013 at 4:04 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On Jul 12, 2013, at 3:59 PM, Greg Clayton <<a href="mailto:gclayton@apple.com">gclayton@apple.com</a>> wrote:<br>
<br>
> I reverted the ELF core file support until we can get the darwin build working. I could have commented out the initialization in lldb.cpp, but there were changes in AuxVector that used the ELF core file process plug-in name, so the ELF core file process plug-in needed to be compiled in in order to link.<br>


><br>
> It seems like we need to cleanup the register context classes to make sure ones that are used under ProcessPOSIX are completely separate from the ones that ProcessElfCore will use. The reverted patch had the base RegisterContext class with a GetMonitor() accessor that required ProcessPOSIX to be compiled in which doesn't work for darwin builds since ProcessPOSIX is only compiled in on systems that natively use it.<br>


<br>
</div>Also the base register context class can't have this because the process will either be ProcessPOSIX or ProcessElfCore. If the GetMonitor() function got calls when ProcessElfCore was the process we could have issues.<br>


<br>
To work around this on MacOSX, we have a base RegisterContextDarwin_<ARCH> which must be subclassed and it has pure virtual functions:<br>
<br>
    virtual int<br>
    DoReadGPR (lldb::tid_t tid, int flavor, GPR &gpr) = 0;<br>
<br>
    virtual int<br>
    DoReadFPU (lldb::tid_t tid, int flavor, FPU &fpu) = 0;<br>
<br>
    virtual int<br>
    DoReadEXC (lldb::tid_t tid, int flavor, EXC &exc) = 0;<br>
<br>
    virtual int<br>
    DoWriteGPR (lldb::tid_t tid, int flavor, const GPR &gpr) = 0;<br>
<br>
    virtual int<br>
    DoWriteFPU (lldb::tid_t tid, int flavor, const FPU &fpu) = 0;<br>
<br>
    virtual int<br>
    DoWriteEXC (lldb::tid_t tid, int flavor, const EXC &exc) = 0;<br>
<br>
The mach core files will override these functions and hook them up to the core file register states, and other targets can do what they need to.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
> I will be happy to get the Xcode project building with any additional source files once they build and link for darwin.<br>
><br>
> % svn commit<br>
> Sending        lib/Makefile<br>
> Sending        source/CMakeLists.txt<br>
> Sending        source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.cpp<br>
> Sending        source/Plugins/Makefile<br>
> Sending        source/Plugins/Process/CMakeLists.txt<br>
> Sending        source/Plugins/Process/Linux/ProcessLinux.cpp<br>
> Sending        source/Plugins/Process/Linux/ProcessLinux.h<br>
> Sending        source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp<br>
> Sending        source/Plugins/Process/elf-core/CMakeLists.txt<br>
> Sending        source/Plugins/Process/elf-core/Makefile<br>
> Sending        source/Plugins/Process/elf-core/ProcessElfCore.cpp<br>
> Sending        source/Plugins/Process/elf-core/ProcessElfCore.h<br>
> Sending        source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.cpp<br>
> Sending        source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.h<br>
> Sending        source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.cpp<br>
> Sending        source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.h<br>
> Sending        source/Plugins/Process/elf-core/ThreadElfCore.cpp<br>
> Sending        source/Plugins/Process/elf-core/ThreadElfCore.h<br>
> Sending        source/lldb.cpp<br>
> Transmitting file data ...................<br>
> Committed revision 186223.<br>
><br>
><br>
><br>
> On Jul 12, 2013, at 3:30 PM, Greg Clayton <<a href="mailto:gclayton@apple.com">gclayton@apple.com</a>> wrote:<br>
><br>
>> RegisterContextCoreLinux_x86_64 inherits from RegisterContextLinux_x86_64 which inherits from RegisterContext_x86_64 which uses has:<br>
>><br>
>>   ProcessMonitor &GetMonitor();<br>
>><br>
>> This register context used by the core file can't use this since the process plug-in will be ProcessElfCore and the implementation of GetMonitor() does:<br>
>><br>
>><br>
>> ProcessMonitor &<br>
>> RegisterContext_x86_64::GetMonitor()<br>
>> {<br>
>>   ProcessSP base = CalculateProcess();<br>
>>   ProcessPOSIX *process = static_cast<ProcessPOSIX*>(base.get());<br>
>>   return process->GetMonitor();<br>
>> }<br>
>><br>
>> ProcessELFCore doesn't, nor should it inherit from ProcessPOSIX:<br>
>><br>
>><br>
>> class ProcessElfCore : public lldb_private::Process<br>
>> {<br>
>> public:<br>
><br>
</div></div><div class="HOEnZb"><div class="h5">> _______________________________________________<br>
> lldb-commits mailing list<br>
> <a href="mailto:lldb-commits@cs.uiuc.edu">lldb-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><br>
<br>
</div></div></blockquote></div><br></div>