From 1da090f1ee3a3d75e93b4a01c8dcf9843840f2da Mon Sep 17 00:00:00 2001 From: Ryan Scott Date: Sat, 27 Jul 2024 07:50:24 -0400 Subject: [PATCH] macaw-riscv: Add riscvPLTStubInfo Now that we can load RISC-V relocations in `macaw` (building on top of the work in GaloisInc/elf-edit#45), this patch adds PLT stub heuristics for RISC-V binaries. I have added some test cases in `macaw-riscv-symbolic` which demonstrate that the basic idea works. Note that due to #416, these test cases will print warnings when loaded into `macaw`. These warnings are ultimately harmless, however, as the same relocations are loaded at the same addresses multiple times, which causes no change in behavior. Fixes #414. --- macaw-riscv-symbolic/tests/Main.hs | 10 ++---- macaw-riscv-symbolic/tests/pass/Makefile | 31 ++++++++++++++++++ macaw-riscv-symbolic/tests/pass/so/fib.c | 8 +++++ macaw-riscv-symbolic/tests/pass/so/fib.h | 1 + macaw-riscv-symbolic/tests/pass/so/getone.c | 5 +++ macaw-riscv-symbolic/tests/pass/so/getone.h | 1 + .../tests/pass/so/libfib.opt32.so | Bin 0 -> 5160 bytes .../tests/pass/so/libfib.opt64.so | Bin 0 -> 5664 bytes .../tests/pass/so/libfib.unopt32.so | Bin 0 -> 5160 bytes .../tests/pass/so/libfib.unopt64.so | Bin 0 -> 5664 bytes .../tests/pass/so/libgetone.opt32.so | Bin 0 -> 5004 bytes .../tests/pass/so/libgetone.opt64.so | Bin 0 -> 5424 bytes .../tests/pass/so/libgetone.unopt32.so | Bin 0 -> 5004 bytes .../tests/pass/so/libgetone.unopt64.so | Bin 0 -> 5424 bytes macaw-riscv-symbolic/tests/pass/so/so.c | 9 +++++ .../tests/pass/so/so.opt32.exe | Bin 0 -> 5432 bytes .../tests/pass/so/so.opt64.exe | Bin 0 -> 6032 bytes .../tests/pass/so/so.unopt32.exe | Bin 0 -> 5432 bytes .../tests/pass/so/so.unopt64.exe | Bin 0 -> 6032 bytes macaw-riscv/macaw-riscv.cabal | 1 + macaw-riscv/src/Data/Macaw/RISCV.hs | 11 +++++++ 21 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 macaw-riscv-symbolic/tests/pass/so/fib.c create mode 100644 macaw-riscv-symbolic/tests/pass/so/fib.h create mode 100644 macaw-riscv-symbolic/tests/pass/so/getone.c create mode 100644 macaw-riscv-symbolic/tests/pass/so/getone.h create mode 100755 macaw-riscv-symbolic/tests/pass/so/libfib.opt32.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libfib.opt64.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libfib.unopt32.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libfib.unopt64.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libgetone.opt32.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libgetone.opt64.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libgetone.unopt32.so create mode 100755 macaw-riscv-symbolic/tests/pass/so/libgetone.unopt64.so create mode 100644 macaw-riscv-symbolic/tests/pass/so/so.c create mode 100755 macaw-riscv-symbolic/tests/pass/so/so.opt32.exe create mode 100755 macaw-riscv-symbolic/tests/pass/so/so.opt64.exe create mode 100755 macaw-riscv-symbolic/tests/pass/so/so.unopt32.exe create mode 100755 macaw-riscv-symbolic/tests/pass/so/so.unopt64.exe diff --git a/macaw-riscv-symbolic/tests/Main.hs b/macaw-riscv-symbolic/tests/Main.hs index f6b9ad54..cb62f6cc 100644 --- a/macaw-riscv-symbolic/tests/Main.hs +++ b/macaw-riscv-symbolic/tests/Main.hs @@ -32,7 +32,6 @@ import qualified Test.Tasty.Runners as TTR import qualified Data.Macaw.Architecture.Info as MAI import qualified Data.Macaw.CFG as MC import qualified Data.Macaw.Discovery as M -import qualified Data.Macaw.Memory.ElfLoader.PLTStubs as MMELP import qualified Data.Macaw.Symbolic as MS import qualified Data.Macaw.Symbolic.Testing as MST import qualified Data.Macaw.RISCV as MR @@ -133,8 +132,8 @@ symExTestSized :: forall rv w arch , 16 <= w , MC.ArchConstraints arch , arch ~ MR.RISCV rv + , Elf.ElfWidthConstraints w , KnownNat w - , Show (Elf.ElfWordType w) , MS.ArchInfo arch ) => MST.SimulationResult @@ -147,12 +146,7 @@ symExTestSized :: forall rv w arch -> MAI.ArchitectureInfo arch -> TTH.Assertion symExTestSized expected mmPreset exePath saveSMT saveMacaw step ehi archInfo = do - binfo <- MST.runDiscovery ehi exePath MST.toAddrSymMap archInfo - -- Test cases involving shared libraries are not - -- yet supported on the RISC-V backend. At a - -- minimum, this is blocked on - -- https://github.com/GaloisInc/elf-edit/issues/36. - (MMELP.noPLTStubInfo "RISC-V") + binfo <- MST.runDiscovery ehi exePath MST.toAddrSymMap archInfo MR.riscvPLTStubInfo let funInfos = Map.elems (MST.binaryDiscState (MST.mainBinaryInfo binfo) ^. M.funInfo) let testEntryPoints = mapMaybe hasTestPrefix funInfos F.forM_ testEntryPoints $ \(name, Some dfi) -> do diff --git a/macaw-riscv-symbolic/tests/pass/Makefile b/macaw-riscv-symbolic/tests/pass/Makefile index c6ec3a4d..27b942fb 100644 --- a/macaw-riscv-symbolic/tests/pass/Makefile +++ b/macaw-riscv-symbolic/tests/pass/Makefile @@ -2,6 +2,7 @@ CC64=riscv64-linux-musl-gcc CC32=riscv32-linux-musl-gcc CFLAGS=-nostdlib -no-pie -static -fno-stack-protector +SO_CFLAGS=-nostdlib -fno-stack-protector -fcf-protection=none unopt32 = $(patsubst %.c,%.unopt32.exe,$(wildcard *.c)) unopt64 = $(patsubst %.c,%.unopt64.exe,$(wildcard *.c)) @@ -21,3 +22,33 @@ all: $(unopt32) $(opt32) $(unopt64) $(opt64) %.opt64.exe : %.c $(CC64) $(CFLAGS) -O2 $< -o $@ + +so/libfib.unopt32.so: so/fib.c so/libgetone.unopt32.so + $(CC32) $(SO_CFLAGS) -O0 -Lso/ -Iso/ -shared $< -lgetone.unopt32 -o $@ +so/libfib.opt32.so: so/fib.c so/libgetone.opt32.so + $(CC32) $(SO_CFLAGS) -O2 -Lso/ -Iso/ -shared $< -lgetone.opt32 -o $@ + +so/libgetone.unopt32.so : so/getone.c + $(CC32) $(SO_CFLAGS) -O0 -Iso/ -shared $< -o $@ +so/libgetone.opt32.so : so/getone.c + $(CC32) $(SO_CFLAGS) -O2 -Iso/ -shared $< -o $@ + +so/so.unopt32.exe : so/so.c so/libfib.unopt32.so + $(CC32) $(SO_CFLAGS) -O0 -Lso/ -Iso/ $< -lfib.unopt32 -lgetone.unopt32 -o $@ +so/so.opt32.exe : so/so.c so/libfib.opt32.so + $(CC32) $(SO_CFLAGS) -O2 -Lso/ -Iso/ $< -lfib.opt32 -lgetone.opt32 -o $@ + +so/libfib.unopt64.so: so/fib.c so/libgetone.unopt64.so + $(CC64) $(SO_CFLAGS) -O0 -Lso/ -Iso/ -shared $< -lgetone.unopt64 -o $@ +so/libfib.opt64.so: so/fib.c so/libgetone.opt64.so + $(CC64) $(SO_CFLAGS) -O2 -Lso/ -Iso/ -shared $< -lgetone.opt64 -o $@ + +so/libgetone.unopt64.so : so/getone.c + $(CC64) $(SO_CFLAGS) -O0 -Iso/ -shared $< -o $@ +so/libgetone.opt64.so : so/getone.c + $(CC64) $(SO_CFLAGS) -O2 -Iso/ -shared $< -o $@ + +so/so.unopt64.exe : so/so.c so/libfib.unopt64.so + $(CC64) $(SO_CFLAGS) -O0 -Lso/ -Iso/ $< -lfib.unopt64 -lgetone.unopt64 -o $@ +so/so.opt64.exe : so/so.c so/libfib.opt64.so + $(CC64) $(SO_CFLAGS) -O2 -Lso/ -Iso/ $< -lfib.opt64 -lgetone.opt64 -o $@ diff --git a/macaw-riscv-symbolic/tests/pass/so/fib.c b/macaw-riscv-symbolic/tests/pass/so/fib.c new file mode 100644 index 00000000..60f439fd --- /dev/null +++ b/macaw-riscv-symbolic/tests/pass/so/fib.c @@ -0,0 +1,8 @@ +#include "fib.h" +#include "getone.h" + +int fib(int n) { + if (n <= 0) return 0; + if (n == 1) return getone(); + return fib(n - 1) + fib(n - 2); +} diff --git a/macaw-riscv-symbolic/tests/pass/so/fib.h b/macaw-riscv-symbolic/tests/pass/so/fib.h new file mode 100644 index 00000000..a55848d7 --- /dev/null +++ b/macaw-riscv-symbolic/tests/pass/so/fib.h @@ -0,0 +1 @@ +int fib(int x); diff --git a/macaw-riscv-symbolic/tests/pass/so/getone.c b/macaw-riscv-symbolic/tests/pass/so/getone.c new file mode 100644 index 00000000..6cef4ed8 --- /dev/null +++ b/macaw-riscv-symbolic/tests/pass/so/getone.c @@ -0,0 +1,5 @@ +#include "getone.h" + +int getone(void) { + return 1; +} diff --git a/macaw-riscv-symbolic/tests/pass/so/getone.h b/macaw-riscv-symbolic/tests/pass/so/getone.h new file mode 100644 index 00000000..a528347d --- /dev/null +++ b/macaw-riscv-symbolic/tests/pass/so/getone.h @@ -0,0 +1 @@ +int getone(void); diff --git a/macaw-riscv-symbolic/tests/pass/so/libfib.opt32.so b/macaw-riscv-symbolic/tests/pass/so/libfib.opt32.so new file mode 100755 index 0000000000000000000000000000000000000000..ec72edb6cb7b0b5431a62069e363c35caee8dc68 GIT binary patch literal 5160 zcmeHLT}WJ45I(x8YpojV8cdUvE(r;#(2GAYg$1pDyBBr+H(e|Z>w2?Mi@N@7pguKP zO-q9%tR;&-0qaAdLi->k(ua1-RzyU^E+VuKK4?s62&J_(#zwpSzI(l?`GL~M!VY|A zX3or+IcLtj4|CqL+HFx$Q9>t!_+3z2#Bc`u!HYsX2YyDF!B2}sk)Yaje{!Ee1N}sj zQ0?^xg{Xf;!&jIlV)pFO;QQ@k&7(vf)Iai@>iqBpOg}}e1<4?cduud38H^^{gFrIu;$m}yXmoo$ZEn%h+@ML4r`?;C zDRp^-h&3ZGHvx(_Lw;hD{u4rE8NSaqd}+92G8FC(_JY@(5buu{h(=UDRl+``kJlRw ziNb^!n!a#L*Xug2ERQdJ7MfdJSP0E8&;2yJGP62;J9ziIwiTsn>`1??#BClPG;W4X z@#|sJ)}3&c@m`)~xu>MRD0eO-Mr=s# zv77qg*XNJTUHbg>amU2ycIxg{NZx+=_Rw}}?%djqgq`jqUCtwK^y!R&-yJh-)wEj$K^@t3(%)OeYh$o%j4ANp$7*Z z`s9WWz8#))CP1l;;%11h@qMbvtYaKcF zq3P<2f!bedI!~?bQPX*PkXap(k5%}G45;c}D0T9H_)R^l?m?Xqd1g`+bk<(aPdyEK zk{JVtdY&q21N(m&SVWTj{lBCLXHi{wepzv$a8_1V6k3bURa>3*;_}jb+3Kv#FR)vk z!YSJ;3i9pF3Y)FQTC30QJst2BK}cQQtzK6HxVKZ|O}fgh23ab>ensPjT&;r{0+OVF=|n%G2B2R$KuUohYpN4%I`lozmJUBN3_K%5H5NI~uI2tt<(Ea`f?*V@& literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/libfib.opt64.so b/macaw-riscv-symbolic/tests/pass/so/libfib.opt64.so new file mode 100755 index 0000000000000000000000000000000000000000..a600fbf18263434160498fa14b6dffb4e7f80c90 GIT binary patch literal 5664 zcmeHL|4&<06u+-;qkL@;7Dt9kGo4{ed;uI{+KrVjh4E!DVazWv>)-(o9A73>yBe1X z6I2{#i4wBm0+NhmOEk`3NF>5i{|dh(gBBPfN*6%r0zS{_yQh>6j9KDuy-DBae7)z~ zbMJl4d6%rE1v)`sG(@(%ti$tu7Pm#|Zw6o-(9XNc%0 zh6LngWr(OlJAYpOI#~ktqir9@gt$J!icBBaCsN{G@U0?|A2Cisko_bjTHjd1lsbEB zOC4)!tkEc`^}PM1!%}-IWAR398l0DMM@f+8n@YM4g#lEtYiU+6vc;mM-Gc{AQ z>+@@WF3V?z_H`8=`cRHt**BnHQIqvEs&8OSziJs@=qT>WAJ8wW*=xFKmqWhXpX74r z<~Fjj*WC`ew||e@p4GX0$r0BL1HCb5u+?ZqaL7E>O&IHw9-_^Xjm} zcXTZ3sNl=WUiMs%TX&kwpBxmNM|@__)6oxoN6ayef@d&xZA8&Id|77w?`(Y9acYTms=Adce=91fytGMf7mUZCgZY{YS`xO`RYrs$UEe$Kq!(%-U*{mW*E;G-Q zUw9Y2_vXi2sS~~)UG!d>HAfxrYwyi;I&KYSd;36|GUHZq72p=!^=?PzAZBKo z^YrQGZ-Dlg$EEB??VPLLrD@kp)1E>7>{l?iZE6^G(|1NYihJRAZ353sc!Vnuu0Xf~ z;R=K+5UxPD0^tgTEAY4#pf)C!Pr%zv_8M2L{H;P4!`KDR2YOZB%ur7_#P!j9o)nJM zge7r4(9an)0rf;_T)&5-p5tDQMs7%Q;;BC+|0r%x@i_axfyxI3ILY%Qq`tf`FVAF5 zEi9`#XiQI+GNg24Mp{OCdU^&WP7`c{B6PX5AHix7I!fA?t#Xmker%P)?oz>n6e4t? zRL>wW^wJTG*0ELoXy1%_kwr3E?^b)*6=SeOqeVuiWmAX8Xcv2+Zb~+(?c{hK1h5Z{ zi{Bqm9-99lE;ky12pSfkx9j^0{qoKAPV#fkpzoJtX3KxQEayZ~9KZ_Mn}!WUDJ}0v z4b|-pOsaLZfSHE&HYT;zHC0RJo9s-o*Ij@o=&PF>WhN=Dz{#!6&2=sIpaniAiT618 z+XbCN!l(GWbg$_?(t9Ks^na;pD;+yJuY}L-;LpYE01)^NA^#y>f5Nle5aXc@#i#rK z0?05o@(&PPK<_Cq@ekTw;xmE3xpTR|$o&ZE`eF=x_k_kbfeh!Q_avQ1LJR1E2cBCT zgvWpm_P@&G6HbOC%+>xm@L`1?#-{zDdqUsiEZm>=i}I)VW#Ee@y`)noxe6`+v(F@c#=%6qoiN_au-z&@|Sb(5Mm; VaHRMoMzihw^Z3i+O)}iU{~s72q4xj) literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/libfib.unopt32.so b/macaw-riscv-symbolic/tests/pass/so/libfib.unopt32.so new file mode 100755 index 0000000000000000000000000000000000000000..04fa164d8c5b1375d5b72c80ad8c7b81ef203d8d GIT binary patch literal 5160 zcmeHL%}Z2K6hG5bvoiB53<`QCnFT#&M%}nj$C+^uN1gmw1i?6t(7@_x{l;@F_fF8ZfZf7%3HCEb?N^3==e?Y|e+=Dwgj`T8IlMDQ z`xQ_OF`j^~KwPem4NErT=5rYt9~;(|Gn30tx(z{RI?s{CHrD1wASE{JT^n7h6=|?u zg{~2J!F10LtZX1rgixj5j zZes~gJO(@lJO(@lJO(@lJO(@lJO(@lJO(@l4!{8G!xDh?=zHMn)^>ganzd&FK~>X2 zABA57umEL^t4cy!*Q=-CR{^Llr5bRNPn)_Jn(-q5*ZE)BhH%Ux<|0_L$HL)eyFS)4 zc+n07oS+l1gZ^M35D5DBpPlETSgINp;rS?*spEL5z6d!zYZ`P-O34WQ421370 zS-N5U9|P8~NCMi_|4v$xk*htS?#{3z6MenmXk@T2nv8e$bcJHkvbh;&G&Mac&d6*IX?j&K7QlOD+6yt8*I+OK5E{;Y_3P4=GWN+a6ZL@4Fii* zK^b8l(GM`s4^XO*M^23}W?=Tfm>+pI0z4y3H5WC{uGWO6B=C;crA^gxE(*H;%6o*4 KYbv4}llKe4=E14} literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/libfib.unopt64.so b/macaw-riscv-symbolic/tests/pass/so/libfib.unopt64.so new file mode 100755 index 0000000000000000000000000000000000000000..5231b2326ed248998307d992715f2994ce2ba866 GIT binary patch literal 5664 zcmeHL+iO&35TE3j#Ci$Vlp2VbW4$B_9wx~r?I2*aWmBwDH3Fi|y>b{e6EAxb|`4gc2DcF$M1^+v5_EI`^}bjeZ6e-G=8 z{%}tvj%rCj#7S8j#YHs^xYAc_?{y2K+~09T^*>y)gi*Q?(ZE}q^(ev^$vn;K} z%YCR~|CM>=`-AW+>p!f#ZL<&?H%C_K;dn*HYlI380 zN$Ups_tA?AtW)&_qvXc<;5otfxTr1|=Y{%_zn5dh1@UCFB10WojpqL%9yq`jiEr~g zjL@p_azBDY%kg4_7u`R*fa8xE|EmVb|1Y7C7w0c$;@2LCfBU6TdIFq?$PZfF){2ko M%i;nY6<5Z81PM6O%K!iX literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/libgetone.opt32.so b/macaw-riscv-symbolic/tests/pass/so/libgetone.opt32.so new file mode 100755 index 0000000000000000000000000000000000000000..5076d04034aabdf40ba51570582b394d93a527d4 GIT binary patch literal 5004 zcmeI0&rVZ86vj_2C<;;3jfo5I#)u1VY=awhQ`$>KD`16%Zf+17aM3n_YXXUh#Em4r zijU(fxO1T~y0m`3nL7l9MBUFxzI*2UnbVnXri(Lgvd(;^Qn4Ua`({`zeP*RUTr?Y( zp0z}J#-?o2#X~;&fpP(PHf=6`aKY^0n#XIo!Ra!7O8RJgS2iF%COr96Y)Bmw;wo=l z#ZQ{gTrI<)D$Va46>LBbYuztX@ZEU-ZX|U~-~p*>219Iq=Moh*d&O|jv+?ZhzFbiv z1CfEqKx7~?5E+OJLCXRlwZy^t=pz1|9=&B3d5Yi(!C(v7`=(!4IVEiHPxg|pWBFV`*I z9LicB_WQj-;nw^wAGQy(ylZe);ELc+!@pl}5?6&EqtTE&&JZNRpLy5iljA6n?1_S}20FEJzGw08s|4I1&<5=>S|ql6(bYK=rEDi#J7 zMt&O;3lalE5dtw0-izN?*(M1{i0w{FzI&hF=ezrSw)F0$=hv5VIYP7OD@pW8sZG65 zUXMEkhE2Lb1^z!xtJ7TJ=C#jyA0QRuOrcNkuXr|&ix<=QBMu1&-4gSQbVsTKu4w$= zW3(%}zim2A>aZ@)qIvVgI6z(Q)EA3>&sASbkW)Tszdkgun9U^+dQu&0_cQe2^#i zTTk#Z=V=@Cqj21(g7@lB83V=v<5!PhkZd%Y{yEj|gr{L}gDaw*BgeT%Yg z$8~s~zRaw-XYulUbDWk9o=SOrGmtzXFl3x8c2#Zr3>! z4&M!&;{dTvs4!2&w^WPuVISgr3g=L`59XssOjKjNj1T?szSIQdV?4ybrs}hwg%#Dy z^GP~dNh9D%ucB`2ffdOZ{NHhGkNpPUFsSO(@Yz~1!}@Z;BP`URT( z>3#H??0IX@7on@b0>J+BJV2q3asjBR(f@teqo?)ynzx*`w(fXA;D>(Tg)3nY1mVj3 zwOA*`RUNSi>!rA5$IW`R%`RN;L)+Y??xD4FNExUOT=Fz)Z$w$%ZZw`IUE?iZ1;pRo9~ZqB(8Z3{BQqLKUiqWm?nwOY{Rz^vE_TE( z2786FdgGUU@rP4b{pol-m=vn!fBA6xWR~w5JS*ZFpie`;vG63W13zc8Df4)Sga`bc zcMCq=JLd6h30@7ZK_4~mB)R2W`gnHU!cC4g(erT%k< dE10r~x3Y&El)|+ra36C@`#BsP4oWe3zX5Szcpd-% literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/libgetone.unopt64.so b/macaw-riscv-symbolic/tests/pass/so/libgetone.unopt64.so new file mode 100755 index 0000000000000000000000000000000000000000..a69d687ee2ab060668fc09139757a8c93d00e4ec GIT binary patch literal 5424 zcmeHL&ubG=5T0~XjaD?R7r}#}DAt2ZHXw+Cben8qG$tBb(9@D8A@Ptz+7;}{A`}l^ zJo>kJ@}S_cB1%ujne2RVHzrXKPriZ8_vYLA-j8{21M^;ZmEuAoK`@KHka(YzTGtoZ zm9VkMuuj)$k$+Fo(kNEAS$3rT04W_t3Vn>9^qJ64Ux?#T=n@dR1?K1J4pj$CssG?( z&=TFBnog7ItV^2kV!2`#PBLmtVgc3OCOz&OY`Banj#P zgvb1;(+&pxHo42IA1HNDx^=MHauYB2p)+VQU@~AbU@~AbU@~AbU@~AbU@~Ab@V{n2 zYCW+>TF8Cx!uwj_O?T60h1Wq%VKKRNDM414lNjhRFWJxN zy$;SR5b@d#pOv^>V^=u*Z{QvWIKH=08Rm&zZmJgR!#TwL)S(6+=jhb4qJCX TC}LdD5;jf$PW5#J&d~n=RoZ9%Hi*OTtdpp&fLI9u|P*ejwhbLae+Lze8kM(39G*_MZ$9T|J07AUpIwN6tI zAIyu_QyrLkJ4)kz^tx%xMZHFoK=-?+M9w-t`p!e=*9oWc*PTu9#wq#kL0Q^ZyJH^m z_rCw7?HrT|`1^;C2fLsCe&Nw4;nc+WDe()N-@bSZLr!@G@(Sb?$SaUnAg@4PfxH5F z1@a2y704^FV+DBc1zGTX}4JPN?y?| z&6bMAVrh2gVR^?VIm4SQ=WKLyIpy4qu4ks_Zgf`2)Wqoe_OIt=bbZ^`c^REE2W9Tg zRGBl$(UpMUQlriaza|Hj9;TujcgY`m-qwRUBiiu_(D4MZ9iRGX==)uKK-52`z(oX& zL%&S!Qlq|CLJG*2Yj^}p^EEi%RX7FeUx8=+Z;a@h(CvIU-t7_ly%GHy{fDIA67XiR zDr)YFx_@c0BI>i{rAjb&WjRo_#rmgyHBc*lxfUo<)!I_ouc@W^`9`p^-KyH%xEXfU zdfe%!(cpbisxjxU_^KRK7wbw%8YQXXgN0J%MneVlIW#KOOcIr(;UI)lkmG`fi|>|w97 ziY_s<)wtJ-`l+qOf8p=JiT?-JCi`w>``Ul!12phYr62!w;$6t*Z#JAVo?+xA_9Xqd z2Z){gW?<(TK)oJSW)39YIc= zc9`^e^c(__-QtW%R5N}$I1)IDHcQNhbP3@8VUGIU4x5K>a%NYXxICOb2N+kM1}+2y zVH``$kN6Ux-z-2HhZEPx5^WYX2iiV_-w!YxfP5I>SR9|{q>c$r`U%GSM$})9MPi?< O-v%~POIysx`uzhvf6#dV literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/so.opt64.exe b/macaw-riscv-symbolic/tests/pass/so/so.opt64.exe new file mode 100755 index 0000000000000000000000000000000000000000..2c1c0959acd4e76dd6e799b8a121de32582acd4e GIT binary patch literal 6032 zcmeHLzi%8>5FTd}I|;&ZVobshp_M?2Q+VSu1R*5Ad*}6GaXAy8gM=s^d%n&2(EZZw zCL*E$nI@$X1vE7L1&D?Y3YwG@(5C>21`&jakWgY~cIWf$ZG0#Nf@Ys|_r3Sc%$wPH zZ{KR(`(9=B(8L6xS@b)}=+2>pSysV!vq|R&!!o@m>H!g~D31yyB2iaa})rn(daC-eH4o=3+AnJ94AvI$s# zPZK?Bed}6ZTR+TNrMn;RFxF=2!!LKJ$@}rN!_WEh^!H6`nq#MTl+;Gj zepbOB_x5@*p~V91wsnje%+~SoSea;E@gc=CitwYuxMqs`cEX@0f&L?^IHh=6aaR?= zV~qL`_QzBopaR&67oIDPZ6GPl)t}@6}d&n z2zeOQ=Urr{nWS$KcGFNM+w?H~wl`#ky@Pn!uM@1F^?O43Z2aexKVx$z)n4KLjQGVy zSJ|bQKTfu-go4j_Dpk)vs{DJ(<30$>^A7VfbpJfp#_&7JXY=;a82wMj@K=~W@P2{s zI=0BHyjgWGu9e8VzOi2NRxWRNrm|Lj%`JOo(=Ap!L#A9=FS-@8zPeiTHuqW6Z1?JZ z+w^;_ZWIijA!BMQ?xt&sUU{u*3`Id08M(wTrdX>Pue!pdG4(JsVdM`Y?vLo3py5Y8 znV{Psa>DDK$geX-g9NwHi{16fX?CwV+kUuBPUCu))f0>c{v7T$MY_SnU}A+VgWzom%)!au9U4SB-&B6q~M2pe z-Vxtf#1H>(u#LnId$M^TO%?2TF#Ll(@GTaJ{o+t1?%8TD`!n4{S6Ujg&m{6?wZEal phnYLcKlnvnY?))2u1h>Epr}ZAL#vg1Bzqp{{}bcyRa%KuYPPXkii8AZ{Sha^b!eO-Ar8}ZymgFhZ{*!n zL>xdth#M-(0WMrPazKa+9JqlH$6k?&L{;$zR0w)NV1BxIr5uOn|?^-JoqoiL>>k|FRmPr8JU#BvR~`Qu6^hS>>I%WKY>9k zo`O!$&asI!T|g{?apZ`xFHDLoJY(=9nhD0G9j=nLe*>MMoiQ%|nzX?FL$ss2EW^H6 zf1BUgZl`&++nVid#NF9JCtkgNuHeOymq%ab&iOHiG}(EL&n@keGO?=`D7DD7 zPE!yc%-iTk>xmA{mUfs#{V?4);i6_^iF|xg^?`z!erz`Nuel;8gzMhoDy z-2mqu^eXs4@H4=p0Pm!a10>!p#WnZKLl92@2LO)wE&5R=p8%)*krDrMIE)~&`Mzif zVuza;llSdvsq}(7Q>|Y)?dJ1d!OOdaxk5glFU;*dEbsUvXLOV0oQ-ZSrkuOc_006# zjm`?0niyT*{`K69u5bG~FQaqjpw!)&Dsv_|x)KmvYSdZbf5}0mN2%z>eR5aN+j>xE zL_1y%I-VeQ;!{5j{g8_fi26keGyHH3?+!1MyVR&3lz;;Aod!FGrFk2i?TiOl z{jZPdThQ%%INnEN_D{z2YxEzHeoMfc#j2?C>vjLqVoB7i%S)w7`O0!d)fVfo_|=M9 z@r$*J5>>4&75$o8nxAh}R(4udyBjrwu3C>e{UjWm5~Uhtf5lhDN_DZWlq6xCC_Y#y zRctg=rCvs(Qq4G4aS{v?$h-Vi*b0(BRM^M+j2CbAlAsBm3=Chhk`A{nUc0~Htp)L# zc&*Jo+zn3#;tj%X;H`HP@sjW@d|?lIomF&+pshx|Uf54;E&dOG8czH_usplot!!WW z?>vhJ{;BlizfL>>+5F9hQ^qrl{DD15KkflyFTYvXc?Qt$DtriTH5-Ft@qBm=;0~hS z4fqf|KP*Aj^di3OQv`TU5IiT?#vMUUop$!&KYtSfk>28rNmK#rr-LJb3uv>%d`Oo7 zj>R1HyB#(U-{j1$HgS14y#{bReHyqB5QK3oF+buBfPQlT=?I*-MwV!^usP6n27X_{ n@EGKy0LS9^JSTNbaMCRpKQ*HMax4=2r2RIrky_efKGyFa&WYY! literal 0 HcmV?d00001 diff --git a/macaw-riscv-symbolic/tests/pass/so/so.unopt64.exe b/macaw-riscv-symbolic/tests/pass/so/so.unopt64.exe new file mode 100755 index 0000000000000000000000000000000000000000..805d29d16ab3bd30cb779f4e6385ae914ffb41a4 GIT binary patch literal 6032 zcmeHLJ!~9R5T5fUwiCd1V!+`?Xcdr>NOA zM?@3>Bb1azE=WTGB^82#j)o>BMW}HB5?z82xBy~icIWf$ZG0j{M71N`eeZp5=FPm> zw{JD?O0KXllt>W7qTfk+4_X0}(t#f)gT`To6um?v{69`(G|c@&J{OFq0^rd=uIbdk zQRQWNvAdz;QG8tWfQV2~Vi+VRHEtkH1e#(ev2Kk8{jH}Ws1CN^NbQFH!>+CRK&y_!oMz=oQsdd*bz4*M-Z8=E|K=dRvvYxOA zk6)O-m$pTtv=f<7<~n|m@x|IIaf}SkMzhuS{P2XSx?Zd4hDkA>u!BkDS%+PG`ZUpV z*7s@aJL|_uEBnv(CSz%mKKgo-s=Obk9A4+#*v+anMzUqo$A*7CxkICm1Y1+WvNmws&{OKRh+}@fYt5Rnm#g51@PN_D_E&2y75X{2yl^&On@jI0JD8 z;ta$Yh%*ppAkM)3&w$hqBB=4up9*NdW|ZcyI`GGxy_P?uMFQ;BwT~Li*8WkQ=UK%E z6i+BVq6pA(lE@Ai)FRM-SQSSU5$APP1dl%IL)aftJM{nB)AbM+SO0_Tsle4&8aL|W zd^Y>CeL7#faK=t1omnSo&(6#ylgZf`SPVvsD@)Y%VJ(X*Iy}FAp0kYvhXyQu>Ue%3 zn(Nuagy-DP4-@j;&yNt+*U#Tw$I7@xM+kZ7*XLbihnb*l5q48=Ot$GE`fabr^jZh; zvR@OdAN4z~d^G+u%Ac^g5t3KAJt2Nihe&Ro_xYn_+x>i*yT?QIJl>D@mB)S1qiXgp z;{@G3&!qwUrt;CeeKJ7*`T+hS^9SB9@Lk6mnfbSh>2r%&GH)y|WpncvmUE`CSbRO5 z&zY5UrjRpa@`a^Lx?q+T7D~C5eb!X#t<`efv|F{N=XRbUV@mVsm9)v^@{2`d$aA}% zkxL9?GNqEq73Y~WX0_WjU9a5nxZS63+)CLilX06BBBy(~;gwezy-tAZX!-8i2X@_i#)-z$ezV( zi1!zW`#3lg-LRbEPWa9S?>P|XoZNAV;E+R~uXpHAJ_F%@KM*CJ^sR!s!?3;5G|dfp z3t^9Q1NfRMB1ZT}TrcprocXZF`2xgyq0{)eLR;_^{>fT0(qX|l1cV>ak#AAdzt~Am z@!i7v4vZeVxHkmmBlbJG5Fp}WHD7cXT{_1t@r~~u&LP}K;@%P8S;P error $ "postArchTermStmtAbsState unimplemented in riscv_info" , MI.archClassifier = defaultClassifier } + +-- | PLT stub information for ARM32 relocation types. +riscvPLTStubInfo :: MMEP.PLTStubInfo (EE.RISCV_RelocationType w) +riscvPLTStubInfo = MMEP.PLTStubInfo + { MMEP.pltFunSize = 32 + , MMEP.pltStubSize = 16 + , MMEP.pltGotStubSize = error "Unexpected .plt.got section in RISC-V binary" + }