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 ========================
how to know the value of the variables defined in link script file?
Started by ●April 18, 2006
Reply by ●April 18, 20062006-04-18
justincui@gmail.com wrote:> 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; >(-- 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