Created
January 29, 2024 00:40
-
-
Save lupyuen/3e650bd6ad72b2e8ee8596858bc94f36 to your computer and use it in GitHub Desktop.
TCC in WebAssembly. See https://github.com/lupyuen/tcc-riscv32-wasm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+ node zig/test.js | |
compile_program: start | |
compile_program: options=["-c","hello.c"] | |
compile_program: code= | |
int main(int argc, char *argv[]) { | |
printf("Hello, World!!\n"); | |
return 0; | |
} | |
compile_program: options[0]=-c | |
compile_program: options[1]=hello.c | |
open: path=hello.c, oflag=0, return fd=3 | |
sem_init: sem=tcc-wasm.sem_t@10cfe8, pshared=0, value=1 | |
sem_wait: sem=tcc-wasm.sem_t@10cfe8 | |
TODO: setjmp | |
TODO: sscanf: str=0.9.27, format=%d.%d.%d | |
format_string1: size=128, format=#define __TINYC__ %d | |
, a=1991381505 | |
vsnprintf: return str=#define __TINYC__ 1991381505 | |
format_string2: size=99, format=#define %s%s | |
, a0=__riscv, a1= 1 | |
vsnprintf: return str=#define __riscv 1 | |
format_string2: size=81, format=#define %s%s | |
, a0=__riscv_xlen 64, a1= | |
vsnprintf: return str=#define __riscv_xlen 64 | |
format_string2: size=185, format=#define %s%s | |
, a0=__riscv_flen 64, a1= | |
vsnprintf: return str=#define __riscv_flen 64 | |
format_string2: size=161, format=#define %s%s | |
, a0=__riscv_div, a1= 1 | |
vsnprintf: return str=#define __riscv_div 1 | |
format_string2: size=139, format=#define %s%s | |
, a0=__riscv_mul, a1= 1 | |
vsnprintf: return str=#define __riscv_mul 1 | |
format_string2: size=117, format=#define %s%s | |
, a0=__riscv_fdiv, a1= 1 | |
vsnprintf: return str=#define __riscv_fdiv 1 | |
format_string2: size=94, format=#define %s%s | |
, a0=__riscv_fsqrt, a1= 1 | |
vsnprintf: return str=#define __riscv_fsqrt 1 | |
format_string2: size=326, format=#define %s%s | |
, a0=__riscv_float_abi_double, a1= 1 | |
vsnprintf: return str=#define __riscv_float_abi_double 1 | |
format_string2: size=291, format=#define %s%s | |
, a0=__linux__, a1= 1 | |
vsnprintf: return str=#define __linux__ 1 | |
format_string2: size=271, format=#define %s%s | |
, a0=__linux, a1= 1 | |
vsnprintf: return str=#define __linux 1 | |
format_string2: size=253, format=#define %s%s | |
, a0=__unix__, a1= 1 | |
vsnprintf: return str=#define __unix__ 1 | |
format_string2: size=234, format=#define %s%s | |
, a0=__unix, a1= 1 | |
vsnprintf: return str=#define __unix 1 | |
format_string2: size=217, format=#define %s%s | |
, a0=__CHAR_UNSIGNED__, a1= 1 | |
vsnprintf: return str=#define __CHAR_UNSIGNED__ 1 | |
format_string1: size=189, format=#define __SIZEOF_POINTER__ %d | |
, a=8 | |
vsnprintf: return str=#define __SIZEOF_POINTER__ 8 | |
format_string1: size=160, format=#define __SIZEOF_LONG__ %d | |
, a=8 | |
vsnprintf: return str=#define __SIZEOF_LONG__ 8 | |
format_string2: size=134, format=#define %s%s | |
, a0=__STDC__, a1= 1 | |
vsnprintf: return str=#define __STDC__ 1 | |
format_string1: size=115, format=#define __STDC_VERSION__ %dL | |
, a=199901 | |
vsnprintf: return str=#define __STDC_VERSION__ 199901L | |
format_string1: size=356, format=#define __BASE_FILE__ "%s" | |
, a=hello.c | |
vsnprintf: return str=#define __BASE_FILE__ "hello.c" | |
read: fd=3, nbyte=8192 | |
read: return buf= | |
int main(int argc, char *argv[]) { | |
printf("Hello, World!!\n"); | |
return 0; | |
} | |
format_string2: size=128, format=%s:%d: , a0=hello.c, a1=3 | |
vsnprintf: return str=hello.c:3: | |
format_string0: size=117, format=warning: | |
vsnprintf: return str=warning: | |
format_string1: size=108, format=implicit declaration of function '%s', a=printf | |
vsnprintf: return str=implicit declaration of function 'printf' | |
format_string1: size=0, format=%s | |
, a=hello.c:3: warning: implicit declaration of function 'printf' | |
fprintf: stream=tcc-wasm.FILE@2 | |
hello.c:3: warning: implicit declaration of function 'printf' | |
format_string1: size=0, format=L.%u, a=0 | |
sprintf: return str=L.0 | |
format_string1: size=256, format=.rela%s, a=.text | |
snprintf: return str=.rela.text | |
read: fd=3, nbyte=8192 | |
read: return buf= | |
close: fd=3 | |
sem_post: sem=tcc-wasm.sem_t@10cfe8 | |
format_string1: size=1024, format=%s, a=hello.c | |
snprintf: return str=hello.c | |
unlink: path=hello.o | |
open: path=hello.o, oflag=577, return fd=4 | |
fdopen: fd=4, mode=wb, return FILE=5 | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 .ELF............ | |
0016: 01 00 F3 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0032: 00 00 00 00 00 00 00 00 D0 01 00 00 00 00 00 00 ................ | |
0048: 04 00 00 00 40 00 00 00 00 00 40 00 09 00 08 00 ....@.....@..... | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 13 01 01 FE 23 3C 11 00 23 38 81 00 13 04 01 02 ....#<..#8...... | |
0016: 13 00 00 00 23 34 A4 FE 23 30 B4 FE 17 05 00 00 ....#4..#0...... | |
0032: 13 05 05 00 97 00 00 00 E7 80 00 00 1B 05 00 00 ................ | |
0048: 83 30 81 01 03 34 01 01 13 01 01 02 67 80 00 00 .0...4......g... | |
fwrite: size=1, nmemb=16, stream=tcc-wasm.FILE@5 | |
0000: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 21 0A 00 Hello, World!!.. | |
fwrite: size=1, nmemb=144, stream=tcc-wasm.FILE@5 | |
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 01 00 00 00 04 00 F1 FF ................ | |
0032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 0E 00 00 00 01 00 03 00 00 00 00 00 00 00 00 00 ................ | |
0064: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ................ | |
0080: 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0096: 09 00 00 00 12 00 01 00 00 00 00 00 00 00 00 00 ................ | |
0112: 40 00 00 00 00 00 00 00 12 00 00 00 12 00 00 00 @............... | |
0128: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=25, stream=tcc-wasm.FILE@5 | |
0000: 00 68 65 6C 6C 6F 2E 63 00 6D 61 69 6E 00 4C 2E .hello.c.main.L. | |
0016: 30 00 70 72 69 6E 74 66 00 0.printf. | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fwrite: size=1, nmemb=72, stream=tcc-wasm.FILE@5 | |
0000: 1C 00 00 00 00 00 00 00 17 00 00 00 02 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 ........ ....... | |
0032: 18 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 24 00 00 00 00 00 00 00 13 00 00 00 05 00 00 00 $............... | |
0064: 00 00 00 00 00 00 00 00 ........ | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fputc: c=0x00, stream=tcc-wasm.FILE@5 | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 00 2E 74 65 78 74 00 2E 64 61 74 61 00 2E 64 61 ..text..data..da | |
0016: 74 61 2E 72 6F 00 2E 62 73 73 00 2E 73 79 6D 74 ta.ro..bss..symt | |
0032: 61 62 00 2E 73 74 72 74 61 62 00 2E 72 65 6C 61 ab..strtab..rela | |
0048: 2E 74 65 78 74 00 2E 73 68 73 74 72 74 61 62 00 .text..shstrtab. | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 01 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@....... | |
0032: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @............... | |
0048: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 07 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 ................ | |
0032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 0D 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 ................ | |
0032: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 16 00 00 00 08 00 00 00 03 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 90 00 00 00 00 00 00 00 ................ | |
0032: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 1B 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0016: 00 00 00 00 00 00 00 00 90 00 00 00 00 00 00 00 ................ | |
0032: 90 00 00 00 00 00 00 00 06 00 00 00 04 00 00 00 ................ | |
0048: 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 23 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 #............... | |
0016: 00 00 00 00 00 00 00 00 20 01 00 00 00 00 00 00 ........ ....... | |
0032: 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0048: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 2B 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 +............... | |
0016: 00 00 00 00 00 00 00 00 40 01 00 00 00 00 00 00 ........@....... | |
0032: 48 00 00 00 00 00 00 00 05 00 00 00 01 00 00 00 H............... | |
0048: 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 ................ | |
fwrite: size=1, nmemb=64, stream=tcc-wasm.FILE@5 | |
0000: 36 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 6............... | |
0016: 00 00 00 00 00 00 00 00 90 01 00 00 00 00 00 00 ................ | |
0032: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @............... | |
0048: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
close: stream=tcc-wasm.FILE@5 | |
a.out: 1040 bytes | |
0000: 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 .ELF............ | |
0016: 01 00 F3 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0032: 00 00 00 00 00 00 00 00 D0 01 00 00 00 00 00 00 ................ | |
0048: 04 00 00 00 40 00 00 00 00 00 40 00 09 00 08 00 ....@.....@..... | |
0064: 13 01 01 FE 23 3C 11 00 23 38 81 00 13 04 01 02 ....#<..#8...... | |
0080: 13 00 00 00 23 34 A4 FE 23 30 B4 FE 17 05 00 00 ....#4..#0...... | |
0096: 13 05 05 00 97 00 00 00 E7 80 00 00 1B 05 00 00 ................ | |
0112: 83 30 81 01 03 34 01 01 13 01 01 02 67 80 00 00 .0...4......g... | |
0128: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 21 0A 00 Hello, World!!.. | |
0144: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0160: 00 00 00 00 00 00 00 00 01 00 00 00 04 00 F1 FF ................ | |
0176: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0192: 0E 00 00 00 01 00 03 00 00 00 00 00 00 00 00 00 ................ | |
0208: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ................ | |
0224: 1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0240: 09 00 00 00 12 00 01 00 00 00 00 00 00 00 00 00 ................ | |
0256: 40 00 00 00 00 00 00 00 12 00 00 00 12 00 00 00 @............... | |
0272: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0288: 00 68 65 6C 6C 6F 2E 63 00 6D 61 69 6E 00 4C 2E .hello.c.main.L. | |
0304: 30 00 70 72 69 6E 74 66 00 00 00 00 00 00 00 00 0.printf........ | |
0320: 1C 00 00 00 00 00 00 00 17 00 00 00 02 00 00 00 ................ | |
0336: 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00 ........ ....... | |
0352: 18 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0368: 24 00 00 00 00 00 00 00 13 00 00 00 05 00 00 00 $............... | |
0384: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0400: 00 2E 74 65 78 74 00 2E 64 61 74 61 00 2E 64 61 ..text..data..da | |
0416: 74 61 2E 72 6F 00 2E 62 73 73 00 2E 73 79 6D 74 ta.ro..bss..symt | |
0432: 61 62 00 2E 73 74 72 74 61 62 00 2E 72 65 6C 61 ab..strtab..rela | |
0448: 2E 74 65 78 74 00 2E 73 68 73 74 72 74 61 62 00 .text..shstrtab. | |
0464: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0496: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0512: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0528: 01 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00 ................ | |
0544: 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@....... | |
0560: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @............... | |
0576: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0592: 07 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 ................ | |
0608: 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 ................ | |
0624: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0640: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0656: 0D 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 ................ | |
0672: 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 ................ | |
0688: 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0704: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0720: 16 00 00 00 08 00 00 00 03 00 00 00 00 00 00 00 ................ | |
0736: 00 00 00 00 00 00 00 00 90 00 00 00 00 00 00 00 ................ | |
0752: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0768: 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0784: 1B 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0800: 00 00 00 00 00 00 00 00 90 00 00 00 00 00 00 00 ................ | |
0816: 90 00 00 00 00 00 00 00 06 00 00 00 04 00 00 00 ................ | |
0832: 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 ................ | |
0848: 23 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 #............... | |
0864: 00 00 00 00 00 00 00 00 20 01 00 00 00 00 00 00 ........ ....... | |
0880: 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0896: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
0912: 2B 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 +............... | |
0928: 00 00 00 00 00 00 00 00 40 01 00 00 00 00 00 00 ........@....... | |
0944: 48 00 00 00 00 00 00 00 05 00 00 00 01 00 00 00 H............... | |
0960: 08 00 00 00 00 00 00 00 18 00 00 00 00 00 00 00 ................ | |
0976: 36 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 6............... | |
0992: 00 00 00 00 00 00 00 00 90 01 00 00 00 00 00 00 ................ | |
1008: 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @............... | |
1024: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |
ret=18219008 | |
+ node zig/test.js | |
+ grep TODO | |
TODO: setjmp | |
TODO: sscanf: str=0.9.27, format=%d.%d.%d |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment