copy of . data section

Bassem Fahmy t_fahmy_bassem at hotmail.com
Fri Sep 5 05:44:07 UTC 2008


I'm currently doing a bsp for atmel sam7 i'm producing a .ELF. how can i copy the .data section from the flash to the data.

this is the linker script i'm currently using.



/*
 * Cirrus EP7312 linker script
 *
 * Copyright (c) 2002 by Jay Monkman 
 *	
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *
 *  http://www.rtems.com/license/LICENSE.
 *
 *
 *  $Id: linkcmds,v 1.6 2004/11/05 14:43:08 joel Exp $
*/

OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
	      "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)


MEMORY {
	rom : ORIGIN = 0x00100000, LENGTH = 256k
	ram : ORIGIN = 0x00200000, LENGTH = 64k
}

/*
 * Declare some sizes.
 */
_flash_base = DEFINED(_flash_base) ? _flash_base : 0x00100000;
_flash_size = DEFINED(_flash_size) ? _flash_size : 256k;
_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x00200000;
_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 64k;


_irq_stack_size = DEFINED(_irq_stack_size) ? _irq_stack_size : 0x1000;
_fiq_stack_size = DEFINED(_fiq_stack_size) ? _fiq_stack_size : 0x400;
_abt_stack_size = DEFINED(_abt_stack_size) ? _abt_stack_size : 0;
_svc_stack_size = DEFINED(_svc_stack_size) ? _svc_stack_size : 0x1000;
_vector_table_size = DEFINED(_vector_table_size) ? _vector_table_size : 0x100;


/* Do we need any of these for elf?
   __DYNAMIC = 0;    */

SECTIONS
{
  . = _flash_base;
  .base :
  {
    _sram_base = .;
    arm_exception_table = .;    

    *(.vectors)

    fiq_vect_table    = .;    /* this and irq_vector_table should be swapped */
    . += (32 * 4);

    irq_vector_table = .;
    . += (32 * 4);      

  }> rom

  .init          : 
  { 
    KEEP (*(.init))
  }> rom   /*=0*/

  .text      :
  {
	_text_start = .;
	 CREATE_OBJECT_SYMBOLS
	*(.text) 
	*(.text.*)

        /*
         * Special FreeBSD sysctl sections.
         */
        . = ALIGN (16);
        __start_set_sysctl_set = .;
        *(set_sysctl_*);
        __stop_set_sysctl_set = ABSOLUTE(.);
        *(set_domain_*);
        *(set_pseudo_*);

	/* .gnu.warning sections are handled specially by elf32.em.  */
	*(.gnu.warning)
	*(.gnu.linkonce.t*)
	*(.glue_7)
	*(.glue_7t)

	/* I think these come from the ld docs: */	
	___CTOR_LIST__ = .;
	LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
	*(.ctors)
	LONG(0)
	___CTOR_END__ = .;
	___DTOR_LIST__ = .;
	LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
	*(.dtors)
	LONG(0)
	___DTOR_END__ = .;

	_etext = .;
	PROVIDE (etext = .);
  }> rom  

  .fini      :
  {
    KEEP (*(.fini))
  }> rom  /*=0*/

  .data :
  { 
    *(.data)
    *(.data.*)
    *(.gnu.linkonce.d*)
    *(.jcr)
    SORT(CONSTRUCTORS)
    _edata = .;
  }> ram 

  .eh_frame : { *(.eh_frame) }> ram
  .data1   : { *(.data1) }> ram
  .eh_frame : { *(.eh_frame) }> ram
  .gcc_except_table : { *(.gcc_except_table) }> ram

  .rodata :
  {
    *(.rodata)
    *(.rodata.*)
    *(.gnu.linkonce.r*)
  }> rom

  .bss       :
  {
	_bss_start_ = .;
	_clear_start = .;
	*(.bss)
	*(.bss.*)
	*(.gnu.linkonce.b.*)
	*(COMMON)
	. = ALIGN(64);
	_clear_end = .;

	. = ALIGN (256);
	_abt_stack = .;
	. += _abt_stack_size;

	. = ALIGN (256);
	_irq_stack = .;
	. += _irq_stack_size;

	. = ALIGN (256);
	_fiq_stack = .;
	. += _fiq_stack_size;

	. = ALIGN (256);
	_svc_stack = .;
	. += _svc_stack_size;

	. = ALIGN (4);
	PROVIDE(_it_vector_table = .);
	. += _vector_table_size;

	_bss_end_ = .;
	_end = .;
	__end = .;


	. = ALIGN (1024);
	_bss_free_start = .;

  }> ram

/*
  .regs	:
  {
	ep7312_regs_base = .;
	ep7312_regs = .;
	. += 8192;
  }> regs
*/


/* Debugging stuff follows? */

  /* Stabs debugging sections.  */
  .stab 0 : { *(.stab) } 
  .stabstr 0 : { *(.stabstr) } 
  .stab.excl 0 : { *(.stab.excl) } 
  .stab.exclstr 0 : { *(.stab.exclstr) }
  .stab.index 0 : { *(.stab.index) } 
  .stab.indexstr 0 : { *(.stab.indexstr) } 
  .comment 0 : { *(.comment) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) } 
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) } 
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) } 
  /*.stack 0x80000 : { _stack = .; *(.stack) }*/
  /* These must appear regardless of  .  */
}

_________________________________________________________________
Want to do more with Windows Live? Learn “10 hidden secrets” from Jamie.
http://windowslive.com/connect/post/jamiethomson.spaces.live.com-Blog-cns!550F681DAD532637!5295.entry?ocid=TXT_TAGLM_WL_domore_092008


More information about the users mailing list