summaryrefslogtreecommitdiff
path: root/docs/ptspts.blogspot.com_2009_11_tiny-self-contained-c-compiler-using.txt
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ptspts.blogspot.com_2009_11_tiny-self-contained-c-compiler-using.txt')
-rw-r--r--docs/ptspts.blogspot.com_2009_11_tiny-self-contained-c-compiler-using.txt567
1 files changed, 567 insertions, 0 deletions
diff --git a/docs/ptspts.blogspot.com_2009_11_tiny-self-contained-c-compiler-using.txt b/docs/ptspts.blogspot.com_2009_11_tiny-self-contained-c-compiler-using.txt
new file mode 100644
index 0000000..5105d16
--- /dev/null
+++ b/docs/ptspts.blogspot.com_2009_11_tiny-self-contained-c-compiler-using.txt
@@ -0,0 +1,567 @@
+ #[1]pts.blog - Atom [2]pts.blog - RSS [3]pts.blog - Atom
+
+[4]pts.blog
+
+Flattr this blog
+
+Blog Archive
+
+ * [5]|> [6]2021 (1)
+ + [7]|> [8]October (1)
+
+ * [9]|> [10]2020 (3)
+ + [11]|> [12]December (1)
+ + [13]|> [14]April (2)
+
+ * [15]|> [16]2019 (2)
+ + [17]|> [18]February (2)
+
+ * [19]|> [20]2018 (5)
+ + [21]|> [22]June (1)
+ + [23]|> [24]April (4)
+
+ * [25]|> [26]2017 (6)
+ + [27]|> [28]December (1)
+ + [29]|> [30]October (1)
+ + [31]|> [32]September (1)
+ + [33]|> [34]February (3)
+
+ * [35]|> [36]2016 (8)
+ + [37]|> [38]November (1)
+ + [39]|> [40]July (1)
+ + [41]|> [42]June (1)
+ + [43]|> [44]May (1)
+ + [45]|> [46]April (1)
+ + [47]|> [48]March (1)
+ + [49]|> [50]February (1)
+ + [51]|> [52]January (1)
+
+ * [53]|> [54]2015 (5)
+ + [55]|> [56]December (1)
+ + [57]|> [58]November (1)
+ + [59]|> [60]March (2)
+ + [61]|> [62]February (1)
+
+ * [63]|> [64]2014 (22)
+ + [65]|> [66]October (2)
+ + [67]|> [68]September (3)
+ + [69]|> [70]August (2)
+ + [71]|> [72]July (3)
+ + [73]|> [74]June (2)
+ + [75]|> [76]April (3)
+ + [77]|> [78]January (7)
+
+ * [79]|> [80]2013 (24)
+ + [81]|> [82]December (9)
+ + [83]|> [84]November (2)
+ + [85]|> [86]October (3)
+ + [87]|> [88]August (5)
+ + [89]|> [90]May (1)
+ + [91]|> [92]April (2)
+ + [93]|> [94]March (1)
+ + [95]|> [96]February (1)
+
+ * [97]|> [98]2012 (21)
+ + [99]|> [100]December (2)
+ + [101]|> [102]November (5)
+ + [103]|> [104]September (2)
+ + [105]|> [106]August (2)
+ + [107]|> [108]June (2)
+ + [109]|> [110]April (2)
+ + [111]|> [112]March (2)
+ + [113]|> [114]February (1)
+ + [115]|> [116]January (3)
+
+ * [117]|> [118]2011 (30)
+ + [119]|> [120]December (2)
+ + [121]|> [122]November (3)
+ + [123]|> [124]October (5)
+ + [125]|> [126]September (1)
+ + [127]|> [128]August (6)
+ + [129]|> [130]June (3)
+ + [131]|> [132]May (1)
+ + [133]|> [134]April (3)
+ + [135]|> [136]March (1)
+ + [137]|> [138]February (2)
+ + [139]|> [140]January (3)
+
+ * [141]|> [142]2010 (49)
+ + [143]|> [144]December (6)
+ + [145]|> [146]November (6)
+ + [147]|> [148]October (3)
+ + [149]|> [150]September (1)
+ + [151]|> [152]August (4)
+ + [153]|> [154]July (3)
+ + [155]|> [156]June (10)
+ + [157]|> [158]May (2)
+ + [159]|> [160]April (2)
+ + [161]|> [162]March (3)
+ + [163]|> [164]February (4)
+ + [165]|> [166]January (5)
+
+ * [167]v [168]2009 (53)
+ + [169]|> [170]December (5)
+ + [171]v [172]November (9)
+ o [173]How fast does 8g in Google Go compile?
+ o [174]How to write a program with multiple packages in
+ G...
+ o [175]FUSE protocol tutorial for Linux 2.6
+ o [176]Buffered IO speed test of Google Go
+ o [177]How to read a whole file to String in Java
+ o [178]How to convert a Unix timestamp to a civil date
+ o [179]AES encpytion in Python using C extensions
+ o [180]How to use \showhyphens with beamer
+ o [181]Tiny, self-contained C compiler using TCC + uClibc
+ + [182]|> [183]October (7)
+ + [184]|> [185]September (4)
+ + [186]|> [187]August (4)
+ + [188]|> [189]July (3)
+ + [190]|> [191]June (6)
+ + [192]|> [193]May (6)
+ + [194]|> [195]April (5)
+ + [196]|> [197]March (4)
+
+ * [198]|> [199]2008 (1)
+ + [200]|> [201]September (1)
+
+Recommended
+
+ * [javascript]
+ [202]IO Digital Sec
+ 1 year ago
+
+2009-11-01
+
+Tiny, self-contained C compiler using TCC + uClibc
+
+ This post presents how I played with a small C compiler and a small
+ libc on Linux. I've combined TCC (the [203]Tiny C Compiler) 0.9.25 and
+ [204]uClibc 0.9.26, compressed with [205]UPX 3.03 to a tiny,
+ self-contained C compiler for Linux i386. You don't need any external
+ files (apart from the compiler executable) to compile (or interpret) C
+ code, and the compiled executable will be self-contained as well.
+
+ Here is how to download and use it for compilation on a Linux x86 or
+ x86_64 system:
+$ uname
+Linux
+$ wget -O pts-tcc https://raw.githubusercontent.com/pts/pts-tcc/master/pts-tcc-0
+.9.26-uclibc-0.9.30.1
+$ chmod +x pts-tcc
+$ ls -l pts-tcc
+-rwxrwxr-- 1 pts pts 349640 Nov 1 13:07 pts-tcc
+$ wget -O example1.c https://raw.githubusercontent.com/pts/pts-tcc/master/pts-tc
+c/example1.c
+$ cat example1.c
+#! ./pts-tcc -run
+int printf(char const*fmt, ...);
+double sqrt(double x);
+int main() {
+ printf("Hello, World!\n");
+ return sqrt(36) * 7;
+}
+$ ./pts-tcc example1.c
+$ file a.out
+a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically link
+ed, not stripped
+$ ls -l a.out
+-rwxrwxr-x 1 pts pts 17124 Nov 1 13:17 a.out
+$ ./a.out; echo "$?"
+Hello, World!
+42
+$ strace -e open ./pts-tcc example1.c
+open("/proc/self/mem", O_RDONLY) = 3
+open("/proc/self/mem", O_RDONLY) = 3
+open("example1.c", O_RDONLY) = 3
+open("/proc/self/mem", O_RDONLY) = 3
+open("/proc/self/mem", O_RDONLY) = 3
+open("a.out", O_WRONLY|O_CREAT|O_TRUNC, 0777) = 3
+$ strace ./a.out
+execve("./a.out", ["./a.out"], [/* 47 vars */]) = 0
+ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
+ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
+write(1, "Hello, World!\n", 14Hello, World!
+) = 14
+_exit(42) = ?
+
+ As you can see above, my version the compiler is less than 250k in
+ size, and it doesn't need any library files (such as libc.so) for
+ compilation (as indicated by the strace output above), and the compiled
+ binary doesn't need library files either.
+
+ TCC can run the C program without creating any binaries:
+$ rm -f a.out
+$ ./pts-tcc -run example1.c; echo "$?"
+Hello, World!
+42
+$ head -1 example1.c
+#! ./pts-tcc -run
+$ chmod +x example1.c
+$ ./example1.c; echo "$?"
+Hello, World!
+
+ TCC is a very fast compiler (see the speed comparisons on it web site),
+ it is versatile (it can compile the Linux kernel), but it doesn't
+ optimize much: the code it produces is usually larger and slower than
+ the output of a traditional, optimizing C compiler such as gcc -O2.
+
+ The shell script [206]pts-tcc-0.9.26-compile.sh builds TCC from source,
+ adding uClibc, and compressing with UPX.
+
+Update: TCC 0.9.25 and uClibc 0.9.29 (or older)
+
+ Please note that TCC 0.9.25 is buggy, don't use it!
+$ wget -O pts-tcc https://raw.githubusercontent.com/pts/pts-tcc/master/pts-tcc/p
+ts-tcc-0.9.25
+$ chmod +x pts-tcc
+$ ls -l pts-tcc
+-rwxr-xr-x 1 pts eng 241728 Apr 8 16:53 pts-tcc
+
+Update: TCC 0.9.25 and uClibc 0.9.30.1
+
+ Please note that TCC 0.9.25 is buggy, don't use it!
+$ wget -O pts-tcc https://raw.githubusercontent.com/pts/pts-tcc/master/pts-tcc-0
+.9.25-uclibc-0.9.30.1
+$ chmod +x pts-tcc
+$ ls -l pts-tcc
+-rwxr-xr-x 1 pts eng 336756 Apr 8 16:53 pts-tcc
+
+Update: TCC 0.9.26 and uClibc 0.9.30.1
+
+$ wget -O pts-tcc https://raw.githubusercontent.com/pts/pts-tcc/master/pts-tcc-0
+.9.26-uclibc-0.9.30.1
+$ chmod +x pts-tcc
+$ ls -l pts-tcc
+-rwxr-xr-x 1 pts eng 349640 Apr 8 16:53 pts-tcc
+
+ Posted by pts at [207]13:06
+
+6 comments:
+
+ [208]Porcupine Saul said...
+ This looks like a cool tool, man. Thanks for sticking it out
+ there.
+
+ [209]April 2, 2010 at 4:03:00PM GMT+2 [210][icon_delete13.gif]
+
+ [211]Biff said...
+ I tried unsuccessfully to get this working on a build of
+ OpenWrt. Not sure what I've done wrong. It would be nice to
+ understand what configuration I need to do to transfer the
+ resultant tcc exe to an embedded system and make it work.
+ See here for the error.
+ https://forum.openwrt.org/viewtopic.php?id=26000
+
+ [212]August 6, 2010 at 12:29:00PM GMT+2 [213][icon_delete13.gif]
+
+ [214]Unknown said...
+ I really really want to get this working, and I have tried many
+ different things, however I cannot seem to replicate the setup
+ you have.
+ When I use your wrapper, I get the following:
+ + echo 'int printf(char*fmt,...);main(){return
+ 1>printf("he110\n");}'
+ + ./i386-uclibc-gcc -static -o test test.c
+ + ./test
+ + grep -l he110 test.out
+ test.out
+ + ./i386-uclibc-gcc -o test test.c
+ /usr/bin/ld: cannot find /lib//libc.so.0
+ /usr/bin/ld: cannot find /usr/lib//uclibc_nonshared.a
+ /usr/bin/ld: cannot find /lib//ld-uClibc.so.0
+ collect2: ld returned 1 exit status
+ It seems to work statically, however I have something wrong with
+ ld, (the double slashes) and I cannot seem to find where in the
+ script or wrapper (or the proper environment variable) that can
+ fix this. I should note that I have also build the uclibc
+ toolchain using buildroot, and have it stored in
+ /usr/local/uclibc, but I cannot seem to get the uclibc ld to run
+ instead of the (/usr/bin/ld) one.
+ Furthermore, by using my compiler instead of the wrapper, I am
+ able to compile pts-tcc and it displays its help output, however
+ when trying to use it to compile I get:
+ user@ubuntu:~/Downloads/Tcc$ ./pts-tcc test.c
+ tcc: undefined symbol '__uClibc_main'
+ tcc: undefined symbol 'printf'
+ So if you could please give a little more details as to how to
+ set up your environment, and where things need to be located, I
+ would appreciate it.
+ Also, if you could tell me what is going on with this perl line:
+ for F in tcclibc.a "$UCLIBC_USR"/lib/{crt1.o,crti.o,crtn.o}; do
+ G="${F##*/}"
+ export NAME="data_${G%.*}"
+ perl -e '$_=join("",); my$L=length;
+ s@([^-+/\w])@sprintf"\\%03o",ord$1@ge; print".globl
+ $ENV{NAME}\n.section .data\n.align 4\n.size
+ $ENV{NAME},$L\n$ENV{NAME}:\n.string \"$_\\001\"\n"' <"$F"
+ done >tcc-0.9.25/libcdata.s
+ Thank you so much, I would really like to get this working.
+ (On a side note, would there be an binary copy already lying
+ around, for the i386 architecture?)
+
+ [215]October 29, 2010 at 5:33:00AM GMT+2
+ [216][icon_delete13.gif]
+
+ [217]Unknown said...
+ Oops, found the binary, and it works great. I just cannot figure
+ out how you did it.
+
+ [218]October 29, 2010 at 5:42:00AM GMT+2
+ [219][icon_delete13.gif]
+
+ [220]Darren said...
+ I -_love_ this - it's solved a big problem for me - trouble is I
+ just found a bug in tcc*.25, that's fixed in '26. I went to try
+ to modify your build script, but I don't have all the right
+ versions of things... any chance of an update?
+ (thx)
+ Darren
+
+ [221]April 7, 2013 at 1:00:00PM GMT+2 [222][icon_delete13.gif]
+
+ [223]pts said...
+ @Darren: I've updated pts-tcc so a version using TCC 0.9.26 is
+ available. Please see it in the updated blog post.
+
+ [224]April 8, 2013 at 5:04:00PM GMT+2 [225][icon_delete13.gif]
+
+ [226]Post a Comment
+ [227]Newer Post [228]Older Post [229]Home
+ Subscribe to: [230]Post Comments (Atom)
+
+References
+
+ Visible links:
+ 1. https://ptspts.blogspot.com/feeds/posts/default
+ 2. https://ptspts.blogspot.com/feeds/posts/default?alt=rss
+ 3. https://ptspts.blogspot.com/feeds/6808943651025396418/comments/default
+ 4. https://ptspts.blogspot.com/
+ 5. javascript:void(0)
+ 6. https://ptspts.blogspot.com/2021/
+ 7. javascript:void(0)
+ 8. https://ptspts.blogspot.com/2021/10/
+ 9. javascript:void(0)
+ 10. https://ptspts.blogspot.com/2020/
+ 11. javascript:void(0)
+ 12. https://ptspts.blogspot.com/2020/12/
+ 13. javascript:void(0)
+ 14. https://ptspts.blogspot.com/2020/04/
+ 15. javascript:void(0)
+ 16. https://ptspts.blogspot.com/2019/
+ 17. javascript:void(0)
+ 18. https://ptspts.blogspot.com/2019/02/
+ 19. javascript:void(0)
+ 20. https://ptspts.blogspot.com/2018/
+ 21. javascript:void(0)
+ 22. https://ptspts.blogspot.com/2018/06/
+ 23. javascript:void(0)
+ 24. https://ptspts.blogspot.com/2018/04/
+ 25. javascript:void(0)
+ 26. https://ptspts.blogspot.com/2017/
+ 27. javascript:void(0)
+ 28. https://ptspts.blogspot.com/2017/12/
+ 29. javascript:void(0)
+ 30. https://ptspts.blogspot.com/2017/10/
+ 31. javascript:void(0)
+ 32. https://ptspts.blogspot.com/2017/09/
+ 33. javascript:void(0)
+ 34. https://ptspts.blogspot.com/2017/02/
+ 35. javascript:void(0)
+ 36. https://ptspts.blogspot.com/2016/
+ 37. javascript:void(0)
+ 38. https://ptspts.blogspot.com/2016/11/
+ 39. javascript:void(0)
+ 40. https://ptspts.blogspot.com/2016/07/
+ 41. javascript:void(0)
+ 42. https://ptspts.blogspot.com/2016/06/
+ 43. javascript:void(0)
+ 44. https://ptspts.blogspot.com/2016/05/
+ 45. javascript:void(0)
+ 46. https://ptspts.blogspot.com/2016/04/
+ 47. javascript:void(0)
+ 48. https://ptspts.blogspot.com/2016/03/
+ 49. javascript:void(0)
+ 50. https://ptspts.blogspot.com/2016/02/
+ 51. javascript:void(0)
+ 52. https://ptspts.blogspot.com/2016/01/
+ 53. javascript:void(0)
+ 54. https://ptspts.blogspot.com/2015/
+ 55. javascript:void(0)
+ 56. https://ptspts.blogspot.com/2015/12/
+ 57. javascript:void(0)
+ 58. https://ptspts.blogspot.com/2015/11/
+ 59. javascript:void(0)
+ 60. https://ptspts.blogspot.com/2015/03/
+ 61. javascript:void(0)
+ 62. https://ptspts.blogspot.com/2015/02/
+ 63. javascript:void(0)
+ 64. https://ptspts.blogspot.com/2014/
+ 65. javascript:void(0)
+ 66. https://ptspts.blogspot.com/2014/10/
+ 67. javascript:void(0)
+ 68. https://ptspts.blogspot.com/2014/09/
+ 69. javascript:void(0)
+ 70. https://ptspts.blogspot.com/2014/08/
+ 71. javascript:void(0)
+ 72. https://ptspts.blogspot.com/2014/07/
+ 73. javascript:void(0)
+ 74. https://ptspts.blogspot.com/2014/06/
+ 75. javascript:void(0)
+ 76. https://ptspts.blogspot.com/2014/04/
+ 77. javascript:void(0)
+ 78. https://ptspts.blogspot.com/2014/01/
+ 79. javascript:void(0)
+ 80. https://ptspts.blogspot.com/2013/
+ 81. javascript:void(0)
+ 82. https://ptspts.blogspot.com/2013/12/
+ 83. javascript:void(0)
+ 84. https://ptspts.blogspot.com/2013/11/
+ 85. javascript:void(0)
+ 86. https://ptspts.blogspot.com/2013/10/
+ 87. javascript:void(0)
+ 88. https://ptspts.blogspot.com/2013/08/
+ 89. javascript:void(0)
+ 90. https://ptspts.blogspot.com/2013/05/
+ 91. javascript:void(0)
+ 92. https://ptspts.blogspot.com/2013/04/
+ 93. javascript:void(0)
+ 94. https://ptspts.blogspot.com/2013/03/
+ 95. javascript:void(0)
+ 96. https://ptspts.blogspot.com/2013/02/
+ 97. javascript:void(0)
+ 98. https://ptspts.blogspot.com/2012/
+ 99. javascript:void(0)
+ 100. https://ptspts.blogspot.com/2012/12/
+ 101. javascript:void(0)
+ 102. https://ptspts.blogspot.com/2012/11/
+ 103. javascript:void(0)
+ 104. https://ptspts.blogspot.com/2012/09/
+ 105. javascript:void(0)
+ 106. https://ptspts.blogspot.com/2012/08/
+ 107. javascript:void(0)
+ 108. https://ptspts.blogspot.com/2012/06/
+ 109. javascript:void(0)
+ 110. https://ptspts.blogspot.com/2012/04/
+ 111. javascript:void(0)
+ 112. https://ptspts.blogspot.com/2012/03/
+ 113. javascript:void(0)
+ 114. https://ptspts.blogspot.com/2012/02/
+ 115. javascript:void(0)
+ 116. https://ptspts.blogspot.com/2012/01/
+ 117. javascript:void(0)
+ 118. https://ptspts.blogspot.com/2011/
+ 119. javascript:void(0)
+ 120. https://ptspts.blogspot.com/2011/12/
+ 121. javascript:void(0)
+ 122. https://ptspts.blogspot.com/2011/11/
+ 123. javascript:void(0)
+ 124. https://ptspts.blogspot.com/2011/10/
+ 125. javascript:void(0)
+ 126. https://ptspts.blogspot.com/2011/09/
+ 127. javascript:void(0)
+ 128. https://ptspts.blogspot.com/2011/08/
+ 129. javascript:void(0)
+ 130. https://ptspts.blogspot.com/2011/06/
+ 131. javascript:void(0)
+ 132. https://ptspts.blogspot.com/2011/05/
+ 133. javascript:void(0)
+ 134. https://ptspts.blogspot.com/2011/04/
+ 135. javascript:void(0)
+ 136. https://ptspts.blogspot.com/2011/03/
+ 137. javascript:void(0)
+ 138. https://ptspts.blogspot.com/2011/02/
+ 139. javascript:void(0)
+ 140. https://ptspts.blogspot.com/2011/01/
+ 141. javascript:void(0)
+ 142. https://ptspts.blogspot.com/2010/
+ 143. javascript:void(0)
+ 144. https://ptspts.blogspot.com/2010/12/
+ 145. javascript:void(0)
+ 146. https://ptspts.blogspot.com/2010/11/
+ 147. javascript:void(0)
+ 148. https://ptspts.blogspot.com/2010/10/
+ 149. javascript:void(0)
+ 150. https://ptspts.blogspot.com/2010/09/
+ 151. javascript:void(0)
+ 152. https://ptspts.blogspot.com/2010/08/
+ 153. javascript:void(0)
+ 154. https://ptspts.blogspot.com/2010/07/
+ 155. javascript:void(0)
+ 156. https://ptspts.blogspot.com/2010/06/
+ 157. javascript:void(0)
+ 158. https://ptspts.blogspot.com/2010/05/
+ 159. javascript:void(0)
+ 160. https://ptspts.blogspot.com/2010/04/
+ 161. javascript:void(0)
+ 162. https://ptspts.blogspot.com/2010/03/
+ 163. javascript:void(0)
+ 164. https://ptspts.blogspot.com/2010/02/
+ 165. javascript:void(0)
+ 166. https://ptspts.blogspot.com/2010/01/
+ 167. javascript:void(0)
+ 168. https://ptspts.blogspot.com/2009/
+ 169. javascript:void(0)
+ 170. https://ptspts.blogspot.com/2009/12/
+ 171. javascript:void(0)
+ 172. https://ptspts.blogspot.com/2009/11/
+ 173. https://ptspts.blogspot.com/2009/11/how-fast-does-8g-in-google-go-compile.html
+ 174. https://ptspts.blogspot.com/2009/11/how-to-write-program-with-multiple.html
+ 175. https://ptspts.blogspot.com/2009/11/fuse-protocol-tutorial-for-linux-26.html
+ 176. https://ptspts.blogspot.com/2009/11/buffered-io-speed-test-of-google-go.html
+ 177. https://ptspts.blogspot.com/2009/11/how-to-read-whole-file-to-string-in.html
+ 178. https://ptspts.blogspot.com/2009/11/how-to-convert-unix-timestamp-to-civil.html
+ 179. https://ptspts.blogspot.com/2009/11/aes-encpytion-in-python-using-c.html
+ 180. https://ptspts.blogspot.com/2009/11/how-to-use-showhyphens-with-beamer.html
+ 181. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html
+ 182. javascript:void(0)
+ 183. https://ptspts.blogspot.com/2009/10/
+ 184. javascript:void(0)
+ 185. https://ptspts.blogspot.com/2009/09/
+ 186. javascript:void(0)
+ 187. https://ptspts.blogspot.com/2009/08/
+ 188. javascript:void(0)
+ 189. https://ptspts.blogspot.com/2009/07/
+ 190. javascript:void(0)
+ 191. https://ptspts.blogspot.com/2009/06/
+ 192. javascript:void(0)
+ 193. https://ptspts.blogspot.com/2009/05/
+ 194. javascript:void(0)
+ 195. https://ptspts.blogspot.com/2009/04/
+ 196. javascript:void(0)
+ 197. https://ptspts.blogspot.com/2009/03/
+ 198. javascript:void(0)
+ 199. https://ptspts.blogspot.com/2008/
+ 200. javascript:void(0)
+ 201. https://ptspts.blogspot.com/2008/09/
+ 202. https://iodigitalsec.com/
+ 203. http://bellard.org/tcc/
+ 204. http://www.uclibc.org/
+ 205. http://upx.sourceforge.net/
+ 206. https://github.com/pts/pts-tcc/blob/master/pts-tcc-0.9.26-compile.sh
+ 207. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html
+ 208. https://www.blogger.com/profile/13523835355464525279
+ 209. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html?showComment=1270216996272#c1780721860826453864
+ 210. https://www.blogger.com/delete-comment.g?blogID=8821846818714029393&postID=1780721860826453864
+ 211. https://www.blogger.com/profile/14344647540020869827
+ 212. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html?showComment=1281090567095#c6665460077644589152
+ 213. https://www.blogger.com/delete-comment.g?blogID=8821846818714029393&postID=6665460077644589152
+ 214. https://www.blogger.com/profile/16368219482343702957
+ 215. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html?showComment=1288323202749#c5065061273223465540
+ 216. https://www.blogger.com/delete-comment.g?blogID=8821846818714029393&postID=5065061273223465540
+ 217. https://www.blogger.com/profile/16368219482343702957
+ 218. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html?showComment=1288323742923#c8312086593726964224
+ 219. https://www.blogger.com/delete-comment.g?blogID=8821846818714029393&postID=8312086593726964224
+ 220. https://www.blogger.com/profile/15410121341266501317
+ 221. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html?showComment=1365332400683#c2984614004162073806
+ 222. https://www.blogger.com/delete-comment.g?blogID=8821846818714029393&postID=2984614004162073806
+ 223. https://www.blogger.com/profile/00909092426117039110
+ 224. https://ptspts.blogspot.com/2009/11/tiny-self-contained-c-compiler-using.html?showComment=1365433441521#c8060845628300786053
+ 225. https://www.blogger.com/delete-comment.g?blogID=8821846818714029393&postID=8060845628300786053
+ 226. https://www.blogger.com/comment.g?blogID=8821846818714029393&postID=6808943651025396418
+ 227. https://ptspts.blogspot.com/2009/11/how-to-use-showhyphens-with-beamer.html
+ 228. https://ptspts.blogspot.com/2009/10/how-to-enable-autologin-in-ubuntu.html
+ 229. https://ptspts.blogspot.com/
+ 230. https://ptspts.blogspot.com/feeds/6808943651025396418/comments/default
+
+ Hidden links:
+ 232. https://www.blogger.com/post-edit.g?blogID=8821846818714029393&postID=6808943651025396418&from=pencil