Date: Fri, 27 Sep 1996 12:01:44 +1000 From: Bruce Evans <bde@zeta.org.au> To: freebsd-current@FreeBSD.org, peter@spinner.DIALix.COM Subject: Re: BLOAT in minimal programs Message-ID: <199609270201.MAA05537@godzilla.zeta.org.au>
index | next in thread | raw e-mail
>peter@spinner[11:19pm]/tmp-973> cc -c foo.c
>peter@spinner[11:19pm]/tmp-974> cc -v -static -o foo.exe foo.o
>gcc version 2.7.2.1
> /usr/bin/ld -e start -dc -dp -Bstatic -o foo.exe /usr/lib/scrt0.o foo.o /usr/lib/libgcc.a -lc /usr/lib/libgcc.a
>
>[add the -M flag to ld to see the map output ]
>
>peter@spinner[11:20pm]/tmp-975> /usr/bin/ld -M -e start -dc -dp -Bstatic -o foo.exe /usr/lib/scrt0.o foo.o /usr/lib/libgcc.a -lc /usr/lib/libgcc.a | head
>/usr/lib/libgcc.a(__main.o) needed due to ___main
It's easier to add the -M to the cc command:
cc -static -o foo foo.c -Wl,-M
^^^^ pass following options to linker
^^ desired linker flag
>So, in a nutshell if you want a small static program that doesn't use
>C++ anywhere:
>
>peter@spinner[11:27pm]/tmp-985> cat foo.c
>__main() { /* dummy stub */ }
>
>main()
>{
>}
Except that exit() should be attached to atexit() there if stdio
is linked. Currently we use the special method of calling stdio's
_cleanup() from exit() through the function pointer __cleanup.
>peter@spinner[11:27pm]/tmp-988> size foo.exe
>text data bss dec hex
>4096 4096 0 8192 2000
>
>Now, you can't get smaller than that without ELF.
I got considerably smaller sizes using a.out under Minix, from a
space-optimized stdio (1200 bytes for putc(), 4528 bytes for printf())
and a __LDPGSZ of 16. How does ELF handle paging if its sizes aren't
multiples of PAGE_SIZE?
Bruce
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199609270201.MAA05537>
