79474735

Date: 2025-02-28 07:05:53
Score: 1
Natty:
Report link

As @Siguza said it is not possible to debug the EL3 registers from EL2. But I found a solution for my problem. It is possible to tell gdb which registers to fetch by creating a XML file like this:

<?xml version="1.0"?>
<!DOCTYPE target SYSTEM "gdb-target.dtd">
<target>
  <architecture>aarch64</architecture>
  <feature name="org.gnu.gdb.aarch64.core">
    <reg name="x0" bitsize="64"/>
    <reg name="x1" bitsize="64"/>
    <reg name="x2" bitsize="64"/>
    <reg name="x3" bitsize="64"/>
    <reg name="x4" bitsize="64"/>
    <reg name="x5" bitsize="64"/>
    <reg name="x6" bitsize="64"/>
    <reg name="x7" bitsize="64"/>
    <reg name="x8" bitsize="64"/>
    <reg name="x9" bitsize="64"/>
    <reg name="x10" bitsize="64"/>
    <reg name="x11" bitsize="64"/>
    <reg name="x12" bitsize="64"/>
    <reg name="x13" bitsize="64"/>
    <reg name="x14" bitsize="64"/>
    <reg name="x15" bitsize="64"/>
    <reg name="x16" bitsize="64"/>
    <reg name="x17" bitsize="64"/>
    <reg name="x18" bitsize="64"/>
    <reg name="x19" bitsize="64"/>
    <reg name="x20" bitsize="64"/>
    <reg name="x21" bitsize="64"/>
    <reg name="x22" bitsize="64"/>
    <reg name="x23" bitsize="64"/>
    <reg name="x24" bitsize="64"/>
    <reg name="x25" bitsize="64"/>
    <reg name="x26" bitsize="64"/>
    <reg name="x27" bitsize="64"/>
    <reg name="x28" bitsize="64"/>
    <reg name="x29" bitsize="64"/>
    <reg name="x30" bitsize="64"/>
    <reg name="sp" bitsize="64"/>
    <reg name="pc" bitsize="64"/>
  </feature>
</target>

And tell gdb to use the target description using the set tdesc filename <target>.xml command.

After adding this command to my launch.json file VSCode was able to fetch the specified registers in EL3 and EL2 mode.

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Attach",
            "type": "cppdbg",
            "cwd": "${workspaceFolder}",
            "request": "launch",
            "program": "${workspaceFolder}/kernel8.elf",
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\Tools\\arm-gnu-toolchain\\bin\\aarch64-none-elf-gdb.exe",
            "miDebuggerArgs": "kernel8.elf",
            "targetArchitecture": "arm64",
            "setupCommands": [
                { "text": "target remote :3333" },
                { "text": "monitor init" },
                { "text": "monitor reset halt" },
                //{ "text": "monitor arm semihosting enable" },
                { "text": "load C:/Dev/baremetal/kernel8.elf" },
                { "text": "set tdesc filename C:/Dev/baremetal/target.xml" },
                { "text": "break *0x80000" },
                //{ "text": "monitor reg x0 0x1" },
            ],
            "logging": {
                "trace": true,
                "engineLogging": true,
                "programOutput": true,
                "traceResponse": true
            },
            "externalConsole": false
        }
    ]
}
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @Siguza
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Johnny Bakker