From 0fe740bca1f00106da8a44c8f52d6e9e1303b566 Mon Sep 17 00:00:00 2001 From: "Magomed Kostoev (mkostoevr)" Date: Fri, 6 Nov 2020 20:02:56 +0000 Subject: [PATCH] TCC: Add -nobss option to not include BSS sections in output file. git-svn-id: svn://kolibrios.org@8154 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/ktcc/trunk/bin/tcc | Bin 185768 -> 185896 bytes .../develop/ktcc/trunk/source/Makefile.kos32 | 2 +- programs/develop/ktcc/trunk/source/libtcc.c | 15 +- programs/develop/ktcc/trunk/source/tcc.c | 2 + programs/develop/ktcc/trunk/source/tcc.h | 1 + programs/develop/ktcc/trunk/source/tccmeos.c | 293 +++++++++--------- 6 files changed, 162 insertions(+), 151 deletions(-) diff --git a/programs/develop/ktcc/trunk/bin/tcc b/programs/develop/ktcc/trunk/bin/tcc index be80cbdd45838fe21af5d78cfb4c2f1fcb95eb88..1c7e416f6cf1559009841f4236fe3d76f55d7288 100644 GIT binary patch delta 51643 zcmb5X3s_WD_dh;+91szlQMt=iMlJ#h3JMB}h)9Ztib{&NGB0W6W$>Pe!>FedMjiE7 zX-TAA%(A?VcN7z~G*c^5GvBh>6PB8#cuD@BwaC<{$)HizF zj8_syHEXTYzp^r8L}i#>CuN!q)duq+N`9Mgfv*kF>uk3c2bWqRbh6%`6~f%vrog z9_gE#n~Z9u@zq1pQM2UgUhx%u5nE7+E$5jyQ=qVqxiIV zoPDWGY7xxVDz+Bw_4zK!`z<2bI_0YtZS{dJ$}cURX0ItZ?jcVe10?i;-;}Dt7PXI; z5gDbM@-Pp1cA)Ky#l75ov6+s)2<+r$Y4sS#;=rCRe!%PnFWFmQSh7@izrMaY-GD+} z%57TGlkP$K(2L4d_Z}e|FrRW?(~^aL`U)-WRgnrp80ED@OihK{uS_M_%-IR}8#k@S!~3joS? z+*oo4ZzD$}R00Q6wF~9aAHVkxDB(@WgF41CzWG6YeYtq8Ec~;a2$OK3+Jy#1e{vF$ zC{4$7MY>YE4pdz1C40SD9tEO;Mfr1pmU6G~s+4Hv9f6kJjOx`c)QJ9gD?qnj{uZ2N zKuY#Lf}}PhiD)UnaCblzdDSiiRR(lq*zm%4(Dp;2CajW2>@iBVc;y5YKY$_cQCFPjiAWDWg z$i$Q&*Mqn6#Iy`HNrSztM^YhcW2*K(h2lMv@MG+Ew)RL_lZKO15BPdO0t+e zfRNiBotsVw*@g4ro4)HoTN-TT6{GXwd6Q}sx%E{R;6w06jrVbY8}Zw zQVLr?%l0TgweH7`DA8@gnOzywrqiJL03$EE4AcmyjJJv9CVDH-Xi|xx$?0xXIHIx8 znK1?#j^3EB(tc5-ir(LLtj$ZTC=a78E8QLeC^~ChLE$XfTkyQTG@D88#+~U5xfN8) zGTvI}Zs}mH^DHdBy39Nc~K*s}p45 z1}TXu3ii^V_c4^tbgM{*g7Xe(osBa3laex#LhiQjy!{xvuKelKr6}12I{kPxBtfUE z{mn^kr`VTglR#Hm{H<35Y39xu^biorq(AGCz^aFDL?l#eXd-6%9n_aI&7mX|hS;WU z3ECu-+B_;N2%g2g+9mTFCF}JSuEvHv&B}=KUpw!|R z*_)aXM-y<;z@#j0D1m-SW2pu-Tn}Z$X-^A z%d2!~HZ6_^qhpni11s{t1<2@4sFR?u{u=4-Rd+mFgstesbewTA?yKxI-%o@)LgNX(H>Y zvMIQ%$5kL`+%?eETIC_@foV$BoVT@=;gN~1zRw8aLvG+Zlo=s@W{&2ii_8QoiX(fc+j_Nz)_XoOE0@G|b?gz|K#R0R+) z9%V*oh|xI|#>I?{Q{D^>APVmZjW3e!pd*8s1e13|6Af*!D9^rGUyq432nIHocN39T zk@~@8$=(y8|I4S~C*^RV{$^G5X*4-h*9@ReqvF)clV5!Cg&4^MG%1t4scP}vB|v?4 zztRCwk|$-zZpzfKbaq$yAS_gGj8nb{^DiPb&=aH6&+_G)e-&!R;z~G7D$|q_2B{PJ zgs1*V7+Tuha!E#`P)n#&Yn2YDm)wqK)ECscJZ#c*7*Ao%f*=kbDSZt^UPS^a77b|5 z7$_n8Wl%%TFvVne!EWd#EfPkfJCSG>$R&Fcj%cC0+&;B=yExFrkn3tOspxW8*KwJB1@hKB_gqKSrNu1U(p@)s!82n_{Fn&Xu9 z;XyQ0`@%aIsZ+^~Z~qzaVAd$t!=I*AY@|7b9t8pdo% z2w3jGWMxuhjDB?7HYKu@6^$5gJ7ctsMge4#xPLm)$p?Jse4mAPFjXwqKg^r2<)!jJ zzzx)B31!5R7^U-9|HO0!=X8FlX8>SUO3!oXUx6!FkUUhgdR}M5BrAnuWSVJE$N7AWpKxK1EJq5kuUW% z)b4;;VE`$3JxJqNr7^v8D4MNg0a4JPH*D|*;26J7sv_lbT-n|+j5Sxj>6i%1u4PPC zuzU~orkmZQqeKEx(_k+BC=y9-yskVSGuBOTX%d*?>zH2b6~!wyCQ-tKlv)>IIZQat zF9QpWk7l?@*R4n5X=f#QiRsqC)P=f@<;|`svtv7Sv!Y>iwN!U-84`!;^tM~Z$G$`b z6MFX`(~#5|mMK~p6qJ(|{jm~d+kWy*W!VTwzwb-;f2GQ}q@ zGT_VK87-PLY0q|}e8pF7gj-s;Ql(ov=ah(I=(dWPAWIfR1h zLCU!NHilhqUVWWt;3|(W&?EFh^HTEu5QP()N3D07u(N%*6EV zq0Nr=`XpXuA1%G?k)js7Ki(70*e@&l6a3o{HrQ{6P#v8dY=!IUoYJ{|Ze^BX?XtORevoo_^4&i}DjHi@^o;M&rtZC@Xeg z1jK}fTCJ@xmFA(n;|&z=Nu>dfpQqQAt!PUI_|d+4-HN_U1HKqF8s)p(%SCCH*lDa- zeeASl5xc-R2!bx<^qiI`he|h;$ukVnb^h6TvEBvAt_f$jo%YQ@!PMC)2hac(piq2I zY_!{@1QF_s+fo-VCw7e#U2Oe7y2v+3H9S#qB%0HL8(@O5&;A1GSZHF#k{}?Zt&^iY zWC4k!f#i_zh^02DU!e?03f9MWR-Q@f<(-Je(23>5#Sl`lghna*le)r`xsmi_$5(zv zd3|9AXL&RTz+XU~V;APlnHfu&Q8qqS?Vmn+c_|m73OIhZx(zq^#)P#{2mHsI*x5 zxVv```+t>0@jNuA?WN-{42w`Z`(Kq}d1vK8cXKR}v$Vh*Z_KQtihrOYss2WsbIc}^ z*gP||x-vL9!u3TX(yvEIk4GlbNwe*j#7vkSFF>4WSdUDXv(n4Tn>~i=;Zpju$2fg_yfUn32D`1S z>G=s6JCCJCwxFG;RI?i!$N8xzJdS@4tvN4;mf)4j<7wU|ze~vIn=KX%EGp%SCG9Nx zTFLHp6DwkB@9rM2U7!_5PbvEpSP*4sNlUDFdb1FZjd_3SobW$+zZMI6OA2{B9|0%Kbet&TNwy8NW z%s=}(w1rXA(1+GCmY-I(4ElimwJm>eOXfNn$nZR6>f;txsa$$IpFO8^&u!nb+2_zz zq0qz!S1A*77rK&f6}sx@+>S-Z(1P%kv9rh1z}FoI>t&h~0iVBj0_I<)Ih)e!v~(<` z%d~VVrAxGQGNtEf>2yj@N4ogPhcwE@ox)~xwig^-&%2=)j3m~N$WU8GldU0=t(E&K zn}$4{mQS0nAOkp~bS_Jo?Ka!9beLNyOxYVe>kpubltW6QS}Qz~;jj_P5&H=@IcUm7 zC3|SdVA{S}kGPGlD$hX*ri{b>eGQnVHi|C*9(JU4d>VfzRXcCj zDkwXKj&>7B#Ti@_zhS|y^uo?7ad`pCh+!su{zYZVu-@=tEAJ1BrpLKq<_=UxIx6=~ z=I1{JoaXT!YmviD*E7)h@{wl~&{DK;UfSLmB&4*)$;( zFVzzk==H3N(syD$refX1u6nmF%2yNn;l=mq&iL*B^x#0_PAJ?G^9F(gkxR!@n^yz> zQ2FHPaR1XgPyw<>rKC?9N@pm)Kb`1r)k;&T)T>EpxYA=%Y+x@cEiqq40ac)9L-PyD z(n;g|tF{Z^xl|g}r1UA}?xe14uF`3;FY{HhCJ**EX*HAojmB1G%j9X^FKrV(A2*^a z**>IN876jJRn|Tx=J1BhQ9f2EJwN;w z)Tgus~DMd^0<}9j`J32;^bO!Ke8gu1<+GEZY;=?Y`cjI?LkWW%-(yoS896pmT z;WPP$ye6?}=fDt_oN_v`u~iyN-U8-wuAk&h88CR#tJ8^|y6SXNM~eJRL`!M`(cCP1 zuT%Ctliv9vzzg-L?m!pYg&P|@ay10%;|NriICGFbLzO`35cU8u)6%?Z07Lo`-i>mC zCbzOx+RrJArghiD)ZH?)g~OPsx5hDqPgSTCnN>-0cn39Zv##;1vh> z++9(ge~gaKE%m_V(-C|aRKBudaFe}1+M#HdDl?k)H z@!klw!m`lSdN0mc@)P<3W;IIA>;hJ%ygz%T`>uxS1xg=_FX_KgmS^B_EtrFmvQ9#DoEtm0k4NCaa^ zVUTES<+)tl4A%qlJ}eA|lK#9fq!odkRK^E73+f6-H+OuXRT?#CIx1DqiNx=yMYMCt6FnHGJy(qB@k`4Q1S%R3%_uTU6~dFGBB;sEn8w9zZRsF?z6b zHgF<0)Sh^}*|#dnyzn*xgW_yA9pkmw7ZZBN<}C$?f%8jf@L$buPmjOn)A_C9v!E9} zMl9&=MGXr}Wo&1lN`Hj8PEE@f#OO!7tejf#bXzKqYB)>-WdeDBC2L_OHGgSgye}0y z_G43ECobk+K|Y1*KfBO_38Wg^CRFavds(@$D3+RrydWNfUhvcBTvR5%u%8|gi+fPn zlZ%V!@zdfv^te>Cm>y%7gwdmTNeE7%%a?4Uml4G=!PNgA(KWLI2~v4{GJGYVPdZ5R zRQX(XB z@mgT*2>=l*Ui65?p*W<&Pt@GEB095$Nv#&Cq7oP`S{lU`DJ4>O!gIegjUF9e3~VQ8MC&Y1g>hz&qf~oLIq}Sd z7yX5VOe(vT(SljxV9#xnUR=nit?NtYymK*Aw%?5<0hlA8(y|+R{7AX>QVmr&UYZgp zU%lbNsIRw!4Vh3$xA(>-h(!JFyU zN)x}LyuUIOR6eotKD9XZ^7HKpZLA`Ga&{;=bZfZbC@o-=jV=WIC(0^?h#lyPen~?} z&=A>N%D*a#yT0-c0sHQi>-6~iRl$sZyc$Gro=Q9(+j=W;tj{_kaLh}Bj<+ZsqNR6G zx~-NzP3h)HJ69>Jgw^ClO%*ormQ|vQw^mOe*!ndc+@5|O$R=Tz(|L^$jIC?BvD3=0 zYcgBY0HhnWpK~`lKPK}rRqZQ8Lb_f}LZRd7N1S?vZ;~|GUatz#`&WEY0#>Oo2d(t{zI#Eg9}DY00u*9%bVjn~^Vn5?h&%p^pNyE5FQLz9aC)0<7Q-ia^lf9r_8oEBCb zThsA0?M=#QJJkRUz=gipxmyF8_QptBfY!Xx-c<|?px^kOXup1)nBINsgcSU}PUyUz z>w8k!y!AohR9p7bRL(u931En$sh>=tAiE4@L>SxGccSWi{SziC<+ql?Cwa-zg35-x znHbajX^?&>mRmcGl-ErJd209}jMpy2>{n!HsqdAoZ$=0pG~)NtE$*@>bmlK_W>E*7 z-fBmWfp2AiKr7!OhEyuw^3p~x5FMIYnja;%p{(3AYZ4x!zp>GKy5l z8KKX|1EXKx6&N>v?=H1#_P!8{g!je3Ebl)?nFrsWj>opR50*1ce_b$^N6s zcKLRQqBgF?mcflFuf~)+QpCl5wmz=Z>{{J2WMD%N-pV|CTJvuQXyyCtoxzeqVrTlgUOQiW(0 z*H+N`?^z84_z5W|Y}mDcy?b8|!2WAroLDlr58yfQuikz-1-w63>9#-L^T8OVJDQmU zt>t2NQQp`eRb+?LO#AN|6VonUYWYMl7 z6Up*;%A~lIgi5WqRh2G891$W@d?XOcM?3a8kJv9|!GTVm`90u1#+E|5OF26ZbYeBz zt{m`UK367zIG;I+;5~H$lf6-+Rb^Ov8k`YEzD{R605Xtsa~pL+*g)e06=g_ehj7A> zCty)?EGHmmM7SBBK^ZHM0okfkUaM^1ArUC>eOr+|9<-L75V!ve;^j)8B0s8GJ`P5J zwgW0?JQvYU^i7t&T7XbPNF6^1`IEgwri}_e7r}_W#+BsU)+&PS-ouNWgniaahy03Y?<0G?C=W2eCAt_!N)84H z*g89f(P2@_K^kK_hBx}-&C!b}!`aMcSXm;j@2JZ~l#B#xP50T(pz@Pp2R1{0|~|hPq5PY zdYq^}=p>zgTUUc4zmjjEORW#$?brdocQ{n9yQrKvJgbE$+v%yRQTkPFbgk`)IoP6H zuWF}9j^~liderW9P_b_QQ0u-=#y}W22}l!JmbP5LakSvJb0tr2CVA5k9N*CJ`<~v-fVs7< z#T*|;TeJ}#!{R%@eAUrjY=Lt2Xha0z{}2IwWf;?aA4FI=k^zI@QmGPB9ovQwu%kmq z3$TcEEDdnRR0k0u7FBm>tGlSz&GL5Oh)Rfz=w^F$eg{Hf5B*@4{phsU5d%ZDbbd1s zS-+dY_3Rj6!ZH8;4^i2VT)uE9(_KgtsQe0=7!L$%cv7J=|I4QNdy)SgP*+|#=I#3s z7G?9!fF;WIA6rcb=N*rt$KvC@uG?wK^vWB@{WCI&=0A-P^mn85w@5o(IFa;Tjd%M6 zYH$+n9{U+eRUw7>Izs7pm0QQ7^&nT+2_Jf-oCx+Ms`aqUMwLLqWDXW#*&Aigo$yZ= zv!Ct(a@OXff`|_5kx=q=m(dAt#ivyz*rP4Pp0}pGFI$V{=6fpER@#MSA22 zsT!U@44k(HnaU7oj4ivm) zETIJqO523FI|Gq}^DYiBwx69$pn}dtL{dE|i%w^}q%04|o8Z3&hF=WBo){h#K2w)O zGH;r?;&Xma5@R3j2NsVLEZ)z_;{Ckjeol=Vfhz*tM4iU)Kx(-I$7NE~3!k`o~xZ&%eG=jgr76TdcjiS*M zV*E`3736&@*ly>y{aO*21HhngfD9F@w5aJC*oTNd4U40lj!XFjq%i1s%I&A**R&s% zk2Y9J;g&~fP1w)3yFRz6li>kcn~CxYmSy8mF~?*kUKdQyp@Hjjj@_#X;EFs{6U z0^S*wX*SQ*Bol(Iz6%c`$wI(tI`pd>g#-v^w>Ym$hgCNCJKxr1Gw()g3h6P3Q=B>9 zB?!gjUihcA1NC)}XCXRJOzVN~asz3-w%v02Dy!4Q6f`<3JD!g;5=b~{ek0~4hwb?D z@dL+C1GCpmdS6#>v{``(xaEnt4P%2~TmR{a18`DJ|F|1Vt|DPi=mlb3fu$*|tUA8? z7>Go?b>Vz38eh8$f%HhZ5a>FZ=$fI7zF>wEYsrQ75DzR;fZxbz(J;Q9oK__`Z9-H1 z8as}35A*buwXJFS!|A9-uyYf^dTGv~WAbBiSclGNsQC zgihaB=>u5*;vz z*0f5+{Td!Zl#KHt-mcRdmytB!1Sy~Y{gYEvpZ_(DX8NOF;V<0w1V6;EGj8`=FV`c4 zW-n#jZ*f$-^0!cWZ2c`jEPFkSw$DkRBfe?6_84tZ;J*ER(Xuv@yQ8d8S?E!~>%M-p z_FbG&%0i5GHzy&vCS5|9z|n&P0AM$Xt$5!_-u;uEaqxZ^jGedbvD$Ua-2*Y$ppP5> zXxp``-puE9XrsOKvt*GW7lHGLz$(7Cep|pFJ`4_nZC$RNW=vI@-RSQ9dPk7!F0|j2I}Sw zkbo1kw3 z<@E6ogmgJ6pExRr7`QJkr}XqpM#@;y3oIek#JI%cO`K{<1~Yu{KaB+wWtpTPI?=44 zs$i*kv?U2f1JZyW{JoKEfg!irMSnp)(Aq+@5Qpp%T?>#s*FvzR*?!pV*o;^_#DcK; zR+u+IG}?AT{b*)#gOA+5Of>+^91eoO0myQ$?B&x3D?*B!09IhGeY)FK;DY6Q%Qf4U*O)1!BiZ?n2s?bw}u` z>`kz+7jrLPg#@c+QG8!4863WF8FFCi+XWD~?;9GyaW~Cqn+|B$NJQCB6C#20fJg!6@&fjwg(xgJ-A^E<;p~HrhDHuhIyB|<3jwxDq+*SkE<_sJnF^wW(e?mBN;N9hDp7Ys zatP((yUFO)xbhArOWgU>I=>4l@YP2fHG<^}JE?d6_G$DahT+HuV>Ij>2gWL`?zGEr z(f}4E>Z11Gbmvm?S)cm)qgX}6a`MRH@h{3K*Y76A5*WvJZ0<3K{PWKmkmza2;{OC= z8+(y>L>9NACrDl4N1N z6Jb7a!~@<-5}sUW``G&daNP92KLx*A?`QZ@MgB8rYp44Vyxl1c6Q#vJsRXP4KNTVt z#CE38Lt|Trak_LC6i(#dxd9KbJs9|uVtmlUjgW>#1V`=zFGDI`RMRueOL^fzqCPG| z+4dkNSez;+2_}4MTH~NKUaVNB+<(w9ph0>l^aUy@-Dn$#DHRf%Uf(U02p4V10CS14 zPlnqLuf^qvadd|uaLmX!WKX^osT0o2XJ=E;AvO9Vnkv*Rd^{E zqVVUVymx+eR~GLfXj(;$`E#qEXVF?OH9T$g1{UE*XhT~j6I0-sNKaA%t1q#EBIJgD zq;_V^FJQF`h#iem{`v7oa9N~IU@YH{xgTYtHX=_z4J&VRUyxLpOf`SEvzJAi5e2xKHxv#L;9PShpVlYop7wB15XW@h~ ztdR5F$j^WUrrx^HO>eX%AtlF&!Sog361Lwh`^#6U*Yqr*hN-K{beaGc`lUbGFv1k>|3eyf`-ssV2DdF7 z`ld|m^Q%U9TT&;%E0== z=d6BjU>`%$)Riubj_TEST^No4FxxI{486y@vVf+9Z*H{hfsLZ=uE|eiEZKl}{_-9$ zuNZULK$^|F%(!eh3g}!Ey5Ml}3Dgahz(`nmpD@(APAco!))Fg^_Jhau?+$44gV?X~ zNgV~v?;x^T%)vMQ^+so$X?Z1-Hg3DBHLff)K%6%I@Cqg+hN!j?2RZUUM4$obHqBX2 z*f{Fr&DnGuU8wt;Gdej^FH%09{%)*mLi#@s>cQx-wp;UE6K;WIv2q$kb=|&1$IE*t zwkx_C6Ei;Sfpl9+%Dbq(;07*7^Y`3Xjhn}PH1|aAiWZ<4o}aeRO22QxCI$G>?5nh6 zcSd|0mu&@>*wCwE+!>u{s2ki_cn9IHzTzW>d;vq|$GkC&ERTZ}p@L)NH)U^=i^|3VsCQz??uqafk@?dm&q;e1T zJUyTAWabX*AsqId_%UW423D~RQ`o#MP@+!h&XW4JCtHGjw`y+1(t`*ctB@LOO&f9R z@;8_XP>Wl!U{}iJT;14;b#L_^7(n`t-;uQP-&(PbPf~f4wtdV6~Z(d~Vzy|uMyxsTGTOaT2RrCvv_eI=#Jkm47%;%C`SZ4_}PmMM&$ zg@q%_#i4v*q zcF5~(56nR<&B2PDFg!BNx%_4IO)v11k6P`;I?(9;@M1~y?BLDFMWqgMJ`0`C^?0@v zYNjtvN!c8Au{T5;6@PbD@b+QdL_;49K%tKYc%2VxNBO&bSQtGo;$3X1$Ey2$STJP; z`f62Dd|7)x>SF_NwY0PziNaS0MBF;@m)G;n2sj1tZMB@2mdpKroP?TRWB%w;P@z+7l&G zCyZt}WIj}xSehLn$RxK4pSBS^5AbW-u|TnHb|g>{_DHl#kGCF)6`K%kt5*Y41wvTx z7#MmVObP9D?=TrKLc!UQYVaRxOYuw8?~QkaTw!NLVMWD1_HKq~*?7$tlJ*{mV(BEC ztUnsnu7NCu#yUPwTONu6*>D=qH-Riz*g+6(@-u$#cu>#tU7)|Pxa{%>VqF+jOAltl zy@XW;XAAH*@gDqv&|B{Zv&mGWO$cg;ITdlylcap%mgG;W3q#m5RO8nWMj=*ecqn^$ zqR?dUL}2HI%Q6r*$Vfi76gY?s@Ql=G^JJhYiDv2Z&#V#g`05o=wP zvE&oLki~s3u^1=ZN~kY=g|u19;W@s}&y^UK%DIMwO52%s#?_Sx^|%Kqv;!d`B?&o5 z%XCqH3TNS6Y3q3u?1}|L>_Rd7+KC7bmB0oD%`tp>9SABz5g=yqoSI^0!GUBHXf{$4 z%i!>w_Jo2u+sslr)6x#6i!FCLyF#s($&fQ!kM-9av|qM|v&u%7ILN|O;egCV^spM& zfpwwzn$Uqg9x1S`<4;3qAw8ynPD5%3>@vDuOgm$_89%Ci+d*T0Lj>#EdL!u3;IPCV z+n^(_rI%U|!F>9P0XI4*AK6=?1KOr*#0o`98+`IZXh$D~=9bgbi_Vx4HSsAd6^(FX zO-GxYFX3G25wQI*S|?5GVRH!+QmXnFST!Y*wGv-}kY<}`AMBhQ@}52dExZxQDNbl~ z{FOyRu67=OO@qB6j=z2cssclS-dIz^2^e80*aI#+4K>VrC}v2#5Xs_cLOi1w-3eC{ zqF8*Z0!#rmd^ERu9;`l(1&_*>M`10aiFUKB!{*~>)gHw8*c!~#&@YlH(5gDoEb8Jmb>XK_A;%^Pq*yI zN+)RpD%tW6pnEg{E-F4ey5NhTnjL#liyyx9fIeIz9j?d&tiqPOHNJL(dm4BVjjVS& zqMhvufbAhYhM>}q)dw9}r1&nuLy)(Y9D;l^OPZ4u|NXUrCtFB)8!tp`3bh zHZH8P)}>-wi~WzauD!8@&YJm*)lMY^-H}3;WJ(&HP8!ooXsdx+`Noo;L0fGXG?A7* z%$5!s5DLJJ9KPd!$1)Vt0EIs0a+b2A)hjV9iA_@jVp-&v?WA8v;5MRWvEZ%-0Oa8I zbVfT`zr^+nuf=z@gPg~J8Nwhuu$gcZWFj}5A4Z}@w`=kA36&{d&7te2>YK5wS12)1 zBW~IqW1fm56yAK5#*+7eh%nN6qIW=5JH;`z;50C6YzF=tSqmgf%qcX&h6`SlMo}si ztM!?z?HNm!HkeZ<7_ z=GZ7Yeu0y~zL+GW?oV}RCs;vf_H8HDC*MSwMK>^&#Et(yIimY{!F~-Kv4X%jIYOP$ znROH5FaMjF)V-Zqc+mms_%-rE6%RYutnm0%%MmhKH-i=>`aNNe^{QJo6YXEW{`jCtPq` zB*)LvvW9g&%4mBGGs$NlN84Hn#)-cIx=yapb~h{7v4n0(1g@!*|tF6^Yz zV6Ad*s+^6=sA;BjsyZQodC_V(H-UwC(zrwvKq637D-u|Q=EF0VlwkjbMt@SH%0Eb1 z(7aPEM*Qei5VZFlXi)j34ceF@{10UFni!VA{_mVOUwTHxD-|51-x}G5c ztW>}6!qSPeLb@_~OSkJ-YW_y&~wywj8A8%>l$(H%a@# zl+k9PygXp-c!pBHopW~K2mnADNiU4V0W!iq-Lnisw9|!WV?Xi)T*oW4n1LUGVB>u{ zk=(AOhfw-M^+qD|5-tup2KFQgHaPa-&UT)LBWaCo57vN@4+VSH2=58EuuAa?+WJKSSeIdXTQUbNvCVy;6LdivmoL z5vu;3#O4$K%;<(i9G;3*-PjO%|Fs+ITZdk4ZoWP@^pawh#3n-2~cdrxX?d z>>f*jV~()EN^C3{38$pBF3ngn1$!qlm{e;DOAzjbx6pxxuj75J-i^LV82ER7)kIOf zkiy!vNd_=EiR|L{3>Kpd&QRTYux>HLAySR?^6gtyh6;Ky+6H4SleI6+MAL%X5|b_l zKeY!7?b3*qCy)_XtpF7?Gp?gH+)9{FO^LR*heouEJy_7gQMom=r%xM-QMK*KVpH2*s6^4Q+Vs~ZmE9^nq;^eZUBWb^c-hSd zfHIKb8zzmaZCrB9K~@vwRbv_~WUxzQ8Vl)2lY8qhI4%^6hP5u-SP}!i zYLu@Qcqz>S>3EzvBaL;B{F_j&5@)_zH=*c8UgC#cHK~9}SmKED)Kh7!n+Gww@ZVF8 zsTcDW@xJ^FE#D6(fP!tD(nSjBzb8N))r+-DCKf=n=~+mPW=qB6g5hO7H~!K<5_ycy z(GSIYa4y>LRY%C*mR`(P?0Z)u8*;ZE8rFIg9#KN?9W764ns-UdD{Pv#LCc%aG;clf zoMQG^)BF##x=Bs)igX*b%&;bzx>Z`9XVbiLE$`0lCP==m<^9|=?@i=6J3onh?D!(^ ztx1hHS^Eq4;pp6K0n+ zeVAEj9DWw7uyLmk_Fb0HTT5v><68J51%*3Vmk-5(n^f)ioB&+s7FZDCDlsM?zV?)H z=LlAsC6*0nk-O02l_Yp~A?!~zqJad7?oo&E1~sti=BXMRRFR9QA@jbL_i@v_En40i zP4hNsdCQUa-zY>kpl}kkh!Uzt28$TnsE^uGc^xQ4dt`hdu2bnOr;;IpL8MGgyP~sm zy{+zEEIAIPUbDFb-r_wfSwnbdg!?lfJ?my zSvNHH;8igo_eY;$-vMW?p2K6&k45TJUDO->a7gm4+AWL4#H9ijZJU~dJ^0E~q$C7* z`jm!r8sE3&Evmpk7lb21U74lrOYK>#L)(KFQ9DWSEMorQLdtVduV=CL;!CfEEBI{8 z_d^$k(KZ`2=LfLi)7%)2r|=F_&sb4CJ5z&G`w`Z?g6|&zTPyQtuo-QTXq_XUz`T16 zo)nlB4X|EC(t6k3vdiILufEcsd3PLf5^Ej}MO>jM3U~T4umjbGT=+d71|Z~fI^AD0 zjBfO2o%P8sYWr+#cJQ2-&BDc3qbuk$0dOVsTjA87 zih?jOay5jaFU+n7_x%cq^LuF>cg)Ag;eDAw`+#w$k&ov{l+(^u9Wwx@p&mojq5;f5 zcsrGz-%GnkhYwnbfyk@Ov?BA7>dpb0)AhFjEUE+H7i}#0jJ#v`It^T`xLXKz1)Bv9 zaqdzksoe*%=TfO^C_wBE!_OW{-72mmpHtz8gx^a`%uA3Xyqi1?+giGQ427Y`T1BM) z&p>=hyizsgus6s;+LFUMB@{GtV29};&+sZ;GaYDvrM=`_`slFM_FYd8X6^A=Ty@3c?4WBOROaK=LAmU0ebi9(MlQ=>hjt|n zVV;c1YQ|6&&aSAF@MtY2V==z#WxFLUq_2FduMcItU3(LNQ|b>xS&FL&N`6@l9>$(# zz2(wLIrklf9W;{8aA>N^o)!d_qNYrbgU6{`Cn$tLl*b=W3A+5O; z8`Q~pEZmjy_zP-T9_zu@s-Nd!3wTIvKAg$k#9W~W(S|T!PQ*7)Z=X=#9nPX%#Q?gi z-wbD4*lD$71ly%|8>Xg>WWVUshp8R%S#CI)eVX3^J;rN3RJdQt=?WKelFM^kcCF24 zp)7-DR|caxU(a*urMvEhZ(Hx-@&@%~ zEWy^FBIAyz<)fG{&K(5$fnZs$QgOimP9yc?C>FwwsK1Y5f$XyCKAHt%s-s7)-4YD@w15Bg@9lixdgL)`>XABgJrLSUhv{g^tT zfO&PL!6lq2^{^2o?1KJBuv^25NF@kcIdoYM%DIVKR7e=$9e=NY9cWIss;qIx)Mv*q za|(^fQ9!!lr`tzeu7P22Btx0}hJ!3_nhNVbkV-Ox@fqIO+KCAlgqWWg!#cJWE}dZ> zScsaJ&hsPTav7`XwTQ7SY>+6{p;$ZYik6xej+Qm`|GQ-XUxTPkd=XzLCd{cHco*h^ zTT6ie?M&TpKJ8z5n|1(iUsG3&WgUiQyuUrq zh${0M2)P;6q(2-1utLdqfY8>@$ny|LID3qP4#qQW9P8F8aX6^g5a(l$0!n<%v`3wG zUx3vF{~p|`mXBkRBG|)vH@47=cbq`;1z6|DK?~w}e;gatiKys!7GhJjWRN~o8?a-H z_6}7b2;dk*@03*T-wS zKDP-hSUVeD52Y)h0)tm5O{3R__07~rhlNXU|MEp9wgTLAFR7m!m&P@8_7<8sQBJ3I zpb_3O6o8zN+R2znqq=bd>%bnUpHI+Y0yuCA5R}-DNhlLzk<)V#p)*I|9{QwqjNb1_ z7R&7FEIjl9!_^H>vLWoC`sb6Z-w45tmqQ#w0N~)UJj8Pg`|0S-O@(bi*-FP~%)dPk z1$@AP2le(PluD=6Q2$0om!VnZh3TQ}ARtZ<1C)T${UBpTe90!=<%jho8o z=8$Tc$|jga7oWaCnvUYO#5cI&=^I?Q9uyCy5sMFTsduJgLbj?A&#+k6?ISRbero!rv;2s>c z1X}Al7WSW1hL55;hHHyy-duRhBj zBZ%FfW6!rMz$D7)skDf-!y<>vKREzN!Jl8Khn{0yMBqygW6A4~&%IC*6#Yu2OVyUo zv))Bf`5@<@Pn?!#!iCyQ>Kb*jVV3QV2UqM7)BGD8zQx%l;$KZ2`j5e_)vAp zEHvVNfJ}X`&LAGId;OsLD!D$Vq__5-fR}>{$&GPKh-vy^(x8+VZ_3B`a{UQnEh|I zfYmW5nEXBW3nty#&}cI%Ig3KIBHmC`h9b0Rp=Gyd06U+uF9359b1FVCg%C)y!vXCC zR)|bSdp?}{4x`j)^bIIS_KAKA8h|INQ!Ok-T;I|nDy(-Cjmv{D1^6KGx?Q_1>;=~8 zUjcfzE1cQ~0T(h^sj(Pm6u*oepp*vnF>ww=bu#fq^IdD^uq@`|2Oh(hc`>IcUm2J6 z#gi^S?)q~s>mx{;G@tcwT|_OS)WZ2J#+~AaZO04SB5?SF`E0JZ5djOROpRWkMStZi z(Dcyi1?;glAH4|Ttuimc3<8r-62a>W7~SzvLl&}pf6`N6tTObgsi;-B+(?|Ut85`+ z@Wgp2go*Z$;s9Yk9A9ja+04zEnkfFTh&>fXP!{5wRzzQ?320x4F8Lv>onj4n>ID`a zK$^_T4NzUUYeF{*906qD5Fc)ML5owXe1Uz;g47v{*+eWgUoU2%Vhw)5;;W$-kmGFN zUc|;nXabr}0_qJJ)TAe>&^O^0`~lp8Q%3>3tccBRO;+xqYkKWmIurMuRlg-Hp>^dG zAZ;hOL=lYbE7bC+CG1IY!b^)hotRZGVaLVwMw}Hs&{&A#LU_tXQqPFwM~p=Vfp3Vh zNX2p@Vl1}7RQ{iU0*&6rLsVAf3aL&TSwV$Cs6 z!Aq?6e~*-ymjD}W4^Uz*p|scrl$cjgItQbaO3W0BrrpKRu1#a30twC20$F_1;1N6y zpCAV>7}T3q=G|IsU9P2q8E{ic;@qP8m#_|Ou-dzXO^hZPXgtNm|29DzB`7cYfV2sp z(nu@Kq7PO5##^gjl(6xna5~x8GWM6c!^YY-|9d$`i@ZxVHX!#(310H4b&lCAWt)Ij zlt2rKSaHB3YeN*L4M@`v#b+y!rXh+CS0GJ8tjKXu=Pg4JFrYh@v9N$T=+N6|nu#SD zi}B&ojCu%0Ag#sbAwd3p~lnG);Xg*YGNB|gLw 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

g$QkkTfWMTu_^JVbeGNiVFVnJL4; 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 = strtoul(optarg+1, NULL, 10); -#endif +#ifdef TCC_TARGET_MEOS + s->pe_stack_size = strtoul(optarg+1, NULL, 10); +#endif + break; + case TCC_OPTION_nobss: + s->nobss = 1; break; default: if (s->warn_unsupported) { diff --git a/programs/develop/ktcc/trunk/source/tcc.c b/programs/develop/ktcc/trunk/source/tcc.c index 172e92f1e7..18d2714687 100644 --- a/programs/develop/ktcc/trunk/source/tcc.c +++ b/programs/develop/ktcc/trunk/source/tcc.c @@ -128,6 +128,8 @@ static void help(void) " -Bdir use 'dir' as tcc internal library and include path\n" " -MD generate target dependencies for make\n" " -MF depfile put generated dependencies here\n" + "For KolibriOS only:\n" + " -nobss do not emit BSS section into file\n" ); } diff --git a/programs/develop/ktcc/trunk/source/tcc.h b/programs/develop/ktcc/trunk/source/tcc.h index 99dc3bf310..28e96e5388 100644 --- a/programs/develop/ktcc/trunk/source/tcc.h +++ b/programs/develop/ktcc/trunk/source/tcc.h @@ -871,6 +871,7 @@ struct TCCState { int do_bench; /* option -bench */ int gen_deps; /* option -MD */ char *deps_outfile; /* option -MF */ + int nobss; /* option -nobss, omit BSS section (KolibriOS-only) */ ParseArgsState *parse_args_state; }; diff --git a/programs/develop/ktcc/trunk/source/tccmeos.c b/programs/develop/ktcc/trunk/source/tccmeos.c index f431955a0a..b833b4be4f 100644 --- a/programs/develop/ktcc/trunk/source/tccmeos.c +++ b/programs/develop/ktcc/trunk/source/tccmeos.c @@ -180,11 +180,11 @@ void assign_addresses(me_info* me) { si->sh_addr=addr; addr+=si->data_size; - } + } if (me->s1->pe_stack_size < 4096) - addr+=4096; + addr+=4096; else - addr += me->s1->pe_stack_size; + addr += me->s1->pe_stack_size; addr=(addr+4)&(~3); me->header.stack=addr; me->header.memory_size=addr; @@ -272,21 +272,24 @@ int tcc_output_me(TCCState* s1,const char *filename) for(si=me.code_sections;si;si=si->next) fwrite(si->data,1,si->data_size,f); for (si=me.data_sections;si;si=si->next) - fwrite(si->data,1,si->data_size,f); - for (si=me.bss_sections;si;si=si->next) + fwrite(si->data,1,si->data_size,f); + if (!s1->nobss) { - if (si->data == NULL) + for (si=me.bss_sections;si;si=si->next) { -// printf("\nError! BSS data is NULL! size:%i",(int)si->data_size); - si->data = calloc(si->data_size, 1); - } - fwrite(si->data, 1, si->data_size, f); - } -/* - if (me.bss_sections) // Siemargl testin, what we lose - { + if (si->data == NULL) + { + // printf("\nError! BSS data is NULL! size:%i",(int)si->data_size); + si->data = calloc(si->data_size, 1); + } + fwrite(si->data, 1, si->data_size, f); + } + } +/* + if (me.bss_sections) // Siemargl testin, what we lose + { tcc_error_noabort("We lose .BSS section when linking KOS32 executable"); - } + } */ fclose(f); return 0; @@ -314,73 +317,73 @@ char *getcwd(char *buf, size_t size) } #endif - - -static FILE *src_file; -static int next_src_line; - -void close_source_file() -{ - if (src_file) - fclose(src_file); - src_file = NULL; -} - -void load_source_file(char *fname) -{ - close_source_file(); + + +static FILE *src_file; +static int next_src_line; + +void close_source_file() +{ + if (src_file) + fclose(src_file); + src_file = NULL; +} + +void load_source_file(char *fname) +{ + close_source_file(); src_file = fopen(fname,"rt"); - if (!src_file) return; - next_src_line = 1; -} - -int get_src_lines(char *buf, int sz, int start, int end) -// 1 if read -{ - char line[255], *ch; - strcpy(buf, ""); - if (!src_file) return 0; - while (next_src_line < start) // skip - { - ch = fgets(line, sizeof line, src_file); - if (!ch) return 0; - next_src_line++; - } - while (next_src_line <= end) - { - ch = fgets(line, sizeof line, src_file); - if (!ch) return 0; - next_src_line++; - strncat(buf, line, sz - strlen(buf) - 1); - } - // remove newlines - for (ch = buf; *ch; ch++) - if (strchr("\t\n\r", *ch)) *ch = ' '; - - return 1; -} + if (!src_file) return; + next_src_line = 1; +} + +int get_src_lines(char *buf, int sz, int start, int end) +// 1 if read +{ + char line[255], *ch; + strcpy(buf, ""); + if (!src_file) return 0; + while (next_src_line < start) // skip + { + ch = fgets(line, sizeof line, src_file); + if (!ch) return 0; + next_src_line++; + } + while (next_src_line <= end) + { + ch = fgets(line, sizeof line, src_file); + if (!ch) return 0; + next_src_line++; + strncat(buf, line, sz - strlen(buf) - 1); + } + // remove newlines + for (ch = buf; *ch; ch++) + if (strchr("\t\n\r", *ch)) *ch = ' '; + + return 1; +} int tcc_output_dbgme(const char *filename, me_info* me) // by Siemargl. Writes filename.dbg file for source code level debuggin with MTDBG // return 1 on error { FILE *fdbg; - char fname[400], - buf[80]; // no more fits in mtdbg string + char fname[400], + buf[80]; // no more fits in mtdbg string strcpy(fname, filename); strcat(fname, ".dbg"); fdbg = fopen(fname,"wt"); if (!fdbg) return 1; - meos_section_info *si, *ss; - fputs(".text\n", fdbg); // just for mtbg - - // print symbol table with resolved addresses - Elf32_Sym* esym; - for (esym = (Elf32_Sym*)symtab_section->data; esym <= (Elf32_Sym*)(symtab_section->data + symtab_section->data_offset); esym++) - { - if (esym->st_info == 0 || esym->st_info == 4) continue; + meos_section_info *si, *ss; + fputs(".text\n", fdbg); // just for mtbg + + // print symbol table with resolved addresses + Elf32_Sym* esym; + for (esym = (Elf32_Sym*)symtab_section->data; esym <= (Elf32_Sym*)(symtab_section->data + symtab_section->data_offset); esym++) + { + if (esym->st_info == 0 || esym->st_info == 4) continue; int sect = esym->st_shndx; ss = findsection(me, sect); const char *sym_name = strtab_section->data + esym->st_name; @@ -390,82 +393,82 @@ int tcc_output_dbgme(const char *filename, me_info* me) continue; } fprintf(fdbg, "0x%X %s\n", ss->sh_addr + esym->st_value, sym_name); // removed type(%d) esym->st_info - } - - fputs(".text source code links\n", fdbg); // just for mtbg - // print symbol table with resolved addresses - Stab_Sym *stab; - char *str = "", *cur_file = "???", cur_fun[255]; - int cur_line = 0, cur_fun_addr = 0, fun_flag = 0; - strcpy(cur_fun, "fn???"); - for (stab = (Stab_Sym*)stab_section->data; stab <= (Stab_Sym*)(stab_section->data + stab_section->data_offset); stab++) - { - str = ""; - switch(stab->n_type) - { - case 100: // source file, or path - if (stab->n_strx) - { - cur_file = stabstr_section->data + stab->n_strx; - load_source_file(cur_file); - } - else - cur_file = "???"; - strcpy(cur_fun, "fn???"); - cur_line = 0; - cur_fun_addr = 0; - fun_flag = 0; - break; - case 36: // func - cur_fun_addr = 0; - if (stab->n_strx) - { - strcpy(cur_fun, stabstr_section->data + stab->n_strx); - str = strchr(cur_fun, ':'); - if (str) *str = '\0'; - cur_fun_addr = tcc_find_symbol_me(me, cur_fun); - cur_line = stab->n_desc; - fun_flag = 1; - //fprintf(fdbg, "0x%X %s() line(%d)\n", cur_fun_addr, cur_fun, cur_line); // commented as conflicted with direct address - } - else - strcpy(cur_fun, "fn???"); - break; - case 68: // N_SLINE - if (stab->n_value == 0 ) continue; // skip zero offset line - if (fun_flag) // skip string {, as duplicates address - { - fun_flag = 0; - continue; - } - - int line; - if (stab->n_desc > cur_line) - line = cur_line + 1; - else - line = cur_line; - //fprintf(fdbg, "0x%X LINES %d-%d \n", cur_fun_addr + stab->n_value, line, stab->n_desc); - if (get_src_lines(buf, sizeof buf, line, stab->n_desc)) - fprintf(fdbg, "0x%X %s\n", cur_fun_addr + stab->n_value, buf); - - cur_line = stab->n_desc; - break; - default: - continue; - } -/* - if (stab->n_strx) - str = stabstr_section->data + stab->n_strx; - fprintf(fdbg, "0x%X type(%d) str(%s) desc(%d)\n", stab->n_value, stab->n_type, str, stab->n_desc); -*/ - } - -/* for(; si; si = si->next) - { - Section *sr; + } + + fputs(".text source code links\n", fdbg); // just for mtbg + // print symbol table with resolved addresses + Stab_Sym *stab; + char *str = "", *cur_file = "???", cur_fun[255]; + int cur_line = 0, cur_fun_addr = 0, fun_flag = 0; + strcpy(cur_fun, "fn???"); + for (stab = (Stab_Sym*)stab_section->data; stab <= (Stab_Sym*)(stab_section->data + stab_section->data_offset); stab++) + { + str = ""; + switch(stab->n_type) + { + case 100: // source file, or path + if (stab->n_strx) + { + cur_file = stabstr_section->data + stab->n_strx; + load_source_file(cur_file); + } + else + cur_file = "???"; + strcpy(cur_fun, "fn???"); + cur_line = 0; + cur_fun_addr = 0; + fun_flag = 0; + break; + case 36: // func + cur_fun_addr = 0; + if (stab->n_strx) + { + strcpy(cur_fun, stabstr_section->data + stab->n_strx); + str = strchr(cur_fun, ':'); + if (str) *str = '\0'; + cur_fun_addr = tcc_find_symbol_me(me, cur_fun); + cur_line = stab->n_desc; + fun_flag = 1; + //fprintf(fdbg, "0x%X %s() line(%d)\n", cur_fun_addr, cur_fun, cur_line); // commented as conflicted with direct address + } + else + strcpy(cur_fun, "fn???"); + break; + case 68: // N_SLINE + if (stab->n_value == 0 ) continue; // skip zero offset line + if (fun_flag) // skip string {, as duplicates address + { + fun_flag = 0; + continue; + } + + int line; + if (stab->n_desc > cur_line) + line = cur_line + 1; + else + line = cur_line; + //fprintf(fdbg, "0x%X LINES %d-%d \n", cur_fun_addr + stab->n_value, line, stab->n_desc); + if (get_src_lines(buf, sizeof buf, line, stab->n_desc)) + fprintf(fdbg, "0x%X %s\n", cur_fun_addr + stab->n_value, buf); + + cur_line = stab->n_desc; + break; + default: + continue; + } +/* + if (stab->n_strx) + str = stabstr_section->data + stab->n_strx; + fprintf(fdbg, "0x%X type(%d) str(%s) desc(%d)\n", stab->n_value, stab->n_type, str, stab->n_desc); +*/ + } + +/* for(; si; si = si->next) + { + Section *sr; Elf32_Rel *rel, *rel_end; for(sr = me->s1->sections[si->sec_num]->reloc; sr; ) - { + { for (rel = (Elf32_Rel *) sr->data, rel_end = (Elf32_Rel *) (sr->data + sr->data_offset); rel < rel_end; rel++) { int type = ELF32_R_TYPE(rel->r_info); @@ -487,8 +490,8 @@ int tcc_output_dbgme(const char *filename, me_info* me) fprintf(fdbg, "\t0x%X %s\n", ss->sh_addr + esym->st_value, sym_name); } } - } -*/ + } +*/ close_source_file(); fclose(fdbg); return 0;