A project is being upgraded fro uVision 3.60 to uVision 5.10. The code is relocated for use with an on-chip bootloader using an LPC2136. A flash header is located at 0x8000 in memory and then the RESET code is located at 0x8020. In uVision 3.60 the following is generated and works fine as per .map file:
0x00008000 0x00000020 Data RO 1301 .ARM.__AT_0x00008000 codeheader.o 0x00008020 0x0000010c Code RO 3 * RESET startup.o
When creating the same with uVision 5.10 we get the following:
CodeHeader 0x00008000 Data 32 codeheader.o(.ARM.__AT_0x00008000) Long ARM to Thumb Veneer to QueueFreeBuffer 0x00008020 ARM Code 12 anon$$obj.o(Veneer$$Code) Long ARM to Thumb Veneer to SoftTimerGetRunningCount 0x0000802c ARM Code 12 anon$$obj.o(Veneer$$Code) Long ARM to Thumb Veneer to Spi1TimeoutReset 0x00008038 ARM Code 12 anon$$obj.o(Veneer$$Code) Reset_Handler 0x00008088 ARM Code 0 startup.o(RESET)
Clearly, this is NOT what is intended. How can the veneer be relocated to allow RESET to exist at 0x8020 as before? Preferably, I would NOT care to jump through multiple 'hoops' to correct this issue. The scatterfile shows:
LR_IROM1 0x00008000 0x00017FE0 { ; load region size_region ER_IROM1 0x00008000 0x00017FE0 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x40000040 0x00007FC0 { ; RW data .ANY (+RW +ZI) } }