From 2e66d621b50965624f244a77661bcd0225cfdfd5 Mon Sep 17 00:00:00 2001 From: flysand7 Date: Sun, 22 Oct 2023 01:58:35 +1100 Subject: [PATCH] Implement -no-crt entry point on linux --- bug | Bin 0 -> 34744 bytes core/runtime/entry_unix.odin | 40 ++++++++++++++++----- core/runtime/entry_unix_no_crt_amd64.asm | 43 +++++++++++++++++++++++ core/runtime/entry_unix_no_crt_i386.asm | 18 ++++++++++ 4 files changed, 93 insertions(+), 8 deletions(-) create mode 100755 bug create mode 100644 core/runtime/entry_unix_no_crt_amd64.asm create mode 100644 core/runtime/entry_unix_no_crt_i386.asm diff --git a/bug b/bug new file mode 100755 index 0000000000000000000000000000000000000000..ec13d9e7efe0e3ae1e65dc139a2869af211bbe1a GIT binary patch literal 34744 zcmeHw4|rU~b?;qShBX-P8XORTz!KK!DzRnB2qVDYDDr-_JsPe2QMLKT<6~0N^KCSRfnp;oWt5M}vjjpHDc{3E;q`CE| zn`E;pPyU{&XVM`pP*Tfp>M{GP>ec9aCN=sbkNkg6(|a$^Mvi%#i4~U5Y$`GVb}s&T ze_)Hpo>QpDz zf~LmRi%J(X)y;2eZ0_is-&wY3{-V;N_LicBBKI6HLR(yZ`)92$tesZ!Xw47D6F05@ zlca;!uygjBJFl4*5{9a=*{=1qoxG_$52Oe8FYk zeEG>g==kyl$e#AP1kejlQ}U@Zz}epE@Hw7N2d927w9dC`K4as~vQqM?WF~xE!#8P# zhEYy<@=jYY|5W2!>uQ^tTGm+W;_KG6+#hG!9#2^HZSlC(7Wc~5v~IB0s2nHRT2fcZ^=G{V+8N2BCXd^~oo^`9?BWcSW^=oW^0Dlgg z{b;UW4xD{vu7VtRZl9a-v*}q4oYlZt4V=}$Sq+@kz*!BP)xcQ|{Qszd%(ZW{SXO54 zF?5rMlzE2Iqr;N_C*~PKj}A!wMdlegk8VSL%-UCvt0-_~4?vbx zHD9NyFK)gH5@in@`1ex{i@K zC$%};OVrfXaG#{x!w*ZkJKWE7OHa5}@Or|JF`wS7;OVUjFTGvEdvyKHVXhxY59>DI z@7DQ^;Z|k@nA#Zbbh-zMom5Xa395m+1_FgW;StJ~y$48xXj{>DC!VOt?-q@wimfg};$%$RF z(Tv--1f8&58te%xY8BxcV%Z=GtO8=A)ES&%r6p}=7$%`c~M$sa9by7#8 zsil!XMDZAiXr5=^RuGuI)bFGoD0U9YVyfiD^3);IQ27paY-V^OyK$-2ci$+ku zyrc6j^1Vt?6jO>Jro#-&9Av6MhnnoI2*(y%i3OXGQoF-|@k0G0NLYm+2R$nJuKhHO zeQeH1iJoJRLHH^sU5#eYy92C){u|OXRK6l?Qwsu2?Tz~OI;qZ}lWK*~2b}H$=<(J9 zr|`Iws){&iJLG(20KMg;uf1snsU3AvZJ|J9`jyB*Q$gJ3%WYoZ@rjaw6sT2)%be89 z?l+(+vQn016HPm5%TT=OGNJgIllnbU{EsLp-b#u`<@Ov~yeKTueK z5y5_P(ov3$YHC;+d_P*qG59`aVem<$RQ<4|o0XO)8@y6HEy085jZGhwnx>=CrcIlp zw8pr%EGBe;44mQgBUfb(Wr&5*_ANra`f+KVAPNjG@mX{ z4VeaZ5fn`gW`^Osy7p6N`{*y>e?+UPXc$Hzy^1!eNm$oLCin$$q8uC0^?~xB4{We$SavZo8krBTP6vfPAXpGFT>u8|NlNrfFm10n0V-4gan1t805|@x20 z#_~wu>$J(dv0slnR`=5;pl=y!R8e|{<2wZYl(O=}d*;^KR>?qlYJeKGcHN1OohA5i zFAu;B(lf(RQ86?hq2?j12xz(|3K>>K!Ff#}SP@b9?p8{~G$TsfVqCa#12jW5WvM9tfFHJ^Qv`U^cy4_v^l=)+Gt_d-Gf0#%p+~%hQ?}$2fp%WBEn{E*kZ_V%*x&hK#2Ah zLP~nf)7~TxunM30pD5;JKnVvIFoGfD>7cnuBR45Vthz9{F>3!NKp zgKZ9;81xZq6};xxq&Yoc;D@Ldw~YguW7UX9;}IDnl(EX`?u_UdAa6{XuW}BeqAjiV z3#XjJ&}tP8`1)s@z;X zoVY`9jU&M*YW1&3I~d|4(UcP^4+JgzJ1`6WTkbt4G8tOy2&+NGM|5>bp`T(*?<~Xg zz68_zBI-lA1!W2XryBCG2XlaArNtN_|CYUu6@%bjGtENLtuuE=sQa3oMi=Fh! zh%@ao;FAC76?SJUr+6is9#xPLC8&F=U`2F5H$a|qLJp25!rb>yW-?JID~Sv}0vd!5 zC%gTCP>qjCszlnPraZ<|0|1u?X8Ts8trdtLDhnqtxC)}agP7+FK3LpreC>1}!@TWH zIa@eiLq3Gvlu#R#3>rwK22Gg^8kx}Z#-cJulI=2WNqX`uj;7Czrt+fc<&dW;6fH#1 zQWbL2)ZYki13_OPSn2ii-@b!>?%qE&p8v1%S57g&F$`LByujnw(Hx(NrIGis9(kAq zAiG7iL~=zBvjoC*Lg7`Rk`rzf2Z+HwXot{8T8jtm0?GX5<-6UJ=D(=_YcS5n(q!Lp z47)}KvYn0h7#4Gas^J9Hp!_K;2y?!g8+wNkQh$xI1E3}bjCQ&(9Y#1?dcvJL-!D4q znY6gtv{_XLFP+Yot!fp32*B3ENmd1D+bJ0cJbs9=K~-|}9LD#7uU6rJj6zg7>HHt@ zur)KnQTnhn69u~%q8McfIzAQ9X`-@V!5Fo{7_Vshj*#|Af#A7;;2p+NIe3Zeerp02 zs|PQ=j+q065{Q=p2}70ysfksRZr9S}I3VhC-?n`6Kl%qaE8_4~{4xkc1N~s<%me42 z-pgc42Bh|#Qrm>wviu8C84y@|lIw?LRT%inKF}Qfj>!38v=b!r&`t;`uV1MhBD>uj z&!^FjP=ah% zV+j*#jtB(Rl#Q^2p;i@(&>^b#a)S%$HZlg{G_3AXggQeipcpI}!1T>2spHzQ+p@-? z!{js4&BuJ?(Vf(553z@rVC}j@)=^1FcUsy1!IS-mVhkTB`#35%hyo{&Qg-G)oa`TN zTn&>xEN28MuU~07M0P8GNz2izadEoH96<>^aL#mpvzhMuSf))4)BVltFV$~m)J+|2 z?6zWd8$zYcGMUmh4UtZ_nwq`%M?%ir7CwYka7yRIJ=HLO0@zNTq`M!PMwTVsGpiSw z__-1TN888=INHG!)*^WjW#0YkVgijR8NZ`oUe*GUzIVw1rHU92U%hp-;Lr`Fbo^5 zR*;h_nI~j^fDh$HMGY-E33|Lp0n=Y~xCS&^Q90rD3L_i`?4m{>h(Z(0K7TQc;-OmG zdWz3wxEXA_N$BMMZ@8;H-(>;(jpe?k3yR%GSnxd-e1rwh>4H^mHw(@q>?B}rJ~lXI zKcV|rCxwkr*kat2fx*Su2oLg=LB7S55Bg2$NtKL3KCBQRDTs=22n?YF(5L||?54`P z+LNq`lGPZ=-UfR)lFju5_-8ydk|WtnT@Z2ivOokVqX4%c*a}>U{yYZOu|7tVel#5f z3v8w;2|KzdiVZLy}wQ}6H3by-r^XWBtER8E5Z|4LDnp`;m~bA z=rIl2ci0w;W9D1|Y)Nse9oApq?6e~`VX!4E?{>ESmY0j59>y-ho<7e%(ALVbcAD!Q zs6&j!Gll6JI1;w6He=_zvnZ8#4_LSRXOgA6r>py>GMFp&?B$Tk0}Jj08Xxg9ys!Hu zWR+Qd3wPp7CixTCC%M%6MinR&npgUTO+o$D>`C6CCqrVIIqR*iV~l*V1}E+%Kg@ki zh9OMH!4}gIoet}CK&RV~I$QKc4f?CVy_M!2QB?XhR-aCjk{So5Mma2^${mDpQD)e@ za12Z2(z0LI6K;?QV24ezG?dBpy`p1 zQ*inn=*ecU+RhqTWO9rEhAxnKnU>JCpL*Jd{i}zOa{r1E3MWSut!>r&QD)yqMU;#i z{J^It7CcOzD&pL(Hf=C3_Ocv13Vlc!@i0$LTLr#3%m9p&Zw*t>lN5OsQuKJ`GQXl5 zY~Y#wuoa&`9l(l(hIhOY1nX{zl<9W52Vg<^kOFOV>Nct5?68|Y`gf97VT>1&e34v< zHgaZf^r9vW(aCDbi_SZ5d6=o7H)c=8gEEe=A>wRYthAgY8Vs3~ehet3$gzdMbp)8$${JBWiiqH5F`m{ccktkq*>vL-g`qZ~Ds z&a4T2c7PUKX$g(Z05`-J4FJ>}3i2Xx^$(kc9H zm6anSjbd~GFIM0^d#8+PstVQv$D<-bGBK6^hgnVar`#I;fjYnlP(dF3I|g>4#EkL zbNDrO96PM!#mepp8)CgolXIl0lGI@81t)dVIs9f8&FRi~Xkq~Ak}ReEQz-SShO<-% zfR!04Go*9aVNeOpbo8h!7PA8_Nea}7Y$8k_E#%;Ygu{eu+d=Tu>8*H`0i7=*oN7Q< zXH_c4d)jZ%NIcg;lp&H&qlF6WS#(eMRP%Xbm`aTw*PHL2JsU%0jlk}KT{cMsD)!=> zHGO^WU~e?M);aw1O-Rsh$6-o5QVJ~n$E?P8s}X$o=SJV%Z)TCI!wv8JtCOB>_rB#E zKFT?(fyIHPdz~3W^x*7hvaV9yi#gmGBNfdBrWk4WK>6wH6wx^BLJ1$llqk7}sN&^g zHXEbyOtv!Pi8m`Vf(6n}c!@rhFB$zTV55%;P!Yk*FKe2txhican?00znumZGiLXQO znvxSv_q&w+9c~yXb1ehP^G*uN`8m!=yWeLq%-0NkbR}w!=y5ESabmGm`%Kh&!>jd- zRw&JK^n1BH%Hsv9&dwwX3g1GbYK$CZbr~DrbF=OQ#1a@juL;XpqetMeihF*opx-@e zd!nJ+aoCn4+l;qJO2nJ0M#y4(l9mM)K!({#Fxu+T-$#aaWV)UFqKiM+H&ukIx+j+W zCLI%as_Gu_fvsq+t$3D|H&*D`lIfB(POTZDL4`cwL|uDyGem%$V5i@kW>SZ=FT*H1 z{AS71+Ks^wu=32>j_M=R`_fJ5{q52P^k1ptVgS0fG641*dnA(MuO>4Dx#ZNLm~ksY zMuw5b9^ppS1gR!Wb_vj{wVOk~^sztCtr7GSFW!grJsbqiolz%@Iw8;vBVU00<@AJd zT0DK!FCDCcbDERNZ4l4YsE^6poB6_966^r{2V zs}4Ga?>d*l(6{Ox*v+C5wnA;_;36Wojvwln19e=Eh{0%R^v76o&>|+FM9S?ki2fCZ z1CKrrxl55T9AnKZbBf+?nl#T!tFS`Vqz-T9$PtU*%=xmvfenfYys?3fs|b((sMdyN z65(;0!o(i13)UwB(|6!84l6KyUwt3fvly~Offb#)vc<_>1rQ+JIM?nn-JLr&ZJTeO z`oJkZN5P2N4VWPI2mwckEiO543|oY(4i=6GwN3fK8}etHZMA771N+p1`Usx&k~7_r zu^*xVd7h2?9l7gCy=4&ONWxMQcF5%=w41;##)EG`=iKVZSx0igv(hkW3cz&Sn!B=d$eDh&wb<=3cIvaB|Ljj)+!yz=vhyU0CUK z0pPB=6uJhXvYpJzz$Yz`!PsSikcJ2tQt0*b0)NQ)D{t%$X`NUABLYp&nOl~$L7+Mu ze2UvajD}Arq}0n)YH-t>g}v1?@5(6!QD_ZqjP(&y>u5_fd>7mEJ6ocD80WQLUk=W8 zJ@>4-U>VLkn8KmrN(7Uj9I702^D4VX-oIl@ell8k(B4#fv)!A>%k20vWhxvdHJc3~ zX2rcNh&iM5-bgw8uRUPfpR`H{ob^g(rQsTuHBiGf)Nq6Q^*2SsRIGZuGsoU@_oq;8oXn1s zfGe8UzU3-{-DH`!xs9d;MGe65u^}p0hO_Gw4sr9V2dzOd*dJtP%AhP(<2FKE+3*wh zkT-VjHXnvz8CJ)HgD?~&v2qyjlL(pzldt%Shj2b|E|)KY36ky-ZjC`q85$wCSa!;E zAHbbx-m`VsH;OQZj(DmmtXzamdLA=fIrc^6r-B~fZZZeEpw^)s*_qV-YLVs}y(Y|0 z_E%Wn2u1iDR?{vkIQ9eGl7-FsD@7>!V?3ZHE#%8Xx#;h78K3BI!~dSi?1@03?&opm zq*1b_Gw6Pw;2Q|OB@3S8{xQMWsgAAE|)S=i8n7uCW_z+FpKkuBtS5Nvl=)}wB|ER2n=fgx<%#{wvo$GAb9ZsS$ z1}TQ8+09`PY)7&MjKr||R=m5XkIXWXQpCB}?M zl6c~T!4KDB4vu5g(M*y7C6#lvzuDAZM{e$Pnq z#(tYVropiPq*R>5x+(|PjvMew zMQo?a{Q~64a=wYn4N$ETT_oTwr%*?2B~9*`RPcax54A&e;HUu4KjP>>G@R8!j~(`Dco_r_m=ozAR{bI{y8=!)m zsgS}d*g#ckXmBDp*GgiQ4P#*LlDQcmce^|+THN(YCi9>LyR_MR`XpmL8e7~waU$@D z^7S*2$I~l#{sI&iBV%8HcdadXnzZnl)S<%@+#%_HH-xPb5G_s(cD-T+(FVNG9}U78 z16T@Qd;zNBmG+SEQc9wrS2}p|0xV*MI-0$S&uo|#_bqHI$E;?t&IQ&+C`RLxf(;4+ zoH6A2y};v7XNmGGZEk(hU#GeLSTzgx{$+t1h9F?>!|$-v*CY_v%?C0=OtM;qbi;pp?3%>|E?V*gA}dy zD`;Jg6ZnCk!LlcL!oNp0R~KlG5SYm2gGbMsF`QLveP7k_z-;=)VdYY&0}Ttsfl`Ua|JD`7&e{{xH}EKNC1sq0LSsTO24tWfP+XMBuc) z>uHdCkQoTyCwdu8`N?0*br zDtiC9_s5l~7b^qbKhB%CDi4pc{bhI#WuLtwuSB;!w+$_QKs0qjof=93^cQoG_d?U}9@iJbG zKm>IN^CKQcee^gUzN`-SJA)_lsHVr9z^_rzHhD81 zPG|Zf#`IyY+Vsr;qYQ2l5~`Jz|Xi5-K_eDAxb+F+^!*M4Z|9!7q>?zaA9N zK~YYcD-endZKA1-;gJuteKh~y*7)E4wTyrCgNz^KPBs3~U(@*ShiXBnRJj($xKMO; zcmyx8?4Zx9EF6}t;3)lJG@M-4I|#pkQSlBFwPly2Z@^G^AOFWIyWAxEuKULr&4*-H zSk5`74iXt37=mVe_)*Ei$e;lZj)qdtcfH0jkvfz*zGX9_zwsq#ekKNoUj_#jDEndR z-ueyGEdn^1Z;=A!BP$Wd2O>kq17CRNxD%N7G(X@NFy7u>!ego#LnYYdHv1h@>gV7B zqk{5qeTbQm!(9dmqRmJSLpe z*hM?x5@pkn-d{lQU$TOb>438fEC&XNxm4MBsna!@;rSXs!_H39q{Xv2-8SMY9yTFJ zC{fD-a|Q_)Ux7L|CDEn{-ab!*8DIfi{kSh@X84%1LlK972M2k}CNY^-gm>VGZ3l?( zO7aN6gA4bVGpoZpbZgxcrDo^zI@Js;{s>zg-h(IL5k0*ilO)bB!3ekUe-5vJGtR&d zp5X?Z?-?O9#4&&Oe&uzcLBE1vD8_3-#ryII6pR}W?0*x1H6@@EDbV9P*B-e3 z(JO*0i8tZgWR0V5^ixFVlR3PP$qgiI@*4lJirVvo4tyB)3)paowF`2W=^@4f4g|4~ zRxu@tLv>Vvn^iJ-!;PRW;B%Zc6YgwIwkbG-9JW4542*KT4ZW2831VgJSahjPf@LIV zYl5f>cmz1bra?U{*`SIqFdmh@?A~$ghsabe3d*ig)&5k$K5UCzB3ruhpq*cK-`$xA z8AY4yUB7#Q$)34C&@Br0EtsTK&3)dg%1L?ed-nqYeDccf4?)iuQMvp367)!*j3U|N zz)8U5_8B=rWdU@i_T$C~Ab%MhdW1B+{Xc445BpolEYyZlCw;-s_&B3}+A}i!1>^#= zZN6Q*U2gHd-}7jKHLz+cgVx6?&}2Nvju1`Iup6H2sKFmSY3; ztQMby>LWcIjP)bsRhhmgByS~uK7x0%rs4n7cpE~!#T`wpEXF%hfyalPE$Vd-_sDaU z83)F+KyW?z#Wn1T^@AoK`lrX?(cLyla~{$j0N@_LE=~yga%F&r!?_ z@A=$nTfbyUd)~zdt9L@}mixp%C^flV7VHXAfX6Uv)f?@LHCn;SjxNN zpPIW*0H)8Z)Dwr3?Hk7MHtkeTRIYdcZI887GS;103%vt?w=s5KSDPG1R46b(yd!h~ z!#ujuZcXizv$KXbRfk{iodaJ&487}nWNbfcV`4*RBq1Q3d+#7*X7L0A87MBkr(}5BnBd9XKJ#xr ze7>{-bJje70*{|3@vss+z`ce?l#5x zuwi|OtPf9OeT0OENf`C9e9yA(8O-pQKIdNip|FogLW+t^wle zL0i1dK67Y4RpbM&X7b&(*P^N0@s5Iiw+-JZGW(o8UtNvIqUl33!(Ke_|KxpwN8uay z{0X_?H!-^ZAWI2skGg4Wk>tD(v0E2J+%^{QY}0iCbAN$Ji0hlKV|3=6Ua`)C?6{fo zN(3i>hk+w1W~NVP_%g`pUzYfdybLnii)YZq$74 z^mMi7`y!e~C&teKzxxW``$88LjD1{C5Us>$v#5R0A9#Gc`!%0?ufbu+MgD+h1$&?|EMP?u1b0Dc@m27_SbSp?@b;2*vcE(t2&S!(KY6IkthCF2At|B<{ju+>(UHITnn9(Jkkx}XQ|RPl|8 zw^>1-M<|~3{0`?QzMs=#x^u!EdmCEn#&SiE&#q&Sfmzx&-fLmhk2{AASCJxo3Hu5k z4bB$z#R1IlltEpA>5UTFuRO{yM3nFR<9im7-g5^?3G>M(dT zZ^@ePWyy&jg)QQvXQZR5JrmKj@ZeKF+d=%GXPGz+32&RJr+KN+puC0S-}CZnjGwE4 zz3X4`u~W{exBopys~k>nbg(M-l&0yg)hNUy#=ZxYPHMB&DLmk|^4S_s2tEcWZU=(& zgKn;MXvNZhmHaFw=KSioJC3d&dlRTc=2nMc+JN@qog_w$8#8yuBrG% zDE(FVztnWfHI=K7^7#F_)iypY>k9caA0xLEmn^)d^x8$&m0e%EdQDxter-eJ7r)fB zuDPZ4zP9#6$NlR&H#}f1XlPj%U$DAk-D-T5dEJ6L>KdCDtZ8YBFKFv%PBfwj6>B@1 z5;6H^^V&p9TYIdwE#6#P)B;p~7kW$EhS+L+Kl+yxiq+iGJioPNeY`EyQXfjJZwb{l zHLh)57jI5jp~~j_k*f=}H#M$_hZ>vfkhF)a8>~=cd#I%&!76RF&1>VK;-aF()(s)c ziQ~K1TjN)qcVw#H6R5BFH}0Gz6cdqfrUlt%77bNemr z3tHM$llXr4%ckAPN1Y=uhy3qnGBXi;Cy>?wwiW3{r2CO>MVkM=u)~A2;)j{cOGqEx zp2_%Oi2Jc6Uy8I2`~Fd+6*z;aL;5z-jYz|TnamNSk0KpMx)mF${%Mv~y)TmqA>EF2 zG17`3VQ&=a+en*`mLAAtdXOd#XEOaPe<_pMj`YO_V>{Zdg^M9PlT#mF3 zX(`egTBjVp6l;}o(Sj0p8tE9jEwE_ zS;4AVeu49_Aqe=#SrhOYz(cr=;y(iT^^nh6K5IO0+NF83{N=p4#0Q)LfLrlj@dM}% zZ2)J)H?5RKRxz@C;h_OvM#?=qlnwaueuveOeod#}(CN2XMf!gL=~ndZ#n1`rY|G1g zmpI$bS4_<;#WHK)r_;U(=Ip9YC|7!z( zbe4Y=?n?o0h5dYzi$0OF3NnbCAJaE^4=X_4T{`^>o$k`zAHmH$oRi(7;Klc|9VnS)Z=+9ti1P&R^bhIgOEK1r_vx5ogFV2k=oNXf4+?+Cy zuS(aeq+TTeqFNaLrLgZl?33)mz1UF&F>3NKK9H~{Eh~ioF90usQ}k812VO`Bg@kzM zcHQ4e;M4(!bcti^;9Zu8}Bq;`@1u}%j`!V2MkKXAwYGLxyoy)`R%>#Ty?0_U&yC#@wPz44RR zgg;L3+3TzZ&T8PS2F_~WH=_Z%WnK$aVwwD6org=7D>TiP^q22vT6nWc=Mj3!<>cFv zGL+)gtIK(yz-y&S@XJ-|VqC!MBP#JeG1bZCK4?qId5l+$eCoLl_dM0$#qWXQHLTmm zqe;TwHl5Gtypao2k(B?bE?2ex?|+)#otxUy#X(y@pU~+do!+X`s-!A6{2P5(wF(}V z+GqY?y?pDf%v6k70OX-Js&qR>?^kPhpN5-BcLm_*SOJernZE1P_`|o`0+HASci+_T z0Zm8N5`Zz*V!NTRjXTSd_!udkloz-)$HpCEQZ4XnxF^2-5u0F3))Yw3K{?@l)i%M_ zUGj;24GpjQge?$>n{gM{@cv5_T-F(YZ_w~@O-Eupz`w2G+q7IEzyYIz@kxhVL=>*DJWh=_os-;Yp1zF+bq1 zYIxsVg)cEC;1|HaDAzXKFFyo~*E|h3-)?2>(9!VZZ`p!(n|#6#X!x*(%V0*??`SyR zIN~L11EddWIKO3!m&DLWA2;xbO|bPX`LwK`X!y8>8$GE6EhX0wAV&6~0N3{NB zZH2PC04G0XnjfwKc&#_|Z?GkA#!Fhmhc$d2?3LG_8~9zelNz4X@S8OLK@A_!@CP+~*wDFcGM#@hbTr)1`Kh6!;oMK) z^>YpHkJ^&|lzd{HuHnNPexrt;e~!{aQv1V*hJRGUhqav>{~6KnVvQfx_}6K8jfP*S z;T3@Utc$GiDRz6O#vjps&-jzy)$sn$*+N0qthoCdO~=fe{Zfi`wZJd5LR07;2K;pM zBdeVb9z@{b!^(QNR}o?}0W09t0&v%VlVFX#A|&1-ZL3KD0Bd?QgGS7K&9u-K>rm@f2zC|clu+kwQIgqyEbmcV&V2g zZCj$FHI~@W8jm$L*SA=DkGsh1lEFVb;afZ?<~4{H@nmeOt@AST3GdS+GwnFIrREvX=&Y{WSn1CT(Zc6tBxoV9W>WA<*>fGrK7p7J(g&zZS}B~k{W88>zd+I)YRGr z8Zqd+3Ccu=)ylz&;Z2p|yr!{vtw&7(8yA&Mfvnz;!0-5~)2^b^_0nk>nA(A0BG%C8 z(J?*I)UtLhIGm&$Q?{lBrqG%2>clXX8X=Sd&tFt_jfDf9hIno6G1O@(O&L9>#qo}x zV)eC+O&x9V$xOAh$JVzs=4c}3LBK?Nq7G(Cb|xcr)HU9}uBEPIVHtiTxv{y3AD%pV z_{8t)sLdLa>V=M+UWirRUcGGjvX!xl%H@^Scg8+fzH~uZ@j5kXU}vY-q=!bMpI`DpSZ(q4#s}i_7oLg-x0rwpt!b}ss9$I@bvm=Qxg*xF zus+rp$1g_5V$9YrY%p1vK)kuGp}t)z);G1(CK8Qx^+5FQahli;#}cn2u(1=ly81+8 zPNt5T4)jE#@fzN#Zb>wj>Wl(=<+;VUSEV2P}^r&Cc5XbScIKrab(U#*M*2z(6?1L*{ ze)8s}*ra(xz=_(`P4P1yqG~^|AbW@#Yi^0HX~X&Vx;p&0dTskUD^_v$?d2;fZ-H*{ z)9SHhPVCl|mMwij1*hl z-mZ`=tEhd$Iw%QgqD`d@=1$ypt5ww8l86_9L~!$fM>qBmk#?q(ABs@DCO0EFV98}XK}i| ziPr^)4=nE{U0nBJso>QQO|zvuq}NTQl2bUm_3ON$!*w-|u3HTMWL)Fu3w|!Y@bh^ zPL=;Yz$g>x%ca)?a%czu<;%T{JSM##g}L?3K4O(d`1q%DYpb)!T*yXU-^kCOnvttU zCGUC#DsS3VIh>v1hV2_Pv+jCtwZe!_=`gJpQ{8$<)o(TRojO~}oH~W_>XZsbf2tH` znz$isn#MEh!DO?-C^LvUoyz~W0jKV@xq9nKQ@=*@Z~DiyZ|M9_)Fq0kZ`PNt-VmGG zzNv50?NjQTb#bT_1-K$A@jgvG1K@rZVWxev-gb2TZ3a=NhHnGT?K=ZwYU*1v6!arV sI2KL&X8f|)w5>4Jr?Ww&KcjQYxu%$djEU3LzqU(N+LKe4w^Qr?C$syoB>(^b literal 0 HcmV?d00001 diff --git a/core/runtime/entry_unix.odin b/core/runtime/entry_unix.odin index 9f7d219c3..0c718445a 100644 --- a/core/runtime/entry_unix.odin +++ b/core/runtime/entry_unix.odin @@ -21,13 +21,37 @@ when ODIN_BUILD_MODE == .Dynamic { return 0 } } else when !ODIN_TEST && !ODIN_NO_ENTRY_POINT { - @(link_name="main", linkage="strong", require) - main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 { - args__ = argv[:argc] - context = default_context() - #force_no_inline _startup_runtime() - intrinsics.__entry_point() - #force_no_inline _cleanup_runtime() - return 0 + when ODIN_NO_CRT { + // NOTE(flysand): We need to start from assembly because we need + // to retrieve argc and argv from the stack + when ODIN_ARCH == .amd64 { + @require foreign import entry "entry_unix_no_crt_amd64.asm" + } else when ODIN_ARCH == .i386 { + @require foreign import entry "entry_unix_no_crt_i386.asm" + } + @(link_name="_start_odin", linkage="strong", require) + _start_odin :: proc "c" (argc: i32, argv: [^]cstring) -> ! { + args__ = argv[:argc] + context = default_context() + #force_no_inline _startup_runtime() + intrinsics.__entry_point() + #force_no_inline _cleanup_runtime() + when ODIN_ARCH == .amd64 { + intrinsics.syscall(/*SYS_exit = */60) + } else when ODIN_ARCH == .i386 { + intrinsics.syscall(/*SYS_exit = */1) + } + unreachable() + } + } else { + @(link_name="main", linkage="strong", require) + main :: proc "c" (argc: i32, argv: [^]cstring) -> i32 { + args__ = argv[:argc] + context = default_context() + #force_no_inline _startup_runtime() + intrinsics.__entry_point() + #force_no_inline _cleanup_runtime() + return 0 + } } } diff --git a/core/runtime/entry_unix_no_crt_amd64.asm b/core/runtime/entry_unix_no_crt_amd64.asm new file mode 100644 index 000000000..f0bdce8d7 --- /dev/null +++ b/core/runtime/entry_unix_no_crt_amd64.asm @@ -0,0 +1,43 @@ +bits 64 + +extern _start_odin +global _start + +section .text + +;; Entry point for programs that specify -no-crt option +;; This entry point should be compatible with dynamic loaders on linux +;; The parameters the dynamic loader passes to the _start function: +;; RDX = pointer to atexit function +;; The stack layout is as follows: +;; +-------------------+ +;; NULL +;; +-------------------+ +;; envp[m] +;; +-------------------+ +;; ... +;; +-------------------+ +;; envp[0] +;; +-------------------+ +;; NULL +;; +-------------------+ +;; argv[n] +;; +-------------------+ +;; ... +;; +-------------------+ +;; argv[0] +;; +-------------------+ +;; argc +;; +-------------------+ <------ RSP +;; +_start: + ;; Mark stack frame as the top of the stack + xor rbp, rbp + ;; Load argc into 1st param reg, argv into 2nd param reg + pop rdi + mov rdx, rsi + ;; Align stack pointer down to 16-bytes (sysv calling convention) + and rsp, -16 + ;; Call into odin entry point + call _start_odin + jmp $$ \ No newline at end of file diff --git a/core/runtime/entry_unix_no_crt_i386.asm b/core/runtime/entry_unix_no_crt_i386.asm new file mode 100644 index 000000000..a61d56a16 --- /dev/null +++ b/core/runtime/entry_unix_no_crt_i386.asm @@ -0,0 +1,18 @@ +bits 32 + +extern _start_odin +global _start + +section .text + +;; NOTE(flysand): For description see the corresponding *_amd64.asm file +;; also I didn't test this on x86-32 +_start: + xor ebp, rbp + pop ecx + mov eax, esp + and esp, -16 + push eax + push ecx + call _start_odin + jmp $$ \ No newline at end of file