tag:blogger.com,1999:blog-12275815547781508972024-03-21T22:25:33.829-07:00Log4Hua"We are the modern magicians." Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-1227581554778150897.post-17778352631637467882014-05-06T20:29:00.000-07:002014-05-06T20:31:25.080-07:00conclusion for cxxtools<h2 style="text-align: center;">
conclusion for cxxtools</h2>
<div style="text-align: left;">
According to a few days' research, I find out the reason why getting errors when building the cxxtools on aarch64, but even I change the source code I can't make it built successful.. Maybe I need to change the compile command parameters to force it ignoring the warnings.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Conclusion for cxxtools:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Possible Optimization:</div>
<div style="text-align: left;">
Not much. The cxxtools' source codes include the code for arm architecture, and we don't need to modify the source code.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Building:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Even I find the problem (<a href="http://hzhong10.blogspot.ca/2014/04/learning-porting-to-aarch64-cxxtools2.html">see my last post</a>), I can't solve it by modifying source code, maybe I need to modify the building commands' parameters. For now I cant build it successfully.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-81969666016752060152014-05-06T08:46:00.000-07:002014-05-06T08:47:14.712-07:00Porting & Optimization (4) and conclusion for fossil <h2 style="text-align: center;">
Porting & Optimization (4) and conclusion for fossil </h2>
<br />
In my last port, I test the C codes and Assembly codes on x86_64, and now I will test it on aarch64 machine.<br />
<br />
I will use the same test program as last post, but change the assembly codes for running on aarch64.<br />
<br />
//Rotation using C<br />
//#define SHA_ROT(x,l,r) ((x) << (l) | (x) >> (r))<br />
//#define rol(x,k) SHA_ROT(x,k,32-(k))<br />
//#define ror(x,k) SHA_ROT(x,32-(k),k)<br />
<br />
//Rotation using assembly under x86_64<br />
//#define SHA_ROT(op, x, k) \<br />
({ unsigned int y; asm(op " %1,%0" : "=r" (y) : "I" (k), "0" (x)); y; })<br />
//#define rol(x,k) SHA_ROT("roll", x, k)<br />
//#define ror(x,k) SHA_ROT("rorl", x, k)<br />
<br />
<span style="color: red;">//Rotation using assembly under aarch64<br />#define SHA_ROT(op, x, k) \<br /> ({ unsigned int y; asm(op " %0,%2,%1" : "=&r" (y) : "r" (k), "r" (x)); y; })<br />#define rol(x,k) SHA_ROT("ror", x, 64-(k))<br />#define ror(x,k) SHA_ROT("ror", x, k)</span><br />
<br />
testing standard:<br />
<br />
7 tests, run the program for 2000 times for each test, record the time for each test<br />
<br />
remove the first test (for preloading the cache), the longest time test and the shortest time test. calculate the average for the rest 4 tests. <br />
<br />
test result:<br />
<br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.349s<br />
user 0m1.070s<br />
sys 0m2.660s<br />
[root@localhost test]# vi ./test_c.sh <br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.379s<br />
user 0m0.960s<br />
sys 0m2.760s<br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.479s<br />
user 0m0.940s<br />
sys 0m2.850s<br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.408s<br />
user 0m0.980s<br />
sys 0m2.760s<br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.506s<br />
user 0m1.080s<br />
sys 0m2.670s<br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.414s<br />
user 0m1.110s<br />
sys 0m2.620s<br />
[root@localhost test]# time ./test_c.sh <br />
<br />
real 0m16.410s<br />
user 0m1.030s<br />
sys 0m2.720s<br />
[root@localhost test]# <br />
<br />
arm64:<br />
<br />
[root@localhost test]# time ./test_arm.sh<br />
<br />
real 0m16.440s<br />
user 0m1.180s<br />
sys 0m2.570s<br />
<br />
[root@localhost test]# time ./test_arm.sh<br />
<br />
real 0m16.438s<br />
user 0m1.030s<br />
sys 0m2.720s<br />
[root@localhost test]# time ./test_arm.sh<br />
<br />
real 0m16.451s<br />
user 0m1.010s<br />
sys 0m2.750s<br />
[root@localhost test]# time ./test_arm.sh<br />
<br />
real 0m16.473s<br />
user 0m1.190s<br />
sys 0m2.580s<br />
[root@localhost test]# time ./test_arm.sh<br />
<br />
real 0m16.519s<br />
user 0m1.030s<br />
sys 0m2.800s<br />
[root@localhost test]# time ./test_arm.sh<br />
<br />
real 0m16.432s<br />
user 0m1.000s<br />
sys 0m2.780s<br />
[root@localhost test]# time ./test_arm.sh1<br />
<br />
real 0m16.441s<br />
user 0m1.010s<br />
sys 0m2.760s<br />
<b><span style="color: red;"><br />C:<br />(.98+.96+1.08+1.03)/4 = 1.0125 s<br /><br />assembly:<br />(1.03+1.01+1.03+1.01)/4 = 1.02 s</span></b><br />
<br />
We can see the performances between 2 types of rotation are almost the same. The C codes don't have to be converted to assembly codes.<br />
<br />
Conclusion:<br />
Build:<br />
building the fossil on aarch64 you need to replace the latest <span style="color: red;">config.guess </span>file,<br />
the link is <br />
<br />
<a href="http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD">http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD </a><br />
<br />
Optimization:<br />
According to the testing result, we can see the performance doesn't show significant improvement after changing the code to assembly, so modification is not necessary.Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-69784658776278547532014-04-04T05:33:00.001-07:002014-04-04T05:37:09.428-07:00<h2 style="text-align: center;">
Learning Porting to Aarch64: Fossil(3)</h2>
<h2 style="text-align: center;">
</h2>
<div style="text-align: left;">
I do some search for the potential optimization by adding rotate function for arm machine.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
#define SHA_ROT(op, x, k) \<br />
({ unsigned int y; asm(op " %1,%0" : "=r" (y) : "I" (k), "0" (x)); y; })<br />
#define rol(x,k) SHA_ROT("roll", x, k)<br />
#define ror(x,k) SHA_ROT("rorl", x, k)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
in aarch64 command, it the rotate function is </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
ROR Wd, Wm, #uimm<br />
Rotate Right (immediate): alias for EXTR Wd,Wm,Wm,#uimm.<br />
ROR Xd, Xm, #uimm<br />
Rotate Right (extended immediate): alias for EXTR Xd,Xm,Xm,#uimm.</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
I try do test in x86_64 first.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
#include<stdio.h><br />
#include<stdlib.h><br />
#include <sys/types.h><br />
<br />
<br />
#define INT_BITS 32<br />
#define TESTNUM 16</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
//under aarch64 original code,using C <br />
//#define SHA_ROT(x,l,r) ((x) << (l) | (x) >> (r))<br />
//#define rol(x,k) SHA_ROT(x,k,32-(k))<br />
//#define ror(x,k) SHA_ROT(x,32-(k),k)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
//under X86_64 original code <br />
#define SHA_ROT(op, x, k) \<br />
({ unsigned int y; asm(op " %1,%0" : "=r" (y) : "I" (k), "0" (x)); y; })<br />
#define rol(x,k) SHA_ROT("roll", x, k)<br />
#define ror(x,k) SHA_ROT("rorl", x, k)<br />
<br />
char * bit_representation(unsigned int num) {<br />
char * bit_string = (char *)malloc(sizeof(char)*sizeof(unsigned int)*8+1);<br />
unsigned int i=1, j;<br />
for(i=i<<(sizeof(unsigned int)*8-1), j=0; i>0; i=i>>1, j++) {<br />
if(num&i) {<br />
*(bit_string+j)='1';<br />
} else {<br />
*(bit_string+j)='0';<br />
}<br />
}<br />
*(bit_string+j)='&#92&#48';<br />
return bit_string;<br />
}<br />
<br />
/* Driver program to test above functions */<br />
int main()<br />
{<br />
<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
display = rol(TESTNUM, 2);<br />
<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
display = ror(TESTNUM, 2);<br />
<br />
} </div>
<div style="text-align: left;">
I run this test program for 20000 times and record the time.<br />
<br />5 times, get 3 times in the middle. calculate average,<br />
</div>
<div style="text-align: left;">
<span style="color: blue;"><b>under x86_64:</b></span></div>
<div style="text-align: left;">
<br />
real 0m7.057s<br />
user 0m0.546s<br />
sys 0m0.918s<br />
<br />
real 0m7.065s<br />
user 0m0.499s<br />
sys 0m0.959s<br />
<br />
real 0m7.049s<br />
user 0m0.534s<br />
sys 0m0.906s</div>
<div style="text-align: left;">
<br />
real 0m7.101s<br />
user 0m0.486s<br />
sys 0m0.986s</div>
<div style="text-align: left;">
<br />
real 0m7.069s<br />
user 0m0.486s<br />
sys 0m0.983s<br />
</div>
<div style="text-align: left;">
<span style="color: blue;"><b>under C code:</b></span></div>
<div style="text-align: left;">
<br />
real 0m7.073s<br />
user 0m0.569s<br />
sys 0m0.857s<br />
<br />
real 0m7.008s<br />
user 0m0.549s<br />
sys 0m0.856s<br />
<br />
real 0m7.065s<br />
user 0m0.528s<br />
sys 0m0.897s<br />
<br />
real 0m7.001s<br />
user 0m0.568s<br />
sys 0m0.833s<br />
<br />
real 0m7.044s<br />
user 0m0.549s<br />
sys 0m0.862s</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
result:</div>
<div style="text-align: left;">
X86_64 asm: </div>
<div style="text-align: left;">
user: (0.499<complete id="goog_308530598">+</complete>0.534<complete id="goog_308530601">+</complete>0.486)/3=0.50633 S</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
C :</div>
<div style="text-align: left;">
user: (0.549+0.528+0.568)/3=0.54833 S</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
under x86_64,</div>
<div style="text-align: left;">
assembly rotation will be 7.66% faster than C function rotation.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I will try to create the assembly code for rotating under arrch64.</div>
<div style="text-align: left;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-36558951207710655712014-04-04T02:55:00.002-07:002014-04-04T02:55:48.847-07:00Learning Porting to Aarch64: cxxtools(2)<h2 style="text-align: center;">
Learning Porting to Aarch64: cxxtools(2)</h2>
<h2 style="text-align: center;">
</h2>
<div style="text-align: left;">
Today I take a look at the cxxtools, which is a set of libraries including a lot of functionality. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
First of all download and prep, get everything in the rpmbuild directory.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Taking a look at the source code, we can find it has a separate file to code the assembly for arm.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Looks like everything is there?</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
When I build the project, it throws a lot of warnings:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../src -I../include -I../include -Wno-long-long -Wall -pedantic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches -fno-stack-protector -c -o csvformatter.lo csvformatter.cpp<br />libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../src -I../include -I../include -Wno-long-long -Wall -pedantic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches -fno-stack-protector -c csvformatter.cpp -fPIC -DPIC -o .libs/csvformatter.o<br />In file included from ../include/cxxtools/string.h:34:0,<br /> from ../include/cxxtools/formatter.h:32,<br /> from ../include/cxxtools/csvformatter.h:32,<br /> from csvformatter.cpp:29:<br />../include/cxxtools/char.h: In function 'bool cxxtools::operator==(const cxxtools::Char&, wchar_t)':<br />../include/cxxtools/char.h:143:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br /> { return a.value() == b; }<br /> ^<br />../include/cxxtools/char.h: In function 'bool cxxtools::operator==(wchar_t, const cxxtools::Char&)':<br />../include/cxxtools/char.h:145:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br /> { return a == b.value(); }<br /> ^<br />../include/cxxtools/char.h: In function 'bool cxxtools::operator!=(const cxxtools::Char&, wchar_t)':<br />../include/cxxtools/char.h:156:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br /> { return a.value() != b; }<br /> ^<br />../include/cxxtools/char.h: In function 'bool cxxtools::operator!=(wchar_t, const cxxtools::Char&)':<br />../include/cxxtools/char.h:158:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br /> { return a != b.value(); }<br /> ^<br />../include/cxxtools/char.h: In function 'bool cxxtools::operator<(const cxxtools::Char&, wchar_t)':<br />../include/cxxtools/char.h:169:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]<br /> { return a.value() < b; }<br /> ^<br />../include/cxxtools/char.h: In function 'bool cxxtools::operator<(wchar_t, const cxxtools::Char&)':<br />..<b><span style="color: red;">/include/cxxtools/char.h</span></b>:171:34: <span style="color: red;"><b>warning: comparison between signed and unsigned integer expressions</b></span> [-Wsign-compare]<br /> { return a < b.value(); }<br /> ^</div>
<div style="text-align: left;">
......</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
And then stuck.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I was thinking about how to fix this, until I take a look at their latest patch:</div>
<div style="text-align: left;">
.... </div>
<div style="text-align: left;">
- else if (ch == L'\n' || ch == L'\r')<br />+ else if ( (int) ch == (int) L'\n' || (int) ch == (int) L'\r')<br /> {<br /> log_debug("title=\"" << _titles.back() << '"');<br /> _noColumns = 1;<br />- _state = (ch == L'\r' ? state_cr : state_rowstart);<br />+ _state = ( (int) ch == (int) L'\r' ? state_cr : state_rowstart);<br /> }<br />- else if (ch == L'\'' || ch == L'"')<br />+ else if ( (int) ch == (int) L'\'' || (int) ch == (int) L'"')</div>
<div style="text-align: left;">
.....</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
They fixed similar issue by force casting the variables to int and make the comparison safe.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I will do same thing for the char.h and try building again.</div>
<div style="text-align: left;">
</div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-48631375999207871822014-04-03T01:13:00.003-07:002014-04-08T05:21:24.061-07:00Learning Porting to Aarch64: Fossil(2) <h2 style="text-align: center;">
Learning Porting to Aarch64: fossil</h2>
<h2 style="text-align: center;">
</h2>
<div style="text-align: left;">
These days I am learning about porting software to Aarch64, and Fossil is the one can not be built in aarch64 architecture environment.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Fossil is a distributed version control
like Git and Mercurial. Fossil also supports distributed bug tracking,
distributed wiki, and a distributed blog mechanism all in a single
integrated package.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I use Foundation model as the virtual aarch64 environment and rpmbuild tools to build the software. OS is fedora 19.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
1. Install all the needed tools for rpmbuild, </div>
<ul>
<li> "Fedora Packager"</li>
<li> rpmdevtools
</li>
<li> rpmlint
</li>
<li> yum-utils
</li>
</ul>
<div style="text-align: left;">
2. Download source</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
fedpkg clone -a fossil</div>
<div style="text-align: left;">
cd fossil</div>
<div style="text-align: left;">
fedpkg srpm</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
3. check dependencies</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
yum-builddep *.rpm (under the fossil directory)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
4. preparation for rpmbuild</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
rpm -i *.rpm (same directory as above)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
5. build it!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
cd ~/rpmbuild/SPECS/<br />
rpmbuild -ba fossil.spec</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Issue: build error because the autosetup's <b><span style="color: red;">config.guess</span> </b>file can not recognize the aarch 64 machine. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Then I check the config.guess and find that file's last modified date is 2010-09-24. I go to the internet and find that the lastest version is made on 2014-03-23, I check the script and find that it support aarch 64.<br />
This the link:<br />
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD </div>
<div style="text-align: left;">
Then I replace the config.guess file and build again.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Building successfully:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Wrote: /root/rpmbuild/SRPMS/fossil-1.28-1.20140127173344.fc19.src.rpm<br />
Wrote: /root/rpmbuild/RPMS/aarch64/fossil-1.28-1.20140127173344.fc19.aarch64.rpm<br />
Wrote: /root/rpmbuild/RPMS/aarch64/fossil-doc-1.28-1.20140127173344.fc19.aarch64.rpm<br />
Wrote: /root/rpmbuild/RPMS/aarch64/fossil-debuginfo-1.28-1.20140127173344.fc19.aarch64.rpm<br />
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.NTvRE9<br />
+ umask 022<br />
+ cd /root/rpmbuild/BUILD<br />
+ cd fossil-src-20140127173344<br />
+ /usr/bin/rm -fr /root/rpmbuild/BUILDROOT/fossil-1.28-1.20140127173344.fc19.aarch64<br />
+ exit 0</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Then it is time to take a look at the assembly code in the file to see if I can do something.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
only one line:</div>
<div style="text-align: left;">
<br /></div>
#define SHA_ROT(op, x, k) \<br />
<span style="color: red;"> ({ unsigned int y; asm(op " %1,%0" : "=r" (y) : "I" (k), "0" (x)); y; })</span><br />
#define rol(x,k) SHA_ROT("roll", x, k)<br />
#define ror(x,k) SHA_ROT("rorl", x, k)<br />
<br />
#else<br />
/* Generic C equivalent */<br />
#define SHA_ROT(x,l,r) ((x) << (l) | (x) >> (r))<br />
#define rol(x,k) SHA_ROT(x,k,32-(k))<br />
#define ror(x,k) SHA_ROT(x,32-(k),k)<br />
#endif<br />
<br />
<br />
#define blk0le(i) (block[i] = (ror(block[i],8)&0xFF00FF00) \<br />
|(rol(block[i],8)&0x00FF00FF))<br />
#define blk0be(i) block[i]<br />
#define blk(i) (block[i&15] = rol(block[(i+13)&15]^block[(i+8)&15] \<br />
^block[(i+2)&15]^block[i&15],1))<br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="hps">Obviously, it doesn't optimize for aarch64, so in aarch64 it will generate C code "</span></span><span class="short_text" id="result_box" lang="en"><span class="hps">((x) << (l) | (x) >> (r))" for this part.</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="hps">In aarch64 it only support ror(rotate right), no rol. We can try right a rotate asm code for aarch 64 and try running and compare to the c code part to see which is faster.</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="hps">Hua </span></span><br />
<br />
<pre></pre>
<div style="text-align: left;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-41440465604473720962014-03-13T04:49:00.001-07:002014-03-13T04:49:23.081-07:00<div class="separator" style="clear: both; text-align: center;">
<i></i></div>
<h2 style="text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><i>about fossil(1)</i></h2>
<div style="text-align: left;">
fossil is another software I am studying on. This is a distributed version control system, bug tracking system and wiki software server for use in software development. It is like the Git. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
For now I just want to build it on my x86_64 machine first.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
after downloading it and generate source code, I take a look at the whold directory.</div>
<div class="separator" style="clear: both; text-align: center;">
<img alt="" src="data:image/png;base64,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" /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"></a></div>
configure file again! That makes life easy! But let me take a look at the BUILD.txt.<br />
nothing special, lets begin building.<br />
<br />
mkdir build<br /> cd build<br /> ../configure<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupBnbo7AYKq5uTk_Y-0PaJU7p-463yipqy2VepFEknP5iWnUaK7vn29OZpJTNAcNkbLuqP1NNxWDANNeox4Z8dAq9KnpDsLvQouGv-lKy-hGNNZoKX-k41DUBfhttuh4MATul-whnnyQ/s1600/S3KD3SCGD~4%25U%7DGW4U%7BXPKM.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupBnbo7AYKq5uTk_Y-0PaJU7p-463yipqy2VepFEknP5iWnUaK7vn29OZpJTNAcNkbLuqP1NNxWDANNeox4Z8dAq9KnpDsLvQouGv-lKy-hGNNZoKX-k41DUBfhttuh4MATul-whnnyQ/s1600/S3KD3SCGD~4%25U%7DGW4U%7BXPKM.jpg" height="310" width="320" /></a></div>
<br /> then make, but I got error because of the sqlite3.c missing. <br />
<img alt="" src="data:image/png;base64,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" /><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>I check the official website and say it is included in the src, but I don't see it. So I just download another one.<br />
<br />
<br />
<br />
<br />
<br />
Now it is built.<br />
<img alt="" height="208" src="data:image/png;base64,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" width="640" /><br />
<br />
fossil study(1) is done.<br />
<br />
Hua <br />
<div style="text-align: left;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-53016953986918409522014-03-13T04:15:00.002-07:002014-03-13T04:16:39.134-07:00<h2 style="text-align: center;">
<i><span style="font-weight: normal;">about cxxtools(1)</span></i></h2>
<div style="text-align: left;">
This days I spend some time taking a look at the cxxtools library. It is a library written in C++, and provides classes for serialization, unicode text, multi threading, networking, rpc, http client and server, xml, logging and many more. What I will do is trying to build and test this library. And If I port the codes to aarch64, do I need to modify some codes. My environment is Fedora linux and the CPU is X86_64.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
The first step is downloading the source code. the cmd is </div>
<div style="text-align: left;">
<b>fedpkg clone -a cxxtools</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Waiting for finishing downloading, then go to the cxxtools directory, and </div>
<div style="text-align: left;">
<b>fedpkg prep</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Next, go to the cxxtools-2.2.1 directory, and try to find the something about the asembly codes for the first look.(to see if it needs to be modified for porting to arrch64)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a>Under the src directory, I find many cpp file for atomicity functions, and they all codes in asembly language, I think maybe that is what I should focus on.</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTNQCzA9cALQwJ-pIQw7SmjDzNrfbXlDacWjlDfjkjYzOpecgChGnkdmU2MFu95Y6ldRR8LagxmgEd8x8SR1hgytqns8INQCkvE6OvuvwAmGf4zOhTDC1B76wv7A1MAfm9frrws43W9i4/s1600/files+includes+asm+.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTNQCzA9cALQwJ-pIQw7SmjDzNrfbXlDacWjlDfjkjYzOpecgChGnkdmU2MFu95Y6ldRR8LagxmgEd8x8SR1hgytqns8INQCkvE6OvuvwAmGf4zOhTDC1B76wv7A1MAfm9frrws43W9i4/s1600/files+includes+asm+.jpg" /></a></div>
<br /></div>
<div style="text-align: left;">
All the codes using asembly,</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFivjuZMNKBw5vFisoDO_42rhjvaomyK3DoeSKv_Mwp_K5TSOiHtuFVSe0wVT-CVoyFghNwGT38hZdKSOM2hVz7cBva993FbTKjInqcNIlmqp_TdwztJIOVlpS3nje7YTg88dtflenswc/s1600/4%25%7D2XX4MNNR3NICS30%5D$V48.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFivjuZMNKBw5vFisoDO_42rhjvaomyK3DoeSKv_Mwp_K5TSOiHtuFVSe0wVT-CVoyFghNwGT38hZdKSOM2hVz7cBva993FbTKjInqcNIlmqp_TdwztJIOVlpS3nje7YTg88dtflenswc/s1600/4%25%7D2XX4MNNR3NICS30%5D$V48.jpg" height="257" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=1227581554778150897" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZRqUDBoPnxKD975Rxz3KnRBShDHrMvei_-AhRFxpWO22KQhSWd7nZAu0m2H2yEB1fCTeeyiv9Gxcb6OKe-7gMFuHO5vbmLrhgrjMFnYL08KdhFhDknydHXnvA139UuzRjR4xPIatjmRY/s1600/A6M29%7D%5DD6M(N_%60MQX8J%7D$_U.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZRqUDBoPnxKD975Rxz3KnRBShDHrMvei_-AhRFxpWO22KQhSWd7nZAu0m2H2yEB1fCTeeyiv9Gxcb6OKe-7gMFuHO5vbmLrhgrjMFnYL08KdhFhDknydHXnvA139UuzRjR4xPIatjmRY/s1600/A6M29%7D%5DD6M(N_%60MQX8J%7D$_U.jpg" height="311" width="320" /></a></div>
</div>
<div style="text-align: left;">
Leave it for now. I want build it first on the x86_64 machine.<br />
<br />
I red the README file and INSTALL file, and know that this library's author uses the automake and autoconfig for development. He provides configure file which can be used to config and build. Then I run<b> ./configure</b> and then <b>make</b>, and it start to build:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9oqcFscvsKAQIvX1FP9_1CFvIoFJRLMy2TsbWbyPSsAsiWP0bsxEZCuV55xHm1WhO-xTSxWAZQxw9a5grvmRmFL5iqyhnGVV720yudz_sQgJIuhAuIEUFONQKHAJHz9hPIO7FVfgVqiY/s1600/building.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9oqcFscvsKAQIvX1FP9_1CFvIoFJRLMy2TsbWbyPSsAsiWP0bsxEZCuV55xHm1WhO-xTSxWAZQxw9a5grvmRmFL5iqyhnGVV720yudz_sQgJIuhAuIEUFONQKHAJHz9hPIO7FVfgVqiY/s1600/building.jpg" height="144" width="320" /></a></div>
<br /></div>
<div style="text-align: left;">
After 10 min(so long..), it is done. and now I have a built cxxtools on my x86_64 machine.<br />
<br />
I will continue studying about it.<br />
<br />
Hua</div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-28920316056831166922014-03-10T08:47:00.000-07:002014-03-10T08:50:33.092-07:00<h2 style="text-align: center;">
What is the meaning of <span style="color: red;">do{...} while(0)</span></h2>
<div style="text-align: left;">
Sometimes we see some codes in C using this pattern: do{...} while(0). It looks it doesn't do anything else but just simply running everything in the braces. When I saw these codes the first time, I also felt weird. Then I did some research and post it. I hope it can help you.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
This pattern is only used in C or C++’s <b>conditional compilation </b>and when you want to use<b> #define </b>to represent multiple statements. A simple sample is like this:</div>
<div style="text-align: left;">
<b><br /></b></div>
<div style="text-align: left;">
<b>#define function(x) do { a(x); b(x); }while (0)</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
so, we can use it like this:</div>
<div style="text-align: left;">
<b><br /></b></div>
<div style="text-align: left;">
<b>if(some condition){</b></div>
<div style="text-align: left;">
<b> function(x); </b></div>
<div style="text-align: left;">
<b>}</b></div>
<div style="text-align: left;">
<b><br /></b></div>
<div style="text-align: left;">
<b>else </b></div>
<div style="text-align: left;">
<b> blah blah....</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Why we have to use this pattern? When you want to use #define to represent multiple statements, </div>
<div style="text-align: left;">
this statement wouldn't work: </div>
<div style="text-align: left;">
<b>#define function(x) </b><code><b><span class="pln">foo</span><span class="pun">(</span><span class="pln">x</span><span class="pun">);</span><span class="pln"> bar</span><span class="pun">(</span><span class="pln">x</span></b><span class="pun"><b>) </b> //cause syntax error in the if statement</span></code></div>
<div style="text-align: left;">
<code><span class="pun"><br /></span></code></div>
<div style="text-align: left;">
<code><span class="pun">this statement still won't work:</span></code></div>
<div style="text-align: left;">
<b><code></code></b><code><b><span class="com"><b>#</b>define</span><span class="pln"> FOO</span><span class="pun">(</span><span class="pln">x</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> foo</span><span class="pun">(</span><span class="pln">x</span><span class="pun">);</span><span class="pln"> bar</span><span class="pun">(</span><span class="pln">x</span><span class="pun">);</span><span class="pln"> </span></b><span class="pun"><b>} </b>// doesn't work</span></code></div>
<pre class="lang-c prettyprint prettyprinted"><code><span class="pun"></span></code><code><span class="pun"> </span></code></pre>
<pre class="lang-c prettyprint prettyprinted"><code><span class="pun">only in this pattern:</span></code></pre>
<b>#define function(x) do { a(x); b(x); }while (0)</b><br />
<div style="text-align: left;">
It work well in the if statement.<b> </b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
That is my study about this thing. I hope I can help you.<b> </b></div>
<br />
<div style="text-align: left;">
<code><span class="pun">Hua</span></code></div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-72158152034208057512014-02-02T21:10:00.001-08:002014-02-02T21:10:28.052-08:00<h2 style="text-align: center;">
Write a simple program with Assembler language</h2>
<h2 class="firstHeading" id="firstHeading" style="text-align: center;">
Assembler Lab</h2>
<div class="firstHeading" id="firstHeading" style="text-align: left;">
<b>I will write a simple program to show the output below:</b></div>
<div class="firstHeading" id="firstHeading" style="text-align: left;">
<img alt="" src="data:image/png;base64,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" /></div>
<div class="firstHeading" id="firstHeading" style="text-align: left;">
<br /></div>
<div class="firstHeading" id="firstHeading" style="text-align: left;">
<b>1. This is my code for <span style="color: red;">x86_64</span> processor with explanation:</b></div>
<div class="firstHeading" id="firstHeading" style="text-align: left;">
<br /></div>
<div class="firstHeading" id="firstHeading" style="text-align: left;">
<b>.text<br />.globl _start<br />start = 0 /* starting value for the loop index */<br />max = 31 /* loop exits when loop condition is i<max */<br />_start:<br /> mov $start,%r15 /* loop index */<br />loop:<br /> mov $0,%rdx /* assign value 0 to rdx (refresh the rdx) */<br /> mov %r15,%rax /* move the loop index to rax (for later divide operation) */<br /> mov $10,%r10 /* move value 10 to r10 register */<br /> div %r10 /* divide rax by r10 (10), places quotient into rax, */<br /> /* remainder into rdx, rdx must be zero before this step */<br /> mov %rax,%r14 /* move the quotient to r14 */<br /> mov %rdx,%r13 /* move the remainder to r13 */<br /> mov $'0',%r12 /* assign ascii '0' to r12 */<br /> cmp $0,%r14 /* compare the quotient with zero */<br /> je skip /* skip if equal */<br /> add %r12,%r14 /* modify the quotient to become the ascii character, */<br /> /* the character will be put into the msg later */<br /> movq $high,%rsi /* location the quotient will be added into */<br /> movb %r14b,(%rsi) /* move the quotient to msg */<br />skip:<br /> add %r12,%r13 /* modify the remainder to become the ascii character */<br /> movq $low,%rsi /* location the remainder will be added into */<br /> movb %r13b,(%rsi) /* move the remainder to msg */<br /><br /> movq $len,%rdx /* message length */<br /> movq $msg,%rsi /* message location */<br /> movq $1,%rdi /* file descriptor stdout */<br /> movq $1,%rax /* syscall sys_write */<br /> syscall<br /><br /> inc %r15 /* increment index */<br /> cmp $max,%r15 /* see if we're done */<br /> jne loop /* loop if we're not */<br /> mov $0,%rdi /* exit status */<br /> mov $60,%rax /* syscall sys_exit */<br /> syscall<br />.data<br />msg: .ascii "Loop: \n" /* the content of msg */<br />len = . - msg /* length of msg */<br />high = . - 3 /* define variable high */<br />low = . - 2 /* define variable low */</b><br />
<b><br /> </b> <br />
<b>2. I also write codes for <span style="color: red;">aarch64</span> processor:</b><br />
<b><br /> </b> <br />
<b>.text<br />.globl _start<br />_start:<br /> mov x28, 0 /* move 0 to x28, loop index */<br />loop:<br /> mov x27,x28 /* move x28 to x27 for later use */<br /> mov x26,'0' /* move ascii '0' to x26 */<br /> mov x25,10 /* move 10 to x25 for division operation */<br /><br /> udiv x24, x27, x25 /* x27 (loop index) divides by x25 (10), */</b><br />
<b> /* quotient is in the x24 */<br /> msub x23, x24, x25, x27 /* (x27 - x24 * x25) will be stored in x23, */</b><br />
<b> /*which is the remainder of x27 divides by x25 */<br /> adr x20,msg /* get the location of msg */<br /> cmp x24,0 /* compare the quotient with 0 */<br /> beq skip /* go to skip if equal */<br /> add x24, x24, x26 /* add x26 to x24, */</b><br />
<b> /* which make the quotient become ascii value */<br /> strb w24,[x20,6] /* move the quotient ascii value to the msg offset 6 */<br />skip:<br /> add x23, x23, x26 /* make the remainder become ascii value */<br /> strb w23,[x20,7] /* move the remainder ascii value to msg offset 7 */<br /><br /> mov x0, 1 /* file descriptor: 1 is stdout */<br /> adr x1, msg /* message location (memory address) */<br /> mov x2, len /* message length (bytes) */<br /> mov x8, 64 /* write is syscall #64 */<br /> svc 1 /* invoke syscall */<br /><br /> add x28, x28, 1 /* add 1 to loop index */<br /> cmp x28, 31 /* compare index with 31 */<br /> bne loop /* go to loop if not equal */<br /> mov x0, 0 /* status -> 0 */<br /> mov x8, 93 /* exit is syscall #93 */<br /> svc 0 /* invoke syscall */<br /><br />.data<br />msg: .ascii "Loop: \n" /* define msg */<br />len = . - msg /* length of msg */<br /><br /><br /> </b> </div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-21680152277618057592014-01-31T02:48:00.001-08:002014-01-31T02:48:15.790-08:00<h2 style="text-align: center;">
Explain the action how C program works</h2>
1. Write a basic C program which prints a message on the screen, <a class="external text" href="http://en.wikipedia.org/wiki/Hello_world_program" rel="nofollow" title="http://en.wikipedia.org/wiki/Hello_world_program">Hello World!</a>-style -- something like this:
<br />
<pre> </pre>
<pre> #include <stdio.h>
int main() {
printf("Hello World!\n");
}</pre>
<pre> </pre>
2. Compile the program using the GCC compiler. Include these compiler options (refer to the gcc manpage for details):
<br />
<pre>-g # enable debugging information
-O0 # do not optimize (that's a capital letter and then the digit zero)
-fno-builtin # do not use builtin function optimizations
</pre>
<br />
3. The resulting binary is an ELF (Executable and Linkable Format)
file, which contains multiple sections. These sections may contain <a href="http://zenit.senecac.on.ca/wiki/index.php/Machine_Language" title="Machine Language">object code</a>, link tables, <a href="http://zenit.senecac.on.ca/wiki/index.php/Debugger" title="Debugger">debugging</a> <a class="new" href="http://zenit.senecac.on.ca/wiki/index.php?title=Symbols&action=edit&redlink=1" title="Symbols (page does not exist)">symbols</a>,
program data (such as constants and the initial values of variables),
metadata about the program and ELF sections, and comments.
<br />
Examine the binary produced by the previous step using the <i>objdump</i> program. These options may be useful -- see the manpage for <i>objdump</i> for other options:
<br />
<pre>-f # display header information for the entire file
-s # display per-section summary information
-d # disassemble sections containing code
--source # (implies -d) show source code, if available, along with disassembly
</pre>
<br />
4. Try to gain a basic understanding of what the compiled code is doing.
<br />
5. Recompile the code with these changes:
<br />
(1) Add the compiler option <code>-static</code>. Note and explain the change in size, section headers, and the function call.<br />
files' size of compiling originally:<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
the files' size of compiling with -static:<br />
<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
We can see the per-section summary information, disassemble sections and source code for static one are much more than original one.<br />
<pre> </pre>
<pre> The static one include all the libraries in the compiled file, section headers </pre>
<pre>are much bigger than original one. </pre>
<pre>Function call for original:</pre>
<pre><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgQAAAAaCAIAAABHI9MDAAAC0UlEQVR4nO2YUXbrIAxE2f82sxDeR9rUz4xkCRJjhztnPhrVKGgEDE6pjweEEMLFWabPAEII4XRiBhBCCDEDCCGEmAGEcEWW8sPpM7kMo1qUUspGuPKL9pld8E/0bXyNTmhBupIcPzkoqRwezzk4fAHKPo4vj+jXZRskN6z6ig/Nv/2ucTX+kuxK84cvs4ZDRT5FfEm5cwUnqLVOdeK2NAUZS6U5KKN1HJwzfBnKPn7iMN1tWL3jnG34/CiDatrBEk5wjqjC2SPIz3BKaSdwhhkYmjpvG9NlikjUvjxpQSwdmmvaK+HB8O3YjtcvOdzK+fbhN2fZoA22D8sMMmcdWPwXNINWn7ZAGbfktYbvnpfB/UKVf9i1W8v7FieV16N4F/vNwNI3cHTewgz8yYecoPl7t5oTGeycieGRUe8aflvmNkLMDHJ9d2fVaQbygeZj3AwsX7QUC6oUEdwMbt2uNYaj2nVkrGtX4MG848v9eHG4QW3gN6F1JTkQxFUmMVxmSN3NMYMuWn2xVnLKDJz8wSn1mIFzh+iapyNRKlVQpVEziNWuI4GqL85jM2hPug+ZwXQt+kUcPM0/ZAbxEjCDLmb7fo4ZiKtJygysa8S73wxSqT5iBq96HUHkRxmxi70LE/P2z/3BK4l/yZouU1AZK5gwg44XiwdmMIfZW9EJZqBTZV8CZHBsniOned9w2ZFovSkz+IobbY2bwX8XDePXcBnUv1So4P46swlOlymuTzv50PyPBPGSOFc5KX5kuJXz7cNvTn8jvP4lW2n1N9T07MTC21D8y+hmdpJW7Y5uvphyDiGRLXf0N5Gt3mCzLsLbFwDht/ILzpfrlibP/dmyzOXq9UN4TY6/HFyWVyxtgbfYQy5dPIQQwicxAwghhI9SAQAALA/MAAAAAGYAAAAAMwAAAFAxAwAAABUzAAAAUDEDAAAAFTMAAABQMQMAAAC11n/YFBguBool4wAAAABJRU5ErkJggg==" /> </pre>
<pre>function call for -static:</pre>
<pre><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAm4AAAAQCAIAAAAgfWTcAAACiklEQVR4nO2cQXLDIAxFeyTuf6CsO117Jl2043GQEBIYG9uPeYuYIAyS4OOk6dePVpbXCwAAACTv9/v7s3whpQAAAH6QUgAAgC7GSmlKKaWUXW5rSpX/pLSo9bfGcojbM/Ue1k6yZmrlhObPQI2jK7i73M6IkayRjTVzV3qHiNx9Fxf1e3hQ+OBEBkrpX7qsSZNpqlH5wcNyru4Qt2cC5utrtXJC8yehxnHEXpwtWCscxqVpHkjvTTNXS8+QJosamnonZpXS9TipHjN9T7qnO9fjIvngrjtEsvqnMHekdFrSpshK2VjtQe1z6Uj+dilV39pDSgMTaZLSktPU+lLISuZZe7UyNkeYmFFSKsUyIKXbF00r8xJSag++Pn7NOdm6rZjL10jpeAILQbu023Tq6KIuQxmO0i1KJnEpDU+k9ak0U7vqAKTnPUG0p3yJ/Qpshkipf7OoSOmrsM9uTNSD3iUoHV1VNyp0nvqNXS85vmRCSlux91OZySEpNfp3Dmk3KX0pueQcZ8ta7pDSkBudng9JafusYRpGSanUiUFSeroHm6kutnOk1K60zZFSB9G4HyOlysGuX0pFvX+c4cPxlaX0ik8CkDH8xzC2ajZKqWae3XT+1JxaSqveQ0pbCSwE7bLapjPz259KHfoaHWdgLhNLqRrlveIFk3DEj2G2mSRFTq38+Ghou7ZT8W/rs9y9RIIag68LofSP6NPbiVETMg/10Gl+ZeyFsL6lhrIUX2/QQwMzMkSNnSOU0UG2rwVfLlWdaXi+9Fqdacn8gHyDA+BfNADcCnZn3AXHg5QC3If+B9NHgbtgL5BSALgC2Qe50S8COs0BTJBSAACALtxSSqFQKBQKRStSSn8Bgcje8rhFNCQAAAAASUVORK5CYII=" /> </pre>
<pre>we can see the static directly call function from IO, because it includes everything it need.</pre>
<pre> </pre>
<br />
(2) Remove the compiler option <code>-fno-builtin</code>. Note and explain the change in the function call.<br />
original function call: <br />
<img alt="" src="data:image/png;base64,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" /><br />
remove no-builtin:<br />
<br />
<br />
<br />
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdgAAABCCAIAAAB7MVBfAAAGiklEQVR4nO2dW5bcIAxE2f92ZkmzkM7PxMcNQg8wFu6+derDU81DElBmkj5JeQEAAEhFyQ4AAAC+HbsYcSlTkZT/UIY9GlQtywkzMURxnnQ4AKVX+5H+o2eWtnSxcAEAEh52kMSTr9iB6Bo9K7nfVi6Z3Zm+2NI5qVg6f3cAgI4lB0m/e1Z6exn0XF3b7v4LoGl/ZgBKSL3nXqF6z86aiCmcG5stnYk7R6jGAQB4sOq0VF4p6lV7Z3ezr6k7+you1samWKo5e2WaujubKZzHiRrxq195PQVlEACAiYVGbD732ke7LzJiURQvuYrBXWvEnlCVLiEfN4P3twEA6MCIvX0HQjIDuNmIb+gOABjAg43YvHVGfUSP05y6TeERRjwwozL7IWLQAPix9s+IqwNZ3tETe89Ve2XM46NQqHqceqgzs7eNh0tn6koML6vyet9qdr0XAOCMO27EiUgMY5MKeDAcqtjxQYkDsAmWnBnnZeoGpMTQuyN/Hj4+QQDuAQcJAACSgREDAEAyyuv3F0IIYSIxYgghTCZGDCGEycSIIYQwmYNG/PfdrPcfz4opmt3FifanHrCSqcBSXr4qeWYRKz+5xAOzpy/QF7Ite3Q5rj3vf5zY3tH026jSF6UOcqRPKedkqhVSRLEEyqfVRE9hL+CRRKx66rP4e4mDmKvpnH04DDjP1uCiy3HteX/j6AYb8OL0hTAiHOmzbGFMI37EreoIW7xEuFI4LgsY8UN4XtnerVBsuXRLiyO3y9GG17a/8rxPbG8lKTHyNvg9PSQcUFv66MKIhegtv9g9vWpmiaY86Gh2+t3tEiN2Vs+5xP7Zv8GIj9RmbGtRSKE1Mo/h7Hmf297VyM6Mekntw/Eb/uRW08VHH93Y7aCltGvnjXimO0bs4YZG/JKsUDfNNiNP8IFdN729xTjPMMfccBOGjbjNeZERi8V9BJ9uxM4l9s+OEfeeb3BhTxjHs25w15z3ue1tZuFpsOEmHA9IX4NJUSnohkXUA9azE7jAiMescKA7RrybEYv2qqxRL6TLjnZwe4tHXimynqaeYyIHA6oWuLfeM6IyUXrVPJWpQu3pMkt5o1UlvWjR7v4lXjf741gk6LnfVg1x6t6x6oVqZhRY98j27lWpN9FZb5dDXKAduFEoEMIV3MpxopE/N/hYpukRQAihyC9x4RdGDCGE6cSIIYQwmfI/DP/z84OOjo6Ofo8uGPGGUaKjo6N/sF4b8Z5RoqOjo3+wXkR1tyjR0dHRP1gvorpblOjo6OgfrJetokFHR0f/Qr1sFQ06Ojr6F+plq2jQ0dHRv1Dne8To6OjoyTrfI0ZHR0dP1vkeMTo6OnqyzveI0dHR0ZN1vkeMjo6OnqzzPWJ0dHT0ZJ3vEaOjo6Mn63yPGB0dHT1Z5x+GhxDCZGLEEEKYTIwYQgiTiRFDCD+T5T/SI7FDnclQT1gXze6vUv6YXaPLah3cFnXjSEEmt6B/QVd0/waKpVhXn+EDq3QX2+yzvlXAA8txa7TDGR5xiwn3qiCun/BcGVD2ol5Q6Mi2mCzI5JbqHcV7un8PbyvUzIFtuyttQimMe597/FBIujVNBeyJdqTPpUYsZ97xnfQXl79E7SXCWYRzmnJLq4ZnKCH5u/fGvLz70xmqvFgKsdmxGcaqN3Ng2+5KGyUvJU05wfMvf+1z+9thI1bbz6xkm1FvNef3iVCQsUUdXldlU5aqrNLzI05yNHelwkLj6Xe7PwBTXNH9uRwzOL1QxmaIRDV8YD3B+zeYefzfvPho03vuf3p+f4hlNJejl8gKF4oN519Cc2FsUXzvPYHiuzS0U7stfaXobfTom8AUV3R/LvVz21Y+ZMRjNZw8sP63iDNOpUTCs9+If4W/QekZsTMjs+DXbumwEbdHepUR63XfmGZqg0Y8YYWhTYMRjzG67vcY8cyBFbtPxileBS4w4ubTKouB5VBeG5fv5/HhrnrBGkvYFGv/I73EiCOOjBGnMLq9bzBicahLbk6Tcbq6nx90U5Y+nX8vmoW6kIODVm/I9oU5Kza/aJxbrijExWXtXCKc8Zd3vBVEKovRtx+Ss3tvzMu7P5369j4+ClXpktL15jKDbz8y4wyFZOR47PbWi0vnb/BO47fPZoWVmkwugVGNReNCCK/lOhdI56LURM9NT1YONT0CCKHJ+UvxtrwttZ1ruGNMEEL4VcSIIYQwmfX/4gwAAOBmYMQAAJAMjBgAAJKBEQMAQDL+AQ4myZeIBlTfAAAAAElFTkSuQmCC" /><br />
<br />
We can see when remove no-builtin, the function call is optimized and directly call the 'puts' which is the parent of printf when you don't add any parameters.<br />
<br />
(3) Remove the compiler option <code>-g</code>. Note and explain the change in size, section headers, and disassembly output.<br />
original files size:<br />
<img alt="" src="data:image/png;base64,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" /> <br />
<br />
remove -g:<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
We can see when remove the -g, the pre-section info is smaller, because it doesn't include debug information any more.<br />
<br />
(4) Add additional arguments to the <code>printf()</code>
function in your program. Note which register each argument is placed
in. (Tip: Use sequential integer arguments after the first string
argument. Go up to 10 arguments and note the pattern).<br />
<img alt="" src="data:image/png;base64,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" /><br />
We can see the integer arguments is place in the registers one by one together. And they are moved backward. Here we can also find how stack works in the when compiler is working with registers.<br />
<br />
(5) Move the <code>printf()</code> call to a separate function, and call that function from <code>main()</code>. Explain the changes in the object code.<br />
original code:<br />
<br />
<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
When separate function:<br />
<img alt="" src="data:image/png;base64,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" /><br />
<br />
We can see when separate the printf to another function, it will go to the function first, and then call printf.<br />
<br />
(6) Remove <code>-O0</code> and add <code>-O3</code> to the gcc options. Note and explain the difference in the compiled code.<br />
when add -o3 optimization,<br />
<br />
<br />
<br />
<br />
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmsAAAGoCAIAAACWujU0AAAgAElEQVR4nO3dW5KruLYFUPe/b+e7GpANqBO3A3k/dp0sEj1YWjxlD8WICidGIIRgGtc2vP6vUb4VRVEURSnKf/5XXhJUURRFUeJFgiqKoihKpkhQRVEURckUCaooiqIomSJBFUVRFCVTthP0tShl/erEW0qrhf239q/xrh54Ts8riqJ8Zgldg/6crB9+1u407/CWX9YV9/b5zrU/fMAoiqLsKWMJ+v07TatXYNVr1urM/Tk71Zd/lm1rtaq6tMh1ZL+RmyGxp0OqK2qttzpbq0MipbWZrRVVX7eqJ9qjKIryqJJP0M0/l2fSkyYu//tdnL5H21ktrTmDGbBzMzsrCvZ8q0OCpZrT1RVttmo5UYIqivIG5eAE/U5dbvarVy9lWgk61M7WW62KiQQd3aJ+AzrTh1I5Xjr7t7pRm9UVRVHephyfoOVbm+fx/sTOu/sTdPMUvz9ByyrxTohPvzJBW3NKUEVRPqrs/ZdE6fN4buLq3T0J+h37OnFngo5uUe51ZEWRLe3v385njtamtVolWRVFeYOS/zVL9du8+MzVOSPVy6VVS7+dP29F+mhoma26/S1qrag6fXNLyz/jTR3d/FXFzpZurkhRFGWu8tF3VHAeVxRFUdLlQxM0eAWpKIqiKK3yoQmqKIqiKDuLBFUURVGUTJGgiqIoipIpElRRFEVRMkWCKoqiKEqmSFBFURRFyRQJqiiKoiiZIkEVRVEUJVMkqKIoiqJkigRVFEVRlEyRoIqiKIqSKRJUURRFUTJFgiqKoihKpkhQRVEURckUCaooiqIomSJBFUVRFCVTJKiiKIqiZIoEVRRFUZRMCSTo1xcA8IsEBYAMCQoAGRIUADIGEvT1+sey/tQTl28dVT2+zJNcsxYAogm6yoPVixknLv88qnp8mX2nxu1lWQ7w3iTokdXjy+xoXbxuXha3pixf9FsiXAHiPjpByxl2Vo8vs6r1hfDqv/1lVoN2861OAwCo+twEvT2/V1pvVRP0a3HFuZmg/VWITICcj07QlUOqB5dZddI1aOct8QmQ9rkJunRU9fgyO6oReHiCttosUwGC/Jpl/dbO6vFldnQualsXwf0p1Xc76wVgkzsqAECGBAWADAkKABkSFAAyJCgAZEhQAMiQoACQIUEBIGMsQVd3xllOzBn9Cf+9P/mv3jnhgq0G4IEOSNCdRpd2dmD3Zzhq28vliFWAuYzd1e/r96m/vEXc6h5yyzW1bilXrV4uYbnkTgM6WqHVv1Vea+2tVQeb1Oml28cEABEDd5aPROBXkYLlPJvVy9fVWO0sc6UVdZuvO2uPN36zSZ0OBOCxvr//+78yfg26nF79sxUSe6pvXi/2l796K3IVuDP+N1tVnVOIAjxcNEGHrkHL1yclaHAjN6/qgteg/dZuLie+TPEJ8Hw3XIMGQ2jzC9vRmAmmXfl6f4L2P3bEcxeA5xi4Bv1qXC0tL0xbr8s/q9WX07+KEC1njnyLWzZ4s26kqf3G9y8rI8sB4OF2JSgAfKyBb3EBgB8SFAAyJCgAZEQS9O+/vwGAJQkKABkSFAAyJCgAZEhQAMiQoACQIUEBIEOCAkCGBAWADAkKABkSFAAyJCgAZEhQAMiQoACQIUEBIEOCAkCGJ2wDQIoEBYAMCQoAGRIUADLGEvT1urOtQ2tfzTza8nu3FIDnO+Ua9AnxsydBn9B+AB4umqCv1z9+av78WZ1ezr+ynKFMu9YyN9f+8251jcFOkaAAbNr1Le4yvVbxFln3Mj4jywmuvdUACQrAgfYm6ObrjmqCfv2+im2trr9GCQrA2R6XoEPXoME5E60CgL7TE7T/v0K/npegQ3MC8LGG/yXR6p/wlK//iP9LovI728664muvrjHYKRIUgE1ve0eFyFVpsC4AlCRoqDoArLxtggLAqSQoAGRIUADIkKAAkCFBASBDggJAxkwJuvMXJq2bPPQf+dK/dUNrLZGJo22OrD3epNZb6V8BlV13yF4DeKyZEjRo9IZE1dP9nlv+7rwjUqR5h/RJ9a3+J4zIKnb+EhdgFrclaOeSpZzeumtgq/rmbQKX81f/jCRo5KK2MzF4TRlfe6tPOmvv9ECni/rXmvEOEa7A1O68Bl2FXHX6av5g9c26m9PLFZWp3GlYpPHBNixzLhLwQ2sPZm1wx/U3obMQgBndnKCbr1vzj1bfmaDl6/h17VDjWxXjCbqn6w5vfHwegOlI0GQ7OxWnTtALqgO8hzdP0M3Ak6DBeBtdY6RDJCswtfv/P+ir9s9hXsX/dFxNbL1ezd9Z5s9bwUb2FzvU+Goj+20om5ruus3pnTZs9ny/7mrtJ40rgGs85Rr0Rg9pxsOleylyRQ4wo5t/zfKEM+kT2vDGdC/wrt7wjgoAcAEJCgAZEhQAMiQoAGRIUADIkKAAkHFigkZuIND5TUt1evqmBI/Sb/PQRu25S0Nnd9y79tt30AdqHWvx3ZE+3jujbudNSIY2v2zV7TuF5zsrQVe30ane9aZzK5zWXXiC1Z9v89Y/iUXFO6Q159Da07tjdDBwtv6tqeKJlTveg6NltEoiRG/fEUznDRN0iuuYn22pfsSObMLPPBJ0Fss92784W8156pCuLrncHWXzyvkPTNA9w7u/zGrPr1Y0xTmEJzglQctBnzui+hNnT9A94VE9lx2SoMHei++O4No/IUF/Nm3n58szmjS0j6rxmd6ictTtHN6rJQe3qLVR0HF8giay8MCJsxj6PL6nk4fWvqe6BI14YIJ+dTOsfN1Jmp1bdFSHVD8I/kwMpvIbD0IOdEqCloN16DCrVg8ucxazJ+ie3XF7YNwonqDlbKc2abMZP6/7yTR6vMdbctRhEpzhjQchBzr31yxHfSaNL/OrdpA/0AMTNJdh9659Os9M0GoudvZRq0mJ433nxOUmdLq61WYJyk6n/5plOYI7H2A3q48u8/aejfTMqqmt6fGFBOsmdkd6F5+39umsdlmk6y7rjeqqyxaWr/vzR3Zxf+KeXuoss7OiocOQD+eOCsDEUSHnuJEEBSYmPrmRBAWADAkKABkSFAAyJCgAZEhQAMiQoACQ8SbPB53xX7SfcTuIeXuDG9143waY2sRPNytnmMjmth+7TGipHmtTrwgu84YJOt1FWC5Bq/c8G10IV+rcGK91t7lyzpMa1mpt/0ujzhbduyK4xsTPB/2a9r64/aZGGj/6iYSHiA/+r8tH8uansf7EeFMvWxGcbeLng7ZWOp3ENehmJ0zdIe+t+plv8/XZ7WldAraulRNJf9mK4DITPx90tdLbuzJNgn6UpyVofNVHXStftiI4m+eD3qOz7aMJGu9PbhcZvdXX1zSs/03p6JernQ+7x64I7uL5oLfpf3O1uQmj/cntyqG7eis9GI5qXtnafqs6W1Qu8LwVwV3cUQE4npzjE0hQ4Hjik08gQQEgQ4ICQIYEBYAMCQoAGRIUADIkKMA2P7amNPHzQa//yfkFDtmc4BJ23pPh3upTe+YGHnvAdo7fW24QkeuN5dkmvuRPGMP8MfHTzYbG9BQO2aJq1/XXlVjpvdU53HkHbPXP4L6+IIqCQ3G08f0lXLNpXGDiBC3f+nk9xdAsP48nPudWrxI2q1cv3+PX9PdWn1pnw7++1hO/aoO589bOhn2dc8BW/xwNodZWV6dXj6xO9chQ7Oya6o6o7rX+Ic+M5n4+aHXKFKfg0TNUpHq/l/qdFqz1kOpvoNxrrRD9ahxQh8dn9cXmxNYM/T8jn7E6E6vp2OnhfvXNukP7qL+E4MYyi3d4PuiM46/zmbSc2O/kfs+nl/Dk6m8gkqDlzGdcvpx3bOYStJM0Q4sKrn1ngga3fXN/fdTgfyfv8HzQGQdfLuH67/Z7KbiEPe2XoHGPStDDD9hqC+ONr47eJyToqm2HJOjmocqTTfx80NY8U4zInR9Ic1032rePrf4GnpOg1VYdcsCmE3So+oEJWt3S4PYOJWhnRcxl7ueDfk2boMtt6XdRsHuDb5Wrbl1MBFt+ffX30Nrwn81v9cZ5vXTgAdvam6Mtb42Qam90xlLrdX/DVxP7+67fpFYXXTzqOJw7KsANNs+e+2d4M7dvbzUsb+8W7iVB4TrBi7D4twi3b9Gj+u3Dm8T1JCgAZEhQAMiIJOjff38DAEsSFAAyJCgAZEhQAMiQoACQIUEBIEOCAkCGBAWADAkKABkSFAAyJCgAZEhQAMiQoACQIUEBIEOCAkCGBAWADE/YBoAUCQoAGRIUADIkKABkxBP09b+yrD/1xOVbR1XvTATgrQQTdJUxqxczTlz+eVT1zsQh6QDeGdvVzw17FgjwziTogdWbE1+vf23tkmBovRalnNK/qv75M1i9tfZIOwHe1icnaDnDzur1iasobe+MeCxtNikyZ3/mfsMkKMDnJuh1UT0eisH5q8HWmTNyZXlgCwHe3Ccn6KocUr2cGEzQn+qju7Cfi613hxI01zCAN/exCbp0VPX6xPC3uJ2ldebpv04naHXzl+/KVODT+TXL6q2d1esTX9F/RrSsvjlDdbZy+ut3qU6pVu80Y7OFAO/PHRUAIEOCAkCGBH2yV63c3ioAvr8kKADkSFAAyJCgAJAhQQEgQ4ICQMZ5Cdr6XX85T+dOBZGJk+p0yCFLvn0DmUVktBw1Mq9ZEVzkpAT9uanN8s/V6+rEavXOxEltbvuBy4eO+GG1c1BdtiK4ztwJ+qo8d3O6z7C5BO1fws7VAx9iub82v6FZ7sqz92bnS6DyIK1uRbCRl60ILnJGgpYZOZSg0VqNO7ZPdIxVmzp6Jqr29iw98Gnig//78v24Sqxqm/uDbejD3wUrgtMdnqCZLMxl7bscRavTQTBBl6XXSzxMmYuRND27PWWTggMs3uDLVgTXOSNBy6NiKCyr1StH2rscRbkE7U90inmspyVofNVHBdtlK4LTnfprlp0fKjcmzvwtbmfbJegb2xz8d+3E1SfdQ4KteiSesSK4zdm/ZikvLjvzbL61nviqPHdzigStbmDlOjtQPb0ELlYeDqu37t2VrWPtJ/M2h1x/geetCG7jjgpAWicmj406wckTSVAgp3NReHh8uvrkiSQoAGRIUADIkKAAkCFBASBDggJAhgQFgAzPB71XpJc6FeP9GV/77X3CxUZ3enqcjI5Mo5Gnm/vpZpOL9FKnYrw/g4t6s+4lIndYJcZJfEW5kQw3mDtBZ76rX7CXOhXj/VldQqeTOcPyuqr/5cFqzrOHdLnw1dqr01fvRhoZXJEEZRqeD3qXYC91qpdnt2D1zllviq6b1yp+yj6/MUVaYVltW3/0HrWiy7YdkuZ+PujS7V25u5e+F7kYjMBjq5d/cqwHJmhrwPSn9CNw54q+wyMZbub5oLeob9HvGfrV+3NK0GeKJ2g52zVta/3Zb+dQI4eGnAHJo73J80F/zzDXUTcan5tdt6f6XF03nccmaOeTbqdtra34mdJayOaxv/kWPMKbPB90xyfiey23qNMbkf7JVS/XPlcHTuRVK/19d+WOqI6l1hhrbUKk8ZsrMgiZhjsqAIcTgXwECQocTnzyESQoAGRIUADIkKAAkCFBASBDggJAhgQFgIxZng9a/7H/hHfE3dgiuNz+EWgM86FmebpZ8xCd9tB10uEJymMNiHq/BJ3lqq5z5T1F+xn1s2c3v4zpzHlSw4JNLb84MWL5aBM9H7R+oM6coOXpqfqat7HKntWL1cTqDNe0rfyz1c4rWwiPM8XzQVvL//6a+Fvc6raXn/F5JwceCAc2qTreWkdffGZ4f1M8H3S1/F9T5j90L77U4EYPTNDWWvordQ0K31+TPB+0N+ec3+Judghv6bEJ2vmk22/8ZS2EJ5rl+aCVOV+vqZ8P2u+QKTaBUa39W068fiS01l4eg5tzwqdwRwW4TDxjpBFMQILCNeIXai7pYA4SFAAyJCgAZEhQAMiQoACQIUEBIEOCAkDGLM8Hrd48oTJlNpFe6lSM92e8MX5E8WluuWlDcH6jkUeb5elmlZjsvzuDSC91Ksb7M96YdHUmVTnWnrQiQ5FHmzhBlya8q1+wlzoV4/1ZXUKno2bpwLks+7z/5cFqzrOHdLnw1drLdq7eDbZwdEXfi2Nk1Tm37034/prn+aC9L2xrJ6P7e3a8l75HTpflnDsDOFiXPVap0NkdQ5+HjmpbNcOqzajmWbCd8RVVF2588iDTPR90HaJzHk47T5qd4Ixk8Ot3aS2Zwz0wQVsDprrSnZ/bgivqD+/bdyL8a7rng77B//4c6qVW9f6c8erxWuwXT9Bytmva1vqzNXMi6TdXJEGZxhTPB62nZiNKpzvMEiej/pybm78ZunN14EQem6CRz3CjR3HninPPigxOHmSW54P2fsrymvL5oPFeilQcqrucuVz1XB04kVetrN4qq1zZvFZTy4nVOYON31xRpK9u35vw/eWOCsAOnZiUc7w/CQrkdL6xEJ98BAkKABkSFAAyJCgAZEhQAMiQoACQIUEBIONNng867T+dj/RSp2K8P9NNijfgkLWT2x3711Jdb3DV8dFoYu6QcVg91NxPN5t8VEV6qVMx3p/pJkUacODaCfb24csvz+zxtVdnMHFz4ujx7rB6ovdL0OBnuic4NkFbM7SWUO2oyLH6+l1GG//hyn776fPqJcvZ/bk5fsrmla+rG2Xi5sT+Xujvpp9FLZe5Wld/gHGAuZ8PWps4y0Bp9UOw/a05I9XHen5rCf1lstlL1bNq9d2zm7TZzmqVzSWYWJ2YOGSqYRnZcfFDmzHTPx+0M/HBktverd6aofru6oPq0NqrM0jQoGDPX9mf5aexzuv+rjcxPnHoeB/q+eDe5ABzPx+0P/HB4r3Uqt6fM16936T4EhylEUMHwjX9ublGCXrSxMQuXs0WPEgdmyfyfNDbJQb6znPuZv8kZnCURjwzQctDpt+kyHncxM2JnV3c+aTSHxj3jqVPNPHzQRsT50rQSC9FKqarVw/C/kJev0ti7Z/s1ShlB7b6+aRWtdq5/LP1OtJyE1cTy07u7I5y+uaKqnOePbw/jjsqAM6tz3F41Nm5J5KgAM9xeHy6+jyRBAWADAkKABkSFAAyJCgAZEhQAMiQoACQ8SbPB729H7P9E/yFNZw3MIw3SJr46Wb9dx+vfyMSJzVKZ4yKyrEGBL1fgs5yDSdBP83PyCxvw1a+/vlzNUM52yENizR12aTNxsNHmPj5oPMnaHl6qr7mbZRx+D1ydFSrn9G28s/NdhqxfKK5nw9a/Z+jsxnYdiY3+lHygs9Y5Vo6yy8vi79rWQufwvNBbydBP0fuU+M1I6RzxdlfuwTlc038fNDGlCmO5+T1N5Pb/CJ07zc0+xrWX/5m42/vXrjaxM8HbXx/O0WCJjqEN9D6cuVnyupF6wg6Y5yUl5XlWl61stoE+CDuqACXkTHwViQoXMMXDPBuJCgAZEhQAMiQoACQIUEBIEOCAkCGBAWAjLmfDzqz1o/rK9sOZ44Kgw2SJn662eRap63KtsPX1/c5o8J4g7y5E7R2VTrLBZwE/TSre/KtJn4XQ7d657xytkMaFmlq2aTWbPApPB/0LtWvcOvbzrso4/B75OioVj+jbeWftzQJns7zQW83sO1MbvSjZJlq1dc7m1T90Fld/jVNgmlM/HzQd/m/pAPbzuRynxqv+YzVueK8q0nwdBM/H3Tmb3EHtp030j8QWt+IXhBXnU+6wcYf3iSYwMTPB/36/S1u7TT0ZAPbzrtofcHwM2X1onUEnTFCVlnYaUBrztu7F67mjgpwmfeLmffbIhggQeEa73et9n5bBGMkKABkSFAAyJCgAJAhQQEgQ4ICQIYEBYCMWZ8POvm9cId6aWhRhyyhN1u75+Or7g+GYOPTXTc6FD9BueGjHZI+3tf7/aABNtTsj93v7DXx083mH/SRXhpd2hXVt25D2K/emnOozemuGx2Kn6BMkdEO2XO8V5Z/xAAbDdoP3O8cYPoELT6xTvSJck+Crj+515Y8VH04QX/3vASNtPmnw8sBv9oXyzlPHdKb42fZjGXzRnfHcIJmB1h1hlV/JpYJFXM/H/Tnz9/VpzgYgr3Ur1udc+j8kkzQoucPSdDgvju86y47ky6TJnd0nNSkoV6qxmd6iyr7fd8AWy259Wdz7RA38fNBV4fc7V25u5e+t64sN3om9m5rhrEELV4fFf+56hJ0Z6vKsGm9bsXn/i36d+LuAdYKy84UIUqG54PeYnMzJehQ171fgpazndqkzWYsOz+3Owb2+74B1ppNgnI8zwe93Wh89rsusu17U+SEBM2dyxLVJWjZpGoudnqp1aTE8V7f9sEBVj3kIx+tJCh7zfp80FflyaDLivf37HgvdXpju38W09PVQw3Y6vlghCfX3p7/4rXv2dfLcsjePKRtke4tXw/tjtDE8QHW6qXl9Gq3X7PfeWfuqADMGyHyjztJUGBe4pM7SVAAyJCgAJAhQQEgQ4ICQIYEBYAMCQoAGdM8H7Q6c+1n13M58Pfdrd+Mpxuz7bV+ekZwCf3BEGxDuutGh+InKDd8tEPSx3tvv+8YYLd3KR9hlqeb1Y+u6ut5RHppdGnp6sMV/8w53vjWnENtTnfd6FD8BGUyjXbInuO9ufx9A+wD9yM3mCJBtw+G4oPq/T17UC916nY+kqerS9DzBs+yw1vXYdU5Tx3Sm+Nn2Yxl80Z3x2UJWp1h1Z9lz0c2E9ameD5oPy0mvS9uqx8i7e+fTfZUj3bdz2yHJmhw3wUHWHztQ2fnPZZJkzs6TmrSUC+1xkz6eK/s9x0DbLXk1p+jmwkVUzwftHfwzDnKd54097zbnyF01ljOc1yC7qkuQXe2qgyb1uuhEBraon8n7h5g1Y9ikSmtzYS6KZ4P2jx4ph3lY5tZq55+tz9DNEFf6wdoXJmgR3Xd9XG1bO3m2stNO69Jm81Ydn5udwzs930DrDVbWau1nHIzoW6K54PW52xE6XSjP3Ee78wZ2fad1X+59SrwqK778ASt5mKnlzrBM9rJ2z0fmLN6yEc+WuU2E/41y/NBK3MWn1KXc97fs8f1UqTicnpivcspAx34u/N3Nn5s1Ud33eja9+zrsp937s1D2hbp3vL10O4Y7vnYAGv10iswvEc3E35xRwVg3qiQc9xJggLzEp/cSYICQIYEBYAMCQoAGRIUADIkKABkSFAAyJjo+aCVp4GWU2YT6aWhRaWXkKleu5dFpO72j+jP7LrRofgJyg0f7ZCdx3t9v+8YYKObXzb19p3CBKZ4utn3V+0WuP13ZxDppdGlXVf9zzzjje/N+XuZZ3Td6FD8BGUyjXbIzuO9vt/3DbBEiN6+I5jPHAna+tBaez3RlcSeBH0tSmvJ51X/t88l6Mju/unw/sXZas5Th/TmAFg2Y9m80d1xWYJWZ1j1Z3V6dV9AzxTPB63e/3b2BG31Q6T9/bPJ2dV/dfiBCdr/wNTtuikS9Gfhe/PmhCYN9VI1PvNbVN3vOwbYcrZqWFbb1noLeqZ4PmgvOMtkncHOk+aed/dXP+X5oK1dfGbXSdCf5Zdh03rdSZrDDu3dA6z6MbQ/RYKSMcXzQbdPr7MN93gvtaqn391f/ZTng9aWeXbXPTlBy9lObdJmM5adn9sdA/t93wBrzSZBOd4UzwfdSNDaIX1/zx7US/0q5ZyRbT/yxHFo41fLvKzrPjxBq7nY6aVWk3Ye7/0Px/1B20rH/kolKHvN8nzQ+E9Z5krQSC9FKi6nJ9Y7Wr26C/Y3vlzmZV0Xr75/Xy/LkbtjX9si3Vu+Htodw/s9NsBavbScXu326vTWnFDhjgrAvFEh57iTBAXmJT65kwQFgAwJCgAZEhQAMiQoAGRIUADIkKAA/OGHsGPmeD7oq3G/t/Cv72eRHr6JWsO/eX9S9U9Q7Yrz+ufIA/bu/dtp5AU9+UzBozI+/6d1YN18TzfrT5zZ0PDtV8/NHF/CvdU/x2UddewBO1q906r0xo4Gxtl77bLqR60614HVz0x3bc4V5kjQpa0EnWWflZ/Hx4Zvcf3902nBD4+rBlQnPrD67Kqb2drwaldUZ4vv/Varvs85YCPVO03a08/Vbq82uzXzZhviI7k1ZdWA4IGwnGFzS4OrXu2s1QzV9nT6rbrYNzTH80F/tK47Z0vQzraH2l/b9tVxGG9Af+IDq89r6EAIdlR51ku36vADdrNKqz37B0Ow64LbHt+bo/2wGUv9tS//229GfNvLZbZ2cbzxU5yWMxblwc8H/RFI0ClUP6yNfWp7rf/H8FB1CXqL/vmlPMsMJWiuD887YHPtPGoYpLtuqAFDe62cec+BUE271oqGtj2dypuNf79j/L+L8uDng/54owTtT9wYarVtl6DPN7rfr0nQMw7Y/rl18zy7fzCkuy636v7Wtd7dcyDsTLv+trd2ZTpBD9mnD3R8glZ7M35A9nZGLE2n2FUSdE/1eY0eCBckaHVROw/YXPX+Zu7p6qGuG0r64Ot0gnYacGqCBtsT/Kzwxof2iQlafiYts606sflWOdur8muWKRJ0uYGrMRdt/+vXL3xWJb7qcgdtLuHe6rOrbmO5+UO9dEjXtda12fjyrc12DjUpvSH9rms1Mt7OTrf399H+BrxqJb6izuvlKjqbGWx8fyvewLnXoMCV3vtsxQWqYXl7qx5LgsKb2LxwgVEGVZ8EBZ6u+qVltVy29nu3/fY9wh8SFAAyJCgAZEhQAMiQoACQIUEBIOP0Oyqs/uz89rZX/bX1fNA5/3Faa/P9c7u31Nmt9jjM6KwEfQXuNVWdWK3+NrfDLbdxs+t4J53dWv0gdXuDgY5JEnRpK0Gn+Djf+XWXBH1jPzt3My/9/g+e75QELTNyKEGrM/xjNWXy++JGuo53shyc1U9O/SnAoxyfoPGwHL0w/f5qf2074bmmf8Z09nxLm9+79KcAj3JKgpZfQA0laO/7q3dPUN/dvTcJCu/k3F+z7LrcLCd2/iz+0e/tPRvvnMS7TCqdoMYDPHVe0zYAAARsSURBVNDpv2YpLy4782y8Vf1Sd87/D9q/1nQN+pZW38qUr4cOEOB27qgAABkSFAAyJCgAZEhQAMiQoACQIUEBIEOCAkCGBAWAjNPvqLD6c/SOCv/8+Wo8H3Tyn5zv+RG9H+C/sYt34hnrMgj5BGcl6M/NVpZ/rl5XJ1ard27gd3sPprU+N4zWjfQn07lsD66PtacuEx5okgRd2nr+1xQXYXviM9GfPMFyZLa+oVntzdbXDNW39jSs1dpqg4PfkRy+THiaUxK0PKcPnfGrM/yje9JZTr+9Zze7qGx8a4s6PRzpT55jaPB3jqMzBnl1ja2137hMeI7jEzR+cs/EwNZ5Zxb7I7CM26k75HNUP/NVZytfn7GLWx/aOh/yblkmPNApCboq34MJWlb/lwRtL2rqDvkcT0vQ/hrL10PrPWOZ8Bzn/pplMyzLidXq/2ifd6Y7II86P0bOUDzH5r7eecjsbFhw7a2Ly2OXCc93+q9ZyovLzjwbb7W/FCon3t6zo/2z2SGR2YLVuUV5OKzeqh4srbcO38utoViusTpuD18mPJ87KsCUnpM3wo+PJUFhJg/8muFRjYErSVAAyJCgAJAhQQEgQ4ICQIYEBYAMCQoAGaffUWH1Z+sX1hvVX43ng5ZT5tHa9uDPFfr9tv0Dg3bXpavHf2gxOhhCjY8Php3Vb3XGT1l27rift9b9eVWHXNT5teHhlzwf7qwEfY3c0Ou7du+SXxOrdybq3q7o4VrbPnRAVtM3VLfddeueD1ePb8XoYAg1Pj4Y5h9Lx561d+64+pQ/r8/vydBwPZAE5bdJEnRp66x3xof0w7U6ZFmGFjJWXYKmq+/b6T/d27/+7sy53T/jrVq9rrakv48qTapO+UnWVYcvp7ReB9rf771WJ7f6uSJy8c0nOSVBy0Nu6KRZneEfqymv5neJt/dssIs6r4cWMly90XWh5UjQrGogtTqktTvOTtDIfok2qRqW8d0R3tJqWOY2s0eC8tvxCRo/P2bOpK0z3WyD+OYE3ReBEjTtkAPhggT9DodQvUm1z2fNvn21/4lDoPHVT8zVLnotSmczeyQov52SoKvyPXjiKKv/S4I2FjJWvRGBvZ4PVA82Q4JGtn3uBG115tBn4h3HQv/QkKAc5dxfs6TPEfWJsTQdOyRu8sAEHViOBM2aJUE3mxFq0p+J/b7t747q/I1h3x9C8c3srEiCsnL6r1nKi8vOPBtvtUZ5bZm39+xo/yynbG5Cdc549VbXbe6USM9HOn90MIQa396ig6sfscc3j47qrhzbxamGff8+gloNKJfQ7Oqyh1+1L2yr71Z3U2MTNnvpVSvVzaysqNV4CfrZ3FEBnmi68/IVDT75I05iRdPtJo4lQeFxDr/KvKbNp6/lsg4Jr2iufcThJCgAZEhQAMiQoACQIUEBIEOCAkDGrwT9S1GUk8u3oijvUn4l6H8VRXle+Y+i3FfuHv7PLdMn6F9//XV3E96z6NiTSq5j7z6FKh9dDj8K3qasEvT/AcHrIebkMbmRAAAAAElFTkSuQmCC" /><br />
<br />
the code goes to the front, and the section info become inline.<br />
<br />
Thats it.<br />
<br />Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-40851187105851031692014-01-17T02:10:00.001-08:002014-01-17T02:10:15.202-08:00<h2 style="text-align: center;">
About Open Source Code Review</h2>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
There are many open source software packages on the internet, and they are under different Licenses. I take a look at 2 of them and discuss something about them.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
1. Bitcoin</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Bitcoin is released under the MIT License. The contents of MIT License is below:</div>
<div style="text-align: left;">
<br /></div>
<div style="margin-left: 50px; text-align: left;">
Permission is hereby granted, free of charge, to any person obtaining a copy<br />
of this software and associated documentation files (the "Software"), to deal<br />
in the Software without restriction, including without limitation the rights<br />
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell<br />
copies of the Software, and to permit persons to whom the Software is<br />
furnished to do so, subject to the following conditions:</div>
<br />
<div style="margin-left: 50px; text-align: left;">
The above copyright notice and this permission notice shall be included in<br />
all copies or substantial portions of the Software.</div>
<div>
<br />
Their code contributing process is that developers work in their own trees, then submit pull requests when they think
their feature or bug fix is ready. If it is a simple/trivial/non-controversial change, then one of the Bitcoin
development team members simply pulls it.If it is a <i>more complicated or potentially controversial</i> change, then the patch
submitter will be asked to start a discussion (if they haven't already) on the
<a href="http://sourceforge.net/mailarchive/forum.php?forum_name=bitcoin-development">mailing list</a>.<br />
The patch will be accepted if there is broad consensus that it is a good thing.
Developers should expect to rework and resubmit patches if the code doesn't
match the project's coding conventions (see <a href="https://github.com/bitcoin/bitcoin/blob/master/doc/coding.md">doc/coding.md</a>) or are
controversial.<br />
The <code>master</code> branch is regularly built and tested, but is not guaranteed to be
completely stable. <a href="https://github.com/bitcoin/bitcoin/tags">Tags</a> are created
regularly to indicate new official, stable release versions of Bitcoin.<br />
<br />
Bitcoin also suggests contributors to create unit test cases which will help the code review period shorter. They review codes very carefully cause this products cant be anything wrong, or it will cause users losing a lot of money. However, it will take long time to apply a patch.<br />
<br />
2. RethinkDB<br />
RethinkDB is an open-source distributed database. It has an intuitive
query language, automatically parallelized queries, and simple
administration. It is released under the terms of the GNU Affero General Public License, version 3.<br />
<br />
The content is in the link: https://github.com/rethinkdb/rethinkdb/blob/next/COPYRIGHT<br />
<br />
You can check out the source code from Github, make a fork and contribute. you need to add the mailing list to communicate with them, or go to IRC to chat with them.<br />
<br />
There are many other open source package based on different Licenses, and code reviewing process is also different.</div>
Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-10964013857145559722013-02-01T12:58:00.001-08:002013-02-01T18:45:48.850-08:00one-line display function solution Thank to Gary's solution giving me idea.<br />
I have tested it. If there is any bug, just tell me.<br />
<br />
This is Gary's link: http://garydeng.tumblr.com/<br />
<br />
<br />
<br />
void Console::display(const char* str, int row, int col, int fieldLen){<br />
<br />
for(setPos(row, col),row=0;fieldLen==0?(str[row] != 0):(row<fieldLen);row<strlen(str)?(putChar(str[row])):(putChar(' ')),row++);<br />
<br />
}Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com2tag:blogger.com,1999:blog-1227581554778150897.post-57630606290132010482013-02-01T10:30:00.000-08:002013-02-01T10:30:11.863-08:00Xmover solution#include "console.h"<br /><br />using namespace cio;<br /><br />int main(){<br /> bool done = false;<br /> int row = console.getRows()/2;<br /> int col = console.getCols()/2;<br /> int key ;<br /> while(!done){<br /> console.setPos(row, col);<br /> console.putChar('X');<br /><b><span style="color: red;"> console.setPos(row, col);</span></b><br /> key = console.getKey();<br /> console.setPos(row, col);<br /> console.putChar('.');<br /> switch(key){<br /> case UP:<br /> if(row > 0 ){<br /> row--;<br /> }<br /> else{<br /> console.alarm();<br /> }<br /> break;<br /> case DOWN:<br /> <b><span style="color: red;"> if((row < console.getRows()-2)||((col != console.getCols()-1)&&(row = console.getRows()-2))){</span></b><br /> row++;<br /> }<br /> else{<br /> console.alarm();<br /> }<br /> break;<br /> case LEFT:<br /> if(col > 0){<br /> col--;<br /> }<br /> else{<br /> console.alarm();<br /> }<br /> break;<br /> case RIGHT:<br /> <b><span style="color: red;"> if((col < console.getCols()-2)||((row != console.getRows()-1)&&(col = console.getCols()-2))){</span></b><br /> col++;<br /> }<br /> else{<br /> console.alarm();<br /> }<br /> break;<br /> case ESCAPE:<br /> done = true;<br /> break;<br /> }<br /> }<br /><br /> return 0;<br />}Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-4105554612257355792013-01-21T10:16:00.001-08:002013-01-21T15:52:14.291-08:00A easy copy cmd I code//copy.c<br />
<br />
#include <stdio.h><br />
#include <stdlib.h><br />
int main(int argc,char * argv[]){<br />
FILE *in, *out;<br />
int c;<br />
if(argc!=3){<br />
printf("U forgot to enter a filename!");<br />
exit(0);<br />
}<br />
if((in=fopen(argv[1],"r"))==NULL){<br />
printf("cannot open infile\n");<br />
exit(0);<br />
}<br />
if((out=fopen(argv[2],"w"))==NULL){<br />
printf("cannot open outfile\n");<br />
exit(0);<br />
}<br />
<br />
while( ( c = fgetc(in) ) != EOF )<br />
{<br />
fputc(c, out);<br />
}<br />
<br />
fclose(in);<br />
fclose(out);<br />
}<br />
<br />
<br />
<br />
<br />
<br />
<br />
-------------------------------------------------------------------------------------------------------------------------<br />
<br />
cc copy.c -o copy<br />
copy fileA fileB<br />
<br />
and you get a new fileB same as fileA.<br />
<br />
PS: In linux, if you copy a executable file using this program,to run the new file u need to give the new file execute permission(chmod)......Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-40048297027831725102013-01-21T09:57:00.000-08:002013-01-21T09:58:52.061-08:00CMD line calculation PGM#include <stdio.h><br />
#include <string.h><br />
#include <stdlib.h><br />
<br />
int valid(char s[]){<br />
int valid = 0;<br />
int cnt = 0;<br />
int i;<br />
for(i = 0;i < strlen(s);i++){<br />
if(s[i] >= '0' && s[i] <= '9'){<br />
valid = 1;<br />
}<br />
else if(s[i] == '.')<br />
cnt++;<br />
else{<br />
valid = 0;<br />
break;<br />
}<br />
}<br />
if(cnt > 1)<br />
valid = 0;<br />
if(valid == 0){<br />
printf("Plz enter valid numbers!\n");<br />
exit(1);<br />
}<br />
return valid;<br />
}<br />
<br />
int main(int argc,char * argv[]){<br />
double num1;<br />
double num2;<br />
if(argc!=3){<br />
printf("Plz enter two numbers!!\n");<br />
exit(0);<br />
}<br />
<br />
if((valid(argv[1])) && (valid(argv[2]))){<br />
sscanf(argv[1],"%lf",&num1);<br />
sscanf(argv[2],"%lf",&num2);<br />
}<br />
<br />
printf("answer: %lf \n",num1+num2);<br />
/* num1-num2<br />
num1*num2<br />
<br />
To get num1/num2 need to validate that the num2 cant not be zero.<br />
*/<br />
return 2;<br />
}Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0tag:blogger.com,1999:blog-1227581554778150897.post-8889271625030486042013-01-14T09:23:00.001-08:002013-01-14T09:23:28.233-08:00OOP344OOP344Anonymoushttp://www.blogger.com/profile/16265988484118540255noreply@blogger.com0