From: Stanislav S. <sta...@gm...> - 2025-07-03 00:44:25
|
Hello, I'm debugging stm32mp157c MPU, the board named after QSMP comes from Ka-Ro Electronics GmbH. I'm running a debug session from lldb20 and there are a couple issues to report. 1. When I try to check the sp_hyp register, lldb crashes. It seemed to me that the problem is lldb itself until I tried to grab registers' descriptor from openocd. It appears that something is wrong with numbering (see xlm in the log below). I'm not 100% sure, that sequence must be continuous, I hope someone can clarify it. If it must, the patch is one string to change src/target/arm.h:ARM_VFP_V3_D0 value from 51 to 53. It works well, I also checked that renumbering of d0-d31 registers does not affect values displayed during the debug session. 2. The second issue is bound to lldp-dap (+ emacs + dap-mode in my setup), which tries to dereference any 32 bit register which somehow reminds a pointer... I have not investigated its heuristics but, for example, CPSR register with its NZC flags in upper bits excites lldb-dap a lot. This results in attempts to download a memory chunk from inaccessible memory (given I have not initialized MMU), such as 0x60000000 or 0x80000000 - stm does not map these regions. So it leads to stalling the session. Nevertheless, if CPSR's upper flags bits show up as 0x400...., nothing bad happens, as soon as 0x40000000 is a valid address for stm's periphery. I have fixed it with a weird approach, given an alternative of pushing patches into llvm seems undoable for me. CPSR's register could be marked 64 bit. This immediately cools down lldb's interest to dereference its value at 32 bit armv7 arch and no attempts to access MPU memory are being conducted. Kind regards, Stan ws@ws:~ % lldb20 --version lldb version 20.1.2 ws@ws:~ % lldb20 (lldb) file --arch armv7-none-none qsmp-fsbl Current executable set to 'qsmp-fsbl' (armv7). (lldb) gdb-remote 3333 (lldb) target modules load --load --set-pc-to-entry --slide 0 Process 1 stopped * thread #1, stop reason = signal SIGINT frame #0: 0x2ffc2500 qsmp-fsbl`fsbl._start [inlined] arch.goto at arch.zig:329:5 326 } 327 328 pub inline fn goto(comptime func: anytype) void { -> 329 asm volatile ("b %[addr]" 330 : 331 : [addr] "i" (func), 332 ); (lldb) process plugin packet send "qXfer:features:read:target.xml:0,10000" packet: qXfer:features:read:target.xml:0,10000 response: l<?xml version="1.0"?> <!DOCTYPE target SYSTEM "gdb-target.dtd"> <target version="1.0"> <architecture>arm</architecture> <feature name="org.gnu.gdb.arm.core"> <reg name="r0" bitsize="32" regnum="0" save-restore="no" type="uint32" group="general"/> <reg name="r1" bitsize="32" regnum="1" save-restore="no" type="uint32" group="general"/> <reg name="r2" bitsize="32" regnum="2" save-restore="no" type="uint32" group="general"/> <reg name="r3" bitsize="32" regnum="3" save-restore="no" type="uint32" group="general"/> <reg name="r4" bitsize="32" regnum="4" save-restore="no" type="uint32" group="general"/> <reg name="r5" bitsize="32" regnum="5" save-restore="no" type="uint32" group="general"/> <reg name="r6" bitsize="32" regnum="6" save-restore="no" type="uint32" group="general"/> <reg name="r7" bitsize="32" regnum="7" save-restore="no" type="uint32" group="general"/> <reg name="r8" bitsize="32" regnum="8" save-restore="no" type="uint32" group="general"/> <reg name="r9" bitsize="32" regnum="9" save-restore="no" type="uint32" group="general"/> <reg name="r10" bitsize="32" regnum="10" save-restore="no" type="uint32" group="general"/> <reg name="r11" bitsize="32" regnum="11" save-restore="no" type="uint32" group="general"/> <reg name="r12" bitsize="32" regnum="12" save-restore="no" type="uint32" group="general"/> <reg name="sp" bitsize="32" regnum="13" save-restore="no" type="data_ptr" group="general"/> <reg name="lr" bitsize="32" regnum="14" save-restore="no" type="code_ptr" group="general"/> <reg name="pc" bitsize="32" regnum="15" save-restore="no" type="code_ptr" group="general"/> <reg name="cpsr" bitsize="32" regnum="25" save-restore="no" type="uint32" group="general"/> </feature> <feature name="net.sourceforge.openocd.banked"> <reg name="sp_usr" bitsize="32" regnum="26" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_usr" bitsize="32" regnum="27" save-restore="no" type="code_ptr" group="banked"/> <reg name="r8_fiq" bitsize="32" regnum="28" save-restore="no" type="uint32" group="banked"/> <reg name="r9_fiq" bitsize="32" regnum="29" save-restore="no" type="uint32" group="banked"/> <reg name="r10_fiq" bitsize="32" regnum="30" save-restore="no" type="uint32" group="banked"/> <reg name="r11_fiq" bitsize="32" regnum="31" save-restore="no" type="uint32" group="banked"/> <reg name="r12_fiq" bitsize="32" regnum="32" save-restore="no" type="uint32" group="banked"/> <reg name="sp_fiq" bitsize="32" regnum="33" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_fiq" bitsize="32" regnum="34" save-restore="no" type="code_ptr" group="banked"/> <reg name="sp_irq" bitsize="32" regnum="35" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_irq" bitsize="32" regnum="36" save-restore="no" type="code_ptr" group="banked"/> <reg name="sp_svc" bitsize="32" regnum="37" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_svc" bitsize="32" regnum="38" save-restore="no" type="code_ptr" group="banked"/> <reg name="sp_abt" bitsize="32" regnum="39" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_abt" bitsize="32" regnum="40" save-restore="no" type="code_ptr" group="banked"/> <reg name="sp_und" bitsize="32" regnum="41" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_und" bitsize="32" regnum="42" save-restore="no" type="code_ptr" group="banked"/> <reg name="spsr_fiq" bitsize="32" regnum="43" save-restore="no" type="uint32" group="banked"/> <reg name="spsr_irq" bitsize="32" regnum="44" save-restore="no" type="uint32" group="banked"/> <reg name="spsr_svc" bitsize="32" regnum="45" save-restore="no" type="uint32" group="banked"/> <reg name="spsr_abt" bitsize="32" regnum="46" save-restore="no" type="uint32" group="banked"/> <reg name="spsr_und" bitsize="32" regnum="47" save-restore="no" type="uint32" group="banked"/> <reg name="sp_mon" bitsize="32" regnum="48" save-restore="no" type="data_ptr" group="banked"/> <reg name="lr_mon" bitsize="32" regnum="49" save-restore="no" type="code_ptr" group="banked"/> <reg name="spsr_mon" bitsize="32" regnum="50" save-restore="no" type="uint32" group="banked"/> <reg name="sp_hyp" bitsize="32" regnum="51" save-restore="no" type="data_ptr" group="banked"/> <reg name="spsr_hyp" bitsize="32" regnum="52" save-restore="no" type="uint32" group="banked"/> </feature> <feature name="org.gnu.gdb.arm.vfp"> <reg name="d0" bitsize="64" regnum="51" save-restore="no" type="ieee_double"/> <reg name="d1" bitsize="64" regnum="52" save-restore="no" type="ieee_double"/> <reg name="d2" bitsize="64" regnum="53" save-restore="no" type="ieee_double"/> <reg name="d3" bitsize="64" regnum="54" save-restore="no" type="ieee_double"/> <reg name="d4" bitsize="64" regnum="55" save-restore="no" type="ieee_double"/> <reg name="d5" bitsize="64" regnum="56" save-restore="no" type="ieee_double"/> <reg name="d6" bitsize="64" regnum="57" save-restore="no" type="ieee_double"/> <reg name="d7" bitsize="64" regnum="58" save-restore="no" type="ieee_double"/> <reg name="d8" bitsize="64" regnum="59" save-restore="no" type="ieee_double"/> <reg name="d9" bitsize="64" regnum="60" save-restore="no" type="ieee_double"/> <reg name="d10" bitsize="64" regnum="61" save-restore="no" type="ieee_double"/> <reg name="d11" bitsize="64" regnum="62" save-restore="no" type="ieee_double"/> <reg name="d12" bitsize="64" regnum="63" save-restore="no" type="ieee_double"/> <reg name="d13" bitsize="64" regnum="64" save-restore="no" type="ieee_double"/> <reg name="d14" bitsize="64" regnum="65" save-restore="no" type="ieee_double"/> <reg name="d15" bitsize="64" regnum="66" save-restore="no" type="ieee_double"/> <reg name="d16" bitsize="64" regnum="67" save-restore="no" type="ieee_double"/> <reg name="d17" bitsize="64" regnum="68" save-restore="no" type="ieee_double"/> <reg name="d18" bitsize="64" regnum="69" save-restore="no" type="ieee_double"/> <reg name="d19" bitsize="64" regnum="70" save-restore="no" type="ieee_double"/> <reg name="d20" bitsize="64" regnum="71" save-restore="no" type="ieee_double"/> <reg name="d21" bitsize="64" regnum="72" save-restore="no" type="ieee_double"/> <reg name="d22" bitsize="64" regnum="73" save-restore="no" type="ieee_double"/> <reg name="d23" bitsize="64" regnum="74" save-restore="no" type="ieee_double"/> <reg name="d24" bitsize="64" regnum="75" save-restore="no" type="ieee_double"/> <reg name="d25" bitsize="64" regnum="76" save-restore="no" type="ieee_double"/> <reg name="d26" bitsize="64" regnum="77" save-restore="no" type="ieee_double"/> <reg name="d27" bitsize="64" regnum="78" save-restore="no" type="ieee_double"/> <reg name="d28" bitsize="64" regnum="79" save-restore="no" type="ieee_double"/> <reg name="d29" bitsize="64" regnum="80" save-restore="no" type="ieee_double"/> <reg name="d30" bitsize="64" regnum="81" save-restore="no" type="ieee_double"/> <reg name="d31" bitsize="64" regnum="82" save-restore="no" type="ieee_double"/> <reg name="fpscr" bitsize="32" regnum="83" save-restore="no" type="int" group="float"/> </feature> </target> (lldb) register read sp_hyp PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: /usr/local/llvm20/bin/lldb 1. HandleCommand(command = "register read sp_hyp") #0 0x00000008304040a9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/llvm20/lib/libLLVM.so.20.1+0x44040a9) #1 0x0000000830401f55 llvm::sys::RunSignalHandlers() (/usr/local/llvm20/lib/libLLVM.so.20.1+0x4401f55) #2 0x00000008304047b7 (/usr/local/llvm20/lib/libLLVM.so.20.1+0x44047b7) #3 0x00000008218064a0 (/lib/libthr.so.3+0x1a4a0) #4 0x0000000821805a6b (/lib/libthr.so.3+0x19a6b) #5 0x00000008214702d3 ([vdso]+0x2d3) #6 0x00000008256c12dc memcpy (/lib/libc.so.7+0x15a2dc) #7 0x0000000824625991 (/usr/local/llvm20/lib/liblldb.so.20.1+0xe25991) #8 0x000000082462553c (/usr/local/llvm20/lib/liblldb.so.20.1+0xe2553c) #9 0x0000000824624f8d (/usr/local/llvm20/lib/liblldb.so.20.1+0xe24f8d) #10 0x00000008247dac30 (/usr/local/llvm20/lib/liblldb.so.20.1+0xfdac30) #11 0x00000008247da4ee (/usr/local/llvm20/lib/liblldb.so.20.1+0xfda4ee) #12 0x0000000824234b31 (/usr/local/llvm20/lib/liblldb.so.20.1+0xa34b31) #13 0x000000082422524b (/usr/local/llvm20/lib/liblldb.so.20.1+0xa2524b) #14 0x000000082422993e (/usr/local/llvm20/lib/liblldb.so.20.1+0xa2993e) #15 0x000000082418c5f0 (/usr/local/llvm20/lib/liblldb.so.20.1+0x98c5f0) #16 0x000000082416b9e2 (/usr/local/llvm20/lib/liblldb.so.20.1+0x96b9e2) #17 0x000000082422b8ad (/usr/local/llvm20/lib/liblldb.so.20.1+0xa2b8ad) #18 0x0000000823e1e0eb lldb::SBDebugger::RunCommandInterpreter(bool, bool) (/usr/local/llvm20/lib/liblldb.so.20.1+0x61e0eb) #19 0x000000000020a873 (/usr/local/llvm20/bin/lldb+0x20a873) #20 0x000000000020b3b9 (/usr/local/llvm20/bin/lldb+0x20b3b9) #21 0x00000008255ece34 __libc_start1 (/lib/libc.so.7+0x85e34) LLDB diagnostics will be written to /tmp/diagnostics-19f8fe Please include the directory content when filing a bug report Segmentation fault (core dumped) |