This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Build a short executable


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)
 
 
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]