Hi,This question is on using WinARM, GCC and mainly on loader (.ld). Please pardon me if the post does not suit the thread.I am using WinARM GCC tools for compiling, linking the code for LPC2378 (NXP Controller). This worked great until recently. Now I need to put some signature in LPC2378 at particular location to make it Code read protection.Earlier my .ld file looks like { ROM (rx) : ORIGIN = 0x00000000, LENGTH = (512k-4k) RAM (rw) : ORIGIN = 0x40000000, LENGTH = (32k-32)}and with LPC2378 requirement of putting the signature of 0x12345678 at location 0x1FC I modified the .ld file as belowMEMORY{ ROM (rx) : ORIGIN = 0x00000000, LENGTH = (512k-4k) RAM (rw) : ORIGIN = 0x40000000, LENGTH = (32k-32) CRP_ROM (rx) : ORIGIN = 0x000001FC, LENGTH = 4}SECTIONS{ /* place "myArray" inside "m_my_memory" */ .crpsection : { . = ALIGN(4); KEEP(*(.crpsection*)); . = ALIGN(4); } > CRP_ROM /* first section is .text which is used for code */ .text : {/* *crt0.o (.text) */ /* Startup code *//*KEEP (crp.o(.constdata))*/KEEP(*(.vectorg))KEEP(*(.RESET))KEEP(*(.SWI_HANDLER)). = ALIGN(4);KEEP(*(.init)) /* Startup code from .init-section */*(.text .text.*) /* remaining code */*(.gnu.linkonce.t.*)*(.glue_7)*(.glue_7t)*(.gcc_except_table)*(.rodata) /* read-only data (constants) */*(.rodata*)*(.gnu.linkonce.r.*). = ALIGN(4); } > ROM /***** old: .text : { *crt0.o (.text) *(.text) *(.rodata) *(.rodata*) *(.glue_7) *(.glue_7t) } > ROM created a crp.c file with content#define CRP1 0x12345678__attribute__((section(".crpsection"))) unsigned int const Security_Value = CRP1;and added this makefileSRC = $(TARGET).c monitor.c adc.c crp.c With this I get an error saying c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe: section .crpsection [000001fc -> 000001ff] overlaps section .text [00000000 -> 0000b23b]c:/winarm/bin/../lib/gcc/arm-elf/4.1.2/../../../../arm-elf/bin/ld.exe: main.elf: section .crpsection lma 0x1fc overlaps previous sectionsBasically I want to reserve memory location 0x1FC for CRP value. This is basically putting a section inside a section. Is it possible to do this way in WinARM - GCC tools sets? Or is there any other way to do this? Generally I look at generated .bin file to see the signature of 0x12345678 at location 0x1FC.Any thoughts/ suggestions are helpful With best regards,Phani.
Hello Phani,
Yes, this needs handcrafting. Take a look at page 7 of this doc. It shows the handcrafted portion of a linker script; in summary, one needs to set the location counter to 0x1fc, then place the crp section.
-amol