> On Mar 21, 2020, at 11:36 AM, Vitaly Cheptsov <chept...@ispras.ru> wrote:
> 
> Andrew,
> 
> Thanks once again, but unfortunately it is not that simple. Below I answered 
> inline explaining the particular issues, which mostly seem to be specific to 
> CLANGPDB. LLVM stack emits PDB debug files, and even though LLDB does support 
> them to some level, it is unlikely that this will be working well enough 
> soon. We should really stick to more or less native debug formats, ideally 
> those that have proper open specifications, on all platforms, and for Unix 
> that’s DWARF.
> 

Vitaly,

I understand and I use the Xcode clang and not the CLANGPDB, but I use lldb a 
lot I was just trying to point out what works with Xcode. 


> I am pretty sure LLVM can be taught to emit DWARF debug information even for 
> PE files. Perhaps we can either make some option or provide a separate 
> toolchain for this? Another way would be recovering CLANGELF as originally 
> suggested.
> 

There was a bug recently in the  x86_64-pc-win32-macho triple and we had to add 
-gdwarf to force it emit dwarf. Not sure what that compiler flag would do to 
CLANGPDB but it is worth a try? Last flag wins for the compiler. 


>> You can teach lldb about types. There is some example code here: 
>> https://github.com/tianocore/edk2/blob/master/EmulatorPkg/Unix/lldbefi.py 
>> <https://github.com/tianocore/edk2/blob/master/EmulatorPkg/Unix/lldbefi.py>
> This code works just fine with LLDB and DWARF (e.g. XCODE5), though I have 
> not yet completed these changes for my scripts for LLDB, only for GDB. 
> However, with CLANGPDB generated files it is not functional. The reason for 
> this is because LLDB is unaware of the underlying type, i.e. it does not know 
> what is EFI_STATUS or UINT32. I can implement pretty-printing when LLDB knows 
> about a typedef, but it is not possible to do this when the debug information 
> is already gone or not parsed:
> 
> (lldb) p Status
> (unsigned long long) $1 = 0
> (lldb) p &Status
> (unsigned long long *) $2 = 0x000000007fe19ad8
> (lldb) p (EFI_STATUS)Status
> error: use of undeclared identifier 'EFI_STATUS'
> 
> Just in case I tried using exactly your code, and other stuff like source 
> level debugging works just fine and symbolication works fine, so it should be 
> some bug with PDB in particular.
> 
>> That is strange as globals usually work best? The common issue I've seen is 
>> getting the slide wrong. The EFI modules are linked at a value near zero and 
>> relocated into memory, so the slide represents that adjustment. 
>> 
>> You can use `image dump sections` and ` image dump symtab` to see lldb's 
>> view of symbols. More info here [1]. 
> 
> Yes, this one is a bit complicated, once again due to PDB most likely. It 
> knows about global symbols, but does not list them in symtab:
> 
> (lldb) image dump symtab
> Dumping symbol table for 91 modules.
> Symtab, file = GdbSyms/Bin/X64_CLANGPDB/GdbSyms.dll, num_symbols = 0
> Symtab, file = 
> /Users/user/Documents/UefiWorkspace/Build/OvmfX64/NOOPT_CLANGPDB/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll,
>  num_symbols = 0
> Symtab, file = 
> /Users/user/Documents/UefiWorkspace/Build/OvmfX64/NOOPT_CLANGPDB/X64/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe/DEBUG/DevicePathDxe.dll,
>  num_symbols = 0
> …
> 
> The slides are correct, but there are two nuances that collide with it.
> 
> 1. There are multiple instances of the globals with the same name (e.g. gBS), 
> but for some reason LLDB always tries to print the globals from the first 
> module. This happens even when I am source-level debugging, and I see a gBS 
> symbol from another module (e.g. DxeCore) used right at the same line. With 
> GDB the closest symbol is used, but with LLDB it is always coming from the 
> first module. I tried checking expr help to find whether I can pass it a 
> module explicitly, but also failed.
> 

Usually what happens with lldb is you get the global that is in scope for the 
current frame. 

> 2.  To be able to get EFI types to locate the EFI_SYSTEM_TABLE_POINTER I add 
> a dummy GdbSyms image, which is not loaded to the firmware. So basically I 
> cannot slide what is not in the memory, and this is also my first image. I 
> tried deleting it anyhow, but it failed for me.
> 

I've not used the fake image to get things done so I can't speak to that. I 
have used a fake target so I could have XIP PEIM and shadowed PEIM address 
available at the same time. You can't have a module loaded at 2 addresses at 
the same time in llldb. But you might be able to use a fake target for your 
fake stuff?

Just in case:

          # create a faka target to store info about symbols
          PeiXipTarget = target.debugger.CreateTarget (None, 
"i386-apple-macosx", "remote-macosx", True, error)

          # make sure the gdb-remote  connection target is the active target
          target.debugger.SetSelectedTarget (target)


> (lldb) image dump sections
> Dumping sections for 91 modules.
> Sections for 'GdbSyms/Bin/X64_CLANGPDB/GdbSyms.dll' (x86_64):
>   SectID     Type             Load Address                             Perm 
> File Off.  File Size  Flags      Section Name
>   ---------- ---------------- ---------------------------------------  ---- 
> ---------- ---------- ---------- ----------------------------
>   0xffffffffffffffff container        
> [0x0000000000000000-0x0000000000006ec0)* ---  0x00000000 0x00000000 
> 0x00000000 GdbSyms.dll.
>   0x00000001 code             [0x0000000000000220-0x0000000000005bd6)* ---  
> 0x00000220 0x000059c0 0x60000020 GdbSyms.dll...text
>   0x00000002 data             [0x0000000000005be0-0x0000000000006d79)* ---  
> 0x00005be0 0x000011a0 0x40000040 GdbSyms.dll...rdata
>   0x00000003 data             [0x0000000000006d80-0x0000000000006e30)* ---  
> 0x00006d80 0x00000060 0xc0000040 GdbSyms.dll...data
>   0x00000004 regular          [0x0000000000006e40-0x0000000000006ea4)* ---  
> 0x00006de0 0x00000080 0x42000040 GdbSyms.dll...reloc
> Sections for 
> '/Users/user/Documents/UefiWorkspace/Build/OvmfX64/NOOPT_CLANGPDB/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll'
>  (x86_64):
>   SectID     Type             Load Address                             Perm 
> File Off.  File Size  Flags      Section Name
>   ---------- ---------------- ---------------------------------------  ---- 
> ---------- ---------- ---------- ----------------------------
>   0xffffffffffffffff container        
> [0x0000000000000000-0x00000000000523a0)* ---  0x00000000 0x00000000 
> 0x00000000 DxeCore.dll.
>   0x00000001 code             [0x000000007fe1b220-0x000000007fe61e34)  ---  
> 0x00000220 0x00046c20 0x60000020 DxeCore.dll...text
>   0x00000002 data             [0x000000007fe61e40-0x000000007fe68065)  ---  
> 0x00046e40 0x00006240 0x40000040 DxeCore.dll...rdata
>   0x00000003 data             [0x000000007fe68080-0x000000007fe6d160)  ---  
> 0x0004d080 0x000018a0 0xc0000040 DxeCore.dll...data
>   0x00000004 regular          [0x000000007fe6d160-0x000000007fe6d398)  ---  
> 0x0004e920 0x00000240 0x42000040 DxeCore.dll...reloc
> Sections for 
> '/Users/user/Documents/UefiWorkspace/Build/OvmfX64/NOOPT_CLANGPDB/X64/MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe/DEBUG/DevicePathDxe.dll'
>  (x86_64):
>   SectID     Type             Load Address                             Perm 
> File Off.  File Size  Flags      Section Name
>   ---------- ---------------- ---------------------------------------  ---- 
> ---------- ---------- ---------- ----------------------------
>   0xffffffffffffffff container        
> [0x0000000000000000-0x0000000000014420)* ---  0x00000000 0x00000000 
> 0x00000000 DevicePathDxe.dll.
>   0x00000001 code             [0x000000007f986220-0x000000007f996cc6)  ---  
> 0x00000220 0x00010ac0 0x60000020 DevicePathDxe.dll...text
>   0x00000002 data             [0x000000007f996ce0-0x000000007f999b04)  ---  
> 0x00010ce0 0x00002e40 0x40000040 DevicePathDxe.dll...rdata
>   0x00000003 data             [0x000000007f999b20-0x000000007f99a1a2)  ---  
> 0x00013b20 0x00000660 0xc0000040 DevicePathDxe.dll...data
>   0x00000004 regular          [0x000000007f99a1c0-0x000000007f99a404)  ---  
> 0x00014180 0x00000260 0x42000040 DevicePathDxe.dll…reloc
> …
> 
> So, all in all, unique global variables work, but there is no way to access 
> duplicating variables. They either resolve to GdbSyms or just cause a crash:
> 
> (lldb) p mDebugInfoTableHeader
> (EFI_DEBUG_IMAGE_INFO_TABLE_HEADER) $0 = {
>   UpdateStatus = 2
>   TableSize = 92
>   EfiDebugImageInfoTable = 0x000000007f814018
> }
> (lldb) p gBS
> error: Couldn't materialize: couldn't get the value of variable ::gBS: read 
> memory from 0x6df8 failed
> error: errored out in DoExecute, couldn't PrepareToExecuteJITExpression
> (lldb) p gEfiGlobalVariableGuid
> 0  libLLVM.dylib            0x000000010e52ee68 
> llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 40
> 1  libLLVM.dylib            0x000000010e52f262 SignalHandler(int) + 188
> 2  libsystem_platform.dylib 0x00007fff6ca5642d _sigtramp + 29
> ...
> 

If you want to inspect globals I think this logic works to get you data, you 
would need to print it out etc. 

SBValueList = lldb.target.FindGlobalVariables ("gST", 1024)
for SBValue in SBValueList:
        Module = SBValue.GetAddress().GetModule() 
        ModuleStr = SBValue.GetAddress().GetModule().GetFileSpec().GetFilename()
        Start = int (SBValue.GetLocation(), 0)
        End = Start + SBValue.GetByteSize() - 1
        SBDeclaration = SBValue.GetDeclaration()
        Column = SBDeclaration.GetColumn()

I wrote a command in the early days to dump out all the instances of a global. 

You can also try (lldb) image lookup -Av --name gST

>> You can tell lldb to use the older Python like this (from the Terminal.app):
>> $ defaults write com.apple.dt.lldb DefaultPythonVersion 2
> 
> Thanks, that helped quite a bit, but for some reason Xcode version still 
> crashes more for me. I attached a couple of stack traces if you feel like 
> having a look, but once again it seems that it is all about the PDB plugin.
> 
>> For the macOS API clang emits frame pointers, so you can walk the stack 
>> without symbols. You could try adding the compiler flag to emit the frame 
>> pointers. 
> 

This is easy enough to check as %rpb is the frame pointer so it will get 
saved/restored on function entry/exit. 

> I am pretty sure stack frames are not disabled with UEFI, as sometimes 
> backtracing works just fine. To me it looks like debug information parsing 
> randomly breaks in LLDB, and once it happens it forgets about other images:
> 
> (lldb) b CoreLocateHandleBuffer
> Breakpoint 2: where = DxeCore.dll`CoreLocateHandleBuffer + 31 at 
> Locate.c:649, address = 0x000000007fe36e4f
> (lldb) c
> Process 1 resuming
> Process 1 stopped
> * thread #1, stop reason = breakpoint 2.1
>     frame #0: 0x000000007fe36e4f 
> DxeCore.dll`CoreLocateHandleBuffer(SearchType=ByProtocol, 
> Protocol=0x000000007f978160, SearchKey=0x0000000000000000, 
> NumberHandles=0x000000007fe19fd8, Buffer=0x000000007fe19fc0) at Locate.c:649
>    646          EFI_STATUS          Status;
>    647          UINTN               BufferSize;
>    648        
> -> 649          if (NumberHandles == NULL) {
>    650            return EFI_INVALID_PARAMETER;
>    651          }
>    652        
> (lldb) bt
> * thread #1, stop reason = breakpoint 2.1
>   * frame #0: 0x000000007fe36e4f 
> DxeCore.dll`CoreLocateHandleBuffer(SearchType=ByProtocol, 
> Protocol=0x000000007f978160, SearchKey=0x0000000000000000, 
> NumberHandles=0x000000007fe19fd8, Buffer=0x000000007fe19fc0) at Locate.c:649
>     frame #1: 0x000000007fe36816 
> DxeCore.dll`CoreLocateDevicePath(Protocol=0x000000007f978160, 
> DevicePath=0x000000007fe1a060, Device=0x000000007fe1a068) at Locate.c:466
>     frame #2: 0x000000007f97479a SecurityStubDxe.dll
> 
> ———
> 
> (lldb) b CopyMem
> Breakpoint 3: 70 locations.
> (lldb) c
> Process 1 resuming
> Process 1 stopped
> * thread #1, stop reason = breakpoint 2.53 3.53
>     frame #0: 0x000000007e5c13b3 
> MnpDxe.dll`CopyMem(DestinationBuffer=0x000000007fe19b50, 
> SourceBuffer=0x000000007e2aa470, Length=656) at CopyMemWrapper.c:47
>    44           IN UINTN       Length
>    45           )
>    46         {
> -> 47           if (Length == 0) {
>    48             return DestinationBuffer;
>    49           }
>    50           ASSERT ((Length - 1) <= (MAX_ADDRESS - 
> (UINTN)DestinationBuffer));
> (lldb) bt
> * thread #1, stop reason = breakpoint 2.53 3.53
>   * frame #0: 0x000000007e5c13b3 
> MnpDxe.dll`CopyMem(DestinationBuffer=0x000000007fe19b50, 
> SourceBuffer=0x000000007e2aa470, Length=656) at CopyMemWrapper.c:47
> (lldb) finish
> error: Could not create return address breakpoint.
> (lldb) n
> Process 1 stopped
> * thread #1, stop reason = step over
>     frame #0: 0x000000007e5c13ce 
> MnpDxe.dll`CopyMem(DestinationBuffer=0x000000007fe19b50, 
> SourceBuffer=0x000000007e2aa470, Length=656) at CopyMemWrapper.c:50
>    47           if (Length == 0) {
>    48             return DestinationBuffer;
>    49           }
> -> 50           ASSERT ((Length - 1) <= (MAX_ADDRESS - 
> (UINTN)DestinationBuffer));
>    51           ASSERT ((Length - 1) <= (MAX_ADDRESS - (UINTN)SourceBuffer));
>    52         
>    53           if (DestinationBuffer == SourceBuffer) {
> (lldb)
> ...
> Process 1 stopped
> * thread #1, stop reason = step over
>     frame #0: 0x000000007e5c14b4 
> MnpDxe.dll`CopyMem(DestinationBuffer=0x000000007fe19b50, 
> SourceBuffer=0x000000007e2aa470, Length=656) at CopyMemWrapper.c:57
>    54             return DestinationBuffer;
>    55           }
>    56           return InternalMemCopyMem (DestinationBuffer, SourceBuffer, 
> Length);
> -> 57         }
> (lldb)
> Process 1 stopped
> * thread #1, stop reason = step over
>     frame #0: 0x000000007e5c726e MnpDxe.dll
> ->  0x7e5c726e: mov    rax, qword ptr [rsp + 0x60]
>     0x7e5c7273: cmp    byte ptr [rax + 0x68], 0x0
>     0x7e5c7277: jne    0x7e5c7291
>     0x7e5c727d: movabs rax, -0x7fffffffffffffed
> (lldb) bt
> * thread #1, stop reason = step over
>   * frame #0: 0x000000007e5c726e MnpDxe.dll 
> 
> ———
> 
> (lldb) c
> Process 1 resuming
> Process 1 stopped
> * thread #1, stop reason = signal SIGINT
>     frame #0: 0x000000007fe4d72e DxeCore.dll
> ->  0x7fe4d72e: cmp    al, 0x0
>     0x7fe4d730: je     0x7fe4d765
>     0x7fe4d736: mov    rcx, qword ptr [rsp + 0x20]
>     0x7fe4d73b: call   0x7fe4c4b0
> (lldb) bt
> * thread #1, stop reason = signal SIGINT
>   * frame #0: 0x000000007fe4d72e DxeCore.dll
> 
>> On macOS the Mach-O and dSYM have a UUID (dwarfdump -u) that is indexed by 
>> Spotlight (mdfind "com_apple_xcode_dsym_uuids == *") [2]
>> This should be the UUID in the debug directory entry and you can use that to 
>> lookup the symbols like this:
>> 
>> module = target.AddModule (None, None, uuid)
>> SBError = target.SetModuleLoadAddress (module, LoadAddress + TeAdjust)
>> 
>> Also lldb has built in help for commands, but it is kind of terse since it 
>> is autogenerated from the C++ swig. 
>> (lldb) script help (lldb.target.AddModule)
>> Help on method AddModule in module lldb:
>> 
>> AddModule(self, *args) method of lldb.SBTarget instance
>>     AddModule(SBTarget self, SBModule module) -> bool
>>     AddModule(SBTarget self, char const * path, char const * triple, char 
>> const * uuid) -> SBModule
>>     AddModule(SBTarget self, char const * path, char const * triple, char 
>> const * uuid_cstr, char const * symfile) -> SBModule
>>     AddModule(SBTarget self, SBModuleSpec module_spec) -> SBModule
>> 
>> The minimum  you need to symbolicate a frame is uuid, LoadAddress, and PC. 
>> 
>> [1] http://lldb.llvm.org/use/map.html <http://lldb.llvm.org/use/map.html>
>> [2] http://lldb.llvm.org/use/symbols.html 
>> <http://lldb.llvm.org/use/symbols.html>
> Thanks for the links again. Yes, I am using some of these, and in fact for 
> GDB that’s pretty much what I did when I worked with XCODE5. It is very 
> likely that when I get to complete LLDB support for XCODE5 it will work quite 
> fine too. But I am already happy with XCODE5 here, and making it even better 
> will only help myself, but not other people with e.g. Linux or people that 
> want me to use the same compiler with them.
> 

Thanks for looking out for others. 

Thanks,

Andrew Fish

> Best regards,
> Vitaly
> 
> 
>> 21 марта 2020 г., в 20:13, Andrew Fish <af...@apple.com 
>> <mailto:af...@apple.com>> написал(а):
>> 
>> 
>> 
>>> On Mar 21, 2020, at 3:28 AM, Vitaly Cheptsov <chept...@ispras.ru 
>>> <mailto:chept...@ispras.ru>> wrote:
>>> 
>>> Hello,
>>> 
>>> Andrey, thanks for the hint, it was very helpful. I rewrote the GDB scripts 
>>> to work with LLDB[1] and was able to debug OVMF built with CLANGPDB. While 
>>> it is still quite dirty, at the very least it works.
>>> 
>>> Unfortunately the experience was close to terrible. I may certainly do 
>>> something wrong, but it is clear that PDB and LLDB do not support each 
>>> other well enough. After spending several hours on playing with the tools 
>>> my conclusion is that LLDB is simply not suited for UEFI PDB debugging, and 
>>> we really want DWARF  as there is no other opensource debugger that 
>>> supports PDB on macOS and Linux
>>> 
>>> In case somebody knows workarounds here are the issues I faced:
>>> 
>>> 1. All integer alias typedefs are discarded in favour of underlying types. 
>>> This way EFI_STATUS and EFI_TPL become unsigned long long, CHAR8 becomes 
>>> char, and CHAR16 becomes unsigned short. It does not look like LLDB has the 
>>> original types anywhere at all, and it also does not have them registered.
>>> 
>>>     frame #0: 0x000000007fe242aa 
>>> DxeCore.dll`CoreAllocatePoolPagesI(PoolType=EfiBootServicesData, NoPages=1, 
>>> Granularity=4096, NeedGuard='\0') at Pool.c:322
>>>    319          return NULL;
>>>    320        }
>>>    321      
>>> -> 322        Buffer = CoreAllocatePoolPages (PoolType, NoPages, 
>>> Granularity, NeedGuard);
>>>    323        CoreReleaseMemoryLock ();
>>>    324      
>>>    325        if (Buffer != NULL) {
>>> (lldb) p Status
>>> (unsigned long long) $3 = 0
>>> 
>>> Structures work more or less fine, but for simpler types like strings we 
>>> are out of even potential pretty-printing.
>>> 
>> 
>> Vitaly,
>> 
>> You can teach lldb about types. There is some example code here: 
>> https://github.com/tianocore/edk2/blob/master/EmulatorPkg/Unix/lldbefi.py 
>> <https://github.com/tianocore/edk2/blob/master/EmulatorPkg/Unix/lldbefi.py>
>>> 2. Global variables are not accessible. I am not sure what happens, but 
>>> they either seem to not relocate or conflict with the other names:
>>> 
>>> (lldb) p gST
>>> error: Couldn't materialize: couldn't get the value of variable ::gST: read 
>>> memory from 0x6e18 failed
>>> error: errored out in DoExecute, couldn't PrepareToExecuteJITExpression
>>> (lldb) p &gST
>>> error: Couldn't materialize: couldn't get the value of variable ::gST: read 
>>> memory from 0x6e18 failed
>>> error: errored out in DoExecute, couldn't PrepareToExecuteJITExpression
>>> 
>> 
>> That is strange as globals usually work best? The common issue I've seen is 
>> getting the slide wrong. The EFI modules are linked at a value near zero and 
>> relocated into memory, so the slide represents that adjustment. 
>> 
>> You can use `image dump sections` and ` image dump symtab` to see lldb's 
>> view of symbols. More info here [1]. 
>> 
>>> 3. Quite a number of crashes.
>>> 
>>> In most cases autocompletion by tab press causes a crash. E.g.
>>> 
>>> b I<TAB>
>>> 
>>> So will do printing of a GUID, e.g. p gEfiGlobalVariableGuid.
>>> 
>>> This may have to do with Python compatibility as Xcode 11 LLDB that uses 
>>> Python 3 generally crashes more often than MacPorts LLDB 9.0. Surprisingly 
>>> structures work more or less fine.
>>> 
>> 
>> You can tell lldb to use the older Python like this (from the Terminal.app):
>> $ defaults write com.apple.dt.lldb DefaultPythonVersion 2
>> 
>>> 4. Ctrl+C does not produce a valid backtrace. When I break with a 
>>> breakpoint, I see a proper stacktrace with more than one entry, with 
>>> function prototypes and values. When I break with Ctrl+C I only see some 
>>> weird backtrace with most of the entries missing regardless of frame 
>>> position:
>>> 
>>> (lldb) bt
>>> * thread #1, stop reason = signal SIGTRAP
>>>   * frame #0: 0x000000007fe4c5f3 DxeCore.dll
>>> 
>>> Probably more and all the unintuitive stuff like the lack of more 
>>> functional TUI, but it is hard to remember all the trials.
>>> 
>> 
>> For the macOS API clang emits frame pointers, so you can walk the stack 
>> without symbols. You could try adding the compiler flag to emit the frame 
>> pointers. 
>> 
>> 
>>> [1] 
>>> https://github.com/acidanthera/OpenCorePkg/blob/master/Debug/Scripts/lldb_uefi.py
>>>  
>>> <https://github.com/acidanthera/OpenCorePkg/blob/master/Debug/Scripts/lldb_uefi.py>
>>> 
>> 
>> On macOS the Mach-O and dSYM have a UUID (dwarfdump -u) that is indexed by 
>> Spotlight (mdfind "com_apple_xcode_dsym_uuids == *") [2]
>> This should be the UUID in the debug directory entry and you can use that to 
>> lookup the symbols like this:
>> 
>> module = target.AddModule (None, None, uuid)
>> SBError = target.SetModuleLoadAddress (module, LoadAddress + TeAdjust)
>> 
>> Also lldb has built in help for commands, but it is kind of terse since it 
>> is autogenerated from the C++ swig. 
>> (lldb) script help (lldb.target.AddModule)
>> Help on method AddModule in module lldb:
>> 
>> AddModule(self, *args) method of lldb.SBTarget instance
>>     AddModule(SBTarget self, SBModule module) -> bool
>>     AddModule(SBTarget self, char const * path, char const * triple, char 
>> const * uuid) -> SBModule
>>     AddModule(SBTarget self, char const * path, char const * triple, char 
>> const * uuid_cstr, char const * symfile) -> SBModule
>>     AddModule(SBTarget self, SBModuleSpec module_spec) -> SBModule
>> 
>> The minimum  you need to symbolicate a frame is uuid, LoadAddress, and PC. 
>> 
>> [1] http://lldb.llvm.org/use/map.html <http://lldb.llvm.org/use/map.html>
>> [2] http://lldb.llvm.org/use/symbols.html 
>> <http://lldb.llvm.org/use/symbols.html>
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>> 
>>> Best wishes,
>>> Vitaly
>>> 
>>>> 20 марта 2020 г., в 22:14, Andrew Fish <af...@apple.com 
>>>> <mailto:af...@apple.com>> написал(а):
>>>> 
>>>> 
>>>> 
>>>>> On Mar 20, 2020, at 8:13 AM, Vitaly Cheptsov <chept...@ispras.ru 
>>>>> <mailto:chept...@ispras.ru>> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> We noticed that the original bugzilla, which intended to add new LLVM 
>>>>> toolchain support[1], also wanted to bring ELF format support with DWARF 
>>>>> debugging information. For some reason this did not make its way into EDK 
>>>>> II, and we are currently wondering, how can one debug binaries built with 
>>>>> LLVM 9.0.
>>>>> 
>>>>> For macOS and XCODE5 toolchain we use GDB scripts based on Andrei 
>>>>> Warkentin’s work, which allow us to integrate with QEMU and VMware[2]. It 
>>>>> is likely that they should work with little to no work on Linux with 
>>>>> CLANG38/GCC5 with GDB once again. However, CLANGPDB apparently is using 
>>>>> PDB debugging information, which I believe is not handled with GDB.
>>>>> 
>>>>> Could you please provide the details on the matter and let us know about 
>>>>> the recommended route?
>>>>> — Is dropping CLANGELF just a temporary measure and it should be 
>>>>> resubmitted again?
>>>>> — Should LLDB, which seems to be aware of PDB, be used instead of GDB, 
>>>>> when building with CLANGPDB? If so, did anybody try that?
>>>>> 
>>>> 
>>>> Vitaly,
>>>> 
>>>> I've not tried the CLANGPDB path, but if you want to connect lldb to QEMU 
>>>> you need to set  plugin.process.gdb-remote.target-definition-file [1] to 
>>>> [2]. 
>>>> 
>>>> [1]  lldb -o "settings set 
>>>> plugin.process.gdb-remote.target-definition-file 
>>>> x86_64_target_definition.py" -o "gdb-remote 9000"
>>>> [2] 
>>>> https://github.com/llvm-mirror/lldb/blob/master/examples/python/x86_64_target_definition.py
>>>>  
>>>> <https://github.com/llvm-mirror/lldb/blob/master/examples/python/x86_64_target_definition.py>
>>>> 
>>>> Thanks,
>>>> 
>>>> Andrew Fish
>>>> 
>>>>> Thanks!
>>>>> 
>>>>> Best regards,
>>>>> Vitaly
>>>>> 
>>>>> [1] https://bugzilla.tianocore.org/show_bug.cgi?id=1603 
>>>>> <https://bugzilla.tianocore.org/show_bug.cgi?id=1603>
>>>>> [2] 
>>>>> https://github.com/acidanthera/OpenCorePkg/blob/master/Debug/Scripts/gdb_uefi.py
>>>>>  
>>>>> <https://github.com/acidanthera/OpenCorePkg/blob/master/Debug/Scripts/gdb_uefi.py>
>>>>> 
>>> 
> 
> 
> <crashes.txt>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#56073): https://edk2.groups.io/g/devel/message/56073
Mute This Topic: https://groups.io/mt/72100961/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to