Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Mar 1995 14:02:07 +1000
From:      Bruce Evans <bde@zeta.org.au>
To:        bde@zeta.org.au, davidg@Root.COM
Cc:        freebsd-current@FreeBSD.org
Subject:   Re: HEADS UP - About removing libgcc.so.261
Message-ID:  <199503110402.OAA18280@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>>I'm still concerned about the static libgcc unnecessarily bloating all
>>executables by 4K, partly because the of linkage order bugs.

>   It doesn't bloat anything I tried by 4k...very little if anything seems to
>be included from it.

Here is annotated output from `nm -n' for `main() {}'.

Bruce

00001020 F /usr/lib/crt0.o	# start of crt0
00001038 T start		# this is about 3 times larger than I like
00001424 T _dlopen		# linux's crt0 is leaner
00001448 T _dlclose
0000146c T _dlsym
000014a4 T _dlerror
00001590			# end of crt0 (0x570 bytes)

00001590 F /var/tmp/cc0030111.o	# useless temporary file name
00001590 t ___gnu_compiled_c	# start of main program
00001590 T _main
00001590 t gcc2_compiled.
000015a0			# end of main program (0x10 bytes)

000015a0 T ___do_global_dtors	# start of necessary new bloat
000015a0 F __main.o		# (but this should be in libc)
000015c8 T ___do_global_ctors
00001620 T ___main
00001640			# end of necessary new bloat (0xa0 bytes)

00001640			# start of unnecessary new bloat
				# these routines are linked because they
				# are referenced by functions in libc.a,
				# although the functions are not actually
				# called for our simple program, and
				# most of them are not actually called
				# for most programs
00001640 T ___fixsfdi		# the version in libc.a should be used
00001640 F _exit.o		# empty
00001640 F _fixsfdi.o
00001680 F _fixunssfdi.o
0000169c T ___fixunssfdi	# the version in libc.a should be used
000017b0 T ___fixdfdi		# ditto
000017b0 F _fixdfdi.o
000017f0 F _fixunsdfdi.o
0000180c T ___fixunsdfdi	# ditto
00001920 F _fixunsdfsi.o
00001930 T ___fixunsdfsi	# ditto
00001990 F _floatdisf.o
00001998 T ___floatdisf		# ditto
00001a10 F _floatdidf.o
00001a18 T ___floatdidf		# ditto
00001a70 T ___ucmpdi2		# ditto
00001a70 F _ucmpdi2.o
00001ab0 T ___ashrdi3		# ditto
00001ab0 F _ashrdi3.o
00001b10 T ___ashldi3		# ditto
00001b10 F _ashldi3.o
00001b60 T ___lshldi3		# ditto
00001b60 F _lshldi3.o
00001bb0 T ___lshrdi3		# ditto
00001bb0 F _lshrdi3.o
00001c10 T ___negdi2		# ditto
00001c10 F _negdi2.o
00001c40 T ___umoddi3		# ditto
00001c40 F _umoddi3.o
00001c70 T ___udivdi3		# ditto
00001c70 F _udivdi3.o
00001c90 T ___moddi3		# ditto
00001c90 F _moddi3.o
00001d50 T ___divdi3		# ditto
00001d50 F _divdi3.o
00001e00 T ___muldi3		# ditto
00001e00 F _muldi3.o
00001e50 T ___fixdfsi		# ditto
00001e50 F _fixdfsi.o
00001e80 T ___divsi3		# ditto
00001e80 F _divsi3.o
00001e90 T ___udivsi3		# ditto
00001e90 F _udivsi3.o
00001ea0 T ___cmpdi2		# ditto
00001ea0 F _cmpdi2.o
00001ee0 F _udivmoddi4.o
00001fe0 T ___udivmoddi4	# missing from libc.a.  libc.a has a
				# similar or equivalent routine named
				# ___qdivrem.
00001ee0 + 0x2c0 = 0x21a0	# end of unnecessary new bloat (0xb60 bytes)
				# dynamic linkage info
00002844 T _etext		# end of dynamic linkage info (0x6a4 bytes
				# including 0x334 bytes of unnecessary bloat
				# for the about unnecessary symbols)
00003000 d __DYNAMIC
000030a0 D ___progname
000030ac D __exit_dummy_ref
000030bc D __exit_dummy_decl
000030cc D _edata
000030d4 B ___DTOR_LIST__
000030dc B ___CTOR_LIST__
000030e4 B _environ
000030e8 B _errno
000030ec B _end

# Total necessary new bloat = 0xa0 bytes
# Total unnecessary new bloat = 0xb60 + 0x334 = 0xe94 bytes
# Total new bloat = 0xf74 bytes = about 4K.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199503110402.OAA18280>