Tech Support > Computer Hardware > Microprocessors > how to know the value of the variables defined in link script file?
how to know the value of the variables defined in link script file?
Posted by justincui@gmail.com on April 18th, 2006


Hi,
how to know the value of the variables defined in link script file?
for example, the following is the target.ld in ecos, could anybody know
how to extract the __xxxx values from the generated ELF file?
============== start of target.ld=====================
STARTUP(vectors.o)
ENTRY(__exception_reset)

INPUT(extras.o)


GROUP(libtarget.a libgcc.a libsupc++.a)
MEMORY
{
ram : ORIGIN = 0, LENGTH = 0x400000
}

SECTIONS
{

__reserved_vectors = 0;
. = __reserved_vectors + 0x3000;

__reserved_vsr_table = ALIGN (0x10);
. = __reserved_vsr_table + 0x200;

__reserved_virtual_table = ALIGN (0x10);
. = __reserved_virtual_table + 0x100;

__reserved_for_rom = ALIGN (0x10);
. = __reserved_for_rom + 0x1cd00;

.vectors ALIGN (0x10) : {
. = .;
KEEP(*(.vectors))
} > ram

.text ALIGN (0x4) : {
_stext = .;
*(.text*)
*(.gnu.warning)
*(.gnu.linkonce*)
*(.init)
} > ram
_etext = .;
PROVIDE (etext = .);

.fini ALIGN (0x4) : {
. = .;
*(.fini)
} > ram

.rodata1 ALIGN (0x8) : {
. = .;
*(.rodata1*)
} > ram

.rodata ALIGN (0x8) : {
. = .;
*(.rodata*)
} > ram

.fixup ALIGN (0x4) : {
__FIXUP_START__ = ABSOLUTE(.);
*(.fixup) __FIXUP_END__ = ABSOLUTE(.);
} > ram

.gcc_except_table ALIGN (0x1) : {
__EXCEPT_START__ = ABSOLUTE(.);
*(.gcc_except_table)
__EXCEPT_END__ = ABSOLUTE(.);
} > ram

.data ALIGN (0x8) : {
__ram_data_start = ABSOLUTE(.);
*(.data*)

__GOT1_START__ = ABSOLUTE(.);
*(.got1)
__GOT1_END__ = ABSOLUTE(.);

. = ALIGN(8);
__CTOR_LIST__ = ABSOLUTE(.);
KEEP(*(SORT(.ctors*)))
__CTOR_END__ = ABSOLUTE(.);

__DTOR_LIST__ = ABSOLUTE(.);
KEEP(*(SORT(.dtors*)))
__DTOR_END__ = ABSOLUTE(.);

. = ALIGN(8);
KEEP(*( SORT (.ecos.table.*))) ;

. = ALIGN(4);
*( .2ram.*) ;
__GOT2_START__ = ABSOLUTE(.);
*(.got2)
__GOT2_END__ = ABSOLUTE(.);

__GOT_START = ABSOLUTE(.);
_GLOBAL_OFFSET_TABLE_ = ABSOLUTE(. + 32768);
_SDA_BASE_ = ABSOLUTE(.);
*(.got.plt)
*(.got)
__GOT_END__ = ABSOLUTE(.);

*(.dynamic)
*(.eh_frame)
__SDATA_START__ = ABSOLUTE(.);
*(.sdata)
*(.sdata.*)
__SDATA2_START__ = ABSOLUTE(.);

*(.sdata2*)
} > ram
__rom_data_start = LOADADDR(.data);
__ram_data_end = .;
PROVIDE(__ram_data_end = .);
_edata = .;
PROVIDE (edata = .);

.sbss ALIGN (0x4) : {
__sbss_start = ABSOLUTE (.);
__SBSS_START__ = ABSOLUTE(.);
*(.sbss.*)
__SBSS_END__ = ABSOLUTE(.);
__SBSSx_START__ = ABSOLUTE(.);
*(.sbss*)
__SBSSx_END__ = ABSOLUTE(.);
*(.scommon*)
__sbss_end = ABSOLUTE (.);
} > ram

.bss ALIGN (0x10) : {
__bss_start = ABSOLUTE (.);
. = .;
*(.dynbss*)
*(.bss*)
*(COMMON)
__bss_end = ABSOLUTE (.);
} > ram
__heap1 = ALIGN (0x8);

. = ALIGN(4);
_end = .;
PROVIDE (end = .);

}
hal_vsr_table = (0x0 + 0x3000);

hal_virtual_vector_table = ((0x0 + 0x3000) + 0x200);
======================= end of target.ld ========================

Posted by Tauno Voipio on April 18th, 2006


justincui@gmail.com wrote:
(-- rest clipped, TV --)

If the linker is GNU ld, the symbols defined in the linker
script are available as external addresses to the code.

(Did you read the ld manual?)

--

Tauno Voipio
tauno voipio (at) iki fi


Similar Posts