From mboxrd@z Thu Jan 1 00:00:00 1970 From: Curt Brune Date: Wed, 7 Jul 2004 10:33:37 -0700 Subject: [U-Boot-Users] [PATCH] ARM720t -- Relocating Exception Vectors In-Reply-To: <96A7A8B8A8ACBA4DAF7FD558BD32799BF56070@svex01001> References: <96A7A8B8A8ACBA4DAF7FD558BD32799BF56070@svex01001> Message-ID: <20040707103337.A15046@cucy.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Attached is a new patch for relocating the exception vectors, which addresses your concerns: On Wed, Jul 07, 2004 at 09:21:08AM +0200, Friedrich, Lars wrote: > No offense, but this is a bad hack. The copy code belongs from > a 'structured' point of view to where the relocation is done and not > just attached to the end of the source code. Agreed -- moved the vector relocation code to where the main relocation resides. > And from an 'optimized code' point of view it belongs there, too, as > _TEXT_BASE is already loaded there into an register for example, > no need to do this multiple times. I don't quite see the necessarity > for a loop, too. There are 7 exception vectors, never more, never less. > The copy procedure can be handled by a single ldmia/stmia pair. Almost -- I also need to copy the 7 words after the vectors that contain the absolute addresses of the exception handlers. In total that takes two ldmia/stmia pairs. Thanks for the criticism -- the code is a bit tighter now (down to 7 instructions from 14, no branches and no loops). Cheers, Curt -- ======================================================================== Curt Brune | Phone 1.650.380.2528 | Managing Principal curt at cucy.com | WWW www.cucy.com | Cucy Systems ======================================================================== Cucy Systems -- Software. Integration. Training. ======================================================================== -------------- next part -------------- diff -purN new/u-boot/cpu/arm720t/start.S u-boot/cpu/arm720t/start.S --- new/u-boot/cpu/arm720t/start.S Thu Jul 1 09:30:47 2004 +++ u-boot/cpu/arm720t/start.S Wed Jul 7 10:17:33 2004 @@ -129,6 +129,14 @@ relocate: /* relocate U-Boot to RAM cmp r0, r1 /* don't reloc during debug */ beq stack_setup + ldr r2, =0x0 /* Relocate the exception vectors */ + cmp r1, r2 /* and associated data to address */ + ldmneia r0!, {r3-r10} /* 0x0. Do nothing if TEXT_BASE is */ + stmneia r2!, {r3-r10} /* 0x0. Copy the first 15 words. */ + ldmneia r0, {r3-r9} + stmneia r2, {r3-r9} + adrne r0, _start /* restore r0 */ + ldr r2, _armboot_start ldr r3, _bss_start sub r2, r3, r2 /* r2 <- size of armboot */