[PATCH 0/3] Add support for gdb and lldb


Andrew Fish
 

This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
efi_debugging.py: - Add debugger agnostic debugging Python Classes
efi_gdb.py: - Add gdb EFI commands and pretty Print
efi_lldb.py: - Add lldb EFI commands and pretty Print

efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
efi_gdb.py | 918 +++++++++++++++++++
efi_lldb.py | 1044 ++++++++++++++++++++++
3 files changed, 4149 insertions(+)
create mode 100755 efi_debugging.py
create mode 100755 efi_gdb.py
create mode 100755 efi_lldb.py

--
2.30.1 (Apple Git-130)


Rebecca Cran
 

I realized the Arm gcc 10.3 aarch64 download from https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads uses Python 2.7.18 and not Python 3, so the f-Strings and likely more cause problems. I suspect at this point there's little point putting effort into supporting Python 2.


I noticed a couple of issues though: in efi_debugging.py the Attributes text is partially underlined with the non-ASCII characters '——————' instead of '----------'.

     Attributes
     ——————----
     _dict_ : dictionay


There are also a couple of typos of 'dictionary':


_dict_ : dictionay


--
Rebecca Cran

On 8/8/21 3:46 PM, Andrew Fish via groups.io wrote:
This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
efi_debugging.py: - Add debugger agnostic debugging Python Classes
efi_gdb.py: - Add gdb EFI commands and pretty Print
efi_lldb.py: - Add lldb EFI commands and pretty Print

efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
efi_gdb.py | 918 +++++++++++++++++++
efi_lldb.py | 1044 ++++++++++++++++++++++
3 files changed, 4149 insertions(+)
create mode 100755 efi_debugging.py
create mode 100755 efi_gdb.py
create mode 100755 efi_lldb.py


Andrew Fish
 

On Aug 11, 2021, at 3:11 PM, Rebecca Cran <rebecca@nuviainc.com> wrote:

I realized the Arm gcc 10.3 aarch64 download from https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads uses Python 2.7.18 and not Python 3, so the f-Strings and likely more cause problems. I suspect at this point there's little point putting effort into supporting Python 2.
I’ve not tested on ARM yet, so please let me know if it works. I’d like to avoid Python 2.7 support is possible given it is passed its best by date.


I noticed a couple of issues though: in efi_debugging.py the Attributes text is partially underlined with the non-ASCII characters '——————' instead of '----------'.
Thanks did not notice that.

Attributes
——————----
_dict_ : dictionay


There are also a couple of typos of 'dictionary':


_dict_ : dictionay
Shoot though I fixed those

Thanks,

Andrew Fish


--
Rebecca Cran


On 8/8/21 3:46 PM, Andrew Fish via groups.io wrote:
This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
efi_debugging.py: - Add debugger agnostic debugging Python Classes
efi_gdb.py: - Add gdb EFI commands and pretty Print
efi_lldb.py: - Add lldb EFI commands and pretty Print

efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
efi_gdb.py | 918 +++++++++++++++++++
efi_lldb.py | 1044 ++++++++++++++++++++++
3 files changed, 4149 insertions(+)
create mode 100755 efi_debugging.py
create mode 100755 efi_gdb.py
create mode 100755 efi_lldb.py


Rebecca Cran
 

I should note my comments are against https://github.com/ajfish/edk2/tree/BZ3500-gdb, not the patches you sent out.

AARCH64 is working great! The only thing I noticed that doesn't look quite right is the following message on startup when running gdb -ex "target remote localhost:1234" -ex "source efi_gdb.py" -ex "efi":


Traceback (most recent call last):
  File "efi_gdb.py", line 804, in invoke
    self.restore_user_state()
  File "efi_gdb.py", line 690, in restore_user_state
    self.user_selected_frame.select()
gdb.error: Frame is invalid.
Traceback (most recent call last):
  File "efi_gdb.py", line 822, in invoke
    gdb.execute('efi symbols --extended')
gdb.error: Error occurred in Python: Frame is invalid.
Error occurred in Python: Error occurred in Python: Frame is invalid.


Running `bt` shows the full set of frames except for the last one which as expected is shown as ??.


--

Rebecca Cran

On 8/11/21 5:22 PM, Andrew Fish wrote:

On Aug 11, 2021, at 3:11 PM, Rebecca Cran <rebecca@nuviainc.com> wrote:

I realized the Arm gcc 10.3 aarch64 download from https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads uses Python 2.7.18 and not Python 3, so the f-Strings and likely more cause problems. I suspect at this point there's little point putting effort into supporting Python 2.
I’ve not tested on ARM yet, so please let me know if it works. I’d like to avoid Python 2.7 support is possible given it is passed its best by date.

I noticed a couple of issues though: in efi_debugging.py the Attributes text is partially underlined with the non-ASCII characters '——————' instead of '----------'.
Thanks did not notice that.

Attributes
——————----
_dict_ : dictionay


There are also a couple of typos of 'dictionary':


_dict_ : dictionay
Shoot though I fixed those




Thanks,

Andrew Fish

--
Rebecca Cran


On 8/8/21 3:46 PM, Andrew Fish via groups.io wrote:
This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
efi_debugging.py: - Add debugger agnostic debugging Python Classes
efi_gdb.py: - Add gdb EFI commands and pretty Print
efi_lldb.py: - Add lldb EFI commands and pretty Print

efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
efi_gdb.py | 918 +++++++++++++++++++
efi_lldb.py | 1044 ++++++++++++++++++++++
3 files changed, 4149 insertions(+)
create mode 100755 efi_debugging.py
create mode 100755 efi_gdb.py
create mode 100755 efi_lldb.py


Andrew Fish
 

Rebecca,

Sorry I may have been a commit or 2 behind on the private branch.

On Aug 11, 2021, at 5:30 PM, Rebecca Cran <rebecca@nuviainc.com> wrote:

I should note my comments are against https://github.com/ajfish/edk2/tree/BZ3500-gdb, not the patches you sent out.

AARCH64 is working great! The only thing I noticed that doesn't look quite right is the following message on startup when running gdb -ex "target remote localhost:1234" -ex "source efi_gdb.py" -ex "efi":


Traceback (most recent call last):
File "efi_gdb.py", line 804, in invoke
self.restore_user_state()
File "efi_gdb.py", line 690, in restore_user_state
self.user_selected_frame.select()
gdb.error: Frame is invalid.
Traceback (most recent call last):
File "efi_gdb.py", line 822, in invoke
gdb.execute('efi symbols --extended')
gdb.error: Error occurred in Python: Frame is invalid.
Error occurred in Python: Error occurred in Python: Frame is invalid.

Can you try again? I think I fixed this? The `efi symbols` command is saving user context, so it can restore the context. If there is not a valid target it can fail.

Also thanks for testing on AARCH64!!!!

Running `bt` shows the full set of frames except for the last one which as expected is shown as ??.
I noticed the stack unwind in the gdb builds can be a little wonky at times, I had to add some code to filter out the cruft.

Thanks,

Andrew Fish


--

Rebecca Cran


On 8/11/21 5:22 PM, Andrew Fish wrote:

On Aug 11, 2021, at 3:11 PM, Rebecca Cran <rebecca@nuviainc.com> wrote:

I realized the Arm gcc 10.3 aarch64 download from https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads uses Python 2.7.18 and not Python 3, so the f-Strings and likely more cause problems. I suspect at this point there's little point putting effort into supporting Python 2.
I’ve not tested on ARM yet, so please let me know if it works. I’d like to avoid Python 2.7 support is possible given it is passed its best by date.

I noticed a couple of issues though: in efi_debugging.py the Attributes text is partially underlined with the non-ASCII characters '——————' instead of '----------'.
Thanks did not notice that.

Attributes
——————----
_dict_ : dictionay


There are also a couple of typos of 'dictionary':


_dict_ : dictionay
Shoot though I fixed those




Thanks,

Andrew Fish

--
Rebecca Cran


On 8/8/21 3:46 PM, Andrew Fish via groups.io wrote:
This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
efi_debugging.py: - Add debugger agnostic debugging Python Classes
efi_gdb.py: - Add gdb EFI commands and pretty Print
efi_lldb.py: - Add lldb EFI commands and pretty Print

efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
efi_gdb.py | 918 +++++++++++++++++++
efi_lldb.py | 1044 ++++++++++++++++++++++
3 files changed, 4149 insertions(+)
create mode 100755 efi_debugging.py
create mode 100755 efi_gdb.py
create mode 100755 efi_lldb.py


Rebecca Cran
 

On 8/12/21 4:56 PM, Andrew Fish wrote:

Can you try again? I think I fixed this? The `efi symbols` command is saving user context, so it can restore the context. If there is not a valid target it can fail.
On X64 running OVMF 'source efi_gdb.py' lists lots of DLLs and finished with the backtrace.

On AARCH64 running SBSA-REF, I get similar output except where the backtrace at the end of 'source efi_gdb.py' output should be I get the following output:


AArch64`/home/bcran/src/upstream/uefi/Build/SbsaQemu/DEBUG_GCC5/AARCH64/MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe/DEBUG/UsbKbDxe.dll load = 0x101fb87d000
AArch64`/home/bcran/src/upstream/uefi/Build/SbsaQemu/DEBUG_GCC5/AARCH64/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe/DEBUG/UsbMassStorageDxe.dll load = 0x101fb874000
AArch64`/home/bcran/src/upstream/uefi/Build/SbsaQemu/DEBUG_GCC5/AARCH64/MdeModulePkg/Application/UiApp/UiApp/DEBUG/UiApp.dll load = 0x101f851a000   is already loaded
Traceback (most recent call last):
  File "efi_gdb.py", line 828, in invoke
    self.restore_user_state()
  File "efi_gdb.py", line 711, in restore_user_state
    self.user_selected_frame.select()
gdb.error: Frame is invalid.


However, I can run 'bt' and get what looks like a good stack trace.

With the latest code on your private branch, I still see non-ASCII characters that look out of place. e.g. In efi_debugging.py line 627, "Attributes" is underlined with a mixture of hyphen types.


--
Rebecca Cran


Rebecca Cran
 

I was wondering what your plan for committing these to the repo is? It would be nice to get them committed so people can start using them.


--
Rebecca Cran

On 8/8/21 3:46 PM, Andrew Fish via groups.io wrote:
This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
efi_debugging.py: - Add debugger agnostic debugging Python Classes
efi_gdb.py: - Add gdb EFI commands and pretty Print
efi_lldb.py: - Add lldb EFI commands and pretty Print

efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
efi_gdb.py | 918 +++++++++++++++++++
efi_lldb.py | 1044 ++++++++++++++++++++++
3 files changed, 4149 insertions(+)
create mode 100755 efi_debugging.py
create mode 100755 efi_gdb.py
create mode 100755 efi_lldb.py


Andrew Fish
 

Sorry the patches stalled out. I need to push them….

Thanks,

Andrew Fish

On Sep 14, 2021, at 4:47 PM, Rebecca Cran <rebecca@...> wrote:

I was wondering what your plan for committing these to the repo is? It would be nice to get them committed so people can start using them.


-- 
Rebecca Cran


On 8/8/21 3:46 PM, Andrew Fish via groups.io wrote:
This patch set adds debugging support for gdb and lldb.
It also adds generic debugging classes that use a file like object to
make it easy to import into any debugger that supports Python.

Since these debugging scripts don't depend on any EFI code I was thinking
we could place them in the root of the repo to be easy to discover.

I've tested gdb on Ubuntu and lldb on macOS for IA32 and X64.

Andrew Fish (3):
  efi_debugging.py: - Add debugger agnostic debugging Python Classes
  efi_gdb.py: - Add gdb EFI commands and pretty Print
  efi_lldb.py: - Add lldb EFI commands and pretty Print

 efi_debugging.py | 2187 ++++++++++++++++++++++++++++++++++++++++++++++
 efi_gdb.py       |  918 +++++++++++++++++++
 efi_lldb.py      | 1044 ++++++++++++++++++++++
 3 files changed, 4149 insertions(+)
 create mode 100755 efi_debugging.py
 create mode 100755 efi_gdb.py
 create mode 100755 efi_lldb.py