Build a short executable

Pierre Saucourt-Harmel (r54698) pierre.saucourt-harmel@motorola.com
Tue Jan 9 08:05:00 GMT 2001


Hello everybody,
I am trying to build a short program for a stand-alone ARM 7 processor
(without any OS), from a Solaris work station.
I generated sucessfully binutils-2.10.1, gcc-2.95.2, newlib-1.8.2 and
gdb-5.0.
I made a crt0.S (but refered to the default crtbegin.o). All my files
(*.c and crt0.S) explicitely call the external memset () and strlen ()
functions.
I removed the -g option to generate the cross libraries (libg.a and
libgcc.a) but not for my small files. I used -o2 everywhere and I obtained
an executable file of 132656 bytes !
With the generated map, I noticed more than 20 objects files coming
from libg.a and libgcc.a were *fully* loaded in my executable.
The linker processing that makes the symbol dependencies of the object
files (coming from libg.a and libgcc.a libraries) does not focus on which
function is used and which is not. The function dependencies and loading
seem to stop at the object level but not at the function level.
Is it possible to load what is strictly necessary ?
Here you find the archive includes, coming from the generated map :
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(__main.o)
                              
example.o (__gccmain)
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(_ctors.o)
                             
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(__main.o) (__CTOR_LIST__)
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(_exit.o)
                             
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(__main.o) (_exit_dummy_decl)
/lavalette/gnuInstall/arm-elf/lib/libg.a(atexit.o)
                             
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(__main.o) (atexit)
/lavalette/gnuInstall/arm-elf/lib/libg.a(impure.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(atexit.o) (_impure_ptr)
/lavalette/gnuInstall/arm-elf/lib/libg.a(malloc.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(atexit.o) (malloc)
/lavalette/gnuInstall/arm-elf/lib/libg.a(mallocr.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(malloc.o) (_malloc_r)
/lavalette/gnuInstall/arm-elf/lib/libg.a(memset.o)
                             
crt0.o (memset)
/lavalette/gnuInstall/arm-elf/lib/libg.a(mlock.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(mallocr.o) (__malloc_lock)
/lavalette/gnuInstall/arm-elf/lib/libg.a(sbrkr.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(mallocr.o) (_sbrk_r)
/lavalette/gnuInstall/arm-elf/lib/libg.a(strlen.o)
                             
example.o (strlen)
/lavalette/gnuInstall/arm-elf/lib/libg.a(syscalls.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(sbrkr.o) (_sbrk)
/lavalette/gnuInstall/arm-elf/lib/libg.a(errno.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(syscalls.o) (__errno)
/lavalette/gnuInstall/arm-elf/lib/libg.a(findfp.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(syscalls.o) (__sinit)
/lavalette/gnuInstall/arm-elf/lib/libg.a(freer.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(malloc.o) (_free_r)
/lavalette/gnuInstall/arm-elf/lib/libg.a(fwalk.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(findfp.o) (_fwalk)
/lavalette/gnuInstall/arm-elf/lib/libg.a(libcfunc.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(syscalls.o) (abort)
/lavalette/gnuInstall/arm-elf/lib/libg.a(stdio.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(findfp.o) (__sread)
/lavalette/gnuInstall/arm-elf/lib/libg.a(writer.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(stdio.o) (_write_r)
/lavalette/gnuInstall/arm-elf/lib/libg.a(closer.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(stdio.o) (_close_r)
/lavalette/gnuInstall/arm-elf/lib/libg.a(fflush.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(findfp.o) (fflush)
/lavalette/gnuInstall/arm-elf/lib/libg.a(lseekr.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(stdio.o) (_lseek_r)
/lavalette/gnuInstall/arm-elf/lib/libg.a(readr.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(stdio.o) (_read_r)
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(_udivsi3.o)
                             
/lavalette/gnuInstall/arm-elf/lib/libg.a(freer.o) (__udivsi3)
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(_dvmd_tls.o)
                             
/lavalette/gnuInstall/lib/gcc-lib/arm-elf/2.95.2/libgcc.a(_udivsi3.o) (__div0)
 
 
 



More information about the crossgcc mailing list