ARM720t -- Relocating Exception Vectors
Friedrich
PATCH 1/1 ARM720t -- Relocating Exception Vectors
Quoted 5 lines
Subject: [U-Boot-Users] [PATCH] ARM720t -- Relocating Exception Vectors
This patch is for
cpu/arm720t/start.S-- The patch relocates the exception vectors to RAM address0x0.
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.
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.
Best regards,
Lars Friedrich
PATCH 1/1 ARM720t -- Relocating Exception Vectors
Quoted 5 lines · Lars
Quoted 3 lines
This patch is for
cpu/arm720t/start.S-- The patch relocates the exception vectors to RAM address0x0.No offense, but this is a bad hack. The copy code belongs from
I see your point -- thanks for the advice. I will submit a new patch incorporating your advice.
Everyone, please ignore this patch.
Cheers,
Curt
Signature · 6 lines
========================================================================
Curt Brune | Phone 1.650.380.2528 | Managing Principal
curt at cucy.com | WWW www.cucy.com | Cucy Systems
========================================================================
Cucy Systems -- Software. Integration. Training.
========================================================================PATCH 1/1 ARM720t -- Relocating Exception Vectors
In reply to FriedrichAttached is a new patch for relocating the exception vectors, which addresses your concerns:
Quoted 3 lines · Lars
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.
Quoted 5 lines
And from an 'optimized code' point of view it belongs there, too, as
_TEXT_BASEis 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
Signature · 25 lines
========================================================================
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 */