From f2c726e647794fc65739a2f715ef6bec5ab4558b Mon Sep 17 00:00:00 2001 From: tracer-ysyx Date: Sun, 24 Mar 2024 10:10:28 +0800 Subject: [PATCH] =?UTF-8?q?>=20compile=20NEMU=20ysyx=5F22040000=20?= =?UTF-8?q?=E6=9D=8E=E5=BF=83=E6=9D=A8=20Linux=20calcite=206.6.19=20#1-Nix?= =?UTF-8?q?OS=20SMP=20PREEMPT=5FDYNAMIC=20Fri=20Mar=20=201=2012:35:11=20UT?= =?UTF-8?q?C=202024=20x86=5F64=20GNU/Linux=20=2010:10:28=20=20up=203=20day?= =?UTF-8?q?s=2021:16,=20=202=20users,=20=20load=20average:=201.44,=201.06,?= =?UTF-8?q?=200.84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 3 + .../clangd/index/am.h.A4EACDA3FFE8E991.idx | Bin 0 -> 3710 bytes .../clangd/index/amdev.h.CED3274D6110AE08.idx | Bin 0 -> 13812 bytes .../clangd/index/audio.c.CC9C4D1C2C767072.idx | Bin 0 -> 2126 bytes .../clangd/index/cpp.c.0997979504A7309C.idx | Bin 0 -> 576 bytes .../clangd/index/cte.c.15ADB982FFA62EFA.idx | Bin 0 -> 7248 bytes .../clangd/index/disk.c.2126A5215FB353A4.idx | Bin 0 -> 1578 bytes .../clangd/index/gpu.c.892C4F545984B680.idx | Bin 0 -> 2076 bytes .../clangd/index/input.c.261BA2591BDB382F.idx | Bin 0 -> 3830 bytes .../clangd/index/int64.c.CD49DDA5E3516884.idx | Bin 0 -> 9288 bytes .../clangd/index/ioe.c.E16910D721F00C2C.idx | Bin 0 -> 2154 bytes .../index/klib-macros.h.B800A13CFCD5D615.idx | Bin 0 -> 526 bytes .../clangd/index/klib.h.B932C5DE116ED988.idx | Bin 0 -> 1554 bytes .../clangd/index/mpe.c.3D916D1C86ED9B7A.idx | Bin 0 -> 1596 bytes .../index/native.h.28E399D158114ED9.idx | Bin 0 -> 758 bytes .../index/platform.c.BA0A6D5AC2C4C4A9.idx | Bin 0 -> 5850 bytes .../index/platform.h.CF499A89AF71A47D.idx | Bin 0 -> 792 bytes .../clangd/index/stdio.c.4CCE235847DC4ACF.idx | Bin 0 -> 1538 bytes .../index/stdlib.c.BDA9DBD681BB43AE.idx | Bin 0 -> 1272 bytes .../index/string.c.8CBA579FC3418125.idx | Bin 0 -> 1728 bytes .../clangd/index/timer.c.9671737A8A895CE0.idx | Bin 0 -> 1522 bytes .../clangd/index/trap.S.B4DD7625DCFCA6BD.idx | Bin 0 -> 578 bytes .../clangd/index/trm.c.FF7A4AD075B0A551.idx | Bin 0 -> 1102 bytes .../clangd/index/vme.c.F922A9D30D484DF9.idx | Bin 0 -> 5136 bytes abstract-machine/.gitignore | 25 ++--- abstract-machine/CMakeLists.txt | 84 ++++++++++++++++ abstract-machine/CMakePresets.json | 29 ++++++ .../clangd/index/am.h.A4EACDA3FFE8E991.idx | Bin 0 -> 3666 bytes .../clangd/index/amdev.h.CED3274D6110AE08.idx | Bin 0 -> 13812 bytes .../clangd/index/audio.c.CC9C4D1C2C767072.idx | Bin 0 -> 1056 bytes .../clangd/index/cte.c.15ADB982FFA62EFA.idx | Bin 0 -> 4992 bytes .../clangd/index/disk.c.2126A5215FB353A4.idx | Bin 0 -> 1326 bytes .../clangd/index/gpu.c.892C4F545984B680.idx | Bin 0 -> 1086 bytes .../clangd/index/input.c.261BA2591BDB382F.idx | Bin 0 -> 1192 bytes .../clangd/index/ioe.c.E16910D721F00C2C.idx | Bin 0 -> 1692 bytes .../clangd/index/mpe.c.3D916D1C86ED9B7A.idx | Bin 0 -> 1090 bytes .../index/platform.c.BA0A6D5AC2C4C4A9.idx | Bin 0 -> 4448 bytes .../index/platform.h.CF499A89AF71A47D.idx | Bin 0 -> 754 bytes .../clangd/index/timer.c.9671737A8A895CE0.idx | Bin 0 -> 1272 bytes .../clangd/index/trap.S.B4DD7625DCFCA6BD.idx | Bin 0 -> 336 bytes .../clangd/index/trm.c.FF7A4AD075B0A551.idx | Bin 0 -> 794 bytes .../clangd/index/vme.c.F922A9D30D484DF9.idx | Bin 0 -> 3626 bytes abstract-machine/am/CMakeLists.txt | 10 ++ abstract-machine/am/src/CMakeLists.txt | 47 +++++++++ abstract-machine/am/src/native/CMakeLists.txt | 26 +++++ .../am/src/riscv/nemu/CMakeLists.txt | 27 +++++ abstract-machine/cmake/am-config.cmake.in | 9 ++ abstract-machine/cmake/klib-config.cmake.in | 6 ++ abstract-machine/cmake/nemu-settings.cmake | 11 +++ abstract-machine/cmake/riscv-settings.cmake | 2 + abstract-machine/klib/CMakeLists.txt | 12 +++ abstract-machine/klib/include/klib.h | 1 + abstract-machine/klib/result | 1 + abstract-machine/klib/src/CMakeLists.txt | 33 +++++++ abstract-machine/klib/src/stdio.c | 14 ++- abstract-machine/klib/src/string.c | 92 ++++++++++++++++-- abstract-machine/klib/tests/CMakeLists.txt | 17 ++++ abstract-machine/klib/tests/stdio.c | 5 + abstract-machine/klib/tests/string.c | 75 ++++++++++++++ abstract-machine/out/install/lib/libklib.a | Bin 0 -> 85886 bytes am-kernels | 1 + flake.nix | 58 +++++++++-- nemu/include/debug.h | 1 + nemu/result | 1 + nemu/src/isa/riscv32/inst.c | 2 + nemu/src/monitor/monitor.c | 4 + nemu/src/utils/ftrace.c | 2 +- result | 1 + 68 files changed, 561 insertions(+), 38 deletions(-) create mode 100644 .gitmodules create mode 100644 abstract-machine/.cache/clangd/index/am.h.A4EACDA3FFE8E991.idx create mode 100644 abstract-machine/.cache/clangd/index/amdev.h.CED3274D6110AE08.idx create mode 100644 abstract-machine/.cache/clangd/index/audio.c.CC9C4D1C2C767072.idx create mode 100644 abstract-machine/.cache/clangd/index/cpp.c.0997979504A7309C.idx create mode 100644 abstract-machine/.cache/clangd/index/cte.c.15ADB982FFA62EFA.idx create mode 100644 abstract-machine/.cache/clangd/index/disk.c.2126A5215FB353A4.idx create mode 100644 abstract-machine/.cache/clangd/index/gpu.c.892C4F545984B680.idx create mode 100644 abstract-machine/.cache/clangd/index/input.c.261BA2591BDB382F.idx create mode 100644 abstract-machine/.cache/clangd/index/int64.c.CD49DDA5E3516884.idx create mode 100644 abstract-machine/.cache/clangd/index/ioe.c.E16910D721F00C2C.idx create mode 100644 abstract-machine/.cache/clangd/index/klib-macros.h.B800A13CFCD5D615.idx create mode 100644 abstract-machine/.cache/clangd/index/klib.h.B932C5DE116ED988.idx create mode 100644 abstract-machine/.cache/clangd/index/mpe.c.3D916D1C86ED9B7A.idx create mode 100644 abstract-machine/.cache/clangd/index/native.h.28E399D158114ED9.idx create mode 100644 abstract-machine/.cache/clangd/index/platform.c.BA0A6D5AC2C4C4A9.idx create mode 100644 abstract-machine/.cache/clangd/index/platform.h.CF499A89AF71A47D.idx create mode 100644 abstract-machine/.cache/clangd/index/stdio.c.4CCE235847DC4ACF.idx create mode 100644 abstract-machine/.cache/clangd/index/stdlib.c.BDA9DBD681BB43AE.idx create mode 100644 abstract-machine/.cache/clangd/index/string.c.8CBA579FC3418125.idx create mode 100644 abstract-machine/.cache/clangd/index/timer.c.9671737A8A895CE0.idx create mode 100644 abstract-machine/.cache/clangd/index/trap.S.B4DD7625DCFCA6BD.idx create mode 100644 abstract-machine/.cache/clangd/index/trm.c.FF7A4AD075B0A551.idx create mode 100644 abstract-machine/.cache/clangd/index/vme.c.F922A9D30D484DF9.idx create mode 100644 abstract-machine/CMakeLists.txt create mode 100644 abstract-machine/CMakePresets.json create mode 100644 abstract-machine/am/.cache/clangd/index/am.h.A4EACDA3FFE8E991.idx create mode 100644 abstract-machine/am/.cache/clangd/index/amdev.h.CED3274D6110AE08.idx create mode 100644 abstract-machine/am/.cache/clangd/index/audio.c.CC9C4D1C2C767072.idx create mode 100644 abstract-machine/am/.cache/clangd/index/cte.c.15ADB982FFA62EFA.idx create mode 100644 abstract-machine/am/.cache/clangd/index/disk.c.2126A5215FB353A4.idx create mode 100644 abstract-machine/am/.cache/clangd/index/gpu.c.892C4F545984B680.idx create mode 100644 abstract-machine/am/.cache/clangd/index/input.c.261BA2591BDB382F.idx create mode 100644 abstract-machine/am/.cache/clangd/index/ioe.c.E16910D721F00C2C.idx create mode 100644 abstract-machine/am/.cache/clangd/index/mpe.c.3D916D1C86ED9B7A.idx create mode 100644 abstract-machine/am/.cache/clangd/index/platform.c.BA0A6D5AC2C4C4A9.idx create mode 100644 abstract-machine/am/.cache/clangd/index/platform.h.CF499A89AF71A47D.idx create mode 100644 abstract-machine/am/.cache/clangd/index/timer.c.9671737A8A895CE0.idx create mode 100644 abstract-machine/am/.cache/clangd/index/trap.S.B4DD7625DCFCA6BD.idx create mode 100644 abstract-machine/am/.cache/clangd/index/trm.c.FF7A4AD075B0A551.idx create mode 100644 abstract-machine/am/.cache/clangd/index/vme.c.F922A9D30D484DF9.idx create mode 100644 abstract-machine/am/CMakeLists.txt create mode 100644 abstract-machine/am/src/CMakeLists.txt create mode 100644 abstract-machine/am/src/native/CMakeLists.txt create mode 100644 abstract-machine/am/src/riscv/nemu/CMakeLists.txt create mode 100644 abstract-machine/cmake/am-config.cmake.in create mode 100644 abstract-machine/cmake/klib-config.cmake.in create mode 100644 abstract-machine/cmake/nemu-settings.cmake create mode 100644 abstract-machine/cmake/riscv-settings.cmake create mode 100644 abstract-machine/klib/CMakeLists.txt create mode 120000 abstract-machine/klib/result create mode 100644 abstract-machine/klib/src/CMakeLists.txt create mode 100644 abstract-machine/klib/tests/CMakeLists.txt create mode 100644 abstract-machine/klib/tests/stdio.c create mode 100644 abstract-machine/klib/tests/string.c create mode 100644 abstract-machine/out/install/lib/libklib.a create mode 160000 am-kernels create mode 120000 nemu/result create mode 120000 result diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d7bc671 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "am-kernels"] + path = am-kernels + url = ./am-kernels/ diff --git a/abstract-machine/.cache/clangd/index/am.h.A4EACDA3FFE8E991.idx b/abstract-machine/.cache/clangd/index/am.h.A4EACDA3FFE8E991.idx new file mode 100644 index 0000000000000000000000000000000000000000..bec9f4088578393d89d69001f336433d311aa0b6 GIT binary patch literal 3710 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 literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/audio.c.CC9C4D1C2C767072.idx b/abstract-machine/.cache/clangd/index/audio.c.CC9C4D1C2C767072.idx new file mode 100644 index 0000000000000000000000000000000000000000..b7ffe81403d15ed4bf45ff22ddfb5ac8ba37a087 GIT binary patch literal 2126 zcmZ9M3pCVO9LN9u{$`l@&oJiY6|?yx8pdmr$6*wMNTssXE>{4tVd7YA2q?V4|*gKs2SNl6>?wR}f-TS-0`~Q7^*Uw8Lk*Ffb zYN=OZ^p5yo3_%c0@RP;IgW^-Fi zXJ)EW*AuNO`i*n5GyS&Fn&G0xnXmEm{mgEeNHrv-g}2wHTwz}NZ6k29lo z{v!_#dwZYg6Lwiwn~#0rVsR_#g!FArsk!yZ6RRYB%eLS7r?k4hIHwQ`rt7VjQ+mP1ol zPJ*B{@zP)`HX4-bGgKd@{LNDbKM8g3n)f}v(WjQ@x;K>_;_1^nr%atpikF0PN?J-n z^r&81DY-|lbX3Y&E*!soGsTI-FjZ@1Y?^iKQQGMPnyZ~BoF5p4+@*HjMt5alyERUB z4-E#FRppo8&8q%(_G03+Ws)n?TovzZzUBW%Q%vV~@u*c>csgy}oM-*d_Q|K82S>*8 zUH>j9n>JIAE`B`_l`W3TKA-B<+0|gU?umrEyM_AIK4aa0b#J6`(*5_!HjbNjh7a$b zD!DfI)L^i0bAI2|>0Sfh(6PT{d!x6X0SYSd!rnz}yJ^Zm3=xE&a;Vz#1Mtk72+Mjs z*&yAHBTIo>fD8EZ19aE7WXdL6<*Oo5w1r!eOS=uQw)a@{En$vE;EaIvm;&1fohfVa7Ehpx+8nYMA=6PZeM~ zpAJq~FvC3h%+45zF~D}1ouW(T&7fx>rKK@Of$2D%1u?uomG;TKae_@@)5-h^wk}(+ zIMYFOsEacr%t(#=PJ|6=LxsU{!b!u43uo^`?G0G*!!{s;71#8M^V^$P5!j z{f7r4GIlCq1dih1L0qtkA0CEPBqv3J)gR+4&+F67s+P(W*JMd}aCJo0TGPvV@??OQ zqs!GHhKYdNE0hW`PFSj2YQvdx)5xYY*7bC-*H+(F2=T;b9nXD*>6rkFI3it$ZG-Yt z%Zod50Jg*|afmZU--JAJo6G~)o$AhnxG4!wl&Dsz`E{VsVnPi1o7~HH)q}G}yZaTFYbu+-UJ)juLkv4x8Pp%NHN-f< zM42De-%!(#3nlaC z|I;ma;i7^Sfn;$ZGDpQ9W5uvwCh!k}kQpON#M$hvo@0@{o|v(T(K5tnaZyOLG)nOZ kE-^4bl`$0xRaK2f#~Dm5eZDSRgT>+U)U^egI!b!Te>eb7HUIzs literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/cpp.c.0997979504A7309C.idx b/abstract-machine/.cache/clangd/index/cpp.c.0997979504A7309C.idx new file mode 100644 index 0000000000000000000000000000000000000000..caa52970313ec259a142e7bec82952074a743b7f GIT binary patch literal 576 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 DOC{sJ literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/disk.c.2126A5215FB353A4.idx b/abstract-machine/.cache/clangd/index/disk.c.2126A5215FB353A4.idx new file mode 100644 index 0000000000000000000000000000000000000000..0b293f6b99017f81c7e40482f2d77fdf523c40bd GIT binary patch literal 1578 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 literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/input.c.261BA2591BDB382F.idx b/abstract-machine/.cache/clangd/index/input.c.261BA2591BDB382F.idx new file mode 100644 index 0000000000000000000000000000000000000000..2815c0e19b718c97d93dd04cc7ae2f62e9cbc3ec GIT binary patch literal 3830 zcmZ9P3p|ur6u>{@F=OUq#u#QW41HdUG3A{|Axoi$P1I0^DMZEKCkd;U6qOjM*o4|% zls4KDOQFa1Add*4hstA9NS58b_7A{xy$Y z{cG0)56DzjDrOU?yMvn!xDS|%()$G1VWotVm(M+I_%g06E2b~I(m~-(4X_W57SU%XldR>m^|T8<{=?h&(wB{o#QJ|NxX!P$ z9#xhrD(g_LPkyxbpqtRZ!yxZlqO}@m{q8+7YvWn5-pSUXZ;=14G zZ%O1o=qS4!6KEn-GhMo&I?VW_w#nmapViuzmE;1VWZgHJ2DoR2r9=eObfyRT9G=YU z4Gpe|^D*#Me;3dhG<6~(D?sd(waMXAod1&cWKU#R`puI!ubtOc9=SC-7O$DoG~^`| z+K-hu-YP8&m#zx6H!Qeqt5=czv)gO7OM(((RZWQ|x1W|S?QMmnwyu1%cxcz2ywOLXb*hqc0!{5S=hm-rx-p|RERT)B z`tKS&p6R9XsLvJNRLbVL2zZ%kVdUh<-$Xqe`45wVj>Z+YFHH(P*WLNIsk`N-iFrgy zjKSaj2bXtvuP*kDX?NU8S%3BwQ}s@qL1UCMFb+AAp!bp(xFCxHwX{SyV(p zkhG+X)7)1iDJc}QBiez|pKUp1Mk*szcY>4*hLTYfHsy9`^mp^*0Ex~`sa&oo5{%ig=hGLPz@LKxpnS@L(Ah+W zrODsbJ&I|PH6`@{5>B#K!b8n<OFtp-PvO zU5LqHdV>##smavFF~|p-#lc6B@`|~`eOw>NWYMjvTx!2~JuqoZFqYKU@yb(SkN1uF zL)sN=w8Pto764(b&o1h*CFX$;-rU{B^SUT4gm5gcC#5$uZ3}S8P+_Ry3tV>K$d9!) zIa?v^`F-b%`$LPuAT0Q!Mex?^Q#gbTg5sWRFyd{4@V3xT6a0c$mx3%Y0`_Y!Fa{mc9)eY^qr9QH3~5*BP3xrgtzKAzaQZcsLuY@jg3eh+MX?HJN5B|J3vg|4t}-+w-!h76k+rCEnblI(V$F@Ls8$So zUV}wQ@Ca9M1M)Hy_=qAl$cAy6y~0&`%C<5{yB}rkT9`Fd1|mQSsN~A*-0s{;tY|F< zrOZ>}Ndg0vqGt!*Ewe2rKRyzzjrbkRW$G{u@KsKXUrg++UswTo5(-&o2Y)$V1>rjL z7tZ!)m;C{Z&?mk{PViJSVR>^mWxlKYRg(~E{!lr*nHU*KwJRE(Pf)T$d!aQ9> wcUm~x0>gvCz`q@cCWk|imXVbslH|!0R6&uY#ne!yDKS)3scPDEbtyLTAKiB?$N&HU literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/int64.c.CD49DDA5E3516884.idx b/abstract-machine/.cache/clangd/index/int64.c.CD49DDA5E3516884.idx new file mode 100644 index 0000000000000000000000000000000000000000..1cb20047e4759a0ade56cb4eda0c8f527b7b43fb GIT binary patch literal 9288 zcmZ`;3tW`dw*S7p*N4N*$1n^t3@F2(g2E?aKJt;3dhJ+vvQGB4`gO`jc{6Wf56dzQ z4(P!;qL^UaB-GGR6jGjojGV4$iURT&)6PXBUOsqfQEJ@H`Ph7G_<6q{{?>1~{`)a| zuf5jV|2;ou&YYQHf-rkg%&IpRzx@gbf?#I!;@>?H`RzRaC}etFG3mYbO! zI^V}eZJD&o8aL^%eSF65J%;s}Cvpy@PW`1}_sJVq3YSj!BEolLLwMfVlIDxyLrO-? zKl#qiFW+Ch|J|CS)27c}oxbJ8lQaH0E_VE!o>$kb{$u=|sjDBJl=Wdu)W@ew+8%(< z-|G%(P6&1_{rz;${iQFjDS7mqee;=w!>{cc?bvn0HS2ibM+HY7o$=Dx85@_re4y#q zq%SU9ncWreV`S8wx%U?S?~2wdAMU=L`}}(aPZynu^^V&l9}la!oKX4qQx`{ndN$np znf+LnboSk=iIxS0FGnBEd~b?xe)Bfn$ER|i8T#1Xwf_t+vs@w}-|e6EmoeU}%OA^o zal*2gQLz)hn^^w0Yu&dJbK>h(?cQ3k_u9{M@)P5FN5_Jzl9p59j6?eoyep3#rT ztQ`7i*p}p&ANGvBqWHyJs6DrF!t)E2^-(KKtNq9Qa?ATGamISTlvfYUFAAMmzO3wZ z{e|omja8*Tk9qCRn%5^U_|Gxxe;MUJVU0Pep)u=v;2T8~Ua)Rm{_X3|L!ae(M@Rlo z)~J0?A6Q}f;K~2G{92{xYPr3==C@D&nXqH`1JC{N&9jexZE$YidSd!v_lpN6+eScJ z`^?%Oz6pD><7dTf%>j;~c79aCQh9k=I#uJaeP>K|lO+(Lp@ZS$ziT-oOrte2p4#_)y=jyGxe?1csKcY8R z*tjV&{CD$5dymWzdIO7YQrhfAdws{IF^6*m&0ybwm~>34+og+B(FLe!)EU-(T&YR;MRDd)wD2 zL=Zvwgvg%|pMJq1&VL2|$@%m`t5F!iAeo{eQ#AGq4msLAdW!9EV1QA$hYHFi(f5+* z-!C}ih3r>HOuznVpbFV9`tD~CRdC2tr*7>2@#xl2gD{>=H-(TCV(u3l^2N@@8)B0e z4L1nm803yf?uc@~;E)Fs{;~S6BSRE};9!tc5|~Ot`vr$AFZ?KM#yKxyI*j~x%iQ@AA4)z{RSbF zLADXwHsa_P9P-qb5A>a;zdx+5?Ge%U2wPiKaLBbY%MZ^=I5StBOO@zb#pa?44*6+s z$hqZjzcycWg)PLih4?9|;1I*&u>pU1rR{m6a4&NOmngYJuYSQHi(Xy+V)I)Q7N`U5 z6MgrwfmFdE-;Hnk&UJX-Le-%vL_-C0C{=LCj`!b*niCwb$S6!_18pXz&1^2J;E;!_ zrk?yN_=_d#KnU@NE{(?EJmqk?(2m3T$~{h&M`E0vP1Qex9qKUt}lg6bu^rn@DZTeI`L!G439G&qoF3uaJL z1vl^sW%1LHf1cPH`H?488FlLTpcH;L{hEbptI ztlS`QgXlH=CV`t+|AUzR!2S0UxtH`+w*UTQrI!Tsl3=Wd_Tu@jqhuY`Y4-Khw4S2h zw}E)^&_oTt>G?=5cPlw6r!0JNvW1#^onHawZ9DDHiPOvz! z{Qy`FVErIC4q|)`SaPsE2WIEs@pHkFi|x4(k_%{k^C2`JuSX$R3NgL{Ocj8RQYAPl z@%YtXsmAy^aMWSD8!T>Ycf)Kqo?jCvO?bVVL2kzT*$jcrc>P;IX~FnbkXtdn6#`o| zJg=Eqf>8@*Z6h`l*h~z(c;uBci}GsO%z?aKo~$2KCCf@4mGh{H16dTNrUHthOa(Pn zV7-P8tD)?op?S)K~wbL=}l--@wkELX4>%!x8(eYjMUd`S^9X+^x51rOS z*O*>9k$nlrQTC_)Z_WP z!QsYw6Ua??|C%7M2~gH=2BjI0zqWwfg7Ga7*rMV2t&<&9&%36qTorX!MFTI7_}!Bo z)w|y~m*@xGGy9IJK93r-r7EDt0-VK4X;3N7a;0=+Db9i}YIWfP#YG)18mjeIPOatG zev0Z(;qfY{u>y}*LxXDYcr`Sv24~G$YOTfn)zZ*fe01H^=*ImuP;&#$vJKSUfU|xB zjcCAG`Vuu?!uUpNZN%d>($GdcUK{mo!=bK?4r`-mtFKe@b===|8ho9iBD|fN+p)c! z+S~E`+G%7vMOn3rTD$Oky6CtriVEBwYVX1Ad+3xN%I>i0Co6HFj{~&d@t}|Q)UEM= z3cLi+Ct!O5SQD^45%h`Jo(R@NPy4h)VD~dVei9gya8^nN|70Axk|87+P%20PdkUZ` zEd?S{09936Az&-cqT3*R8=z313g%RtrBlJ4iu+3ga~ig%fj!OBJ}V9WLz{m(OiBk7 z+S6fPIy|P?Gr^pR``ZKNJ)XLK5AJ_2nD=746U@%-|@oQLgs5R!-YGao|ov0eb? z0*o&NbD^gmT!{NGgW+X3RF}c@GGL^K`pHTK7%Q-URf4$^_g4w_O8on(z+8px)nKmn z)Pt+>_;p~e!}dC`*Wv!^!Ca5+^fE5^4%K&yu5yd`5JJlRTF zIV%O7l~7=;lp-pnG1|ttrAW6F#dXeZvYhA1Y0Anq(dU|I;yI6(sVwK+o!MkPc=DOD z(k<$`MFYQka(h=UgYd275A`eXC$Qi|^Bw zlC@I1KlgDqqbem-$<#}>dW?5VRyW4GrO|F_;L^$&RQ6L;`jjsx=S}_egV<78IY_+@ zQg05Fl^p7ogZ0Za=rT@d9Wvw3-9jt#2_Rlp2K~}ay&~~ksVb^A`mt%V;gmvQD ztrMa;0oB&spzj7BZGPS0-;EQ@P4K!2X#O|B_a-356W7d3 z?oL++>Iae3GUFC?`$Z!s8)YSzm~t^)lS@YCVqPwfnDVf_keCWR_0U3XMzT^!*dHom zN{Oiy<9or>i+8;jLVIzVUnh}u65`D=BvS@HCmB*`hJ?z3T@u-);q}UKNj@$iuQ@FV zrzJ0Kv(HMpvyxHMt0Yqu?!QWMR7r^3sgZ;l+`eAY)#LW(CDVD_{=DQkueIkp$9CxM zPXWxJz60{= z=y`$NYDCBr^*rjy?B1lS5{>*KC9{m6YY>h6@k?eLyY7-`sRX-c2?;B~Y-I_FF2QVN37J|#5cl>Q3H=Sb|0W8XFipFSnzrF8Kb7iJ@hu~j zT2k>XX$Lj!!1#2kPsjLlYDvfV35|K!SHZ&vQBvPyCJYKM&)i*Lef)KlS*(-g@%GiY~ zA7)Zi=Jm9UyxR3{yEG;$dTgXHP~-{1z{O1v21-3a7+^vKVSry2goSS|TGm%D1`oAM bUPE-=dV}oaYqSmZGh3_yroa&YAQ<+4IVJ6e literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/ioe.c.E16910D721F00C2C.idx b/abstract-machine/.cache/clangd/index/ioe.c.E16910D721F00C2C.idx new file mode 100644 index 0000000000000000000000000000000000000000..71b75e1edfb8163aeb9b71b3a61ffac6b81472b0 GIT binary patch literal 2154 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 literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/mpe.c.3D916D1C86ED9B7A.idx b/abstract-machine/.cache/clangd/index/mpe.c.3D916D1C86ED9B7A.idx new file mode 100644 index 0000000000000000000000000000000000000000..c65020599b3570b4bc4620259c716afc4703a0d8 GIT binary patch literal 1596 zcmWIYbaOLdV_{q5f6S!dOoudO-LbD%h&CtEk=PSt&hho>*z{b993u5QTzA*Gdq+V526zd2H3 zm{qXwC8G?B^s(y~|9-ix!cpd7aA#KTgtnT5OAPE{`kVQ?JwH56`}Ol^PMz_t{k!(g zmYsC}!rVhsRJ5Ki5u3!IFB18>v{#!o^Tg89mbP0Ascg@us5%un6)UNnKJ~(49b1`B zzs0$a-pglll)q^|;P$Yt>Z@|Z9lJZd>KygY8MxlWYn>JpO5A<^X^qvkc<#Wx+cqs& zqGhU=s+!Wm%WJ%D`{zW>oVh37I!K=iifJ&KGt1toHbYA;-Z61vs4Yark)az_IWF< z6gGu1c&W+lIL?Ikf?Ku(F+26yxo>-|a(wllseAt~3`x17Bl;#kNBmFdqpwM^m4EZx z^))|7?E3cmwbhs3wra)Ve6K{zOLxVu&d<9&>8{%?y`=XUDdqAUnmoUF72Mf#iz{=J zT7cPJ2=qS@cwxRM=s{Fq)AI>>HpL!9ay)hq{GIP&&{MLry~pm~e&u z!;VK;z3HqhdfZIh95Br+dID?$a0jsH39<hc*S_- zVZuCma$<6D9v3*Rz)YGVv3u+Ebg5@RSFo_NaKnUo^w=5LL4_?CoK1WFdo7px8=!UE zeB44XbFBmp&D}b){2vRsv0RjzlL)e)xG1?;8Avnh&9*wQeo@dIDJBDb27R#IV8Q^w tOwLWoQ3P_8pVbV7ETsWB!GcR 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 literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/platform.h.CF499A89AF71A47D.idx b/abstract-machine/.cache/clangd/index/platform.h.CF499A89AF71A47D.idx new file mode 100644 index 0000000000000000000000000000000000000000..5e4a88d7e4c43ef0b5c049a8e5b43db02018a29a GIT binary patch literal 792 zcmWIYbaNA6W?*nm@vO*AElFfyU|})ImOU_4<@bFihrzeCCHO|bJxs0 zl8gtIB_u58xT(X*XIHj!=^HiSsjPF(sjX6C*7Cl{z_wsT&DHA_o7Zd45p~hoA{AjX z&GPAW%jcO@`$}80CkyZA|D*1DtI_)u+cInOduRWa&%Ryv;{DqVh2K|4*Zc<|losL;;s+Bj>FTfW+b!RmYMo2FXBSF(xrim``9d zBNxOcQ00Eb>~nN3vUdQ5B{?MdVTOnp={fZ#8g>E=5oHo(hdHTa!N176%jZpJ;$h{I z=2C{K=3(WQ;8uX~V1WZP5)?8pVOXF5g+U<#6E5hO)BpW@`4*rsBL|}xOc)kMKw(e- z!GvKB0Sbcx1}40gV^#AsHQl#B=L$0kbHiLvl$w(WQc_%$T_Z39+%Tfgpjy!ZzB>xcmN5(-jB{=@yqGB(5_BTya8O8$%Y_LB$yIUu-t%U%-DkNaFzb+$=iwEZ zPm&l^8@e(hwN51*xhlXJr<}X`%)XPs6Y9TNDGAlehWyp?o2(zhtANgLh^Y=`N+<(F3WA(;$ zf9kd`R&V)bGMDvlq%7NCInkZVx0UgmRn7jreN(2ifN1pM7>NLl-*Xvsr`ew_{!`A; z@-cAout61kK6S)~g!3d~8nnjvhN10t2sDPajqTtM@`A^&XS!eSwm;x0jvnccG zsI#jJFmQ6QKonRB9GbgzX8AuJ1_Pi1einW%9VK=pUItEXR%5Uui&E2ywSl<^<{L&X zuvdWo0|S^JfWjaTz=UBgXW{}o8z#)7E5szk3A1wx)b&8UAg99=O%{&zcq*R|#>k^9 z$Rx-G6Be7i{`+mGJt?d_x?C(=oG=?$bS0Q1*kP_?(UoD6VTT#aqN~89zz%aFi>?Zj z3Og)BD)b+AJj&`#XCc>s7dlp1F>^~=7Ky76XpSX7{LR1 z7{LR17{)sgJHu|WLJiAPsnLS7CQSU@*PD$B#%^6$c& zcF(7^CqQ~NSgm1tVG#**Dk$Z^gc*uba}q(E;-chYuwos!6oWQ`sfA$b!I_M@Uw5<` y9o)Zh8jF^WwjM)rZc2^}P*zn+jgMbIP)JxrR7^r#L0L*#R!&}0QA0+FR|NpI0Q27f literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/stdlib.c.BDA9DBD681BB43AE.idx b/abstract-machine/.cache/clangd/index/stdlib.c.BDA9DBD681BB43AE.idx new file mode 100644 index 0000000000000000000000000000000000000000..3f347091b143f26b6a32e020153307da40cd5e4c GIT binary patch literal 1272 zcmWIYbaVT_!oc91;#rZKT9OE4G6(^2aY<384if`|A}a$!#hkSv_wz3s2<)?8%5Ss5 zt8cd9)S$HHmetx>;;M8RI z0+FqP^Ovvwd407;mD{3|^R6lReh^&B*e5Z!eD9tvySwM?OSb55zkK!U-$(B(el*x= zpUKSP^2}bka%!}*{2gast>n!SSvoC8&qW`z)s*m`I&F$*Nanohk6Lc%gnumlVs$7a z?DOmQ7eCeQoe|6UQ*EuOSbDC3Tc(1{2{ztmasd~la=qNWVl{O;(hK$O-jkoM^__RW z;hc0E<>>4^PxejpZjew2vkH#V>kKG!+PZ3`^ZFy!l`^954>gMYI@G(WTkGVdK)Y41 z-q<{IN^g1Yqpl*u)|}umn=7iJ&H2FEBPthDB@St-Kh!xc!=lIhZ#&bnFI!edmDrXB zw1_W#TJ>W_cfiK&+r$>Fm|U^jGgmNv&g~syS36YZOg^>gZCI4hKF)K^jJ<};Ee|)H z=BX|%J8o3D_QRIju}n4xobNRL$Ol&yl|MA{@DHiHnZEX7 z#hSwZ{vYm7>C>xAUdmDvz96A8&mtqTdV>#l!S9W`*)!y1ZtS=Ez&&^4p~akr1`VJBK^8%FeK~eHE(T5xCI%yIpn|20^3C!w zKF+)hCO`$OlB}{|0%$oH{P5avSF>ebB@crsP@0{EokL%mU7DMLlZ_3cf5{iI38LP= zm+>%Y0u_j|h;r!5v&#b&uropw7|ZVa{6olb3lD=KP=O|^Ca1nEyDU%vH!B0!i3~-l zX~ltz2;VYtfxQZI0?dy`^DtXrz6J_|ybKdQ5Ie(evgGk~OgsiGye!f%VIBizK4lpg z4;COmy`a#52?wqAIo7mAc?TnpfjqCgFf8i-U6|AE`Ly-~$Vd$qYnW=Fk($ajFy8vV z>^|yTLZ5(o)i~97VZy+W%}E4tii?tq^+60h5CH+YFa`soL7SRa{f|064rX0_JqEBs oh-7kZN)E`~DpIPveEb4}Lc$`V;$rejl2S6VauN#a(uzFF08}WR8~^|S literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/string.c.8CBA579FC3418125.idx b/abstract-machine/.cache/clangd/index/string.c.8CBA579FC3418125.idx new file mode 100644 index 0000000000000000000000000000000000000000..05939872f067804552083cf8fbcf80a2373b1ee1 GIT binary patch literal 1728 zcmYk62~ZPP7{_05*$wa#B3DpEAl!%&ca;bTG$>%WtbkVK6bKYd#3m8Z(K@0OsYey4 zg%N21M_L)EoKm$8qD4fcDnr2oiw=jJLItNN*1o_z;mz#M`~LgOx9|IZ-zHe%<5Nch zur5xLDwnEu5C8x@bSYJe#9|EqoG1WN^UFfRlAoFz_m=b&>V_Ex42Spm+`r(sv;E5v z*U8GnjYeb)^OSd3->vN3-&BP%;@V^--$U6t#WgcC9vkg`K9X%*+Gx=}wXW)`-LEGz z4P28$f8Nsb!aenDOVP-UzP*l3CNbx0$`oe)laYdhje=|4;fi+|5gZTc7Z2aNm1P$^ zOT6FV5}up3bW{1YPTBD4v0vk=D(H$z`L08wqrLk-8mxW!``{D5t4W=wR9zR{+aqgM zKan|xRR)UL-Tg1xUpcNZSrY3VW3{`rza`Uiam)et>NOpy6gN%U*zw~2zwaeH+3D!d z@18vt`25V)Xx~j$S2}EO{_tkJWc%BZ1F6dW`}S0vyY3_6#v0r^QJAH3p)<57Ju>I= zX$P%5p~=m{Rzn+?7GdUZ(d>j{I$5o+mMOAxGR_S@tEkM?H@`83d+p=43Um zw+Q6&k;As}X_F1c4)#3(xAN@jeiGi<(X9F-gDL3Sl5FdG$Les1wbDnilh3kag$CTq z6Tskda>JNj;w@Tfv-j(io?61tbcBCi;1}aLd7K{i^77V@eCthg6|^b#H;qPXnO~t= zf>pfCyrHxXRYSNir!MRUWc zl7=iJj}z>}=?!i6ArItk1#Mo1ztq=v*Oj+CYk#O2)M+p3iY$MbOO_9%Sebvgb;h(W z-uTF10-oyz>JK9Z5!AMcIHgWPOu|9L#&CQEb*wCO6YP1^fmSLq1<>YL-W zZQicq+S?nNa(S;@hJBlla*8gd_m)tswXe07gWJbZ9=s z=K?Jb0aiP)mT7w5o*L{?)vbkK4FV*jghTTv9s+bJ;I#q)Kh|hkjBc9P0D%YrQc?0<>5_ zxLo~;;_H9@W%O(h1nvmnkQ_)GPzLjW+@ia5R&K3=v}f!@{|hq<`-o(u!VN=t)!o8*ahs5=?h%%8bC9g=43_I7ay_ya-6>~5hTsq; zSPm`?XiTfNtkZ!E2}tr&;~2IEn>`ot9r!|=7&0P95siI^jM!9cIaid#K_bNVK*pc& z|6~?qHWQoYMN&KIin)U0srY$j$d<`g;_~q+P(kWR!YBXlL4Jm$_h6H{AUgt$^6bLD zLbQ6Uu#D#k$?9RkvO+4`q24PMu}UZPW~KTzvslbPMRa1x@waCd&?{GgRaggrp4-OC m<77)vXusG&Pv5}Mh;O`T@e&g&+ofg}0!veCM{}EncK-tgrC`+n literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/timer.c.9671737A8A895CE0.idx b/abstract-machine/.cache/clangd/index/timer.c.9671737A8A895CE0.idx new file mode 100644 index 0000000000000000000000000000000000000000..3c6116a44a93acf62c5f57068eceaa27124120ad GIT binary patch literal 1522 zcmWIYbaQ*f%D~{9;#rZKT9U}Zz`!5`#Kk2=nX*g_3>rYWiaBe8Zx`J%5V*>J@)K{C z)l%ar2U;{UjTAGN`^(+kAbNY!?oG*uuZOEGIp8dR>dVnhecxo>&Wly-5!^S^_FVqu z+b`9*Y}99&y$Y@RnO?r())}^#$STI=FB?DRe%tbEpT}k4Nq+Ya@tttk$06C!-SPP4 z=d_7+vFrEA9G1JbdHK`7kMFAfZ-Nl;{wq)w&l`h|MfH!sNmi*^yLQ{=5wDsm{=oj!Vo47~P#kgha z-J5P<9MUb0QJ0yfM`+9tT3eMAJEP?CM*mfw53&~~&n_vPE?OC+78~Ev!yTIt7c}=_ z!keG>X7I4eG6?ld+#T#=e3y-J*SXu<3l&azTw3APbo_tli7mX6IRfva#816g{v{jD{%@1-R_6fX?w|Gtz%{s&scr@U`Cxg_s)=Y&3b_~H8a*JJ{PNC zGfbXUa%0ij?!O)ox9aCtt@_MMyYHP8d3Jk)&bGy#EEhE-e+FK<`NP%a>AE{@ zb6*rbQ)}n{re@Kn|EJWrO2F>)=lw6_OzWAaUpqdJp|~BSMvGazAZUT#5{ux0Jdu2ssWJwRc85q`M479GCSc+~nwKTw!mj2#}% zOT+@wZJZ`g1Pb%A^YX$B$?Cni&18kbbfB=1h!EV6r@p;Q&wNW*1QZq(7uA5NUZ5r| z$a#fl15j9sOA7ApyZJ8H+4o%E4isirU{`^ucFK1PJC`_XCs3G6gi8q~yu9YH)CU>v zT|i-OCTUg9dfCL;;GPq@_jhwxd+Zya zFgrUtTy>(F^gHu}gKvSt{OtVjm|g#u-AA2E=o2&07ed@(2%E%3#o;LmXs@&!D3gG} zyLWTgF4aB$4K#^IhzB0l3`MCqi68~VMajkbAciW4fB<-?F)%6%{TKN?d4c>DW+fF> z26!klFeK-uO0 z^dDNA07^quDp3w}QMulUK&w7Q{(`tk?9@&!fnQ$-xNErYhwLBx5*6LN_?6W80WY*)#(Hl5TPl|7|P5gb4rdK4Lp36>1FTN@1ft!j8yG<79 z*H!%GQueZ%ZI;jLr(5w~^y(0k%#@OJN)sz9Lk{lHL2GQzr1n85bG4SVVausvBjIsjVXGUOWEI5=rUH=Nl=ERt?aKIt=h;QN4)AL6q1M45Qca( zzylES^=(e1$KM+jIy@F4Q1pZCgebc`t9F?!*?4GKC)x=1oI~r=RMJ8)!b3bD%;)hi znm^H8E|s5{KPX%tq94E|JvM0P$&ZBmk5>KxO!R3Y0CRb5VgLXD0CHt!a{vGU0CHt) zVE_OC0CRF}9oZC8nC%v+G&SR|ve?7d zA8U%l@AcjbPT&l@a%$^`N&M#wV|%1yq^g+OA5QyNxo1w@PR_&3LVab4(MuHPx0oF8 zJaX^%mK~h-cm3_(9hQ54{PgYipKqr8k+#+F@my5wn6;9l!)bEw%_}=DO>lGC>6DS8 z6OdN8FPmYZ<;1R3Rr~(zhPkJe=av7vmZ`Rw`L||CY=mF_{?_jHO4yx(i)&9w?Z0 ztx9_HeebsG>b{QA4L@q1e0#DuV(PyBbFbgNvk>6kdHi3v)AVU3ybsoEsn2?`!in>K z_dd@>JZyFM&M$0uE~>kVA#T^273?DV>)u=McwBlrPP%ww-CT*x56KICzQ!B9^Zvz` zb?&oOUsoto<(1bCA)mDl7$)yviV|VkaQ~}S+-#S1a_ox@Il9!0XLUutWP7pc=IbNkV>xT1Zhz2ISY!zu%5 zMjkC5CLT_h%`gWta$$8CGZ)xZQ0Fr6Xo<0ial#zMq9w^B$pPcRXrM_Tcfz!YHl-}S zaM$oI&|X;vSr(XkulqAIowASr2^0ny0#gl>1{wnL3rv`yC^aV$#3?RHE(Qh_1EbdC zg5OgQsvda9tf`~Tpbb~Zpo3s)BACg!DLINju9Cb8I|nBhHxDl#zkr~Su&lC-f`q7; Pq?ELXoSL{it0Dscx$2!X literal 0 HcmV?d00001 diff --git a/abstract-machine/.cache/clangd/index/vme.c.F922A9D30D484DF9.idx b/abstract-machine/.cache/clangd/index/vme.c.F922A9D30D484DF9.idx new file mode 100644 index 0000000000000000000000000000000000000000..714ab1caacc56ebe3c03318f77e5b9e6ecbb8faa GIT binary patch literal 5136 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 literal 0 HcmV?d00001 diff --git a/abstract-machine/.gitignore b/abstract-machine/.gitignore index 84c3ed2..bcba0ab 100644 --- a/abstract-machine/.gitignore +++ b/abstract-machine/.gitignore @@ -1,19 +1,6 @@ -* -!*/ -!*.h -!*.c -!*.cc -!*.S -!*.ld -!*.sh -!*.py -!*.mk -!Makefile -!README -!LICENSE -.* -_* -*~ -build/ -!.gitignore -.vscode \ No newline at end of file +**/.direnv/ +**/build/ +**/.envrc +**/.cache +.vscode +compile_commands.json diff --git a/abstract-machine/CMakeLists.txt b/abstract-machine/CMakeLists.txt new file mode 100644 index 0000000..4de3a06 --- /dev/null +++ b/abstract-machine/CMakeLists.txt @@ -0,0 +1,84 @@ +cmake_minimum_required(VERSION 3.22) + +project(abstract-machine) +enable_language(CXX C ASM) +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 11) + +include(CMakeDependentOption) +include(CMakePackageConfigHelpers) # Used to find libcheck +include(CTest) + +# -- General options +set(ISA CACHE STRING "Target ISA") +set_property(CACHE ISA PROPERTY STRINGS "riscv" "x86" "x86_64" "native") +string(TOUPPER ${ISA} ISA_UPPER) + +cmake_dependent_option( + __PLATFORM_NEMU__ "Run on NEMU" + ON "ISA MATCHES \"(riscv | x86)\"" OFF) +cmake_dependent_option( + __PLATFORM_NATIVE__ "Run on native" + ON "ISA MATCHES native" OFF) + +# -- Set PLATFORM according to options +set(MATCH_PLATFORM_PATTERN "^__PLATFORM_([A-Z]*)__") +get_cmake_property(CACHE_VARS CACHE_VARIABLES) + +message(STATUS "ISA: ${ISA}") +foreach(VAR IN LISTS CACHE_VARS) + if(VAR MATCHES ${MATCH_PLATFORM_PATTERN}) + # Retrieve the value of the cache variable + get_property(VAR_VALUE CACHE ${VAR} PROPERTY VALUE) + set(PLATFORM_UPPER ${CMAKE_MATCH_1}) + string(TOLOWER ${PLATFORM_UPPER} PLATFORM) + message(STATUS "Variable: ${VAR}=${VAR_VALUE}, Platform: ${PLATFORM}") + endif() +endforeach() + +if(${PLATFORM} MATCHES "native") +set(ARCH "native") +else() +set(ARCH ${ISA}-${PLATFORM}) +endif() +string(TOUPPER ${ARCH} ARCH_UPPER) + +# -- Target specific options +cmake_dependent_option( + NATIVE_USE_KLIB "Use Klib even if on native" + ON "NOT __ISA_NATIVE__" OFF) + +# -- Add compile definitions based on options +add_compile_definitions( + $ + __ISA_${ISA_UPPER}__ + __PLATFORM_${PLATFORM_UPPER}__ +) + +add_compile_definitions( + $<$:__NATIVE_USE_KLIB__> +) + +# -- Required compiler flags +add_compile_options( + # -Werror + -Wno-main + -fno-asynchronous-unwind-tables + -fno-builtin + -fno-stack-protector + -U_FORTIFY_SOURCE + $<$:-fno-exceptions> + $<$:-ffreestanding> + $<$:-fno-rtti>) + +add_link_options( + -znoexecstack +) + +# -- Include linker script here. Use this linker script at link time if INCLUDE_LINKER_SCRIPT is set to true +set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/scripts/linker.ld) + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") + +add_subdirectory(klib) +add_subdirectory(am) diff --git a/abstract-machine/CMakePresets.json b/abstract-machine/CMakePresets.json new file mode 100644 index 0000000..d14c0b6 --- /dev/null +++ b/abstract-machine/CMakePresets.json @@ -0,0 +1,29 @@ +{ + "version": 6, + "configurePresets": [ + { + "name": "native", + "displayName": "Native", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/out/build/${presetName}", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "ISA": "native", + "__PLATFORM_NATIVE__": true, + "NATIVE_USE_KLIB": true + } + }, + { + "name": "riscv-nemu", + "displayName": "Riscv32 NEMU", + "generator": "Unix Makefiles", + "binaryDir": "${sourceDir}/out/build/${presetName}", + "installDir": "/home/xin/repo/ysyx-workbench/abstract-machine/out/install", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "ISA": "riscv", + "__PLATFORM_NEMU__": true + } + } + ] +} \ No newline at end of file diff --git a/abstract-machine/am/.cache/clangd/index/am.h.A4EACDA3FFE8E991.idx b/abstract-machine/am/.cache/clangd/index/am.h.A4EACDA3FFE8E991.idx new file mode 100644 index 0000000000000000000000000000000000000000..02d2e719fb82496dd148ba0359c61d4874e7c4f7 GIT binary patch literal 3666 zcmYk92UJwo7KRUfE_0a~+Q1CLpwfdN42Z+P2m>NjMViF&P(YE0g?%wU+ctNwz z>Z=PXTRn|kW(FLwEUdKYPVD^H?9*g-;pg%#i(0dnZIg+i2IrxfXecI#5jMtJbowWF!=uMVD;IZUEo9y{?i%S623S;0j!KYr5d@Uq$mX>-nH8EuNusJ3sdKi9HV z#pddAujqli$1hIo6C5}&FseZtB}WEHl2ej=irV(wc$k@H(jQO#xAE(wl)^`rL6r`@ zZN(9X+iRAnoGw+~nSS`RUX@Y5N36KowQbMEp%2TfgI)4_GHtC?WAx|j?W|d_+(o~* z+qBiWtty?_DF%mmEGT7f=)!B9M?zLO~tJ5Pv-QVlA-9mk0!))$(-`$bB%eMOd{ysqV*C5v z==9b6c`w%m-@G?je)jq|Vz;A4KToc`tP%3(#jR1VGqUs=%C#(pJFjlPeT~~P`(fUV zGERF>kxl4|(0u`GO-%i|UVH!V+09BycbB|mVbg_@vs7>TQ0?}I3BOqW6dY4MJfoU3 ze>idT4W|}aoO~lKt!sUEW@LZB)W9DdEBYLaTY4ou96_zT`FwNgv`r zc@&VfFu+X%iNkI6$W}d9X=8vh@b@lnk8V`$| z#2zHT@ZPz5_R6Oz^m%AD9ya5d>5>4$m*@WFRywR}M5Cy&a!BDtdExG2TH-tncbB{k zUj3$1D&iv>oNr=iVnG7r%Y5IuId)x_(kKA(T`5;RL>X(N`EEGht-6XQz4t`QN48A9 zx`{pskUyzxVVAG)OIJRc!pvS>%qIbc*V)>v*G!6W!J6cZQ>i>O6*sWdvgDEg4c;aMd8#_AXVGXTer#volz*{6ym1vQ`Y|$jLMGp!)%67&K<5!UV`Yz?)>CIW~ik_gTR;_5V7} zM|L=0q%Pu-0Qud&Sy@z66tvPv2KoM!KYm4^|5dxAR-&r1Rvrq+`2vnWhXlwEowr+l zywd#=jr<|sg>u1L1h1H3c3j2H9;Y5IvcQ|HtE#I>0<+1EWRqLp$o;<>u z-0?laGaxUi`GIR2`)}vHqERFml#~)r5jOeF^RQp~xn(0XiU5Nz<%{RQR~>^?{pfE) z6DAbC*FnBua4>WbF>^4pkm6G~Xxm;lDR|Q;jpSgEQ8HXXPs4;9bV~fPRM*dVs6vf# zkaYtERkX+G$I3uIEHmh1RRq+-GJ`yjfp)kyp&Y9NOeHcjd2EU zAQ>|gj4_abU>e$E3_0SCWo?f3_<8|s|1E@JwPFD&TtUA00Oa_ppVr7e2g1Y58MDe>?WXN zb-)~!3Eo&4;D(DZWP>6AHS8uZV|758s`ePdSQ&4Foy-vy4miWP1Y@iT&Kb)DUaY+P z@s-X+x4+z@LMsgT213|qAR2ZPlCf^!7?ugYSQ+SrSHYl*RS{4Ny9upW9ax3k45+|; z?nBYJ)|$~qEUR!-#$`YkE<%vS+5uSD&Cm*p0I0B=0E*R{zgryp{z%Pb?B;T~@u1LdFtaG@2RLQnB$*UHk@7OoXA4mT%kW9#iPzHq8&xp+X6 zR!EVQ`E5iVd}>Jc**7_ofA-Bo=pp{(^g>>rjm<){#=j*w8y)YhMMZ<-$t{uQ#3{fh+5V1z?#Vm6c)5SSBE4Ww>ZqCirA!loG#k3G+EM nB{r1+)(b`uQjULARTQi(vzmC_N}#Uv_L_mb$4AhNPappQyDsR* literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/amdev.h.CED3274D6110AE08.idx b/abstract-machine/am/.cache/clangd/index/amdev.h.CED3274D6110AE08.idx new file mode 100644 index 0000000000000000000000000000000000000000..55f6ae81c1e80454859b03845e3bf5b70f6d2968 GIT binary patch literal 13812 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⋙n6Ivy@tuUzorHUTCqGZCSay8bD`+w;T2#L;D;&Z;guASl!Wn4WR*`l=doIZk%w26UsVJq z9GDq?ccF&6Do|L3M+Imp1hg+dbLG#W25X?Ol8}-(Oqf-b>BzodetV!WFDEY_OxV+( zTiEZJmm^5EqLL;|nD@=QzWE=oq%Z-^)>Scv2?HIVq^beqUAPqQnYJcB732U(6?vHO z)F%g?%qZ%t0168T3rN6(Ka_kous6F=1r!!%7l%7w;S!|bDozMFRZ~@S81Lc%BgxHk z&nyPITue+1?sDGMS4>z1PAvlpOR!78P1<4q@Qmx7S1W+kDbTvl}--QLdt*4ig4OxumKLjCZ|$aYB8D(NmyaeqnyNU)TR-_fh8( z`UKR=A;cjDQw@x1330gIslmG}cC1hN4phX?#t+Ox5CBYgEJ~a(9z#)TP9lg?T$EgF z4Ppp@2nc|OCId6?5}Rpq5%TX8S$G71F#z{70|Pud7#NasQ*uD|uyb-Uv9NM6voUfo F008>OHs}BV literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/gpu.c.892C4F545984B680.idx b/abstract-machine/am/.cache/clangd/index/gpu.c.892C4F545984B680.idx new file mode 100644 index 0000000000000000000000000000000000000000..ed8c7b67a10045f1405075cbab42862410f6d232 GIT binary patch literal 1086 zcmWIYbaOLfVPJ4h@vO*AElC728H9kixTGl4l97R70uuv6#hkf;C;bi^2z=%DUFLav zi$bB3)1w3C3i^|etW942SSN3vTr-R9f!4VD8TYgpSoS1|R~<^RHR5Gl|8Z6VXHD3X z()OUE6PL;@oW5)Gynt^Rd&?#(GDbOQD{v%qB_{bM=-4mZ&iPnkM!?rSdehm<=JS+oB>+_T#EKUKgq*f(Wx4dF#dnRAc`_t08N7y`QvV>-@@a5_~Rk~uYeIt&r`(?irVkoZ6 zO^OAEWSel$rhMjJZ(arg1_mAxVG&6%0h9p))~gu-x%_pNybOFmX;BeTX)pnk4xRBj z+WN+&2Rsb?KxuJ4aVanXlV&JNO)J&|#!;BvQk@`UX8}eY9!q{ppiK~9y)I5)P zP}qRgfEy+(c+tTuWtyuLNVU49228kL^#9SGNPRV+ur-r4&_W1U%@Sr)?&f9;6xL_e z=Yk10K8^LaV)n8G3hS}z@xX*({$=FC>QA6B$dfSDcQt>y>gJqk0J+52(gY@~|KP|6 zt5)UdAhVV9)M3J_BoCbDyv;ceBrK*U4->Ba*T$@P@a77juqlTrFHHDuzRPv?J=eE0 z0af$s3B!beiUdqWV7!SRU(XchzPb;nS6@(H947p#@MHPqCW1_pRoGB70PrsRNR*f}|wSXjB3 I*%&z(0P=(sO#lD@ literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/input.c.261BA2591BDB382F.idx b/abstract-machine/am/.cache/clangd/index/input.c.261BA2591BDB382F.idx new file mode 100644 index 0000000000000000000000000000000000000000..90455d1d42915738168a5b94f2dcc8fd3df67949 GIT binary patch literal 1192 zcmWIYbaPw4!oc91;#rZKT9OE4G6(^2aY<386e9yeJQD*$#hkf;zWIj?c+Scf`7nyk z*m8M^r}Z221vNWzGiHgH|6Q=Zu918CTLZprZ`5y}uM=Zn+P9%o_TeKYqpyPbhjSY( zi&ksSV4Er@q&;~-@Up_jfYKLD9~Y}Kx;f}7a3x4RI?;B(s_ys$F`1wgr@J4m;{E>_ zUEO`!>gv4j*`-(f=C`fYX}-zjy@?%zj@QTkTfe;6bF}d+_uie{&0cv* zC5F*2j;nlL@Lbbw%IfW{!R&Es-cF199(s80z5Gc1GCQYSo-=EH&6DVwd*>AIt38fw zM~`pMdU?50%4qr-slSI*7cb~^vRdBe85#KWllhV9`-{`F;^u#9SJ1tC?&{%qcd3_> zb8AiBDnH%*K19EcK}zu!cX4HI(k@^~CGY>0y?WYi30?+11_oYsZgv4M0h9rQ`ow+H zgOk#gc^J5X()`@~;$Q+MUHSc%>)q}1ZFm{@fzoW;Y$9L+CcU-oq58c`*QWC_2mqxy zgg6wy1WZ~xVM*|MZ`RGc41yrL#n`361WYuJD*Vd2BXg%U12yxPLr@-Rg*)z51mY?IIh>eXl0hr19K zc+6ZVfyTot%OxueGZ^SX4s&4eKtP55!;VK;z3D)cL_|d-VTxE<&i;zNGjSSF*p}TE zZh`)TBOk0~95m~r%czETw8Wv-rK}QgoPDN z0w82n#JUtqRw4xekl~*#EA#VY7683$0M;EWiEBvhoCEKd5AO+y3$+ID4qgq6iQnu` zzu3A(e#h#uXm+(dXtcWV&}Zf&#k&H7K6y4A8kfGw5x3ag9(6poy16A`?eFflEk86b zu1%=R-TP--)5Dl9c2VR|hGnE6ZAq2*wNK9#pJSdQk^1H8%CF+NXRrIM-8z#?_j|rC zZaul|aDa+mwJ>E{>@V6S%>rqMcriue`k5&eWH2cF0Em{n(l`m@fH}?N>Ud zuW)tnuA*{!aN)2y^&YB7vt*xMu4(T$mG!_n-J0E0@h4F^FMDs8HuB7to02q&wLjm`UHIZgx2q6n06>$4 zlO@gzdz?p6+1B&qdA0-sH|+L@{u1X!-2S2e%=PZLp@%??-O(=5BHEYdD+4?Z3%E;J zv`h2T)IHQ1?PfSOXcPv+q|S@vckXQ|-Lt~69RdY*>s)j~TF=u<0gugg5le9XI|b`6 zEZg5+CIm_xKtW37yhwg*+`jiJkIuJ4pu%pGi%CfP@O*GS;Sb8v`L7QT?hybv4$z9V zO6NuLGc8uzH4XsXUu*8}GbXTE5YdR9Lfk|g7yblMAPUe1yhVZ_GVl!Wf0oohk6V$V zNGTD4h{@(p5D^zp8zz&KumfFp4joW<;8p|*!3+WurCEHZ%mmKeemN%DlpBwuHCoNP z1kSGtyt3>>p%ue!3OA+*X@tX{Fa?NAQ%zosmMD5^v=`wc6T-Y>;~@mzU00vX&-W~* zAmY#*EdHAV5#>(3J#MLu>Zox`W7II#N3EyR^4PHlaEE$=u>Nv-N$XDu%NHj!# zJU>P-OeYJ$JNV`Vr-gmklKAZfTuDd^JqX;N@pn#p`TklAOOcczn15{MU#iyGb_`39 zgn`Mx@My+1pA@m@k2V79t-ClHDj=hk1cy?SK9njW01F=#?bP?7TD+2Yme2l&G|fI|@&F9DYlj9WUOV|*_if~5%&@qM@w zQXr)k>SRrPj+Y_w=j#%>$hSdf&(+$#@c#(_%sT`ercQFPIBdmxO@tN{{RZDzSjT% literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/mpe.c.3D916D1C86ED9B7A.idx b/abstract-machine/am/.cache/clangd/index/mpe.c.3D916D1C86ED9B7A.idx new file mode 100644 index 0000000000000000000000000000000000000000..96e2f54a4bf4f2143609abd016c196c6bf0edc53 GIT binary patch literal 1090 zcmWIYbaS&}VPJ4h@vO*AElC728H9kixTGj^6(a+~I%WojiaBe8Px>hv3VdDurO~;m zz>2JvTSD`z5(!$pt4ck2< zHdyh&TeaO)vGd;feUmlKFE07?VvpF(H&MGd9@m)JA3AAQVSaPwq!0P`idzad%@5mF zU3DXE_cfQ^`3H(6o659)-;{jl9#pM;a)B)4%?hKo!UKET)750xbEYaXJr#^TmHk#_ z;k1n7zS=5>WD;99xJ#sb&@Jd}ZHqthva#ibqflDntN3?k76z|Ad_|Lad+^r8S$A7i z^{)#*YqM(YHj00uYB+16utS&7-`zUbvXng->KM&8b}SAopLE0RndXt59FI?(>~Okl z%HwpyapSU82RGeT-Qf5|dX2?#+Y8GkHgt#XJ0sq*^bV)nck5p|_1VhKrzS0bS95Yw zwaen|v);4EX&>2R-jOeVIjzI|?Y!UDj(!j3o^VetRP)NT3ElVKtXQxBGO-JZ zFp9Iz;L0<8zOlP z9tl1UJ|39UjtH;(_0r|CJ5X4jTV4Pr45Jyjz|IEx1q@VpcBosZ1f>I28*&;-z=R)i z-#b6sm9c?^M?#2Ah#RIE$deXQK=2fq6xoq@;)*gbo?kKh9G#2o9ZWnDB5WeOFmrh% zbUAeeU_4l00o?=&DVQ)Uh=9VN@PP?GQPSYf|1)5tvOtBZYLuVR|MCAAUG> zklX#hkz$gP fWRL>u1rw48W^!&y4#*l_PJRw9ZUIgnHa-Rb*C~NH literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/platform.c.BA0A6D5AC2C4C4A9.idx b/abstract-machine/am/.cache/clangd/index/platform.c.BA0A6D5AC2C4C4A9.idx new file mode 100644 index 0000000000000000000000000000000000000000..744730013c2a7a170541e6209a88df9336db8f0e GIT binary patch literal 4448 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 F2>=#o%}W3P literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/timer.c.9671737A8A895CE0.idx b/abstract-machine/am/.cache/clangd/index/timer.c.9671737A8A895CE0.idx new file mode 100644 index 0000000000000000000000000000000000000000..9ed1a6a611736f457cf6f2dbef71f0655276aff5 GIT binary patch literal 1272 zcmWIYbaVT_!oc91;#rZKT9OE4G6(^2aY<38B_jjF9VP~biaBd1`sOt|@U%X6l4Eyj z2zj+CXsKRRTh_k@PG)Bt7LMibRkCL5-Ev*5mwWSmbzK?*Puzx&a}OT<=8^WHg6}zN zn*Umpy;%V#3?>CAmpGYjGuN=%vbRV*S3-l$l=*yv&jj=Y#DR#e$7Ab@6A8?esM8PWGJr8 zO_B$Or1OJ=?%u~MRe2e>85nq3#8~9P1W*P7ic-^xC7Br*-a9a4I^U_~X5!(M6qA&N zNdtLWl7=we_K=k8#{v^Y78)VOH|+igAhwz!bqm zS-4Ofz{4vcC!r2g1hh^;QWL?G6OfaH@ye!7oxFJ;gBs9s0TBUdn6P?&$GL(8OMRf_ z5~31tVIWUKLJy|MQl{eF%Vjl*K)pijLU4x{XD%=nU%WgMWF)%)7ff~X!RTrAt@q1; z!h-CAJTPGw#+mJoHmlo#!h9lpQZV7^sZKABXr2KHbMtZw!h|hrZ+5LxHthil^NaAq z-L>fOrN*PyKl*{f>|*Tja9$!7kZ$8Nc_L7lmz|dvW=K}=&21(t6s7}(g+zqlhCKD{ zU3%tQ!XlussJN&GO!WdaX+h2_JR5+*Qe0ASci+u-xz4`l`gWi&y8^okOtn+KTiCh8 zSv!HkTq0abFyZAjhowHqaPI;Nb2D*sz=YrH6d9RjFdqR53yKKBJ@5It`L(Ze^i`lR zuLv((xWmht#tiy6Bt+GOyYbnvw3*snB?HRW3B&AF{ItN z4b;mf&Ib3K(7nH#!`frt0EOAv+2N`a)ui8JVHG1ux2Pq%}E3)C@xAa)(0`*0n5P5 tEA(IF_v8igSD1PD_!;1iVqoA0DTILJ+>{)UyVyB7nOIo4nAsRP7yy#CHO~M5 literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/trap.S.B4DD7625DCFCA6BD.idx b/abstract-machine/am/.cache/clangd/index/trap.S.B4DD7625DCFCA6BD.idx new file mode 100644 index 0000000000000000000000000000000000000000..664d0c29e5c99f4921ce45ac556e5b4b238bd21b GIT binary patch literal 336 zcmWIYbaV4yWMFVk@vO*AElFfyU|(czPP$h}S^LioO^ ztMP(Ml}V{;9H)5ngjO}^N!dpWC9r&9n#8bdPMR6ZwU5Sb;RgPloTU$P|L*v4`;vU# z?Mu~md3PhNYfn~Ro@ZtdcT{dx*t?YOdzpW@He?=spZ@Y@W%tap@;AH^LncRaWSgHV z|M-?m{`T41$5sl9XFI?AdV^QyOX2xlH@@=hHQW%Eqtf+)au>7NT; zClz`BbFlK{7g;}Be#pdjDGnVSUkHbYTrS}}yqNd(cwMajk7K$@A`{7KW2 cPjjqiF)$?OrsROc*f}|wSXjB3*%&z(074^($N&HU literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/trm.c.FF7A4AD075B0A551.idx b/abstract-machine/am/.cache/clangd/index/trm.c.FF7A4AD075B0A551.idx new file mode 100644 index 0000000000000000000000000000000000000000..29b909444dec02a9e20a427b60cfd1807f4a74a1 GIT binary patch literal 794 zcmWIYbaNA8W?*nm@vO*AElFfyU|YLG(|9Q=`d`Rx9Jn z0=8PGtYen_&fYD5`)ZwJboc9}H;WFhch+2Wmg$hub*I3m(<@!qKKv4~z}3~xUQE7c zs>uS2h32J!#}`S8_TG5f`RJ?gwb1UVt%=femcDs5?R)RBzV+TuHqY61fs0Xi)4p(y zqgwi(y-!Up)0!L|(o=JHWAm@HHC&!r{$hXCr&cSy+B|#yc60X)E8H)suu=AG8wW&He#qmASk#VwV8JCS%r~J&~e#*8)Dn5-n zP-_0M%V*pciN5xP@0>Sn@d=qQ=gB4lbMl0N{CUIwL<@4$D^#?bRGsV zpaOnYeokQnP6J*BP8KGJg7yENe3Oxx^oN&09H>B+RhCm&PgGBmfs=uOjb9LGLQ!g3 z@eH74+6x|bH>@&{X5!%i1$8b1kBAtH7$?k8FdC>AMsCwWXldvd* fC`=gxgD`@boSTxv4dn80^09Mr32<<;@-hGb4wDxG literal 0 HcmV?d00001 diff --git a/abstract-machine/am/.cache/clangd/index/vme.c.F922A9D30D484DF9.idx b/abstract-machine/am/.cache/clangd/index/vme.c.F922A9D30D484DF9.idx new file mode 100644 index 0000000000000000000000000000000000000000..6029e91e132a1a37da9f2cd42a40b425626761da GIT binary patch literal 3626 zcmaJEX;f2J`n?BPUUKuYKmsI$8-xS|fr<-Kae#nQ2r43?ptV63r2--$sG;tn)>s!5 zJyso$wTi_ej?2iX)jD;lRqIwt72Frp8IO)SQ(UTZ6Z<9UpT2YWPQLryZ{IH2=|hI} z;3z7kD1CZ)adm+=MNta!XQ{3#O=2i2f=5x)H#CpzsOWePwKaBcmZoRrS?dj7&84H3 zNIFvH(7c!V_l+G*#izCgo;t_$po{cFNjFE@VUw=C7` z-iONs&*GjhTyXKp;a91@o<3Jv-SW4*sXkGgt6D#OV>aE7%WV~nX^cwQuI=a^n%2&l z=v>uO@pau=Npowjy}T2V+nW1E@)l$mEk^BT;kD*0W|TUy_l|-0G>g7Xt?T&jrG^=0 z&raR``&r4b{g;iCrrteS)&F{SY3te2SbNN^fIj)VHqO)cdHQ(ou?)@egde14uO)fc z?yJU(O%5D)D74_;Ws`Hhco8^oYg4qJHP@`)R_MDiKW0+2{=<-#$w{AQ-kSQ!(bUD- zpYGJ0GIf6;>6Yoawi!x&&7Gew^A8x*D<3B;(zh(H{k;Cw-O)E5?&9SQn7BAIZDRYh zcELE=;O_kTI{%)9xT0iuOLyzqRWI8X#;yDA?cIv&%eFMG-I<`W9rzz}@Qmq9bl2VL zZHiTc^pA|6#hhMt@8-1n>cHWu>V!tom9CsYm8%Ee7+s0i96oU+F=wWivS&fcKUe;8 z_<#yOJkMoYs{Bp6aq30sqYC=+iiU*h!s6vkYgT>xn(pPtuSqMnW-a=U{s@Ti6riECyoOf$n&M-3dh(t8 zd?{ar9RT>{&4atxCD|i5s)s*?Wn!7s34pxeo{_h5S8y((^hA6PFGr|NVN(#r3cRS; zKq6ijKWg%X&W@=Z6+)a7^Tkpp0REN~27llE(8^K4M7&%jS33ca3tqiFWw*|-aa1Vb zMgk;q0w7O{?=}fmY_TJ%7ttQd3q{&wHd#ioJo=sX`KK2w<OUDWCEq7o<|D(g}cH z^dRZMp5*E;IVzHf7x6_RCjj!xXUVHZ{T9BDqhbhIAQXt40LbAPQRaZRvF9XIPa<3` zRjZr;$oA|_>l+3&wuzm(eHb4hb^su+6Ws}z_m#Dsqr!=Bp-?Dt0w52$);WFM!`w#_ zDuM{ta2j7H0J3i5nVGkL`t%8+q6s;c7t3jltWn|ieC229pS;@n!BdV3BY{=$6%r=^ z{%4OyUc4>d{0dP~gx|*6XxD#_8VaE)3yHex(R12FjWUaMU!gAgp6_$W^ttzo5U|O|#Ri zo%R8|BWsk;5bZUNm^Mp2D;Ru&j^K;_&naazytT7J1X&Ku!SNvH~9jBu

~49VIwknRCT5((^ah2DpTVp}f!+E+JgxQ=|fH zm_@Lm*9F0164rQSe4yL25zGiz=OAp6TRcK;r~T}75ZndJNMIe)8IHkxa_pGNaNMh+ zu>7dFzTx+H!*S$gvF&Q&QUn zhuZg(mJeowC2p2XRi=l48s8dMb^^LO`<<>oa>9|&pm?&d-+c&=5RY&?Y@HuTsM-?j z)@i48b~+5G2Vx$)d77y^N&Gf5X0iKP30L9=7%WB-bjMZ%UW9{~AQlEF!UoQugaSc$ z0y{wl0&+4ME#Vt0+Z@ql#tYyW;g6V)To~+EGFv?NDv`?=gl@S5m;tVaCVn&V9#}q; z?}{$$V`8*p8M~8Z(wTa=T`1?5yI4p5v6X@;NUbI&Io zxlWEFP=w3j)&2+ft(~a8M~=0W*72`}^J^A1&0k}Pdc;FGSCs1mvJoCF8tsA2GR%qr z1!OoGW_w_DG^(SOK!tY%**}g)1n5B+Ggt_@fE7df(eadkOD(?%GQ&iQr(%TFSnV;d zH9AcwTtZkc)q9M#FfPoamIf&XdE`HhOY@+Ok&f};%ai4KSU1*ptgCDhF7PREbu_|u zI?_(ZfPQ%B5C4K|1danSMB0p6`mKT+Y$*GK0h$Wm4lCpB@{{x@z-2eap literal 0 HcmV?d00001 diff --git a/abstract-machine/am/CMakeLists.txt b/abstract-machine/am/CMakeLists.txt new file mode 100644 index 0000000..b0462e4 --- /dev/null +++ b/abstract-machine/am/CMakeLists.txt @@ -0,0 +1,10 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +add_library(am_interface INTERFACE) +target_include_directories(am_interface INTERFACE + $ + $) + +add_subdirectory(src) + +install(DIRECTORY include/ DESTINATION include/abstract-machine) diff --git a/abstract-machine/am/src/CMakeLists.txt b/abstract-machine/am/src/CMakeLists.txt new file mode 100644 index 0000000..97e86b0 --- /dev/null +++ b/abstract-machine/am/src/CMakeLists.txt @@ -0,0 +1,47 @@ +if(ISA MATCHES "native") +set(SOURCEDIR "./${PLATFORM}") +else() +set(SOURCEDIR "./${ISA}/${PLATFORM}") +endif() + +add_subdirectory(${SOURCEDIR}) + +target_include_directories(am-${ARCH} + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PUBLIC + $ + $) +target_link_libraries(am-${ARCH} + PUBLIC klib_interface + INTERFACE m) +if(INCLUDE_LINKER_SCRIPT) + target_link_options(am-${ARCH} INTERFACE -T${LINKER_SCRIPT}) +endif() + +# Interface compile flags +target_link_options(am-${ARCH} INTERFACE + -znoexecstack) + +target_compile_options(am-${ARCH} INTERFACE + -fno-asynchronous-unwind-tables + -fno-builtin + -fno-stack-protector + -U_FORTIFY_SOURCE + $<$:-fno-exceptions> + $<$:-ffreestanding> + $<$:-fno-rtti>) + +install(TARGETS am-${ARCH} klib_interface am_interface + EXPORT amTargets + LIBRARY DESTINATION lib) + +install(EXPORT amTargets + FILE amTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) + +configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/am-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/am-${ARCH}-config.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/am-${ARCH}) diff --git a/abstract-machine/am/src/native/CMakeLists.txt b/abstract-machine/am/src/native/CMakeLists.txt new file mode 100644 index 0000000..e3c9303 --- /dev/null +++ b/abstract-machine/am/src/native/CMakeLists.txt @@ -0,0 +1,26 @@ +include(CheckPIESupported) +check_pie_supported() + +set(SOURCES + trap.S + cte.c + ioe.c + mpe.c + platform.c + trm.c + vme.c + ioe/audio.c + ioe/disk.c + ioe/gpu.c + ioe/input.c + ioe/timer.c +) +add_library(am-native ${SOURCES}) + +# FIXME: get free(): invalid address when user program compiled without pie +set_target_properties(am-native PROPERTIES + POSITION_INDEPENDENT_CODE TRUE + INTERFACE_POSITION_INDEPENDENT_CODE TRUE) + +find_package(SDL2 REQUIRED) +target_link_libraries(am-${ARCH} PUBLIC SDL2::SDL2) diff --git a/abstract-machine/am/src/riscv/nemu/CMakeLists.txt b/abstract-machine/am/src/riscv/nemu/CMakeLists.txt new file mode 100644 index 0000000..ac024cc --- /dev/null +++ b/abstract-machine/am/src/riscv/nemu/CMakeLists.txt @@ -0,0 +1,27 @@ +include(nemu-settings) + +add_library(am-${ISA}-nemu + cte.c + start.S + trap.S + vme.c + ${NEMU_SOURCES} +) + +target_compile_options(am-${ISA}-nemu PRIVATE + ${NEMU_COMPILE_OPTIONS} + ${RISCV_COMPILE_OPTIONS}) +target_link_options(am-${ISA}-nemu PRIVATE + ${NEMU_LINK_OPITIONS} + ${RISCV_LINK_OPTIONS}) +target_include_directories(am-${ISA}-nemu PRIVATE + ${NEMU_INCLUDE_DIRECTORIES}) + +target_compile_definitions(am-${ISA}-nemu PUBLIC + ARCH_H="arch/riscv.h") +target_compile_definitions(am-${ISA}-nemu PRIVATE + ISA_H="riscv/riscv.h") + +set_target_properties(am-${ISA}-nemu PROPERTIES + POSITION_INDEPENDENT_CODE OFF + INTERFACE_POSITION_INDEPENDENT_CODE OFF) diff --git a/abstract-machine/cmake/am-config.cmake.in b/abstract-machine/cmake/am-config.cmake.in new file mode 100644 index 0000000..f2fbb32 --- /dev/null +++ b/abstract-machine/cmake/am-config.cmake.in @@ -0,0 +1,9 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +if(${ARCH} MATCHES "native") +find_dependency(SDL2 REQUIRED) +endif() + +# Include the targets file +include("${CMAKE_CURRENT_LIST_DIR}/amTargets.cmake") diff --git a/abstract-machine/cmake/klib-config.cmake.in b/abstract-machine/cmake/klib-config.cmake.in new file mode 100644 index 0000000..6b57e7f --- /dev/null +++ b/abstract-machine/cmake/klib-config.cmake.in @@ -0,0 +1,6 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) + +# Include the targets file +include("${CMAKE_CURRENT_LIST_DIR}/klibTargets.cmake") diff --git a/abstract-machine/cmake/nemu-settings.cmake b/abstract-machine/cmake/nemu-settings.cmake new file mode 100644 index 0000000..555b4dd --- /dev/null +++ b/abstract-machine/cmake/nemu-settings.cmake @@ -0,0 +1,11 @@ +set(NEMU_COMPILE_OPTIONS -fdata-sections -ffunction-sections) +set(NEMU_LINK_OPTIONS + --defsym=_pmem_start=0x80000000 + --defsym=_entry_offset=0x0 + --gc-sections + -e _start) +set(NEMU_INCLUDE_DIRECTORIES + ${CMAKE_SOURCE_DIR}/am/src/platform/nemu/include) +file(GLOB_RECURSE NEMU_SOURCES + ${CMAKE_SOURCE_DIR}/am/src/platform/nemu/*.[cS]) +set(INCLUDE_LINKER_SCRIPT true) diff --git a/abstract-machine/cmake/riscv-settings.cmake b/abstract-machine/cmake/riscv-settings.cmake new file mode 100644 index 0000000..1286e4c --- /dev/null +++ b/abstract-machine/cmake/riscv-settings.cmake @@ -0,0 +1,2 @@ +set(RISCV_COMPILE_OPTIONS) +set(RISCV_LINK_OPTIONS) diff --git a/abstract-machine/klib/CMakeLists.txt b/abstract-machine/klib/CMakeLists.txt new file mode 100644 index 0000000..2cf4a78 --- /dev/null +++ b/abstract-machine/klib/CMakeLists.txt @@ -0,0 +1,12 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) + +add_library(klib_interface INTERFACE) +target_include_directories(klib_interface + INTERFACE + $ + $) + +add_subdirectory(src) +# add_subdirectory(tests) + +install(DIRECTORY include/ DESTINATION include/abstract-machine) diff --git a/abstract-machine/klib/include/klib.h b/abstract-machine/klib/include/klib.h index ecb24c8..48d63e9 100644 --- a/abstract-machine/klib/include/klib.h +++ b/abstract-machine/klib/include/klib.h @@ -35,6 +35,7 @@ int atoi (const char *nptr); int printf (const char *format, ...); int sprintf (char *str, const char *format, ...); int snprintf (char *str, size_t size, const char *format, ...); +int vprintf (const char *format, va_list ap); int vsprintf (char *str, const char *format, va_list ap); int vsnprintf (char *str, size_t size, const char *format, va_list ap); diff --git a/abstract-machine/klib/result b/abstract-machine/klib/result new file mode 120000 index 0000000..afe16ba --- /dev/null +++ b/abstract-machine/klib/result @@ -0,0 +1 @@ +/nix/store/h1glxbcjgw3mv218w2wy73yih6s5p7iz-gdb-13.2 \ No newline at end of file diff --git a/abstract-machine/klib/src/CMakeLists.txt b/abstract-machine/klib/src/CMakeLists.txt new file mode 100644 index 0000000..bf7e136 --- /dev/null +++ b/abstract-machine/klib/src/CMakeLists.txt @@ -0,0 +1,33 @@ +# find_package(FLEX) +# find_package(BISON) + +# FLEX_TARGET(fmt_scanner fmt_scanner.l fmt_scanner.c) + +set(SOURCES + cpp.c + int64.c + stdio.c + stdlib.c + string.c + # ${FLEX_fmt_scanner_OUTPUTS} +) + +add_library(klib ${SOURCES}) +target_include_directories(klib PUBLIC $) +target_compile_definitions(klib PUBLIC $) + +install(TARGETS klib + EXPORT klibTargets + LIBRARY DESTINATION lib) + +install(EXPORT klibTargets + FILE klibTargets.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/klib) + +configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/klib-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/klib-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/klib) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/klib-config.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/klib) + diff --git a/abstract-machine/klib/src/stdio.c b/abstract-machine/klib/src/stdio.c index 1b19953..fec63bc 100644 --- a/abstract-machine/klib/src/stdio.c +++ b/abstract-machine/klib/src/stdio.c @@ -5,8 +5,20 @@ #if !defined(__ISA_NATIVE__) || defined(__NATIVE_USE_KLIB__) +int vprintf(const char *fmt, va_list ap) { + const char *p = fmt; + while(*p != '\0') { + putch(*p); + } + return 0; +} + int printf(const char *fmt, ...) { - panic("Not implemented"); + va_list args; + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + return 0; } int vsprintf(char *out, const char *fmt, va_list ap) { diff --git a/abstract-machine/klib/src/string.c b/abstract-machine/klib/src/string.c index f1a1f22..931e7dd 100644 --- a/abstract-machine/klib/src/string.c +++ b/abstract-machine/klib/src/string.c @@ -5,43 +5,115 @@ #if !defined(__ISA_NATIVE__) || defined(__NATIVE_USE_KLIB__) size_t strlen(const char *s) { - panic("Not implemented"); + const char *p = s; + size_t len = 0; + while(*(p++) != '\0') len++; + return len; } char *strcpy(char *dst, const char *src) { - panic("Not implemented"); + char *p_dst = dst; + const char *p_src = src; + for(; *p_src != '\0'; p_src++, p_dst++) { + *p_dst = *p_src; + } + *p_dst = '\0'; + return dst; } char *strncpy(char *dst, const char *src, size_t n) { - panic("Not implemented"); + int i = 0; + for(; i < n && src[i] != '\0'; i++) { + dst[i] = src[i]; + } + for(; i < n; i++) { + dst[i] = '\0'; + } + return dst; } char *strcat(char *dst, const char *src) { - panic("Not implemented"); + char *p_dst = dst; + const char *p_src = src; + while(*p_dst != '\0') p_dst++; + for(; *p_src != '\0'; p_src++, p_dst++) { + *p_dst = *p_src; + } + *p_dst = '\0'; + return dst; } int strcmp(const char *s1, const char *s2) { - panic("Not implemented"); + const char *p_s1 = s1, *p_s2 = s2; + for(; *p_s1 == *p_s2; p_s1++, p_s2++) { + if(*p_s1 == '\0' || *p_s2 == '\0') { + break; + } + } + return *p_s1 - *p_s2; } int strncmp(const char *s1, const char *s2, size_t n) { - panic("Not implemented"); + const char *p_s1 = s1, *p_s2 = s2; + int i = 0; + for(i = 0; i < n - 1; i++) { + if(s1[i] == '\0' || s2[i] == '\0') + break; + } + return s1[i] - s2[i]; } void *memset(void *s, int c, size_t n) { - panic("Not implemented"); + uint8_t *p = s; + for(int i = 0; i < n; i++) { + p[i] = c; + } + return s; } void *memmove(void *dst, const void *src, size_t n) { - panic("Not implemented"); + if (src + n > dst && src < dst) { + size_t len = dst - src; + void *p_dst = (void *)src + n; + const void *p_src = src + n - len; + while(p_dst >= dst) { + memcpy(p_dst, p_src, len); + p_src -= len; + p_dst -= len; + } + if(n % len) memcpy(dst, src, n % len); + } else if (dst < src && dst + n > src) { + size_t len = src - dst; + void *p_dst = dst; + const void *p_src = src; + while(p_src < src + n) { + memcpy(p_dst, p_src, len); + p_src += len; + p_dst += len; + } + if(n % len) memcpy(p_dst, p_src, n % len); + } else { + memcpy(dst, src, n); + } + + return dst; } void *memcpy(void *out, const void *in, size_t n) { - panic("Not implemented"); + for (size_t i = 0 ; i < n ; i++) { + *(uint8_t *)(out + i) = *(uint8_t *)(in + i); + } + return out; } int memcmp(const void *s1, const void *s2, size_t n) { - panic("Not implemented"); + const uint8_t *p1 = s1, *p2 = s2; + for (int i = 0; i < n; i++) { + if(*p1 != *p2) + return p1 - p2; + p1++; p2++; + } + return 0; } #endif diff --git a/abstract-machine/klib/tests/CMakeLists.txt b/abstract-machine/klib/tests/CMakeLists.txt new file mode 100644 index 0000000..f72c555 --- /dev/null +++ b/abstract-machine/klib/tests/CMakeLists.txt @@ -0,0 +1,17 @@ +set(TEST_SOURCES + stdio + string +) + +foreach(TEST IN LISTS TEST_SOURCES) + add_executable(${TEST} ${TEST}.c) + target_link_libraries(${TEST} am-${ARCH} klib m) + target_include_directories(${TEST} + PRIVATE $ + PRIVATE $ + ) + # TODO: Run tests in other configurations + if(__PLATFORM_NATIVE__) + add_test(NAME ${TEST} COMMAND ${TEST}) + endif() +endforeach() diff --git a/abstract-machine/klib/tests/stdio.c b/abstract-machine/klib/tests/stdio.c new file mode 100644 index 0000000..7287e83 --- /dev/null +++ b/abstract-machine/klib/tests/stdio.c @@ -0,0 +1,5 @@ +#include + +int main(void) { + return 0; +} \ No newline at end of file diff --git a/abstract-machine/klib/tests/string.c b/abstract-machine/klib/tests/string.c new file mode 100644 index 0000000..640f2d6 --- /dev/null +++ b/abstract-machine/klib/tests/string.c @@ -0,0 +1,75 @@ +#include +#include +#include + +void test_strcpy() { + char b[32]; + char *s; + b[16]='a'; b[17]='b'; b[18]='c'; b[19]=0; + panic_on((s = strcpy(b, b+16)) != b, "strcpy wrong return value"); + panic_on(strcmp(s, "abc") != 0, "strcpy gave incorrect string"); + panic_on((s = strcpy(b+1, b+16)) != b+1, "strcpy wrong return value"); + panic_on(strcmp(s, "abc") != 0, "strcpy gave incorrect string"); + + panic_on((s = strcpy(b+1, b+17)) != b+1, "strcpy wrong return value"); + panic_on(strcmp(s, "bc") != 0, "strcpy gave incorrect string"); +} + +void test_strncpy() { + char b[32]; + char *s; + int i; + b[3] = 'x'; b[4] = 0; + panic_on((s = strncpy(b, "abc", 3)) != b, "strncpy wrong return value"); + panic_on(b[2] != 'c', "strncpy fails to copy last byte"); + panic_on(b[3] != 'x', "strncpy overruns buffer to null-terminate"); +} + +void test_strncmp() { + panic_on(strncmp("abcd", "abce", 3) != 0, "strncmp compares past n"); + panic_on(strncmp("abc", "abd", 3) == 0, "strncmp fails to compare n-1st byte"); +} + +void test_memset() { + uint8_t arr[128]; + arr[120] = 0xd; + panic_on(memset(arr, 0xf, 120) != arr, "memset wrong return value"); + panic_on(arr[7] != 0xf, "memset fails to set value in range"); + panic_on(arr[120] != 0xd, "memset set value past n"); +} + +void test_memcpy() { + const uint8_t src[] = { 0x0, 0x0, 0x1, 0x2, 0x3, 0x4, 0x0, 0x0 }; + uint8_t dst[8] = {0}; + memcpy(dst, src, 8); + panic_on(memcmp(dst, src, 8) != 0, "memcpy fails to copy memory"); +} + +void test_memmove() { + const uint8_t ref[] = { 0x0, 0x0, 0x1, 0x2, 0x3, 0x4, 0x0, 0x0 }; + uint8_t dst[8] = {0}; + const uint8_t ans1[] = { 0x1, 0x2, 0x3, 0x4, 0x3, 0x4, 0x0, 0x0 }; + const uint8_t ans2[] = { 0x1, 0x2, 0x2, 0x3, 0x4, 0x3, 0x0, 0x0 }; + const uint8_t ans3[] = { 0x1, 0x2, 0x2, 0x1, 0x2, 0x2, 0x3, 0x4 }; + memmove(dst, ref, 8); + panic_on(memcmp(dst, ref, 8) != 0, "memmove fails to copy non-overlapping memory"); + + memmove(dst, dst + 2, 4); + panic_on(memcmp(dst, ans1, 8) != 0, "memmove fails to copy overlapping memory (dst < src)"); + + memmove(dst + 2, dst + 1, 4); + panic_on(memcmp(dst, ans2, 8) != 0, "memmove fails to copy overlapping memory (src < dst)"); + + memmove(dst + 3, dst, 5); + panic_on(memcmp(dst, ans3, 8) != 0, "memmove fails to copy overlapping memory (src < dst)"); +} + +int main(void) { + test_strcpy(); + test_strncpy(); + test_strncmp(); + test_memset(); + test_memcpy(); + test_memmove(); + return 0; +} diff --git a/abstract-machine/out/install/lib/libklib.a b/abstract-machine/out/install/lib/libklib.a new file mode 100644 index 0000000000000000000000000000000000000000..de0ce70359ee0ea9d9fc5efa9a07953a49336df9 GIT binary patch literal 85886 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 #include +#include IFDEF(CONFIG_ITRACE, void log_itrace_print()); diff --git a/nemu/result b/nemu/result new file mode 120000 index 0000000..f6d412e --- /dev/null +++ b/nemu/result @@ -0,0 +1 @@ +/nix/store/df4vrbp7ma2dnyqshms2fywnd73sa6jk-am-kernels-2024.02.18 \ No newline at end of file diff --git a/nemu/src/isa/riscv32/inst.c b/nemu/src/isa/riscv32/inst.c index 41c2098..1c41c63 100644 --- a/nemu/src/isa/riscv32/inst.c +++ b/nemu/src/isa/riscv32/inst.c @@ -62,6 +62,7 @@ static void do_branch(Decode *s, bool condition, word_t offset) { } } +#ifdef CONFIG_FTRACE static void ftrace_jalr(Decode *s, int rd, vaddr_t dst) { uint32_t i = s->isa.inst.val; int rs1 = BITS(i, 19, 15); @@ -71,6 +72,7 @@ static void ftrace_jalr(Decode *s, int rd, vaddr_t dst) { ftrace_call(s->pc, dst); } } +#endif static int decode_exec(Decode *s) { int rd = 0; diff --git a/nemu/src/monitor/monitor.c b/nemu/src/monitor/monitor.c index 6755edf..0154208 100644 --- a/nemu/src/monitor/monitor.c +++ b/nemu/src/monitor/monitor.c @@ -133,8 +133,12 @@ void init_monitor(int argc, char *argv[]) { // printf("elf_file: %s\n", elf_file); if(elf_file != NULL) { +#ifdef CONFIG_FTRACE void init_elf(const char *path); init_elf(elf_file); +#else + Warning("Elf file provided, but ftrace not turned on. Ignoring elf file."); +#endif } #ifndef CONFIG_ISA_loongarch32r diff --git a/nemu/src/utils/ftrace.c b/nemu/src/utils/ftrace.c index ec668c0..ea2f2b6 100644 --- a/nemu/src/utils/ftrace.c +++ b/nemu/src/utils/ftrace.c @@ -10,7 +10,6 @@ static vaddr_t ftrace_stack[CONFIG_FTRACE_STACK_SIZE] = {0}; static vaddr_t ftrace_stack_len = 0; func_t *func_table = NULL; int func_table_len = 0, func_table_size = 8; -#endif static int cmp_func_t(const void *a, const void *b) { return ((func_t *)a)->start > ((func_t *)b)->start; @@ -122,3 +121,4 @@ void ftrace_return(vaddr_t pc, vaddr_t addr) { Trace("%*s0x%x ret 0x%x <%s+0x%x>", ftrace_stack_len, "", pc, addr, f == NULL ? "???" : f->name, addr - f->start); } +#endif diff --git a/result b/result new file mode 120000 index 0000000..62f4c55 --- /dev/null +++ b/result @@ -0,0 +1 @@ +/nix/store/nzfl421lydgznc237s7z6nz93zml4i8p-am-kernels-rv32-riscv32-none-elf-2024.02.18 \ No newline at end of file