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 zcmb<-^>JflWMqH=W(H;k1doBCAsxaqVNhUTV9;P-Wnh6Rh0`T3Axw~rAOj;qA(Ri& z3E~T_LY1#KhVVh85CbDaY7U46!61Gk8vm#hL=Hp>F)%PFL(PNn?{tA!5Db$4WB_4< zND%)nn*PizkPHNaeC0+NAXko>o12pdF#_=}oAEC>eiuQfv0AQHrX z)COWfFo^F|17U+m5I+h{z7Ng*f7KwB5DZdZhvuGLX!4uT+*gJsuZ1RWgeD({=AU1CAQEKWty&NZ zf4zR~E#AU=Ux355fkKAbyShwS3@daK>UCgAQ=b-@%b)8*dP+b zpLG$$f?yC|3QhgWOAt8_36c*+Q_r;?Bm==9`HW`}Hi!iABQ}9p5DZHHYH0iqiy?9# z5~SV&jsF+Tz2Cb*Dj^tTUNstjD;huK3Pdf41gT$$#uvN_l7V25{qK?FLHx<*A#xxR z#FyU;VnHy7zYL{5V`O-P#BaC(I>KehVT8B0=)$ zH$f~22Kgr+E&ejl+;bPreoHj_0?^FYMGK!rX#V+!re74zy&nD$w}D8I`)twjD+`+Y zZ!Q9BNRWIZ zTKQlZ0Fr@Vko=i#5H^Se@$Jy~@{%AK2nNX;f|{NXE(3_)vJuK*U;y(4(cCLpiYjl3 zBo9gtqG;tSR~f4M_zqP5H8k^zI#K1X$D{H?c0>5E_HR-VgbyM??q7_?--+g*Otkp7 zxdGA%!65x@X#9WIA#xxRB!3i5ehr#?m!jqGd1&>8%r1~g5DYS}7LA{Z7GAbt5Var@ zq}~Eeo)1la%Lb522nMMyK;w6#)rU9G+9by-V1ljimDgS`@ za+)9+2nO+kk;*d=-vF(=`V(J#Z7LJpwXs3lbk>|0y)}HE4WSwEPym7vypX2I>Eb z*1pg~at}y;QaD5{hy?K;&jzs|7{p(V#xF-}za2m`KVuI>FNg%`mq+7ILGzz8T6oz* z$0K0+i_z5EYzN6eFv$FMX!)5RE&Wt6LDYgskoxKFAQl9J_+e=E6&qT4GeZTU7DR&7 zPedzEM9}&R=4kvID?mCS7^MFQ8h<5Pd6S677vBfb3nD@Ke?AAXAQ;4djuziH(Bx+= zgQx|Op!8*n#+P0Sl7V25{1UYBk4I?olhFBS^{@O)h*=;KWZr}cAQl9J_=;%!O*0^J zAQB|+ipKvv4I~4>Ao=UlA#4x{;`gG-XQ0W;p~+vJ0@4Y=ApOo$A#4x{;&12&u^<@C zN0U!S(;r+8Q41nL>R%((Um$*yH%JD8LHtZK^|K=(av%~U{|%{q0^+YkQ-2pteK?x= zVMzT|kbW^V_ZrOy*#yBLdHn?tHi!iAb<7s}FetsPK`T$Mtb@pbNRYe{Qh5yG z_al|>Ab!^*kV*&!*>?b~|5u5|e}j}?KCljneBAQ&Y7V;+PJB0>C{X!28oK{5~wl0SshJ_7L%qlNcjH1j+| zAbLS0Nc}uCzM?ir27*EIx6thSfo5L_T6+4Y13esOQ3lvfi z4B~U3<%cN~A#xxRBrk-PzWWw}WFQzM--Fa21o73-;=fu4q83DgOZN9whw=S~5!AQ)u+r4tY~hy?Nf90Rc+ z7{tGT);?a0rv5CN`UIr*9!P%)n)-QY>YY3wc7aHcdRH{{`Dp6p+(0TJ7^GedO}zt} zdJijzS`Z0R{~RrR1<}+mFbAoGV37J9XzCvwg~)+Oko;9<5DS7q;j4ng2g!G$>EDc| zUk<7L2vQ$~roIJDy+$m=E)WS)Z-Uf*1o3Uq^8cqJAe9gdlGl!but6ko3F7;pl?PuBfMg&TBp;4uo?H|} z4n%_F*%d)72nO+2pp_?rXy!$swbwVHnYRGVJQg(nPdfy$3q*qKOE?T-K`@BF53PKB zf@a@7wD8!579Qeg<@?Qp5VJuf$o!>f@wFT+zM|3ETf5NsU(odbM$^9wX*>>O-ybx7 zAX<6fg*HCC5~)1^O8@7UgIo^5AinW62pdF#_!4OSt5<0Kw@kG5o-mqu)oA6PDO&#| z2(A3yfM%ZbN{~w+804PgDD%aP471V7)5s)VFV_7Fzfeqw!sl#;-u? z&tHI;1tLNG9yIvb#6&dtShVr+4QS(4;Yj^O zko|dR^N$5+?JZ|C{zbI-I)&zcCbabR9I5>evTqOC_~{We`@50G3qb1G(BkVfn*1U( z_sm9f&mpA#H^@9iwDCY0r1lR;-WI971>!TJrLRj!?G2FpKQ#AipyfYVr2Ym-JqMaR zJDU7yr2aNY{Vt^b8i@Y_P5u~K|71NHzY1-BhXHN;T^_A`Stp#`AD?&M{H>A^-84h0EPccB=>;$i;?&s_dP_azd`(|Xzh*5 zX#7&N_Q3(P^8G)W{~n{s`yrL5Ap88$!fy)F_#w!>A!zHDO3?TwXyLIQ$$XIhEa-e9 zDAYmxA~g5RM3aAuR^D=>nYR@!d|S}eTcPn6qwzV=>gOml`NL@Z2DJ8Z9$Nn?8%^E` zO`Zi!{ym!fS+x386RkYjiKe~@t$gc6D<4bH>KkLU_RHlppqPMQP<+&)<+m$n<#Q;S zd1h#QaWwuXwDcp0HostuR)6cG<)2kZ>uW&ivkPs$vH-0-UXA8|7PRpdhNlp}f=G~g zdme*W5Den)cm!dCNDw~|Eqq>~m9MMO+8a%1=GQ#|nFPTg^M0e*XNAT$L$hBP&3;3) z^+VBU{jYE|_w7cD&kUsTEl_-iqJ_U7TKV_~seA>gH$>~7Eka9=;b?qqG`>BOdqCmw z0jd28;v1u_zvDqm|B`6=rw463-w>_6+J#KtIcTf`wJ~RucPt#(9+v!wD{vdi@$ql>sxKn;{OU-{q_(oe&?gfZ$KNbkwzMi z1I70?wEDgcZM`2eQhg0le;F-(9Ym@RLFw5AX*>bMUyfG(MWgX`ko1GhFBFHA9Uv0K zH$-dSb0V1!l21b$UrQ_-T^8?Vrix!OL576YZ(BwtX_>a;0_o-;(4>OVWJOvIyQ0~jh-RJ(ntEF_`)8xc%c7abi)LOwntTqL`+lOCSB<8AJ(_t{ zXzG8Xxz86(y(F4?AvE<0XzJgf+5Z&Hz2`t1-#~>Sbo^;D8eb8u|F8p1-U>~g9ZjAM zO@0NM{7dM5InXjpMFvKOiO}&!5FfN&ayoRp3&u}_u5W?y7enVuVf;5x|HJs4=OCVg zt-q{5<1dBo7lFwOoIzEe3mt!g$+w}&PdkgMUiLI9e-;}5E1La6X!@T++iM{AgTkX5 zjb9E8A5gXgg-6o6*8=GqnDPxla`>{20-~PXR6bIMKpS8!h~r z(ZY`hE&O(%g%>*-pAjwmcH~3i3zlDNp!;WG{2S2p4dX9{&X>XX=Ft5OF#Z;(eo%e{ z<+p7P5c6StYiNAI_>s`~g7GIo$LC;tKWKcx_`9L;1>?_x#utp=28}Nm{|Pj{VEj|i z_=53mq3IpQw}HkNj4uI=FBsn(8ecHJ0yMs0d?#pp!T7VF@de}eLB}It{PWQGf$`I? zjDHLoelY$TX!ybT(DEO~mxG2MjQ`6OQXazi zlF;yj@tL6E2ji`UVY?f%ucr%6~Oz`41}AK=O;B`eFQ~(DEO~7l+0dC>lZPO`-7x z3&z)i#utn~9U5OSei<~rVEiO#e8Kn!pz#IcFN4Mxj9&)rFT(f|(D;J!zd+*) z#utXh7mWW0>OUA?4jNxDei<~rVEm7ugv-Fd0OPL)MHCYM7f1q${{d7plJ_~djp{91;(ETO>Z!MGc>)y_@dDC2IEgc(?10oAE597nZFT~ za3NWa0W^N&jK<%X4v_>!3n)DQffx`W@cJ5cGbo3F0j!?`8lNChka-Dc^8RS!e_m+n zzoVHigr@%!8s7$u?~Z1^F`D@+k=Ap7`v3Qk^n>_`XzG_E$%Fjkh-UsNBzcg2IW+w( zNb(^4F$JKIfnbpOOlt@m>CnFv$GnXyzX_gvfzNki0ZBKf(AD(af)drVp6>D>U=0(cG&J^)F1llO>1+!65rW zq3IbU0^&bF<2#_aUk8o90L}etY(OR<>d!q$`_n-2(Eu%9K&n9YwWGOzADaF^wD8^s zt?xnlK|`T^Xy$RE`JV&Lzt_;rKMu{GAoD=(F}DS=5bh60t@Zg3{kVH22Cv>kE*nAonaqOAoTp`UfVjfu>#tExtpb zn0YVI;;R_i-T)nY1&aSlwDfHXZ4bcoL#uBP7hL}Lpt;A^9xMeW1Q-|@w9xo((A+15 zWFW}D-Dvr@94-Dgqpcs@gmQirBf~XldIvcGWF9+OdNW1Ke<#q~696?27T(>^`~@@b zEt>hu(9-*6H2JGg^I-Z#(bB^cH2v9V;m-$czrpkypvA{ir1A&kUmmpdv@RQ@6M{kV zNYh#1_zQ=oFOUk5yt*fd1;HTxO0@F+JX-oOK}*jJXyJVfEq|;-<1a)jFL$BIFGAys zLCZ^!3qkHvM{~a^TKPQ*Ej<~dg?Bz$_(q|HUnVFafGmTKX9u8_R|mbIl2G}6wDi@3 z7XJs4@&m~Ib!hS|XyuCxntzX>m5*Pc^#RBgAoJ##f>;m?;{QhTPX?NQt!7XMmMd6<9KprzMmAdMhNX!y=WYya7y z`Cl9@KC96Dqm5R6Y=q_?(6R@Rdq1PahZSD?v@qsh0Rg|8Y~d6JJ7K4;O)>qqln z2%7t=(fk{LX5J4p^G>0K{}#0TvkQ&ihL#@u(CU9vwDQFh&Him@`H>YZey4&4c0h>@ zTHYw3*%yHpUMJDw>myqEWP=tyZD{%HJX-y-AI-jGH23$S`R_4W{7ylO-xjp`=O>!` zf1uSbY-sN9LaPsx(DL(dwEXXfroJAne#k_VzYQJF0|hy#Jbj0jK0MLf{|l{rw?qrS zLumRRqtz#gX!>2y(sLl1d#9k;-+>k%5@_Y!d9?PD2wHgVLUUgzn)|EJ!e=&G{bqnB zZ;r+X&BK7g5`;nFIStKx4m7?Ln*aWy`JWSwe+ezVwxa1jftDVO(cB-8=H8cR>KCK+ z@3x}l&o^lCcL}XOrH1BSMKt@w(fnV4#;-%;YoW#OeKhl*poPZ)wD2%R)6awEp68&B zG$^v5<;@MW@Hl{$zl+h#|BRNO@1vEc>(KVkiJ+;Ug%+L+Xz|5~=6)+^`Ue#Qp!VD% zwDPP5jlU7CJWWIk-$Q8fi_rLWAd8T~X96_5VB^Uu(D6|i|0J6J1hnw_gSI|?F`9q# z(Asl1(ei6NT7B<=#_vEYPnV;$_g16H^Fzl&Kwbpp*8;TuHq^TyX>fZX9j$)dhGzar zwESa(=DsSl{?&W5`0YijZ~M{G%N#WQi_rYThUT9*H21DWbMGCr{^tQS_Zy?RKLgGF zXK3zkL34i_n)|!Z^shy;Z#x>_0Ij}Vk5;}*qUASTwDi-CmVU3GsgFbppDeWcXd9Y( z2{e8in)$2Hm>5gPw9T6jD`;~zsauNAGo_ZY1`brX$$0gZnS&Addk^wNhE9-#b+beuIffAXW% z2YqP%@k0xri)iI#D4O|Sq2(w*qP71Ip!GkFq490d+858D?t!^) zGSodVzBgL@?nWE`S%=ns5=JY}3emz-0xiETLvtS&ntU{xetT$mz})A8Rv!LBbN@Xw z^CzOY|2mrbd1&?_Z8rhuzXfRdA8GpwSUwjmzsIAMf6Zw5cQ;Z63`!ryXy%_nn?JdV zCLe-kpDUVuCTRA}L9(QeIYmtIHQH1Dq8r=MjM|vjpQCsc;`d&7buy7##g>U{R`uNhOSoz z1q(?2C$zi-$%E=^ekdO%9|CnhjGqL}pD;cXw0?u}#n9sGFq->9(enFaH2>&A?T4iw zRkZvqhQ{B67GBXHhk!Ig`=86v>N5tk^cn&3IFkA$Q2&C2K;h|$Rz93XbDs%X{`iEZ z{vsOR5-ohh(cBk<=ARqT_=CA;0b2UxN9*6rK+FGMkkT*6Kl{<#?}O$ZC$#W;fR#77%hFjL90I#(BvJ__@QWgZM66?LW}P& zXze*6H1~f+i*E%a{h;)di01#NXyJVqjUSGd|4t*B2TBj`(Cn{8^N%@N`Ti75eGa;N z(CRB6wDNQ-n)&U}{unHMCPB+%P__h>_rB2b0LEv6mS-^jR5btmMl;_N&HY_y{lyeC z{R(LD16>{tavr$;OG8Uf4QTDBE~xuK8bIN@04+TnhSo3 zJuLp4(cOu1`p!9ByR$fm+tH0)<)rT|D+6(Gv;dL9S00f2Kb~L^% zntSe`+3$m9z5ytrK%RrfpA%a7vI{N#Dxm%YX#v@P2+jOCXz}qFDgA-eGorcgJDPkj zT7Er&CU1=3bJid?Q^43)X)PtvqBxtG~0+ z+=JBp1MBBSEAOPy(nkQA|CrI#2cWs152-u@r8gn8@{s{8KD5#7yN*_W7NP0?gC_qA zExlKv$-hG5e?@9=f!uctsXPYpSD?lBZZy6wntk_>0u-eGADa0IXyI3l79U90U4!GJ z7p;ErMN4m|(9-uOH1$1b<%um?cr#=cCzg~{GUVi^XXeF&SosC1c?Bhv3~BjA*&w<& zwWOdZGruUaq>>>Wi5;JoSy5ULUyxH0pPE-vRLM}3S{z?knp#xJkd&NXP{~l9T%24` z$xvKU1ft55i}OHqaY+%FF3(NP1@X(1i*rD9aY+%FE-1+;N=;0O&n+!Ut%y%aEiNg_ zuVg65FV3upFD^(d&x=pX%t?(;OfJdH&nreKK-QL6Qc{GFL1;x4hw3OQ&&f~D#wwMZ zpO=DF0;^zgL1rG@*5cG$I2-0Ah)o#6AY0&qnR#Z3DJezqiFqiV23uI1T2h>xk(yGF zpOcx4DV>fgU7T7{l9`*DpO%scjyMD-J}M-*k^w{pfGJN16&&CV5@(YePG=@kym1gFoq!zitb$Au$=Y=Kal%_fxVG}fj3z~#v z=B64Nq!s1o#+PI!XBWF>RWPK1;+~->GcP5zf*~_4J})shwIm(I6gLC{&c; z4F$LkF#*d@tnIr-%b$!WQX*{MZ|+|0a0n4l#Z-_Qi4s5CFNq98T7 zBsB%9)c{!pRF;%6q*kORmoXH92vD?x6sF_^fT=_<6%q`gJi(NqF(?#Dic(YK^YT+t z1H3^hLxQ2SCxiwCv7t$PJS02Bmw{5dXN9Y)UvRv+Yf({tk$;hAnO|_cDVXEx3eGS_ zMj@32sjfwd#i=QftP_w}l$cu#mPF4@;2dTIS5}-_dzlF(wT5mj%wg(Jgzz28_pydN-HK=K65L{A} znU@}xnOg2Ta7o`UINl865c)VG#1quk@bflu^fnF+@-Z|^&d&uky+G}Y%#_TMN>{MF zk)yX+SZZ=fevzkNaJ+?EX&$&gbWtmSn^yCl(|o!*zp9 zhx*FUII}oEC$S_oB_7migPU$>0BXDjBo-B?78x2Afav(dqM}5o{U8%S?lUqhPA$qz z%*m`u1vP}?Q!JTO!Cvt;cJ*;HGzjVT_?sab<2& zeh#vX6EpKLRU>6k^I%BEGc?3- z0g@_1qvHIcl6Xiagn9>5z!({ZmZVu=Mv8f9UP@|FPGx3ZI#SHXCsmfD64q^uLpLI# zk<76GjZQ@6=cO8&fPx=1gc4tspNDJ>WB|joBtJekGr1_g7}Q%%L2?FI-UuXLQdF9k z3@&N$s5CSw$&b%V%)?=jA;_TI%$%G|A}zwH($JtJKOTo6ASr}vQ51nHo}kp?(wq{{ zGD8!W9B}8>H?_DpF+J7QG!@kEg`_Yfg`nEp*e^dXuQVqoC^aphq{!0`O9FItbtPmX zO05Jf6f;tD3Q~(8mYTSE`nVdJfja&1nRzAo@kym=X{eIs;8BKn@PHGtEGWUDS5~07 z0Hp>LV?YXFl_z!uAiqH>C^Ja)1#ujxki$}_=auFr!JG(Ef?8pkf-7;j0hXXz89cCt zCIN2^AS^dD3eGPoNlgg`S8lF8Sq84IxO5>}IoOop$cP06aChM>sG)&IVD=y7VjZcKCi2{uUn&qbE=BDO?+T(^M!64VA!kQ5v zF;hoS>lwr{2`)&?^YqRDwbKn*pPs zQ|20<3~>?IHbX;$lNXaB&7{T7w244WS_iYB9OGqG|{CEzo)lP?Nz@ z;0g;|JAkUYvP6ibARii{j71un!h#_u6VzOSssj~|pq_!DL1uA$aY1TwCd>qIz?zlj zfu>uKgBrmH>9qjW`5<>2f|@)iEj@@PkRp%;CIyKl84w|`$);&JrNvMI>?y({u{Z-# z7+Mxr7MI0mBoeFMB0aAZSve?8K!X^ZI1Q5%i&Nt>^NLgRiZe?x%Tn5%M4 zG7#iRApX}nwOH9mkx~wuo$!+Gc<;@A5v4m{WypUG;0i@#Y;(1 zX(~hkmfFjrEHNh&G$jI2;f-vGd2V85d}%RMGbkNE+aBgcsb#4}FbNb>A@wMz4+WD( za}}}_NGGIQ34Fo`(2~%QZ08)~hpO;^fpO=}8 zq6X{})8w3d91ekvETkpoz*K;|2rIrodCSnKBtIUWP#{)=)L6RZR6>#yE)~##!X=Gi z2|S4*EI~GcfHXYSVb@)pmzWJsl$g?nnR#WYMJ1sAIW(FP-465Q(xRf&ypniu@PoP@ z5d8=hX2q4oC8?mv)7(^W-vnKO5hxx(eHgdQoK!;-aN8KoG*B8qYf%{)6sMLzr}s;W z5_3Uw&UsMhfl?D{jc5eROgWiIiXb(K5h!`UQV_&(p!fq7;TB1W#o(D-s4$8vyj>ZHt0C37Sx8Z0W=XMUuu;6Lt51@ltE;IiXr+X!U$AAop&^(JQ38=QG%ZR6 z)d`>xje?xSWT@kbbr_;=0CFZC%gtzDxgp+Afwan46jsoSK_hkda@Mir;$7m>|~r08pnIsR;s#azjL! z2r4-tzIOFVBG$|-B*$ifQY^6=LHZzNF~}M42sQ*Kd)$VAGA>$|+cXKZk_3{`VHJ#_ zF{lKAS1=GskX}gnVpx(7E*(K_O{g5G9D&qn(Bi|QD6u>q)W3i#0F_|Szymc#%uDj) zOEdFIJS)K|6wwS1iFYNS12W-HgbuTke9({tbcFyB8sLtCOfnOp17<}r$-c-XSqEhL znFL1>tpVytI6Tn4vLfI37OGkB~qN z{=>vT&V*(eP~id-4lcny9{`gF4Ff`o1|$)*-lw6Zb7D>osM-xLN(8m@of3;vu`5qX z22E_?QI0->2s0+Q1bI#ZA&QuffQdmzCXl#>X2F?x={c1?nR(f%DL$FSC7y;R&N-=x zd8Gv&kfl2RE^;>7No=_wIne!$I!s3vLqEUqUq_AWo!hVcQrt9 zrX{EaNm+Xml8doMK5{z-vpq?wOQ_IrL5c<>pJQuPAgRQbQ1H10k{nQdhs_L7`-t>5 zDTe7t1-3Jyz_tu7Nlec6%uCCM3F0aT5%S384?+}C{vgEQv$ZaUkSYSDT!$0~Fez|( zV+KivFfkP6kOTyiLa7Fzren+lBPm8y4N%4C)c{l&m-i7yA$uPoits*64D2Bo2RZbi zHi61iMCd~Waar#Smq)f9A&RgbA%+Nj14!tjgc)26z3PNZAXS}kF&uRyR34+wf{LTn zS#VK=t6d;sA;B)C;N`&q5ZV(;2M2h=1Yiu8QikGq(Bj^r{G#}h)QS>@;*ym7(h`Pv z@UXHacpe7N{KOQ{k_3>$!;m5x#1BT}d!q2; zVXGX#+6zIG#|()%1sRE87HAoKYEfBIWkG&X33NqudTC-&N_=7xSR^#B9JKzzJ+&k# zH9a#wFSsPJsDvTCC^4_3poAg6pd`Pb1hmruM1hvv=O<@_m>_eJn59V|LCC%Y$d(BP z$k28{2}4?HNosKkB=0b!rGlsM;Jl*5%;HoyFC#xE1^xa zfx164FS!Uj<{J-Do0$)qcTWSaih(LgNyVciv$(vVC^N5wA+s1l7nGJ1l&9u_;u6XL zZS4Syq~@i-rHWIF%0Q|>eupws^HN}<1*t`8@u^@1#i=E^c_mP#P*!SQ3Y1j>UJ+gb zT0@==8qH!TPA!2j(qW9$ycCE?d^{|ffHt7SCzgPzqSW-v;*!*&c*xos1~gSr(Sp*F z;sTH(K+y(ffE*5HfSe6xfVZ>cm*j(#f&5$qWrMs8V?$yUyxRo6@gg%lB{eOvG^Yf4 zFA7)|WCubPlJ=o{OA<>`D>7k;5Xymh4GIKM*39|^oN>43;vNDUyD^fDkGePMX&M1e8 zKxmLVN{TAW6G3KVro(8^h-V6f105`d@L;Y5y9`wkST%|~SR^H}GAA=VqlBTPsyMZT zp*S-gJSz!egZ4Cm=;F-uw9K3wC^ID$%*rn)DFW@80O?3fNdZgdCugUEJX2l(TFe8= zonSh*peVm2HMxW#IX^ECL>CmN=78v&;*!J?hBO43Si(>Wa&=xYNIW?szdSDyREDL3 zsM5Tg%)IQx5{BfWRETtLeoA5qcw<%~sNgS3hVVekQa~GKz;t{RXlq1}cW{YiUOsp$ zN<64`NJ$JR!xYR3C<`tzGz2eS11(XEFTqrkNLWo?c@`mK@)8LvDbK>NJueYc4CFsF z>losrKpw;t#dH}+X-+^Hx@$nfiCBd(T@J3|K!F+(8~~;~AyjaHH<3azswaz!K{a$iB81LN1MQhBW&mvrgRwznQF>8+X#vQr5-1B?-GIf?K=nXA#I}O` zVrV4_TA)>$o>79RW{W|a(K2&W^NJZt^2?J;iW2jR8NekMs6|wg1JjAr*ukhEic?F{ zauU;vF(lGq65t$NmR8J=44MoFZJ8=cEr#UmVg}f*HP94DF+*Bna%N6u322>XDmW10 zi$Q&n_@w;Oyp&>w+@xZVJHd=1I4cjzEP>3(r)4G=gGzyt{M;lkqX^CdsRRjv#$$@X z=@dc+fGJN16&&CVm`9U;Lk5GnvddqQbYvlT4i8Q=|-aVcg1tz;{y z0M$nfX`ogngb6BIAuLdgLRdNJsW63bR!MSkY6)0#Npd=rm6DVWN_Qni44?)|aY+#< zOh8m|NfC&Ok52>5mKBr~L6Zk4k`WCska&JUNoo;D8e}_&1!?OQ6@lBvc_5MEk`xdX zAD>uSk(ra3SX3Eb241<%kWpMx1YR-6ke-+cntFzC3Lq4;kA9fhLwpfrt0$D5Sey)Hl|Txb_#%dal44K+1hKN9yfiZERzJMV&yCgLiM5Taf&<^-qupg6i3qTnq4@84^z=Qap9q_pY z3?-SlnR)5OiD{|vP!Z6U`NZN>xMC<9w2L(dY+P|_0YhnVPHJiaw8j9h7zXo;D~ppr z;>D>Y*{PMei3OmP31#J$=79v@b!#q&msz|j;0BS0LDA0!`3xzU#rfrV3^~c51~x+)geuM`ElB|h zBNeuwNG>kO10`z^1xf%Q8Wf=*8l031O7imNYoRnC@A((j0_GgK@6)w^&tyDhjd(0b5cuEU19rK7~-MgL7*WQgm7_YI^_5W zhImLC29*Gbp!K;7#n9FiY`X-!$jQpj%wqtbz5r^Sfno@JB1U{}W*#VkgOASu4W(t~ zF_a{y6eVWnLCe0})Ld}yhym1QNd<`(q~%42Xv0cNB@$f8sT4X)jxMt}z* zFsgB|I(Sxw@^a(B4A7w(so+$YlbXknn^Xj%K;;gI&P@W5#qp4_IdG>NvV*IrIKC(` z4-~w?5HbKvc|xe*0BA9fhT1jdy17r;^ zG@?P(7-)Aslnbi6z+9yK4r)KhDc%TSF>V4+o zZ`H$ffEHSUw<$OqxndDCbj=0DSxJ6r4k*rGbaF;fUTF?PT5?`V4nt~gX>v&pLqQRU z%*+Rq#pTI)B}F+5nZ*zq(jtV15NJp(9<=frVmQ?79EQY_{2Yi-X%18n#3)ZLF3E=p z%gNbIXMiad1a}YISioTvBc!;_~eZ2 z__V~#9ERk~+{AQ{I81A9Vr5cld~#x5a%v8|T!C`IRXZr65=$$}5_6!V@sI^BMxZnd zUg82;j2+}{4r-f$6@kwVDF7X^QI=U$QksY`HnkAM1NCDv)ANwTlk@XHt5v~bptdl` zeUScRGSuDRvJm8ekYETI0H!=4RB(VdlnbRnJhU{DgFlVHbs(n^EP{rvISi$s)+}hW z7}~H!E)c6q6{4i=ptK5$Wbn8M+_`WWP|pd) z5{O4oguvbai-79=oDy(yhZ_a60E;Ln0hJ^sXEVUgWXj3UFGvCjfO;u;DM>}CiP;SC zQF-NApus=Tm>`G-4FW>*uNlsz0w&0-BnMBMnu20B9@MW-OfE?+Dvn3&LJUX-+XvDD4Ll>ls=8o!0?tNKc%qcbj z?QI9G0!0oKSA?;s2Zk9M7L=C67bK>Dw^+bcK|{x)D77FJv|$#aKQ9p+eBd|)o%~b` z+9j0~5E73roZ;#U7X~dBf;8&DStr;Kq8b!jrV#P?eCVbt3P{;Y*z$VFNEB2Z%03Z8 zU=Bjc`i7vS0^RlPniT-{J9y(3Wa`4u5VCDA6SQXVuzjGJ3dACE{_yOotePwOB;HMULDhL!=4 zlQKNO2W3E3G|#0B3xPGlVwPpN>cnoq>)+Rg?q#}6ShE*D7A(bPMPVBp!sU> zFo6@OIpLFK0a}X+isaP1Vo)O-e#i=XG~+&^g(%%fc?QdtZbM6=3_;uBO|&kg6`_!@ zCDuCpi&`Pe(qL;QiFOV4W)foYB_4x7p$K204Ov8IXj%Z80zjN$>I#lIP^kwk=`mY3 zu%;cP&O=mDp!J5(>J`)ufSQEOQbSOI6AV2V!vb11fj6W=3OrX(ae`8PLR>}AEOV$? zpv|gyjRFV1()sU zF<_3^rVR}eBLk$(=ZPip`DviJHHdAXn1NSTM#hi{nEayn#1io79~f#8b(f(rxP1)v zXnbM`!Z;))MqnkNBVOPtKw)lV0b1ykUz7_v>Ld}oyBFcYVuVR>hgl@&=anR8=0W8^ zbqwSXN6-nXS@?U$us8s1k25lYh9qd~D|j$B59GoW=wXqN6bNk;LY)C}FSPnJfo{l$ z9-)Lq0qWs17z)gx1|Ufgjy*%9*hA6?brWW6W2y(GC=1X`D`e0PHpT}r4Ah*1_}kFD zC_gtbFCNk)0-xsrQ36h8Q2Q((O^o~^(D_!-ECCK-up%_yz>Wz(D1exPOWep9H2^`| zds2(?5_2H#07V7d21s#d0vZ&6$bwQbj!lau1*xgo5LF=WV(mkMJBCIUpp1!D`NV^! zRl!^1!T!K$0;tR+(g3737U*zOQ1M0AZIR&q4rFU2JXnZw6H?uU)Uv~}9TRgO9;m%R zw!K7FeVA?{xTGI47C>@Xkhu?%ya2$rdLOcF1=*XJK@Zw6NWf-NcRvy^4qLmQh>(W1 z5kS3N_`V$Y1_Dg|pezs7f;=PwYEXcSBS>ju1V5|}e7rSi_y97Z14;VGDq#gQw1kgG z9ZG?l3onEqjUHnI&}K+TVF(>}AyTIiv?L^;3*ry-ksXk8Kt(&WjRe|5=4|BZ7iSQC<%4)Hd+PD7$~f&kfviVuvN|JV z5On~OAlj~DXG6F_NXnst;3zTyjo7LDwx5Cue3dl;kIZ>G&u=umxt2iC@=DuzrXTBn}`# zA;BPtkl+9?&8mht6*j=v}^&R|FbpDe@xI*=d4 z%`7fYFG?)PV8|?n(s@X$$>Jg7Me*RpWek}pQi&-kQ1P_9Tu{#wy0`)|beD`Il9~rP zud^gMgQ282HL)l;gCPk@!{%91QcDt(Gr)lWAp^jaCxi+P@P=}sG>8XHX^{9cG=>fp zf||~GC9Yrvpcq4RRWk4=9k32i(t#BCMyAlU!-+|m=*x^jN<)HOAXET^_Jq=)mcAmZ0zv9ihWL0$xI^}3faX23GxO3xOP4^4XF$yO_%tLYXp|Nt3ZB?y zfZTroUTOkb+{*yD_5i^LEhz;{fEF*MgX1XxOnE}6-~ewZ7fOTtT2hu&ng*Khgi@g6 zR6tC`!UfRkM20fRZk{xTGU&dZG={P?xEOec4@eHiNQ7+q0SV>7#L}P)@T6uM1Nh#I zG*Ic5#*mhpp9WeFk({5G#*hZe7GPFcIcT9N$PgGK4aR^;KiqRPN#_rNmgsU<1k))S0Z zkeHqdX2U!IGY!0x3{wWQupG3<3@ig%LYEDlr0pBpe5FZrf_8npvXn|D;!ZeV*ka~_GF)u$a9?FIVJB$lnB9jJNgvO8tJDrrFAhEPK zm7xHfh55ia0flFxy^!Nem0If$UD?mgO%pJwa`RJmcj06$QEJ$TY%qan# zQUzXC1!knDmVinz#9F*m(9wyIy$zspJ2@M)ehRdt1Nd?hhH6RAKR|vNAx|_R(DhbnDWF0q4dkG_ zlr&J_LO1P#mcnF~K-T%DARPfvlv+}hnOc?#QVP0>41CNyV&e?F&VelJf>i?r#Tki3 zsVUfGLEeJO#>XcX7pE417FL6oM5cl)hSuSr9qf?OAqBK;FEJ$^QU;}_fcFF@Be=<+ z>7V@Kg4EO$hGfuwK{&fOwImZs9LkQ5hpw#$l~It!7RaTb);m&_3u<>jFBb%_3xHLQ zkhTiMNuY8Eq%9G2iZ>|4gHym{0GRTGP{9G-P%e}P@zAnl3jQn!*MZ!F#v*9wngZS< zS)R;Lng`lAnG6oA@?_8oZ_r*phTJ4D1=>gnRRd9y%m6RSARz+UOaz+FW&p)^eli1i ziFzvN9*Ug&WRNF8OYlKwLxH0UBmi21k0JotfPoOmEw0QfGx-{ zP-vjtZDwcyTKEI$h+(u`L4$&(j-VScT(h!p830~6l#yBiDoH^mAWl`zN`|LP(DG2w z5yWYk2r*E51ttdCR9BG-vjVc*))>6#4Aim!pC}jPZ2@D0g8`-(Z3xK%GF4ZW<{IFg z8~{=j5)7umo<|z=G%|p+X+iT^pe1eKmVb(CRuEWqh$ol=X@ZTLCHrI<8iAG?fCsT5 z*0}mZZSV%uo&jJQ+An|%Hi9OhQwu?^0S!oj$2Q?7rlN{N$D|R0pz$=6kwehrDP&zw zXOp=)7DY_Mf~8T%Hj?pYNth0_J7A1q{)2=ASQW@xqyx=BCzK`UxWc87T?D%Q z26V9r_)Z>#5@-bAkVQ7Y5_F6OcHQVw7?Fej#AC2~G4;TYIxj5E2hX8`@^m`H=^)jp z!>)#wkmMPk2;LSBSyqTsF>-o_TaRiWYz<>FLwRyZeiFE4#!#MI1lq0)7RpTmrEbt5 zl%XZ;6y^BToHXc^h-;9yS!zyNMoLi@SRrUw-YK&rH?hDH)G#he%u7#o&4S2*41tVf zIfK$?28Jjoc|t`&agK0c8kh z8Bk~zk`F003Mt$vH7bpI9!#dlC`(XEf+j5Ie9(bLC8?ej6$mpSDGYCl!fHk)HOwfc zf;)1kUrKuRBEn}L)*$Tb5weL(60%F+kfW+0^xvdutBA7q<>ls?Ed11WuwZ3a^M zAlnS2^g*r}$ms)8laii3kn1RN%|I@L$Tb7Go+Hp zg_P&W_6t(IPp%nRNcomrGcu`QMj92&$U-VV$o2~r%t)h#85qrH(#wx5q_U9g@SuVj zX;d(yA_dWgA=@uhFe3}8ZXnwoR4^lrBr`z62FSxXh6cspu>s}La5*XZzvZ^gLs$&1V->t zLdd0Cpqr=Rdr)9nOv>_0OI!oME6&ij)&%(l#~T@eHfOpPB^IZqKvpaTfKJ~ib_E-N z?gdlOU8X2+mB; z^UY65Md&vN4Sl7gCY7egLuX(hav*QQ2f$Fh0uKhLydijx62hxsdGtUxGzKS8@J{sj z%rw^^Z`6HoppjCD%^;oF5UpeRJ1D*;=NDrg8Y8G8JWduoYKVqSV_VtQ&YbmZS9 zu_TcJd>T_;Nq!>ajG2NA5CeRWGW% z@S==((7+`qAt2v-Z2~%G$kPjyz>#wx=z7RtgZN;hc$WhI5JEbkAqmxlo_PqG0E#8z zjUemjeaNaMSJWFVAS>q$U0vbh_MX8Yu_Vw%n9#r?YS#z;-4|HxhHOh9ctIDQ-NeC; zuxO!z8zH-e(834eM&zv%STB7b%8fLLHB;~taO4795OWIVo`xXhrtG{MVo zK-ax_M)?Js#6u2F2=WH)P72Kl3W;}(cXbT_$(T8nf{uxH%?h@F1*~aGQhH9Fr&mdU zcXFnyt81A*XqN$`9)zvxw{!-bqy?)TA(MihUM>Y7mC#uTllXYgl+?VE%#un_ZR!~k z?`i^KfQk;6f*@~93j@59>1iFvtq_-kLlruW3YyvkIg#eRMv7$|8{f#=ScNZ-!sFPi zJh3Pb6v;^G3+!`RMz}dFg(2IHR2$GL$PxBJqT3R5tXpD9NotCxSC*@*Yp_8)jgmOr zX2Ox}7aUJnDS|KFNpJ@hHrNs660@Mx;?kTF(EXSA>r{A=jlRGRRBrkQo52zlyx1zC zVIhKHTNYhyqpxM4yg{oxi5ZYtbheJJsf4bUWzn(_$Ba0-+D2E)GUyp?G`9=X1xMSi zYX(^^2I@V7R+T`iM^{6WFvy9IjwvZcsl~;?rrX*l&rHe;2uOxH8000$F10R z^$#|T_ovVrc+ClF>4rc~o&xuJ!JQp!)_@NNfo;!)^dVAn3gSU)p>si}RDleFCX!&| z_+Vpjx`5tkX@sH=w8)>ZK5U_f*6M`>ivdco!0m-CV+2K$8|ZeM%=|o0x6Cr|(LeAt zNRV}7uKo!3!u4TE(}o6!Q)3{Tsv*1W37P^9?v&uvbkM7RH7g`O#2`MzFh0Zx9KI-S1Y1(%Y~-4Woa{kY!{AnI zh)XeOR13at)6fjGLmakj8I)B(-6B(`#FTXKjpeX0BXBp=)io#>Vj-x*YG?`W*n!7O z!6T)qC8go6=m%Ttjn0Dj^+EmqdT4Ax4hg*pdRiwkSMZ zfKLrWWEqI7a2SZYkqt2pmivN0=k6gn4xV0u<6*%7?kzzMtpYD}ORXqL%}a5`rU?>( z;Fv>A9%u;*?sQn&IG_xBn-{JSsarwfNCCb!Iu(qEokIW~a)6GnAq66=x&Vh?VlZg< z18ymP&m$X%G%gz8O<>I}G@(JF!UeQRD>E4!BSnx%fL4SkxeBTWRE6SlZ9_$advP)VjiSez@-CQ9spU1_o`6>l}UPP2`G5suEJ&qQTYtK4-}j+ zpz(>#B!aGmgt;rW(OFO#kM3He1ddeqfS4iZ^%=etO}X!p5;WW}lm+Cb;QJCmMJ7rK z5sY0mC z8RDaeP#xeGY#48B80-w%`Wc^`Uz7^k#Sx#IT9TNOSds|3A1~ zwFAjY)L641`rvP{W4x2Dnh@i|`ta%AyEn*~}WNXpdUl`_DknRm42eyLE zNi-T?xrO0w+=hcH1<2f^A?gvB!N!;lf~H>ZTm(EG5gx=P?rh}hAB;u4vmsm@)RKal zo&zqkA<99*;LStmf>5>T*wms6A{=N2DG)$)0>XT#QK^Nf!X}}io-W9Opavs+ZqyQd z7&T}^6Pm7&%-qz194vylnW%z@bB+v)LHFbqLw278fm)29N(SV0;e6OJ;<=tEV$gtuwEM9bi(3NJ z9Y%69awUSOEO00=MjZJCnGgquCaAPeOat9(i#Q`4mjM=VC1?hKqBkBc2^uPgMGUeF zaa1#4+o1F0!Ko$gK@6b*@V)xMsU@BWo;!pGIer2fitxEw*JMy#Wa^w)oEn^(SDaar zS(aH+=?ZcQc#<0um*5Hyp$DV|x%vt=j0Xu3WeVzUDUddDO+wl^MT#+?WQ!cY2yX=& z;PwW(E_3iXK&i!`Xam`f)$izE4l5Fjc!P_0Tx324%tkQz{-j8zRZ>w|@S!io@u2JGap^DuU6h-W zUz(JY8lRF6y78bSBfc0q427PeptcwpK$geFXO!gT#Diz)GgFJP+5jmZK(#)knQIO@ zJ{NSM01l&#jli`Jq%MyK-R+rQUL2oNlv$Piz$SW1g9dx@ZE1X%+O3`7e7N2K82YK%)0>S931eHuC7bFs0z2s9FG zn4FlCT$%&Az!;Px%uM1TX+9-B2fVoxXNVhm29%jWXB-R-A?*&xhG1OI1L-g!MF*mQ zAkqS)hJ~R~Nq&4uW=T#e)*dt{LO|&Tc~3c5OL1OeHVIk`GxN$)i%Q~gS^|o7L_WdM z@WK{iAdS%ELV_+(l!gZR7#XLerX`lYjaQ1-|QMjTLRE!ydj)4bn)=$iV%>`g{ z8R(J_*hxTm%`+)TElLKRRSro~xYVMI%NQDG7RQ%oWR|3Y55K{w2er^Z8KJ}BX0+9} zu!%9-(RAaZm z*a(lCFf2e*ZBkm2W^9Bg?%)nVs0%JJGzIO8K)PK%0CYJMLwpqIieiuy{F-?r2@{Y6 z;jE`c&|>B%rZ;*DSDa%mN^d09UX?a4N+2&~}QkDYT)Esy!t> zGc7(Z6?BwgVo@dd=~qkmc&I`)knadeAro&P`s>M2u!2#3D)zG%EuytjCBSVjKf)xEmTkeOZ!<*@`1* z4k&IBL+Xr9LPjkh-r2?vEgE@YLoo@X5gXgOvGRzhKP0Rwx+*G#^Zt z7=f1EC@BcC+zi=0;FUGtWijU9@`lRA5u`o@-4Rz=2HH3Qsu9hDOA_-^5{saFoIxYA z(7F$)uB{+Vc?oICi%ChKh- zErKd)2)n8&9y~M)I%pAOutB_`DWs5qZeve{w`E}CL7?aNML{}z&|yZzJQ~b0m@zmN6cvLS z5b=hFo_PhOCBY>{sfoE@5vWeEK_Gu2+XwR;x*CN2xKw}#J&ls{a|^)NrGS=4fWsWw zBYg;vjpX3Nk4iE?dk+zp)`Jomj!;E26yZ8psG=(XjgrHr7_m7EISgQ7j&24# zzHuo)SOSd{G!sBU1U`hkur#%(5}XwwBp6hd!}kwDHa;3!Iw$7jfNn+#F9JnPkyB!EDp<8ANvhG! z1|6tHyxDkFgWQ1_Spx@=K|JJa7-*_Nk_811vMjvH!95op91m9n@;Fj0Wr>)lMX9K8 zs5de|o$iL*!;3lP37WD1uMkJI&Ir6z4wRNs5L2zti-C)YHwA|ykbMaXQPLeigbBu= z3uv*-QKN*Op`}Y=C0J1~WF9-HGzXmIK+ZzDn+1HLT$+V}Yib6{d2(532g*Sc0-A0^ zQ_z8QY2cM8;K@SQib~MYbf5@8TDW+tvF8K?)_5$6!F_DnMq*9rm$ z3vw8`Wj#7Md5O7UU!*r(*LK#Al#mB*98he1{waa5F&1(Lt8E z8wNp)h3i4L*T@96TnTh9bY@-&Wcfr!YK3Pdcr?`lzI{I=9xQ-tBiOYjppXnltPleQ zJi0Z8rfAks)pYQomEg5oD4xhqE=kOxszsRIr~rovl>!MlEO-;|Crs?PbLruf+q|q#D`T--2Qqy$2X_T54VWiPaDuxlB zsK}tAHHH{bK~2-~Mg=u3!ib7Q3c?7~kU;d4!Apohl>x5m7+duVG6LEbAzMGf31%gr zE3ZmCaaBhITtKdNgahDyz*WQ(Z~@u+5l(=40#`jizy%a)hkF25MS;tDga_b8;3|S} z8G)XTNY#&U0xS?RabykxE+AJs!U6Cwz?Jt2xPWZ^2q(ZifvbQZ-~w{ABM(=>_Q4?< ztR=4CPB*B*ZU9*T84ulEhnPTww&;y9_a;GfAn#4W&}C>0Q3T%LXJ!KGGGM4dJ*EWP z84`vjeu=rMDZ#0^i3J(?MX8|CG{~AKPtc*fkcCf>^M_q=EM0*eK?0f%1zQ1GLI*p} zEZ8zW*gPJz9t?J-FFa%r8_S>*$si+;hLBwYK<9FUMz=t|Lxe5ZWq!e?@t&YAwP|ok zVo9ni+*I(k6Y%IwJoFs344*7RGjs)@0UR6(kh@~=@l@#X!3Iv1C8k(54}QbOKk@5AoqT`{{evpkg39u*DUDBCOkWBVW~DW$Ok-@3mPp2Z_z~311;Pj#|pVJ1UNG|IWr_C zC#M#am@q(39D_5A84B`?Gb`eY3lhuo;=w1hB_@|-=I0g1C#IyNlolAlv=}iIWEP~t zxrPimnMtL2puL=W#rb-M4Ds>l6&3LXsYS*4d5JlhC6)1I1~9z_3=C`x3=Ad=3=FIw zx|V@~k%56h%mG55dda}R$H2g#?7)BkdMTB8#U(`yV7f9FOef}MCNt<2XB3wdl_Vx1 z)DmEEGB7Z3GcYhPf$WB2hFS<8S`GnOllbzzQ05m4pIx^2{J(Z r12Ru1osj{A4WRl!@*wj#7#J9&7#J8p=7Gdw(is^*SOvs^VwiaVYgsf; literal 91032 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 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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 delta 18305 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 +#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 16199b9388..b86c5f768e 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 076d0e17ec..0000000000 --- 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; -}