Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: [lpc2000] stack, crt0.S and *.ld files in WinARM

2006-03-06 by Tom Walsh

Grzegorz Reszka wrote:

>Hello,
>  
>  Thanks for link to the lpc-ARM-book_srn.pdf. I read it and my knowledge  about LPC uControllers now is better ;). Actually, I`m using startup.s  and linker.ld from KEIL uVision. I was making some tests with WinARM  crt0.s and LPC2138-ROM.ld files and using them is possible but only  when I change STACK_SIZE from 0x400 to 0x000, So it is quite strange -  size of stack equals zero???? What do you think about it?
>  
>  By the way, can you send me your *.s and *.ld files? It doesn`t matter  that they are commented in portuguese. I will compare them with my  files and I wil try to understand them. Eventually I will use to do it  some translator or dictionary ;).
>  
>
Your linker script does look odd, this is mine from a gcc-4.0.2 Thumb 
dev environ (binutils-2.16.1, gcc-4.0.2):

=============== begin LPC2138ROM.ld ====================
/***********************************************************************/
/*                                                                     */
/*  ROM.ld:  Linker Script File                                        */
/*                                                                     */
/***********************************************************************/
SEARCH_DIR( ../libs )
SEARCH_DIR( ./)

ENTRY(_boot)
STACK_SIZE = 0x800;

/* Memory Definitions */
MEMORY
{
  ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000
  RAM (rw) : ORIGIN = 0x40000000, LENGTH = 0x00008000
}

/* Section Definitions */
SECTIONS
{
  /* first section is .text which is used for code */
  .text :
  {
    *crt0.o (.text)            /* Startup code */
    *(.text)                   /* remaining code */
    *(.rodata)                 /* read-only data (constants) */
    *(.rodata*)
    *(.glue_7)
    *(.glue_7t)
  } > ROM

  . = ALIGN(4);
  _etext = . ;
  PROVIDE (etext = .);

  /* .data section which is used for initialized data */
  .data : AT (_etext)
  {
    _data = .;
    *(.data)
  } > RAM
 
  . = ALIGN(4);
  _edata = . ;
  PROVIDE (edata = .);

  /* .bss section which is used for uninitialized data */
  .bss (NOLOAD) :
  {
    __bss_start = . ;
    __bss_start__ = . ;
    *(.bss)
    *(COMMON)
    . = ALIGN(4);
  } > RAM

  . = ALIGN(4);
  __bss_end__ = . ;
  PROVIDE (__bss_end = .);

  .stack ALIGN(256) :
  {
    . += STACK_SIZE;
    PROVIDE (_stack = .);
  } > RAM

  _end = . ;
  PROVIDE (end = .);

  /* 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 .gnu.linkonce.wi.*) }
  .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) }
}
    /*  Libraries to link against.                    */
INPUT( -lc -lstdc -lgcc );

==================== snip ==========================

I use the above script to create the elf image, then this image is then 
used to create the binary image that goes into flash.  If you are 
running cygwin, it would be a good idea to install the manpages and run 
an 'info ld' to see what is in these linker scripts.  The ld info pages 
have a tutorial guiding you through just what is in these scripts.

Please note, the information regarding debugging information is strictly 
for where to place this into the elf file.  It is not used in the 
binary.  That debug info is used for Insight (gdb + gui).

I don't run cygwin (linux here) so I don't know what the details of 
getting the manpages installed would be.

Regards,

TomW


-- 
Tom Walsh - WN3L - Embedded Systems Consultant
http://openhardware.net, http://cyberiansoftware.com
"Windows? No thanks, I have work to do..."
----------------------------------------------------

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.