tyfkda / xcc

Standalone C compiler/assembler/linker/libc for x86-64/aarch64/riscv64/wasm
https://tyfkda.github.io/xcc/
MIT License
197 stars 14 forks source link

Minimize library dependencies #135

Closed tyfkda closed 4 days ago

tyfkda commented 9 months ago
int main(){
  return 123;
}
$ ./xcc -Wl,-Map=- foo.c
### Symbols
  1000100:  (start address)
  1000100: main  (/tmp/xcc-yQdcY7.o)
  1003448: environ  (./lib/crt0.a, _start.o)
  10001ce: _start  (./lib/crt0.a, _start.o)
  10001e8: exit  (./lib/libc.a, exit.o)
  1003000: stdin  (./lib/libc.a, stdin.o)
  1003010: stderr  (./lib/libc.a, stdin.o)
  1003008: stdout  (./lib/libc.a, stdin.o)
  1003450: __fileman  (./lib/libc.a, stdin.o)
  10001f9: _fflush  (./lib/libc.a, _fflush.o)
  10002be: __atexit_call  (./lib/libc.a, atexit.o)
  1000270: atexit  (./lib/libc.a, atexit.o)
  100030d: write  (./lib/libc.a, write.o)
  1000315: fflush  (./lib/libc.a, fflush.o)
  1002cf8: _kFileCookieIoFunctions  (./lib/libc.a, fdopen.o)
  10005bd: fdopen  (./lib/libc.a, fdopen.o)
  1000431: _detect_open_flag  (./lib/libc.a, fdopen.o)
  10006d0: _fseek  (./lib/libc.a, _fseek.o)
  100073c: _fread  (./lib/libc.a, _fread.o)
  1000967: read  (./lib/libc.a, read.o)
  10009a0: memcpy  (./lib/libc.a, memcpy.o)
  10009da: realloc  (./lib/libc.a, realloc.o)
  1000a68: fprintf  (./lib/libc.a, fprintf.o)
  1000b04: free  (./lib/libc.a, malloc.o)
  1000c6d: malloc  (./lib/libc.a, malloc.o)
  1000d62: lseek  (./lib/libc.a, lseek.o)
  1000d6a: calloc  (./lib/libc.a, calloc.o)
  10018a9: vfprintf  (./lib/libc.a, vfprintf.o)
  1002845: isdigit  (./lib/libc.a, isdigit.o)
  100285c: isfinite  (./lib/libc.a, isfinite.o)
  1002895: _fwrite  (./lib/libc.a, _fwrite.o)
  1002975: __errno_location  (./lib/libc.a, errno.o)
  100297d: _remove_opened_file  (./lib/libc.a, _fclose.o)
  1002a39: _fclose  (./lib/libc.a, _fclose.o)
  1002a6c: close  (./lib/libc.a, close.o)
  1002a74: strlen  (./lib/libc.a, strlen.o)
  1002a8e: fwrite  (./lib/libc.a, fwrite.o)
  1002afc: memset  (./lib/libc.a, memset.o)
  1002b29: _finit  (./lib/libc.a, _finit.o)
  1002bad: fstat  (./lib/libc.a, fstat.o)
  1002bb5: fputs  (./lib/libc.a, fputs.o)
  1002bfd: brk  (./lib/libc.a, brk.o)
  1002c26: sbrk  (./lib/libc.a, brk.o)
  1002c94: strchr  (./lib/libc.a, strchr.o)
  1002cbb: isnan  (./lib/libc.a, isnan.o)

### Entry point
  10001ce: _start

$ ls -l a.out 
-rwxr-xr-x 1 codespace codespace 13378 Nov 24 23:22 a.out*
tyfkda commented 4 days ago

Updated:

$ ./xcc -Wl,-Map=- ,foo/const.c
### Symbols
  1000100:  (start address)
  1001000: __dummy  (./lib/crt0.a, _start.o)
  10001b8: _start  (./lib/crt0.a, _start.o)
  10001cc: main  (/tmp/xcc-03qChH.o)
  10001dc: exit  (./lib/libc.a, exit.o)
  1000242: __atexit_call  (./lib/libc.a, atexit.o)
  1000206: atexit  (./lib/libc.a, atexit.o)
  1001050: environ  (./lib/libc.a, environ.o)
--- generated symbols
  1001008: __fini_array_start
  1001008: __fini_array_end
  1001008: __init_array_end
  1001008: __init_array_start

### Entry point
  10001b8: _start

$ ll a.out
-rwxr-xr-x  1 codespace  codespace  4104 Sep  9 10:39 a.out*