1. This forum section is a read-only archive which contains old newsgroup posts. If you wish to post a query, please do so in one of our main forum sections (here). This way you will get a faster, better response from the members on Motherboard Point.

how to know the value of the variables defined in link script file?

Discussion in 'Embedded' started by justincui, Apr 18, 2006.

  1. justincui

    justincui Guest

    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 ========================
     
    justincui, Apr 18, 2006
    #1
    1. Advertisements

  2. justincui

    Tauno Voipio Guest

    (-- 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, Apr 18, 2006
    #2
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.