I have followed your advices and finally seen my linker scripts was
not correctly
included in the command line.
I have created a arch/$(ARCH)/Makefile and included:
LDFLAGS += -r -T(linker_script)

The linker script getting the "ENTRY(_start) "

and compile with "make ARCH=$(ARCH)"

I have finally succeeded in compiling busybox for my arch.
Thanks a lot for your help :)

2012/1/31 Denys Vlasenko <[email protected]>:
> On Tue, Jan 31, 2012 at 3:33 PM, stl <[email protected]> wrote:
>>>
>>> This version should be ok. Versions before 2.18 were buggy.
>>>
>>> Can you give a more detailed description of what you are doing
>>> than mere "I am trying to statically build busybox-1.19.3"?
>>
>> Ok. I am porting Linux for a new architecture.
>> Of course, I am unable to pass the romfs mounting step, because my
>> Linux system is not built.
>> So I have built a uClibc cross-compiler and now I need to built my romfs
>> image with busybox apps.
>> I am trying to build busybox with this cross-compiler,
>> and I want (at the moment) build static applications.
>>
>>> What .config do you use? Do you pass any variables such as
>>> EXTRA_CFLAGS to make?
>>
>> I need -G0 and -fsrodata-size=0 as extra cflags.
>> But the problem with gc-sections appears even if I try to compile
>> without them.
>>
>>> Does just "make defconfig; make" work for you?
>>
>> Indeed, the build behaves differently with make defconfig; make.
>> It is clearly when I set the CONFIG_CROSS_COMPILER_PREFIX option
>> that I obtain the
>> "gc-sections requires either an entry or an undefined symbol"
>> error.
>
> I suggest:
> - set "debug=true" in scripts/trylink
> - run make V=1 and save the command used for linking.
>  Example:
>
> Trying: i486-linux-uclibc-gcc -Wall -Wshadow -Wwrite-strings -Wundef
> -Wstrict-prototypes -Wunused -Wunused-parameter -Wunused-function
> -Wunused-value -Wmissing-prototypes -Wmissing-declarations
> -Wdeclaration-after-statement -Werror -Wold-style-definition
> -fno-builtin-strlen -finline-limit=0 -fomit-frame-pointer
> -ffunction-sections -fdata-sections -fno-guess-branch-probability
> -funsigned-char -static-libgcc -falign-functions=1 -falign-jumps=1
> -falign-labels=1 -falign-loops=1 -Os -march=i386
> -mpreferred-stack-boundary=2 -static -o busybox_unstripped
> -Wl,--sort-common -Wl,--sort-section,alignment -Wl,--gc-sections
> -Wl,--start-group applets/built-in.o archival/lib.a
> archival/libarchive/lib.a console-tools/lib.a coreutils/lib.a
> coreutils/libcoreutils/lib.a debianutils/lib.a e2fsprogs/lib.a
> editors/lib.a findutils/lib.a init/lib.a libbb/lib.a libpwdgrp/lib.a
> loginutils/lib.a mailutils/lib.a miscutils/lib.a modutils/lib.a
> networking/lib.a networking/libiproute/lib.a networking/udhcp/lib.a
> printutils/lib.a procps/lib.a runit/lib.a selinux/lib.a shell/lib.a
> sysklogd/lib.a util-linux/lib.a util-linux/volume_id/lib.a
> archival/built-in.o archival/libarchive/built-in.o
> console-tools/built-in.o coreutils/built-in.o
> coreutils/libcoreutils/built-in.o debianutils/built-in.o
> e2fsprogs/built-in.o editors/built-in.o findutils/built-in.o
> init/built-in.o libbb/built-in.o libpwdgrp/built-in.o
> loginutils/built-in.o mailutils/built-in.o miscutils/built-in.o
> modutils/built-in.o networking/built-in.o
> networking/libiproute/built-in.o networking/udhcp/built-in.o
> printutils/built-in.o procps/built-in.o runit/built-in.o
> selinux/built-in.o shell/built-in.o sysklogd/built-in.o
> util-linux/built-in.o util-linux/volume_id/built-in.o -Wl,--end-group
> -Wl,--start-group -lm -Wl,--end-group -Wl,--warn-common
> -Wl,-Map,busybox_unstripped.map -Wl,--verbose
>
> Run it with -v, so that you see ld invocation and much more.
>
>  /usr/app/gcc-4.3.1-i486-linux-uclibc/libexec/gcc/i486-linux-uclibc/4.3.1/collect2
> --sysroot=/usr/cross/i486-linux-uclibc -m elf_i386 -static -o
> busybox_unstripped /usr/cross/i486-linux-uclibc/lib/crt1.o
> /usr/cross/i486-linux-uclibc/lib/crti.o
> /usr/app/gcc-4.3.1-i486-linux-uclibc/lib/gcc/i486-linux-uclibc/4.3.1/crtbeginT.o
> -L ... ... ...
> ...
> ...
> ...
>
> For example, I see ENTRY(_start) in ld output:
>
> ...
> using internal linker script:
> ==================================================
> /* Script for -z combreloc: combine and sort reloc sections */
> OUTPUT_FORMAT("elf32-i386", "elf32-i386",
>              "elf32-i386")
> OUTPUT_ARCH(i386)
> ENTRY(_start)      <===================== HERE
> SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
> ...
>
> and "objdump -drsx /usr/cross/i486-linux-uclibc/lib/crt1.o"
> indeed tells me that symbol _start exists in one of the files
> passed to linker.
>
> Do something like this on the failing build and investigate
> why linker can't find the program starting point.
>
> --
> vda
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to