From 8581509357386c09f0ec1b00186a7caea24007c1 Mon Sep 17 00:00:00 2001 From: Eyck Jentzsch Date: Sun, 14 Sep 2025 14:57:26 +0200 Subject: [PATCH] adds standalone FW Debug launch --- .vscode/launch.json | 27 +++++++++++++++++++++++++-- dbt-rise-riscv | 2 +- fw/hello-world/hello.elf | Bin 66276 -> 66392 bytes 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 488d4f1..2254b56 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,6 +1,29 @@ { "version": "0.2.0", "configurations": [ + { + "type": "gdbtarget", + "request": "launch", + "name": "Debug hello world 32bit", + "program": "fw/hello-world/hello.elf", + "imageAndSymbols": { + "symbolFileName": "fw/hello-world/hello.elf" + }, + "target": { + "server": "${workspaceFolder}/build/RelWithDebInfo/src/riscv-vp", + "serverParameters": ["--isa", "rv32gc|msu_vp", "-v", "INFO", "--disass", "-f", "fw/hello-world/hello.elf", "-g", "10000"], + "watchServerProcess": true, + "port": "10000" + }, + "cwd": "${workspaceRoot}", + "gdb": "riscv64-unknown-elf-gdb", + "openGdbConsole": true, + "presentation": { + "hidden": false, + "group": "FW Debug", + "order": 2 + },"initCommands": ["b main"] + }, { "type": "gdbtarget", "request": "attach", @@ -61,11 +84,11 @@ "compounds": [ { "name": "FW-Debug 32bit", - "configurations": ["32bit VP with gdbserver", "Attach to VP"] + "configurations": ["32bit VP with gdbserver", "Attach GDB to VP"] }, { "name": "FW-Debug 64bit", - "configurations": ["64bit VP with gdbserver", "Attach to VP"] + "configurations": ["64bit VP with gdbserver", "Attach GDB to VP"] } ] } \ No newline at end of file diff --git a/dbt-rise-riscv b/dbt-rise-riscv index 1260c9d..45dc8bd 160000 --- a/dbt-rise-riscv +++ b/dbt-rise-riscv @@ -1 +1 @@ -Subproject commit 1260c9db5ec97242d07b20254654a057db3e7288 +Subproject commit 45dc8bd3fd093207b6d11c97c0de2fb85a2fe627 diff --git a/fw/hello-world/hello.elf b/fw/hello-world/hello.elf index 416242266bdf2f932188900192ae481d1a8ac09a..2dcce5411fe1f2283e1919d4b52270e607e2821c 100755 GIT binary patch delta 20172 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
    9d$5x!b`K*1 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 delta 19646 zcmd6P37izwwf?=;T~*yZThG4FG_!&1vdKCOBdekYL`6hocR&J2P!NHJVHFV>E((~@ zK|w;45M?kLMS^IMsGul<7~RA~ zt9Wa<|I{-7+K3!l*CJc4uItgpTwN-}>c^)XNRi!C$8h(G@&`_bAImx&4rj{&iwE4( zenxnoRJIVCUc9JWMAFRxTW5qH%TQ~=Lyb)x8s7<57;08#B>Ca4OIrHB-Mh?J{=&Dx zK5BDjMMjH0kF2P?bMd7rH$liDV4S(7ms*q6P3=mr$(VHTba?C!vde`?H{S!i`HIDZ z)aFP|vO7A-a8u{P}moKo>^|g(-j-Ol<&f|(`rT~jqBcXh>nN9V=vjoVtAmTaYVbSzK@IzAL_`}x_k z`w+0laIlR(o_2YpO$L0}#b=_O_b(jrw!Q<7HtX;^g#Hi8TyyrU_~Pu@usiYsz~^(~ z3wPw?jleP5l_%cc)fpN`TiEz)rv@4BCWJ6#v5{g_1CrHhT9;#mO~gw`)F)vYYlVpT z5>;Kd(dwD5^GriXpKo2)EcJtKyMuo)gfN9)T%%fCl{46aniz#+DUL^QWJn?A;m}># z!$A=zfl8hXjlKuS_XSRVK~v@+bXeB-!;7X#*-0I_xKQ?1r!US|k>36MW~Oht8rx%C z@Rxq4)9LJVY=BnFpd8JGS z-E^)q)zWC3(0hat+~jjynN3$Fqt<=5D>?>=hhW(mzINjTP=hC*W}MHVkLXpCLsh}^ zIfUp8^BrmI*sraWkE`pe%P0M}5lQ^~yIj$X^SN?PZ1yF7hbsepuc;IL2g^Q6*zo(ixuquyQ&Jw+r()wiPgI%Lu8aTQy+1?VP zac7Awpr}64e}mKNV;6qi1*7OQ3t(ftnl$Lv^EkGd`ucRPV-aW-sKmiFeP2Cq&(Bj+ zpT4{23hjO4;KRe|J-zlu5KEGfg~cuPDFu+B-JnG$NjMCD4%a`&;^s^y%qBO!F{ILN z*8;3}akRr~*Aej_2PXCDR%Sqy3{yhmXs)UpHn0^n-UhK8$*VP-)X@2%JJ-VRu?KZC6zq7rYPVHq-*AgZlwVefkTbFL=@&)aI+lZtUGS zWMpN^IVuB!kkO}eR8AE)K6c|eS;`*ngOC%YwG`KFv0z;+U@ge9|g20Mf^Vb$@LoXge&31{xcStN`GKQ*Bz)cod35Yilal{p@abdC6{ z%(>uXBwPxqK$STKO{V62^((WLy62V-(fh!c*}h|F0;9psSd7JN9X9FhQi>k|kR`Gw z0`{e8@`pYV=}oozogiAf$;n8$0~Difn#fs(?tK9*iAoUB^HBc}2+1j+r_-=eH`-AP zg{0Xgh)@QPS%}tfjv2E(v8B%?oQaK8){9(#2Gos6g28aick&I zQi{P$J7b7QrF!(%+&nFlR_(})70G{uOcJqs)jPKqW@&bE%tXqSUf*$%EPI*if7|nl&l=pBd z5c_0Gkh7cWWY04oid3CFy%R|HTPs0H%hZf2%Sj(1{wm8!A1?ktmF1)lIbZ$CYNbx! z)*;PJpVOd)Z-JDrt?D>0f50_x%a>cY4wNd>R|RhIM~H(jl$6B$3OM<76m0WDFe9Rc z!t@2xtoKRcXhhOfwRT>4^f}N2f7GNBSkU4k`C-)3l~$*qh$KT))~7rK-jA#u0TEfQ z37lzriip~@g|tjR305NDgu!&}c6*$r*C65l4$%n=Y)6R9M=R?aLGsU}V8VoAvS7iV zt@_?x7&Sq?p&%KeC0g_dL`%KgFDszVbp;>WB2uK;DX)NkRl!COMruL;5(%d*FIpqA?DPtN-r@{zX+p#CFly1lT1Nf zzZRpzY+b*;HBrAnmi4#B^wLVZIEqf4G196X#jzqw7d2uV)ddS;Ma^N46xq6{jZ&i* z6y~@^&C?99sL4SYtyJBD!UDH^IaBSHFF7!Wcu2jppeVosCi`W)r9Sqg`wfXnvxLbi zE&a5*U|~^!MNIa}Sgo#D=-TczG$ze5CVOh>nQA4ZS$|~LjB2&hlkOUmE_X{7wJX$r zEOblOQ&8bw6*6EEChq1C0vT7btbg$$Zk_)k4(rzWuHnr}mi=E#R=_D)X5@taQ)Nz+Kce49wRMiR{ziDYObEPQto%k)h}N1-Qh z()Bjz)LXaG`sP9=^oz6uU}w(3noU>}tc5S%$V_Y;2#M@4$YwBj0wO(CaB(DVn zX)`cf6o8zu>dM8X0ZybpJ;PE97ZTVK&=b#(>91^}64CaRkYR}?A zdmRZk?NRS8E{t*w`)<0#(@4>&_-n{so#3TnHAK9v1mU<;q##o zLu0Z|DiU3VL@Gcl>(3(a&OV}NwL4N_J1II^1(v$`+%;yz+f>j>mFl8XY+Pe{C$d1(iafwxPIUEXtm&dWgJ^*S%71$KjB1{28VLQL2~FY=k0IYoqLr+E4C zV`%7ApCxj%-UWR>Q7#GP1jG`Nm|+nsTOy*_W>u7X6-?e z^;xE8u4`p{EM(I~H8<{}x=$^$?k(DeRcX$E$?jM z_%Pn}VLg1{{lg>wnh*NffpJAH@AJ5 z?5Q;7#L|9{uoJ_;a=M?Kw-lt{CcnVyt<7u!tB8 zh3QFoLQ}J}R^8C>LRGW6l@o+zZV(DmMPw+<-H;xedT-8qfb1>9=iCzCew+tBd3FPrStgpSOYa6?}GmF&5I0 zvv>SwOWxql3zIkw;^&>jK(k3S7D3LJlir;VdJI13!HjYN=on!x7Z7G%U@mV3+Y@qDgt@}EvrV&S<@@$0EQL}I2ZD1Noz5b@zApltC!XkIK%w2JIv%X5jlX{MHAaG zyBfv8XqDdyvg!VhV8b3l%8faUQHJBR&1Cf*%f1FApOe3MoWsfYxp(L8M%$?gKBp%5 zoSJ}an$gBlkuVSFDRRTA*V?vaTY-*FdN)%5=sN3!L+hPBzOF{iTIhq{2&M9E+D^Y?jhI-;2Y)+fFe&# zs>>VR2tsAX)fpnP3NeuN_tJ5?T-k~)`|5T?HidGLnM5o z((fs2nSg@f8)|j|+jCIXCrzF%WcTnbAo594@;kX|%sri);c!)OIPYLMlPORLoB!tC z!QZTSnsIvv_qyhe$f`p}b%SxTu~FWDHfY?75v4B&XzT)%p`n`rWoqaEpe#b6rGRh^ z@!Xa52|Ls^_qK88222iyzr*x|^u-9-|DC}w;7x-$4nI=quJIwDG(sVLrOuO{YufRy z8(havLX3_tgyY<^v@V9@PT6%ARiYc)e{)eK`IEb1X&70#(_r5G2K@!(6?=tfDU4xY z{2&Av{4~JBf`k`YZ2@1&MT3o8nL52G|H2R`YvuS5N}f>!ctRRMVe|n!(P9kzMm6Bc z!4%K~#y4vC##T{YC4xbaf8@)dd~gup*}m*UkPmx{8_U+TYQR0u+D_HaTYQTkpY{#c zd|%1FykNGQ zvu81#ZH?)qMtBOWU|W_o5!Ov-ACt=8LVf*HDnLpL_%8J|0tl@D@k(yRBf<#XrP|f! z_B{^L)g;NjBI7SXELY!Pn-`PJ$A0Z`MNHS{GvigdY z-@`^J_l6Qf$T_HcJl-HqKL7Jk~ zL+Z}^i=&$Wwx+|vzX_+l2()|>a;@h>ZaiEGJWwbi_W=nUbOGVt0ZDGn3~IM=wBH78 zfv4Su+ILesT;yu^bOF2{0Le>v1-ULHqN438i24QA1oxP7EtJ~Q$2|b#4i7s>EbL)N ziM92xcLDgzVc=4%5cwmI{1*!CgoD~#0NWF}3j@#EUbh)yJvJCGNNy-7u4 zZxFk|<9$u+S@pXIvZJw%(y-E+Iw~R->u3NmcBK0m2F!@{)6~cHl#2DCh&}7|-vCVb zFU9aKVtit~MjxeEY4-IfuHb=wh`@Q*>aKWo-)Z%VP( z%k+o_6ODB{gIKKF+ku_0+vcNPL7it+-_6<41>V#(kT%%Eo&hF;+u@24lQ3dju=F#h zn>j`8DCy@a+|T%N75<5~-Y1jT7sQf0o(~Ti= z+>YjLytgEb$wX<;D2YL}G3Zg`Tszt@zEU?n*h5ZN4?Z{}s?bq8oh$-3?lWKuwS{*+ zxfErJVHG=7EFu#jkMbR@6t&Xv$y^4G z^*W4PKpl~l6>%Oj`C_!*DP%N%tR#j)jp6zhmjS;H*KkCU;TjABy`k_DuGP(VIo>mr zKvdti#>j&t=HxDP{eR#hpgw_lEokkhN^9<*chjVi{9Est)z~TIc zmL4!tOyA1Jl5Le)>bgBWqU%BQ{`fnCAuhogRS19BJLorYG=h`EzY|P{@4c7MoPP@O zbokznfX(@p_^H?7<0ptB{ToDcf!pyw#1ZJJE_}9F)~I1PuU9wYT%hVS<#C*o)sbh5 z`+2uP&23C>;o0!+B%1R_mU#UB>cYLna-kZww;1nSsabm~WUbl+1iAF|-Xb|zo!Hwu z^Sp02sbNzije~v_Oi)+6lq<{B<1dxUDs>mm(>1(`udHm&zLS?SAXPOv2Rf|{p%FSxrE2Z*7wd|G7 z=1^4L3ia$O#Tu$szjvXTG1}@F?P+z{AxG{lb@QQOi@G6`erd3k>H6Z=wnnMn9V*p~ zji#!6y<3p}Q03bgqqn7YzTQ(yKcr3^&R4G;c69dub9y?a{&DzXEzw^Mc-5heP*YrJ zs=CXC=BmeC2=RI~Uw!T!@AKR+rwGwSASq*uuR6`xr%`UVbciC zSiDkH1=ZeHicEr|)wmw`uOS3)t?>G^F+~I zs?Y1rJQ2%Dh%v5KKYP8GHnAr`t$E3@h95=uzLKZINO4PbeWO&{?y0VSqqCWTIHb!TQpQ zosv1BdVx`VV{(jhELqPeslC84z@q*)q}@cn*9M4s6*h+2UMfX$1 zj~_3#DECpC`ucdD`uMnC?p8;R7YAEmjAYDGg>SXgYFDcvZ?)0F?`EobZ?)FMu=?p+ zj{WiK$XlI*i*V7?MM6FJO1g@i@LQWf!84N9C%Ty@0rppuPGAynja#VhKaro+1(0`p z!^;?PREEPRE-}{wtW||?UlIHOklq%k2Tx?10o1g?s_yNK0`_zgha6?I`5nRQY&Pie zxwrG9X8aA6=s=DXHYE(eM#l!5Eyd(`EsYmkG?{H%hfK{b4#=iE z4qt7w!6s1Y(AiYGbjv2xUyb{1dUPzHi8$CP;i($7XQG+qfNbXD@XeJCHUZv~L;U9m z3tx}tpH12-(nr~Bcxx%gI^uK}^ z*Ama3O%WI)(E~V=JW^FvSqrQNkPdSF+fh+{F)6?tXRp;Ba{0uW*$p(#Q7)c1uIDg@ zL4QAJ&Lzqy!dW(M?6iZ?JS-mzaS7nyaM^ZaoW|IlFw|~1NM>-?ap+_8(A#pnWAxAu zXi(Uv;J!}CCC)-(F9Gl@7xz}3iwpZ*C|FT+WiNDB7X3(O-`DFbMeRm>R^qT0;z<=Ih45+|U~xdLaX=yF z%oy#=4;(5Ry25y|)eCZRQ|NB6UjX$W4mXOeigo?7(MIAHla45=A_K&z2A9MZ(;1-O z;)pF8A`BZ=XARuE)p30;T_;TU!D6!t2VVHUu)M)0s7u61J6ZvE7*M$6`44a;D2y3~ zeGJW8ID&IU>e;hr=U_=!c>dx7(iWZ576-i!Vq2*-1}}xV^x#slM6}eU#alyhq;*k< zpP|Ziv6PBqGbl_iaM>_0aa<;yu4C5;I}6?Ec^YN2(W9HBL%*HYN7-z?A~-tM5vc8> zu+a$z$ZWV1her1o9TV%2gJqBJ zXc1xaG4Mk;5GFRd_>8e%0(jJ+vSGF1bcfMJ2D=$$vuRK8db>B8few`olR{oE?7f(* z5-Q#xqV`rGMMSO^_Q!x*6CNk*cL3{YoGxr8=QJFM37e%jtXi=~6rp&LH=KmUq80?3 z@CY23Q8uIEScGfH8f&wmslI`zs4AZ?N*c7~nII)-%Px_G`8ZOwb(d3e7v)J_s*2vv zi(cXi$scOs8lb2jj(hAgk3+(^nJdmU2)iP{bR9$b?waF>(H>*m6YXKbhz>j7LHLKb zhHFoNSo56_Fg~lu#I+910fNw9g!W#-SWYX^GV+Z2zf(AbJr~-JXHf?c9OYDz-o%J9UspXU*R?+cBjOGl8lF=-aeObf8y>&n()9lKH?cHr;Ue7pg#mO{mggcv@VTU0fj)k7|HqNmNvt zX;1ium;`GSjZh3^Pnu-UV3f<7kB=*GfFY*FkDiWBrt&D8&8;}%@3V+6)ofvZ57CiO znM$=A#6^7S>jm5T%)M8$c>C0r*Xm9<@lHZmypO9@3qH(?66awp$7vOT^*C)L@BmH^ z5!j9s_v+RMm|AY7E$*eiAizBx_rz8N0V}~FEN*(aC`G2 z@>1fXf;fH-@TY(mx$dMu!T20n)oB6s21KgmlWVj9r(Cbzwu4{HsJRH zpX?e$XW~p8{{i4V)sfT1QT~1qKMdkf!k;sYYT)t1z)Qa|c@ATB9G}C$Yo*PG@fL8t zQRxjMWH#|JjHtjXWHA8_V-)a8SAoOW2t0lm-Zx-0$YJz$za=AH3f%hyjW~Zq-UB{A zNhAJC;NE9*#GjYyqmR>~{EZ|&2E?I(KPLvGfyc+d`yPZQ7=vwbe8%7?@c60x6nK0L z%0f+i9fN8RJORdFHt_fu>;fJi1MkxtI=~osAMp_9w*z|;njHQQ;2#3_258_n1Pd?3 z>mTYMpJb?SKS_)7Qxs2x%b7SM;Kjguhn`(v4#29$5@Kc`4c^3HI z5V@SUy07??uVb)3PJl7^40wDD@LfW)7PAL{>GoW`r*7@jl;P>E!LC=|5hC3yTXhIBeDbrytg3PVIAxcKzxd?r8i0Jv z?NAJ{3lZ@CJU)MQb7+SCkpEnMe^vJxe|38t=UR2-v*H%4s-DIdaKZcYEDlzwpLZCC z|C%Y{aQq?_r7|8bI|uIy+^eJfwQtBd_~>)+S-_LkgP#|tdLLS(VfdRsovMy}-XZFJ z)IjPXP`z(wOMt%zd>3YQC7dJwG;q%f`Tqd!efmm%2xZ;-te1Eea7JJv^^qo}z`b8C z$?xh%x$?f=rNIFZ*z9w@;-|o~m;~=DW8znUUxih0x$Dq1z`b`9$)5t;`#6C1_)%+( z`{F(Mi-7Y2*4uUH4nGLE{1{(W_Ve^8w;N>s05Hbw=OFN&$lv8I{swUGTVBfl5%_ww z_{$Ed+;xoy#^ENL0&kK(_hm7D+x-2P#lyWXf~heWJny>);v;~2pE=WWhTQw$n*7P& zuPnhbK}1pwpZFGi;Qs^}{?+BF-f9WsV!jq)VfFY|9a6o|n`!LVpw={g@>OSB2JR`B z#U?MzEAJU1OHD4NmG|5Xh-Oyb^PJ4S=P?;7H3k=!P+`bpDcx|}KfbBEC5u(+G n1psB)h6lkke*32lFG1GW_?HczQfK9cT%T+yM{nroliB|XH$vqZ