Linker problem...
Nick Clifton
nickc@redhat.com
Tue Aug 30 16:03:00 GMT 2005
Hi Gerhard,
> _edata = .;
> PROVIDE (edata = .);
>
> __u_boot_cmd_start = .;
> .u_boot_cmd : { *(.u_boot_cmd) }
> The binutils-2.16.1 (and also the latests snapshots) create the following map output:
>
> fffe7bd8 D env_name_spec
> fffe7bdc A __u_boot_cmd_start
> fffe7bdc A _edata
> [...]
> fffe8384 D desc_and_len_tbl
> fffe83b4 D __u_boot_cmd_autoscr
> __u_boot_cmd_start is placed wrong here, and the resulting bootloader does not
> work correctly.
It looks like you need to fix up the linker script. From ld.texinfo:
dot outside sections
Setting symbols to the value of the location counter outside
of an output section statement can result in unexpected values
if the linker needs to place orphan sections. For example,
given the following:
SECTIONS
{
start_of_text = . ;
.text: { *(.text) }
end_of_text = . ;
start_of_data = . ;
.data: { *(.data) }
end_of_data = . ;
}
[...] As well, the linker doesn't associate the above
symbol names with their sections. Instead, it assumes
that all assignments or other statements belong to the
previous output section, except for the special case of
an assignment to . [...] So you could write:
SECTIONS
{
start_of_text = . ;
.text: { *(.text) }
end_of_text = . ;
. = . ;
start_of_data = . ;
.data: { *(.data) }
end_of_data = . ;
}
Cheers
Nick
More information about the Binutils
mailing list