From 226608a48fe4a32c8a8d216cc080718f668249d7 Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Sat, 13 Aug 2022 20:58:47 +0200 Subject: [PATCH] LibDl: Move the `dlfcn` implementation to LibC --- Toolchain/Stubs/i686clang/libc.so | Bin 91032 -> 92232 bytes Toolchain/Stubs/i686clang/libdl.so | Bin 996 -> 0 bytes Toolchain/Stubs/x86_64clang/libc.so | Bin 107016 -> 108800 bytes Toolchain/Stubs/x86_64clang/libdl.so | Bin 1384 -> 0 bytes Userland/Libraries/LibC/dlfcn.cpp | 74 +++++++++++++++++- Userland/Libraries/{LibDl => LibC}/dlfcn.h | 0 .../{LibDl => LibC}/dlfcn_integration.h | 0 Userland/Libraries/LibDl/CMakeLists.txt | 10 +-- Userland/Libraries/LibDl/dlfcn.cpp | 74 ------------------ 9 files changed, 77 insertions(+), 81 deletions(-) delete mode 100644 Toolchain/Stubs/i686clang/libdl.so delete mode 100644 Toolchain/Stubs/x86_64clang/libdl.so rename Userland/Libraries/{LibDl => LibC}/dlfcn.h (100%) rename Userland/Libraries/{LibDl => LibC}/dlfcn_integration.h (100%) delete mode 100644 Userland/Libraries/LibDl/dlfcn.cpp diff --git a/Toolchain/Stubs/i686clang/libc.so b/Toolchain/Stubs/i686clang/libc.so index bf87ceff55dd6d6b218e801f23ca556a092cbcab..fe90dfc0f2f716e95e50dfb10fedf17d2bac8408 100644 GIT binary patch literal 92232 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 b@lgCW$MaSAFZ|^1KS3w|_tc>Jwfz2nYgsf; literal 91032 zcmdtL2b^R@wLjkEpdcV9K?#bAfn{z_R(Wiig=UxCVP}>o_V#p`>Div{-VQT61Vu@L z2r4Qfs2ITqk_15vh=M368J=JSMKSX5DGCoCzwfDVZ`HTM1Qz&z{`1-GdrzHHr%s)! zI+aem&&(7+N? z;A1ZF@%wgaSblc`{=9WQd?mq|#V$S;TW9#`__5eCXZrZ_JAC*=ihq9I$FCrM#}WL> zEnNCdVn-Kz_#dB(;MXBP=U?cv=9H4@LwSKty4bzQG~yl@RJ00 zAK=IDezOlRC3*k*R3E=D!M{Gm$L~z=ci-pZ|9-L$$0)tEC;0dcr}^;Zl>Tdo{vt~M zr^oy8?|#1ze~j>l5Pp#GCsKZ1PWY=%_WA#i%J*B8pNrq?)1Q2j506oP-$nHAB>JN$ z|GN_XzfSb|pH2C_|2;nbTB6^a=s!&KWuosReXSt+w-J5eWIz3_iT-ga?=I5keiZ*y z(*JKsAGeVHzDWEZ*e#Mr>{r*GK79W6K0LIS5AVN=5C4VWU3c*DZ+@*0|AgS%DgA2? z^XY#@@JSUPe-h>AGe7Y0C4vtk_@Br5^xr1_I0 zI`M^muX}v@a~)XHn;>|{A4l|pAHB+l|LXN;sIP?Igy3&n?Z@Bwmk})To%wSg{=bKP z__2q4_?Vyi@L|93;qU#-hc706iwWM7_&@t!e*A8NAA2Cei+*;d^86j;=U9^GdXoRn z2P1x>kIN`OdlSDCN#65FzFk&D{6xNOSNib#N&fd-?Bj2w_H%?IpYXes%KvhT-*>6c z@9R|`K4+~DA4l?Tw}+2^?p7b(a?po&zSf6N|C$ePxw{YVx{nY4_zE9BfaLA1`S>Fp zyp-3cUg6{StNZXtXZY~niQk7m;N#zt^x=zc(C{XB$oTif^*;XF1aIQl8!4|ID*qer z_v3F)_2ERqFCqNxB=29SeXpbbA#=T--mL_mLi*bF2%r84!vAcIkAL>7K70egJG{!r z?|qFAf0X1spXB=&!IzLchg1KzWUbGCXM!Jf%0ueU+7&*1lIrh))IaqR{y#{*bGC{2 z3I7jm>%-d<{N9)Q_-(fH;d2N+<7GbnYg_p6%LsqjmOg%SO7E20e9m=eP3l zZz8yZ((5Dn-e}sBaFO=0{Wml}5lhtn>1d2MV~iQ`JGPln=h~R>8~LBb(2$n zh2OSkM)V@jyN>eVkCQ$4`Q<)-%UApGegt3Y&`WyVWFNMo`qk^SAECeUZlC{=4lMY% z1B?8J+~ddYK`tqlIxR2m}-09=DCjM8M@)j!LKT7aU zB>&Ac-rMsrpZ}A0`S7XN`tVcKey6DZ9KWegzt_P&d?58-`;z^My}_s7YlRR0FOBc_ zr1`|&U-s!=PVkdtKfgk7@|%AApHlrgfbiE7{?RW)@uhx!_wzoSAovWT?hd-B|{Pya5*zDxYieI&w5{{DmP$v=M*;f21-X)i*5>wXbl z;FmA;;a7dphkx-UAAZMbAO6naKD>_Ly)X3fU8KJp;YWsi`h#EP!_SevpS#G%zsk{{ zrNBqW#-)Y3}s1N$_Z+wdne~s$frBvR}QGc=}^{4+u?XPgP&;KnBe`&w( zyf(rMd?oegSA5OKA4>Suv>tFS$@g)pzsa*Aeo}t#b;gSVf93l=e!CAuu*kPX&4-I+ zAAX|X!~e+o@VnCyEa?qW`o~lHuTS~(`w;zdqTk;cuL=LZ-Qvf84bk83jCX|o`$Yej z@A>h+J>bJ1Bl_(1skiGffu|EFOq>syKytogg z_b-b73M!BDsXu;-;Df0=(-i-VL0`Tf5u6}q@`nj0&b3W;3 z0qN&i$NoxwpK$D}z(w(|0U_;e?ah8-{j*DqxrzL1TWvor@w^YX@bACqfh^b zy?yvqME~e3eEj*Z_ThaU`z-lev!{>$_k})uH^Hav@8jdn_)77k`gN@{9}xWJ*Zc7= zqx5&B@;Q&-qX<5N9>%&j&=EIBk^5L%#zfU;*yYPRC z`2Y3Ye*C)#K9Kaioa*aR;&&3&uk}>^ds6xTZmpmGeFU$f{M%U%<~qOUsD&xZ-#jp!H9df*36_xb(t zQXk$x^Q#=S-xX9pK2Puz!Fyif^WXL`AO0ov=bt9{Ns|9Wr~eWC>_+g{-x%>1{5}MK z=M6soI?Deq|1-jizCZP#4>-a zH>fuzcVj3S@LiYVs%HQpT?{@5|r1ulj-)@w@cTj(G zEWzI(`cF9gMgD7U@bhyt$@2)|D?9u2f7{)MU+dI2;lB;h-$eS_kMJKN_*X=K2;qPD zB|rVI)A;#ogg=Y$D+u39@U_&R?m+fv6QaME?Av9h`|=&Tw+|ma>BD=Fy|}REG0eE73eo)2+( zzRRco4e9?APX8_Zcdz>NSN_C@|48-wvjkTOKF*Ox%HzMB_AKz#_xSw($FYwhPm1dQ z{onHGPo?qdda^%DD8Czy@Z*2$0UzG+NFTm~#*+_H`CLHt{{pJ73#op*lj`HYs6PCi z>ch8*{u{rJwC`pK;YUMpZ|UYztV{>`Z;P>pMLr}A3nq3FZ6$+{QnQt=WZ&Ww-EnlsXuy*@SD^4 z=nkSkndq+}c!y51&TxPJ8;wJ% z)~t^SEdGgqOhtHsw^-`KhrZp1FE;wJ@z1zj<6n-4#D9w5*Wc#j&-tMb|LG1N-uy>C zyfg8;kofIN{Hnz7!^AIpujViEi$1m?_;#ZoX_k_oyN!M<{HG;4zJ)uCek^>t(T|0H zM*JQje$NuWMa1uX;&=F2e)^>|eE8QDA6{Gb;YUn;u=4#r>*Mdq`0xQF|1Ko|ric6V z-#XZbuN?5(%9NLduQKxi3y+!dvhW{F zd0F@gQ(hK+$ds3bdrf&+__e0IEWE9$?-strl$V9CH|1sF2Tgfd_$JEVA53{!{326c z7JlXSzCP|UW zg-34J^!pfo_YnN=A87pR41Vl~K76aO*B1YCgWuQC|H;_zHyF5bn~rbczZ&?B27j>O zx1WLEZQ@I}E&1&=_Wmt^MIS%A2QT=u@b}Uh-W(61|Dn;3g@3ce$M0wKWAX1X`myl6 zhTj&3-%kxc3;&PdXW>4>&%);zeilxg<)=St+JjB+r^bF+_$bpJEc}qE4;KDa*5~)5 zj1Rww^syc3;~8VWEWc|_d$8~&13teWkp8Y*=;I$U?ZL(mOnb2KexeBcS@@>Se0Y0; zw>Is;(!ay#PspTvk2dw&x7QVpf&%!q>@#BAPp%33-^k?Z`Z}ey3EsXvwe6_sb&%)}(fuGq#p+o$A#{Rzo z!J@w{7Hj-Y2Ht)|!@C){uS3HxH}FDZ|F<*nViVuOOBZT-3wN9Hl46wfhD>=`c)2Mr z3okY0W#L;*d0F@lQ(hLn&XkvhUzyhFTlndoMW2@w{9ndi zTl`{UkF7oZtg){af33k=_SYgm3|{pKwMZ#k;*QY@m+|1;$yp)xfk zSK?pUg2}81WPS4-)<P^o`=68{gZ_2qS{ zi>jZURNg;#^tA){{fOX?kbF0r@raeLgY3rGx^UUw(6+-#?uOAn6}Q_M(UC^NmzL*OI<2C;Y)=-@Zxt-Hqh`7}ci% zXFMkIokI5H+mzpjDZgh^{BulyCt47G6J~sD;Vr0seVydli~8S(jJ*)GioN*)>GK)V zM~uq<1WNDLg(8Xm6Zt+s<@HmN|4U>K-{ROOiGTKEmYdFRKj~+G>W^XsUqSHoRR10% z_(MehYNIc!pSKx#1%4Iedj*x}Q8XS{PW9_|q>sPl{QUib%4>l1zZcn~+ll{CroLYV zwo;xSrTRKd?en8lzwTS;%Tp!%?$jPSsXThjcuTlQ`5i^+Z$35jy z$@U8)0i{0Hh~EOr-z6mPW~9F-NZ+3&e(Op9$5Q)A5xhV3Ph;zSdGDw8^*E*fG>wNk zseC`asn736B=6~@uh&riml6MS3BNzJuYXg2kfZ!fe8L|;;HUp_()Z)k|LsTm8YMVS@!wD7e=hY8 zzgg_3{}kE7PS)Q-pZ?n&KKweek9pE(isU?e&@wKmPdyziFwDUq=1Wp@iR`qnLd+DP7_S;ln-a+vfQGWKN{QQpOT|x5hMfGo#KVInL&)D3DPoVbs2vzM$G6aY?<~^S$plXk{5bK8QGMB;#uLX!;wyb!u`~*h{QidW^ADo4kP?C zi~aO|YxE(Zs{SwZ@fVQ%`w+h}$v;W-2a>#(MC?_12UGihl<+%Kd;dSG53i%~+&7&L zSn~5z8vm_6BuYT=CsO+VOXG*%QhN6-_2XYe>D@@_^-_9ksl8uK<-3sJP07Bkp!#{J z(a#{nlKNk!`tyE*zd-i!FlvwIlDrEjf1jrMbuQV@t^uLJW-$do{ zK1#1n^iNWG97gG#PU*dg;>Qm5%X0;l&j^iYcBJ-l0_kTv>Mu&f{}RIAM({4gub<@q z3h8Gr!aq#<+T7SjtM4O8o>vpUlPUklQh9D&@%42R*^_Tl`bQFc+cH1?M7P@B;+*5d1ZQ#|eHW z%8t_4QM7*a5t8rigujaH$2gVGHu)$4(bojkhnG`*_#2HMCdhs)A^rW5p^$^TAd&o83>zKi;c3en#|>1{*l9Yp#c zCHwMLqR&%(y^zM2A0~Skr}Xcn{`pYi{|hR=U$Z`_ypJaP_-CSjn$|~7Ao>18_UU@3 zzKOriA&$HPzs9jY0>9m<4+8&*?E7O>KbG6V#Z$_6J?ZZjCq2PmxM>tY;BmsAY1)@m zb6H>cq#5rBEdB8n#y*N#1pgHypM^g|`W_+vmr{HE4axIk!(XHn`EDWoUPtgBDZj^x zAm&fvucYz75~^=UQG0%x^!?w|z6&(|d*}e0nwIwh>i;$nd^73iJA^-r^0Ot`yZ@p3 zbp_2|4x;vZ9^v0j^50MLEGGSJPxj`|RR4aT@$-KbwU6b*Zy&2R2ZC|4Q=xi1PC`%Ktdok3W-ryqM&DU6g%QUvD7!K0*2U67f5Q_-#jUK=4AU zFW)78hY7RJ8&p%7@pG4(-lM`R+&$*QUvnl;k34V&|+c?3C$lmQs`F)V=V;|9f zisU(Ush_{k68*b~{{otCZe!Bh9Bjm%|Jjt6g)cGo%)(uipU)Hj$4UM-(|C9@ihmQ~ zN22Vg_Or#JC_u_{FQHIxS;sGk>opz z_+Li#?Vlw7YT}=z`uo(vCA3CdGk&Ih&~=Q^>qd8nAGPO)$hL={K-&*;O{o}*}`Sg|4$xs z^%aX}K@$2PIeg*D#@+a_Do%960)F}^vx1|2` zVkf@jZ>iOf(Z}hg{cjFf%KLQ=KcRms_5WuN`1-qJtq<=*{ml}B@1^m{4up>ryuU*) z`Fn=+`FAS6ohbj`q5ASqY9B8%^jn+!KT7>oKf!OL`2RuUi8Yk|KWP4S55cz*zf;Jb zK1t(|4k;+}C*|`9*^i^C{Ju=~Jx~0XP<`m3_ID=9cPQb%Oz<8ApF{8)2tJ?Sg#_Jw^-X>$UrQ83>R3Ek``jZI0pUQs`jTes~_@26--i4&^N2ou0mh8p#RG!C1 z?3Dfb_rfSZ%70gi|2UQR`yz4`zfS$_S4h5Xss1?ZRQzkHzI=h|#}kyl|0Mb+NdD^_ zdnWl=NcM4v%HwO4-X!VkVv2tu;Xg<6>_+%A2|k4EOP1{E52(B!BKUsCeo6lJaTF@> z;l%$r(%9@A8wkLIEP;rDl{udgNj9ZdG~Y_caGCi+;unyS^NV};UazL=D^QaM{J zmY>L$a+#DWxClrdGdwgMlixx0 zNa)AV;Bo_+r$8&?ir1z#t6l8itHPN3K$uNY?V{b=86K4Y8b*eXNo%X7I@8lEu_SwpI$kTqT>8 zpfDf;P+MxH`b27jR69gbZ=$m#w3D>;I4QxBfBieC9tr(`77S>f0+ALrwAVry!_`8Q zz+eD@$@GR)vXVt*EKM0mzt_^a0)o=HiPXAmB?Tk|*1v=5kyxYJnBW%D|yLf%}X^~$rfQ8k|6?Ygrb^F z*DG03yg=zfHU&b7STCbhp$I2qQa+hH(kaOA6l_d(Qp?gQvY^IIcU!{t_lFL(7h#8b*MlN942UTwbzX6_WI5 zL0&>32AAdYgM;azc=E*&VmKiKo|Vfn!s%SIdPUHaE=|bzPX;;p490o`3J-M85g2)u zDha5mZ&|&lCS{3bd34DGE5^G927-Py?n_SPYh%fDs+>xPv4y))ZP1yomI@f>Ws)*; z47mp#GJ?hk2}7SCD9baMs#H>j!pav9fX_p;llnO3dMwsz~vqj`Cy#iy{O3<6ZXgrez5q`>;5?OhKGyqK=1NOmG zZL9~{!n9mV>t$|5Niq}f&0+eKtQD%ss^|?P{vg;~f%7)de+UDP)VI zwJ|?#plE6sZ|5^Ure8%aV0Pn%vkJSB-&)nk31t78S}y1jd(;^~%jvq**rZN5iK%~7 zCQT#7gBeKUah1RlnQ=(TCNSMep>f4KC}JJcEt5pElI#mi^qu13u=x$2t zQJOl_gKQT}u_DL$S~6$ad~0!n{!A%ZNF6_oNv=#M)v`^?YN@C}SeZTbL<+iZ;JsYr z*A29HNH@G7Xh((iSE|&Kx)EA+q1596N~N!{PwISt2>6RLlllqW&77IRz z#TJYLolv2WpJhTVDT59q)PjkiB56G$6id(QY_(pfB_@Ner3E#^J}g_U!W<8DXJzuO zYnVeQLyFForDCyOD6G!r25acFn$&T0Tr+WOW)#P=g)*k+%BFQKORN|OdekZ=nsF&P zQqSdlWUpH4NUBvY7b`s)cUDpsQX4!rZs*yYAgcd8y88+>(oFthePYCl*eFA{>cm3^ z{o%S6A;Qr>lz0#yLbJ+dhE(Th%y}ylZAnzo_bgWB-Ib}7OiX2r!fsNV-L6c1!bNLa<%Bk= zoShRX8wG{bwPsCXX>Y!oJU&|~X%U+x6c3c8Mgvl#4{NboM+o{<1l_rsXzi#mkjR^^ zcxLLjD@<#y@wn_OMD|*YgoxiJMkjR}Ge-&f=8`}VR~hvMK{4nNax?s%0%Kg7{<20G&v+j?M_Z zHB?R&6U(t|vSK`dSsm(@*^5l%`c|otUaFA5O491(!^xo~Nx`mMzNRoakW4$N1p!uM zdlq3w1lBzWl)=<`5k^*XdXDHvSF;zIlNinlWi}q9lR<}yiA|(8Z^!7!BE!JJ+~jj z{7m&{n4HT@QBzPdfiW)_uNi_Sy;q-FJ;2zrNg}-ysp(|BYEfWsy7=Bob~1~3zmDT^ z)%~c<(kz;!a#7KU#0^CRZ3p^`r73hbse&3^r%N7BMH252l8I8WR4WzpX^iQYvL58p9BjWKC883^tnB^kSz_mMfykjgB8tpmVF%u%{l*ewZLWY-UNz z;2scksnItPd$q?*X*;lMX}lO}Sn83j^`cXVevb%~rh7z>NY|jaTZ5w9%jf_LAF!C% zur|S-9J&_wXoKAqQRzBWu2(Rn35{cm5o*RIX|al6X{1g`4>6n?LC=j&bYA0XEw%2> z!*R7NPp%k2U*A0-4k75F`;$SS-u2L1V}tHWR{8{4Gr>AtI#Tzn1dC=LG6ZOoc+U%v z_$;T8je^N+qqSCmeLh;jHbMIodmB_S+Y|@E*fk+)*cBNiFRMYAQC{ z>^n2Ru;|12Tni@3*7^g2?h)}=(G4r?1UfwnAGJE&zymW>l);|Ukh|3)uxY=2@Y6`j z06&Usl_%q!Ua+Xk%HA}MgNM;_!baXShITB7M$Ro`^dJpMV%8Btq4Z|<9FnNcITsUi zj-j`?=OEOqBZT?Z+u3tSLT^IPB0`vi-aDQ}3|o4sR*Lfa4zu7MR|~$?8dkrOUAi7Q ztL;nUI!Fc_JhrwtkE^!r7Ud2FZJ0-{g|Mh0jMuT^jw+ZdMPanYA0eXkeH$iXIul|W zJcR9-W=sASk7&j;I3YCs3;LH}Dl7fok(HDTv=^gaZcaXe&Cj;vyhv!-U_Zmzc8Efw zEe9J0iDhu$fI-g?hTw(i75U=2Y-UBiT1y07OW-$Etd|ebE?EPXTosE2z-m@qXZzmk z`Sj^?mE`$#;!bKCZ}g&j5sY3O?sh?QFs)W3n_-r>M72an_ov77dOfrWTOnDRt)=pX zpkpx>fAx}LV#Ro89D^k_~KSQzE?EmZQ+9Ek|MD=H}8sn_JID8k1^Jo=I&+ZcM5{c_uXsW0M*p z9FuCo*rbM}Elg^Nce8Kv1!=NBbdN^W<$L-;ze5QSwn(nBvk7 z+y6P;P#DHK3lWaa!m#Gj*#sKwe;ChGS{NEhZ8!`MEv+kO)It4Bm?zwMZGe3NT&-nF z^_n$Q(`A8-DD_kYd-@|PWKD5O{1Xn&)>danvG9+^E72;cVy#@m8HF1D2^V=_ z3SY%ys|j&m>mw4V4-e>b4RBzVg;<2<;FpXg1?6`DK>H_K2s=g9Y=|2x!Mk0fQfcv1 zh^67KU8=?E6XFtLVtcs{3 z80rNX)*)D}3sIs-p)xv^SD(;*3dMYi6We_6{&dxrFp9%zTlARsI0|Es`>>8 z{Q_eBl1$oa0)Lxz$y7}}Dkv#vw1PUQ7!Z{S1%FJTG=Kdff~yb_+oIrvb z@6M5s@N`6eG?UGxurKT$7*SYBBf{zmXAXd%)ojSyLNtKQp2iFaeqy95dsiq)i_}L{ zRG=e_e?CQHO-d?)5{Dx>fri#Omg4b{cG*ZBg(R^YoXN`^5VBfH)zK6cB4)uunL{aF zm}>hfB#EOE;wPiyB$I{wh@pfKi+vih8Bvn?M2gzOs}P)efjiS!Emk`oGD;e1S54mK=#dG-St2aS zDs(2R-e54W*QA4R5=XtkU?4!+r?|UF`&7>fsf*Z`j6tfRJj>NAmgH-(0_I{cFwrld zx=3BbVXIg!Jyx2+sRnh@N-#w%C*lB747Nd|CrT({b$$vDtnR~ML!Y10pg3^A0Lux6 z)yvTzV@X<0k0ezf&NDOyf)d?npd7r!i7#1eq(Q`)Xo^$gGm@lcCYc&mPkh6s(R4G)P@aXLgj68eEI+JNRM5S_TGwLfvAV#p9tFCWGG zOUkPbtt~x<1?Z%jLt`Zeg)h4@Ox|P2)ls-+wB9Ho=)oQ(HldQ?C_yvyiNup&3@yf^ z%E4MsRbx3cZaivYyJHfjgQ{r$u=H~HN4y!Vt&nKo1We!Qo5c zBnzz|&Ikq!nW}UqBBy%6IW_ZEG_N3*9pzje1VGhFAeR@Q&6`llt1M?AZ>XXAcThbN z`hj|CK=Txc>S?uoJ=I*7>c^mdVx(%|aPP-w?dMu?V^$S95fO@JqOi~f(Av4}>ZNRJ4 zLFir+l+nRY=+|mlzoO>hko82Wx=zQdmE>g-6%fIAllr3HRKe=k(Fqwg04tVEZ%$WY zsVaP-R4C4Ci-7^YT*KC@dP7djQ}uiXf$G>}*{yAAoCrzE%Dy&WB(BDwqGal2$)9-? z<*Aw{DCAAkmSakVaC1aDX6P!73rm)metKy~1Q0+8Ta1Fh%?9xRTiMz&`VtH?t2iT^ zL^L!vaW9cV2eWa!$?;QpBBW3%j;bL0GO~9#=8;iPX&Mp(11vlM6%DAKs%an` zsz%+brgGUNYL|_Wf*+WUi@r#|i?$1jT{T;d)vJXp9=fMczO)KPagRtiq+OSthCiRw zO!GETFG@hzr%nhofe9lXwNcb{po$qhFbW4BHJIrC9U2hPe9X1P{SeMHqP3hJ2@1S}l^aH(`0nM`%!+{TssAB~+ur}lC zSaqz9MH2)&##Z$l<)Rchnx(Rh@{}4NPgRw%v{1wZdNN3ueJ8*y<}AhR2;M*Tq(>}i!dJ^;OB9UCsc&~c-c%jN*cHP#ECR*gYNtj~ zVSqI`<2W#Zp0@FzKY~%gVN3;&iE$B@D}&V?TP@I})vO3@3Jpp^Q8cj}g4K(3BsxU@ zR)%23NazQeg#pb|(=0Wl`iY^NftT9=`=VeO9QF*UIY(+}K!T8exRs)1pcj|E5-P?e z4fP2%7DLY~BZpK$zvySGlJ0_>8C>XqgDO}Unviz3A%`cjsGg}p3XmMf7l+PRRg=e} zm{Mk#kLQsLI=WGiD03G>vEZL6XqZqeDWxokC>nIyyY24uy%>tv)|fUZFm@x*{UJ!l z#hN}(v1^X(lfF~o`S z2y;D0lfYm=l^Jf*C`g&vCkBr2ABKG`)(WxgL_Lj1xgx*$lKQPq0aXE5)z2o&Y)SDL zmI_fT8Qz5$4mp`1cqiKgEs>?tWJnM$S_+qzC!|wPTdM1@o}>FZwVDE;4zII(0To$W zj`Y|%taBqE4I4fRc6Q8?DyFl@mGt4NORR6eI*HM+@$fR2lxT0^)ysROZYm;mhX-7> za6mF&snrqBvdyj+2vWkR6`gRkj%C7R(Ay}WGI}Dw@R0r;RF8yypfVWHJO!f40AK2M zceR8u+{(}-Fc^RmW!NfX78p|X+N_P`o1>)qTa;0@h4IATKCL)T$`W#@H@%`9tBxQH zm8C3CXi+^?OVVw@6Aw4ES z1+itOmvyl?DFe??BDI9dfoAbk7BVXywMC$YWSXN)D8_s$A}4QxtxPI)3NvY#&rP95WJmG-2# zg#lh69VqRjxQ`Swavh6`;(7GPhqTTP-du=-u9h54uRSwG zf5>9M$P+C?!o^s;V`Pm(Rvk4SLjrC8`j!0~OBHg-Y6{DCa0bs{XGCSn-O}!Xoq)^u zz~Gq1fkDuT<@hSbGU7lD&wh>Yk1yy=@6N7b7Wk_vjw%86R5kqN2P&Gw{f(Wa3!(BiGB zy-`&bTHV8Bd*Arj{sPWiU5whWgrWWZU$Mk02L-DwnUfBJ0SX{zzLA7Y9 zYpa)AUC+P)hjJ%MlTfIN00Hz9H+pGFESu2pOT4=RvHHD|G?vDuqFXE)h?h-H!Zk~7 zy_f}cv%|+h|DZm#e+cSOwz67zKD;n2J7*_lO`YA_*!h8z-E3HnD?hi{P{P*Do;K)P zoF84J_l96A7E8CXV!RJB^-CdRlU7FZ;bkRU%&;8fS87UVcCno{)8uIMtVOWKOJ{p_ zNe?9*x68RjZ0|W5y5-G{=}aDuZImHeqyyEs$3iv?q6&Oi7N52E4gEXadiJ@9BC^~Y}7zcJ{I4kH_t#58I7wZ&4&fUn-T&FC-&| zV=B6^#UNG8Tt(D`0268FuA&BlUcm=B`Ut7L1h0NsFU-U1cmWMA>aR1y%FPcwdvwCn=k->HxT{O08|?EEzZ>Bvib4 zd133;-qcro=EHw#zM~HShH9CWOiteg!NbE}jfW1KpZlA4y0h&18fBW%Z(c7Y%vl%n zJnc7w0_J+qZw7YF#_zMpuN~I7+6?{s8{<2jySuIt8U<~s;^Eb6n9kx-@yM@=twY?J zNqgm+zaA3uCDYm2A?N8+$ZEEMswLc}Bz$1M4gV;6TF4p^ju67giOq zii0KkBXRRyLe@vk8Is`?7IvD&3}ziuv>x@e@eZdmHfuJeTx1v{N?ZmQ_Q_2M!!9@I za{7M^8A5sOv`lJ;9@>Os+D@S(w7$Hlj7#K|PdAoRLJ|Bs zQta&tA-c7B#+U^w18_%?-FbBTDm7<@933517%5k+E_KVF)Y-aRKc|KZRu6i1rdc)V zp#t|{VCU?};$c>3OoEza1&b`P6UgL2GjbECSAAsh9qWg({gaPjVWEg$U7-W47NXpf zQ$mp+55s%ZDk9vl)3_t2TuNghF`vhpJ{)53td;cBE-Rr{$ZjiWgs-j^x(syC@Q@&| z2%sJb{lJod0nJlImI}WtyaXTDTejO+Q8B#YFvH_caiP#RRN}1WfTDA2t1KPKC6*c^ zX}Vi8p&(IUpeS*YL~zK6eqxi?z{_obebMj{tqwjZF71%m*Kd9-MmA}t@|oHgUi4G) zA|sb@Z9nu1!u2(=oVvvZOZWPT{TU2i%VQ`@^K?DHFhZAA8|@H=^?%1XOnkRYcn;1p znEzoTM{d;D3ustv3PZ4Pj7hz~IC_Gu=CRm_dD=~u3_M|k9IDj6gX)pc57Z0;nx{af zTIu6?L8q}aGJwV1n~K1%I%Dmtj*1ZtR^#2q&o?!aXP00l%g|E&7}QUcyn&b70Q&-1 z_S+|_qsoa$o>(ePRYqg7Wm+D!j%d~mO&pit&0ZRn%}`Kc*{wJV-R5M)9BXbdb*?1z z-a%g@fk~rx*f|`TkS)x05-j_CP`{?gIj^!-DxqpK)_hVxxrd0qEnuXr-AEKH?w{&K zN(hNbl~<31exQU5Xr7YS+9Ve2O9$mNPGEe-cT`#yQfFpBz5JAwCS4O9GH)q24B^#5q)@Xx#fYc_P!T`vqQILho zIH2Ab2Sqa~C%+moU=U%f>yIKchf+pMC4DJT%mgT;HUQ{PlrdGOJ;Z#V{;P*_ip;8g zVO>vb zi*Z(^D(fy;46VGdRC;|qUvV`kZUK!4%&;YaGiHvW6IG;qP?2jK zZaJOE>LUimmsGNXeR~6m_yTE1;mA!`d|f3xl^Iu07^R$gfmzZonS4&a7couMV4bJ>XSl}DL(*Qlj3!& z(dtdzT&|+SJxiQvaneM&Z0L9C;?$e2AQ`w5;tGeXb|jJtipy8aNx36XnL@{z9ZsvV z+3tiuN(o3Nh7WW6Wrq)2g1$F99N}!Q>tP_ev}}o=#0ec-8x_OVj2S$T%Sv6Y#+4r8 z2tK&1x{YRmiH1P!j0w-JiZFu|;#?Y&)5GdT-ye>(ISm~nhm*zfsc-0@wWIM=vEDiu zz(GL9U(pA4U_bMjsQHv&9b<5zkPvLVXJhJck@$LO5RDRF0z-Jds-H3vP`Mi#RF8yy zpyxB7c?v{5U$%YEr?fYf5gn%SaJ|Ts5!0S*8Qs}u(C9EY6$fOT;M2ny9BnGfs}zEI zt*FBqGWbG8kJV&NGd3bW;>4o-+3Ru!7O%2os`(d80(eGdzo}uw>9Iy49jLuyr)B?E zvZKxj$hZhc1q7A{ARK5i0p<;1Srek3ipB)g5JwJM>Zn!CNFEYc)}VdJQ+y~U@C1)h zjg^N^)dV0_i>er8*#xMkh+|;&lqwA;W#`TnRiPV$#Fg2lQr@Q-F+w>Jp_suVJUc6{ zD#(@^KuEB3T4-AZxk1rR(zKeZ+CESF?rD*r5+zznu9j8`*S~}6k^7No4RS#aj#A2cvy~@U2)B*>_SL;ZLFp^yY6aS33 z?A@#NXyYZd%A~MdJ>lJ<#FAx8yH+Z@y4m$2jpR-(XoeSU`r&4wF$xqe{+84(08>%53Zg}q6#QM?px^8Or_^a|ea~-8Vz)kr$@>hgQ(zjS1dPSi zNDQy)Xs`;J7?IkomLmHx(apn!7YnEG-!xwYSiQUl5RONVD?*6evp8SF__rU%LAGph z_vpCBMT=5c^A#V;kaf3m@WNd@VW>2xsMK&O4J$!%MFc$mD4j0xs2Yeu+iZ_^SI1y9 z*U7%DTy7z=B0}@%1)oBF5YIJx5`eN!tenp>v z%Q1R`I~A&R(6vH+hvu*nCRcela4GZV8H)jY$4M!{XEh$Ng0vfp6?S8v7puX^NG$AT zJ}+KQ4xcY8NAJ&dSoPn4XU0&}L)q^<&(rAM@tn)Q@@dnAiw;aq7ps<#6i9 zym>hFW8OTR`Y~S~ZvD`G!Skyh^XB2yk9qTO>c_l!IQ3)RJe>M5Zyrwlm^Tlne$1DL zTR(J9I`{hF_EGcY;o6}2@^JgP`SQp)ws5{Y#+|x8Ump35z$3R2c#J!3Zr*uu`u+Lx z7CglW%o;15F3vIF8DyoU)PqlHEcQ|d=%9+)) z9V@SD-riP9Lo_@jr0`BrkA!|;IoyEesn|6xM1`w_`ddx%N#yWbzcxzOByIy97*x(< zSmAXS!IXnwJU)!w?tu!n*E8C0ZBQ=1s17IwoP};#Offjf4J9hfmb&+2p*P9mTz@pbg2xP6X;-G94XKU4sHwfUiAjxop+*~x ziX4BDlY3D!_o5~?{zCRvjRp6jruL#HhP#Shyaw=sr=|QxI+u$7cRsC0=snsyOD3xr zZ`n~m&~=2q_HYsI5r%U$zU3}s%_i~Hh;5!xgL$O70v;pTN)TXy15fxo=8FTX-1PG! zc{pSkfh9}&8Y#IRY9oK${`ri)n@*3y86i$L*U+&A$yHH4nhlF)-*bX89E*p8{AS6h zi!JQIRy}sk7RpI+HOAMD)slv-Bv|diKcj`lc;Z7pbG&BRqS0P6dBb$A*B~pApsWZxIDB^NbN$qeCoTTHWcOg*Df;`YjM zF*uzjR`x8Ht9J{%LpmT7d;p(E=}e9fj1MP=JCegeayZ`D?(}E~eDiL#$EApv(lj(u zLyTjk&56}gPWV0Y9ywc`!8f$TQ&_HbmFYnD;uOvtsP^L=ONV|}n*`N5SbwxUsTL;T z>{98*F`;}7^RDF>)ykJsmEYAQ=3T?ndg8S-waPGoAkC@*(r+;m^&1N&bkbV12Bg&+ z$1lY9mQwX~M#>E=yP*c}LNv3+NV-lmDNU*eQOwnFvM&J{+2jNEDu(A;4(4*FO0>MnSjj#fzkzq>*aqc$g4DWqX_v&zyZ;?*C zL*3+zb0MR}k{or$agb`ZO`=Zaq#BI0?0u1+pvR|59g4Hn-4m7l*&1g9=O0Y+_S+S21 zf5QsrIlSPmHER+}-9U&Eal%b3xCdB{zEG@T9Dc#T$7dyh6L~){y4=P)<={n(Zpvw4 zZaiwOC>dotxl@7g+7AOGMeBaJNx2Y0u_&+bSg5dxgcoKMsfVmh*tSNw3S0A4bC+CdKT-a~{MXG>KTV{h}^{UHX;KeYPNPgbu64S}+Owk%j zn3dBuk0y4Qy*Wkh56`suIh_*|Bf<0F5Q*WaZ9X#0H+tZ-|4@@CH}NEBJ&aeQyQVEs zD&I^6Ghg0bzaw2KWKnlVi1s0(^Sl(U6CoXhyA#iulgxSywM+KJxv@roaU(8PesBgp=)yz-)k)1MaEEcz z7*2zWMhGof`@UmxRj_+Fw^bzHZA^d40M3WmN~*a;$U|p`E>Gxp$dGwKG5Fel<(xxz^nTAQ(kuGKWHOU_-Zs)My>8TyNdu-uS|28&7y z8=uMJGU+;QDQV9KH3G+nwB(5n&w#Nn$&owy63>QAzU_u zZ(^#g7g>I4u(nRjpv&IQudh;XyqRAH8GSN&KL+U&3WSCe#uErp}2go92irM}?2X+(dSTkUPeJM8xYa2=D_pf=G%VFP^eK*UpHIeU9S z(-gxf_>^a2axHPYXOQF=AJW;tc z*KC+@(1VXR;TnUPB6u3rgTJ8LT<9zVD7gTvc~X*ZvI5$bdkrjua!@WUj=-B6BA; zIP7^2xrYg#d9q!7R(%mdmfHs~t%86(gL)7!pb$d{H+4xfG6Qu#dIpCHpnbXI4&Nwl z{&k7=%%hCl2^=Cl0iA)!OhIR$GLz6|RFdUrRHRka&?U9Vm}XOon%`TmnZ%XRmKrjM!zs0d%ouS& zV%SWgFPb3_FWjcsO1QxX!2rI#JFSl<46GP||GZicfIUg5-7Aq`pi(JSR;lmb1)cia zMK!%6FG}uKXlw-I91XyDpP|4t?NwQ1R|zc6j-e0VsCk^#4qUT5!mIoLBYB)*yKm)C zQ>XJtc-anoDGMkv=psgsf52tNqZna6u(Kn(kN-c&$%~f{WAQw_hi+`HW+m{2(yZ=9 zV7?O5lj13lbb{WY8tx#)-P|EEv}<8VV#D0XYjY#7&W#)&K%a~3_(b+x$nm+axsb!J za4zKdHo#oSaguT_Kw?WROdi0r8)<4Db+cUOR3I*TuOBg#J3Nzh~EC}w+x#6MIGCk{ZM>N*uSR|+Zc!|6DHm2%`ssFoAIMvc1geq z)VheHKU8}|!O&Q#UdSvND@~MVpcnaOOAgxTEP1nt!$+(PI^^cw4fuG*WDxY?&RsQu ztKl>&W?i|GNHaV%E2_k-sQeV;NWGfJ&G@+LSAV>tMWSs8{dC(9Qqn;(IXN+_wA)Zp z;%zAX)J4@Z=eiY@pK2>AO0gf;+RE@74j^rdw70<4UwpEAJrxt`HLu*1m>7YmMn66K>O|}J*pJWT7#^kDF`I(bzLe!XC6Cyvk zc&E}=25W(EyeYKJWP4ga@%FU74ALOVYX7}$MQ=gnr`v*;T6FU^_w>iT)w)(r4GbNB ziUH+pB%Q;My48OvF6Ph+^3pjt3$bRYSseSry-pnJRLkQ+s+Q_!SPhpsH{ z-7>28WnNlUZ^6e~1vc*EO=98zs(&hKC=#V9i%dyAc4E(nsD%S!;TSBO=|+%u`4##LnL%6vWZzXEeR^P21fPK zi6ZV}!SYfz1xHGR*qM(iL|J)tDwcA_Y(f)dwiSh1D#Z7HF&e?a68SK)R)Cut5)-nx zcX&xYp{y>K!OE{v8O3nLvq~e9NV--8(N>r#7vkV0VpK{bP9iM`qC}b#NZ!>Y&+F@1 ztP+!&jdJ>AQC>dV(gGjEg&=2_+M6>80=rC2ZtGI!QskcZNT0jQlWA~uH*r(}cSz#V zRy(Q4W7}&!HPbd9_z05v22B$pk6EAntV|O^UGqe+GDdwS?jwv$|f;B}~4ra2qn29zh%{S8Fp(d?kHe6Z=;pS3!DJSkZ z2`~!|o${^DCOf;H_JaPUhGZcBkzZA_A`7sst9^+~G8>h9TrLGv9#38-N@+|(HflnR+1Ri#mE@L%?3Qgz z=4}cZ*Puvket`;lV{&g>&>J(MfQter`CdRBO}wDo3mcO=D`sOdZ&OEco6QTT|BcDL zZ5`d12{qJFT;{UTbkwFOaE;4GOQzAFZcOfNi(+FY)KCj-pla zQ3gU5txQlW7G`Qa@A#1jRtc@_)C>~LH+m#Mn1@zve+CKW9X}GmW}=mWm_dU1M29(% zg%`D4WlxVqgFQ4UJ7DiH9+u`zTC{;^2%4Pe(J?a4iJpd7L8oCGdG|NaMCYB%PAxhZ zcV>f+ry)dg;dec_qeKjCcM^9hU#R53ySv4@`{VbBH}mp!SoS6Sy*j z3zkj4!X{r)v*~)V>;hx^SpMq1UR#&m3&-lshaQu)0?y9K%@Q!hB`go4SnXxR9gC-H z*~Rr-4(=%{#ywHoNo{zxleOFGK(ySd)8+uEtrm8%RE`^}lY>qiyD+Ejx*3QKE{QE( z5=*7i*>bHbX6|qbUpmc4(Q!U!3SRee=T%B=mf-8JnM|f$j@u~lSQ#G(55XW-$dA;E za>Q^!wX`6>7duBcY!J_3cq+pszBZkl?67e=VzJnk_}_*9Tj2i}PmIMj!SlL<^z$o^ z#bVn7{vP1)Z$W0dh>e+;dQMNMr(FCNTTmTCIKEyTlFsz94G3O_|C{2!$RPjAkU?OP zV{`o9!MtyVr-X})^8Z1|X8(j%{&vKF$&b*TII@ZQFL@ML{)FGw_`f^;3qSe09CY%3 LUk$2X%kTdIy{W`K diff --git a/Toolchain/Stubs/i686clang/libdl.so b/Toolchain/Stubs/i686clang/libdl.so deleted file mode 100644 index ab3b2af601d2fa2071ab3b9fd38d694b2dd17306..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 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 cgiYm7R;s?Y=+P3`mO4aiJ0qJe3j{pDw delta 18305 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 diff --git a/Toolchain/Stubs/x86_64clang/libdl.so b/Toolchain/Stubs/x86_64clang/libdl.so deleted file mode 100644 index 18638c1063f25df91428f25cf6889070d21da9be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1384 zcmbW1!AcxK5Qa;QAtHn|2azBmA{Y<`auWh!LGb#n=X+(Zz3 zg`DyRA;(g%eW?wXnYdUAHUytD+;R^TJdJfQ&ZUd-%1 z9HG;PRcOK4bhQ5A_-2lg`xE(iw7RNf#sKbn9Tw1ZT~)(HNz? zH!j$wj!PrLQ;g~xTWj2T_MY70@Ni;N>0WaE`mC$0pOzJhW?hg>k86Az5EZLMss^@z%wHl8>U<&PIbaQw*0J+3q0ftm_IQGX&LH2}7RM1= z!7lkyFVSr|cq^XGD0GKV?InLmi(wOen7Gq +#include +#include #include +#include -// These are used by libdl and are filled in by the dynamic loader. +// These are filled in by the dynamic loader. DlCloseFunction __dlclose; DlOpenFunction __dlopen; DlSymFunction __dlsym; DlAddrFunction __dladdr; + +// FIXME: use thread_local and a String once TLS works +#ifdef NO_TLS +char* s_dlerror_text = NULL; +bool s_dlerror_retrieved = false; +#else +__thread char* s_dlerror_text = NULL; +__thread bool s_dlerror_retrieved = false; +#endif + +static void store_error(String const& error) +{ + free(s_dlerror_text); + s_dlerror_text = strdup(error.characters()); + s_dlerror_retrieved = false; +} + +int dlclose(void* handle) +{ + auto result = __dlclose(handle); + if (result.is_error()) { + store_error(result.error().text); + return -1; + } + return 0; +} + +char* dlerror() +{ + if (s_dlerror_retrieved) { + free(s_dlerror_text); + s_dlerror_text = nullptr; + } + s_dlerror_retrieved = true; + return const_cast(s_dlerror_text); +} + +void* dlopen(char const* filename, int flags) +{ + auto result = __dlopen(filename, flags); + if (result.is_error()) { + store_error(result.error().text); + return nullptr; + } + return result.value(); +} + +void* dlsym(void* handle, char const* symbol_name) +{ + auto result = __dlsym(handle, symbol_name); + if (result.is_error()) { + store_error(result.error().text); + return nullptr; + } + return result.value(); +} + +int dladdr(void* addr, Dl_info* info) +{ + auto result = __dladdr(addr, info); + if (result.is_error()) { + // FIXME: According to the man page glibc does _not_ make the error + // available via dlerror(), however we do. Does this break anything? + store_error(result.error().text); + return 0; + } + return 1; +} diff --git a/Userland/Libraries/LibDl/dlfcn.h b/Userland/Libraries/LibC/dlfcn.h similarity index 100% rename from Userland/Libraries/LibDl/dlfcn.h rename to Userland/Libraries/LibC/dlfcn.h diff --git a/Userland/Libraries/LibDl/dlfcn_integration.h b/Userland/Libraries/LibC/dlfcn_integration.h similarity index 100% rename from Userland/Libraries/LibDl/dlfcn_integration.h rename to Userland/Libraries/LibC/dlfcn_integration.h diff --git a/Userland/Libraries/LibDl/CMakeLists.txt b/Userland/Libraries/LibDl/CMakeLists.txt index 16199b93882..b86c5f768e1 100644 --- a/Userland/Libraries/LibDl/CMakeLists.txt +++ b/Userland/Libraries/LibDl/CMakeLists.txt @@ -1,6 +1,4 @@ -set(SOURCES - dlfcn.cpp -) - -serenity_libc(LibDl dl) -target_link_libraries(LibDl LibC) +# Provide a dummy target and a linker script that tells everything to link against LibC instead. +add_library(LibDl INTERFACE) +target_link_libraries(LibDl INTERFACE LibC) +file(WRITE "${CMAKE_STAGING_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libdl.so" "INPUT(libc.so)") diff --git a/Userland/Libraries/LibDl/dlfcn.cpp b/Userland/Libraries/LibDl/dlfcn.cpp deleted file mode 100644 index 076d0e17ecb..00000000000 --- a/Userland/Libraries/LibDl/dlfcn.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2021, Gunnar Beutner - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include -#include -#include -#include -#include - -// FIXME: use thread_local and a String once TLS works -__thread char* s_dlerror_text = NULL; -__thread bool s_dlerror_retrieved = false; - -static void store_error(String const& error) -{ - free(s_dlerror_text); - s_dlerror_text = strdup(error.characters()); - s_dlerror_retrieved = false; -} - -int dlclose(void* handle) -{ - auto result = __dlclose(handle); - if (result.is_error()) { - store_error(result.error().text); - return -1; - } - return 0; -} - -char* dlerror() -{ - if (s_dlerror_retrieved) { - free(s_dlerror_text); - s_dlerror_text = nullptr; - } - s_dlerror_retrieved = true; - return const_cast(s_dlerror_text); -} - -void* dlopen(char const* filename, int flags) -{ - auto result = __dlopen(filename, flags); - if (result.is_error()) { - store_error(result.error().text); - return nullptr; - } - return result.value(); -} - -void* dlsym(void* handle, char const* symbol_name) -{ - auto result = __dlsym(handle, symbol_name); - if (result.is_error()) { - store_error(result.error().text); - return nullptr; - } - return result.value(); -} - -int dladdr(void* addr, Dl_info* info) -{ - auto result = __dladdr(addr, info); - if (result.is_error()) { - // FIXME: According to the man page glibc does _not_ make the error - // available via dlerror(), however we do. Does this break anything? - store_error(result.error().text); - return 0; - } - return 1; -}