Changes

Jump to navigation Jump to search
31 bytes added ,  12:16, 24 January 2008
no edit summary
Line 44: Line 44:  
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ELF file
 
| style="border: 1px solid #ccc; padding: 0.2em; background-color: #edd;" | ELF file
 
|}
 
|}
 +
 +
=== BOOT2 elf loader ===
    
The BOOT2 elf stub loader sets up a stack, calculates its own address, and switches to THUMB mode. Then it does the following:
 
The BOOT2 elf stub loader sets up a stack, calculates its own address, and switches to THUMB mode. Then it does the following:
Line 53: Line 55:  
0xD800000 seems to be the start of the (a?) hardware register space.
 
0xD800000 seems to be the start of the (a?) hardware register space.
   −
After this, it loads the ELF file, and then '''zeroes out the memory area where the ELF file resides'''. Then it goes back to ARM mode and vectors to 0xFFFF0000 (the entrypoint of the ARM / vector table). The entire BOOT2 code seems to be relocatable: it can be loaded at any address and will still work, as long as it doesn't overlap with the destination of the ELF load. The entire BOOT2 wad file cleartext is loaded and then the loader is called, so the loader can calculate the offset of the header simply by subtracting 0x10 from the PC at its entrypoint.
+
After this, it loads the ELF file, and then '''zeroes out the memory area where the ELF file resides'''. Then it goes back to ARM mode and vectors to 0xFFFF0000 (the entrypoint of the ARM / vector table). The entire BOOT2 code seems to be position-independent: it can be loaded at any address and will still work, as long as it doesn't overlap with the destination of the ELF load. The entire BOOT2 file cleartext is loaded and then the loader is called, so the loader can calculate the offset of the header simply by subtracting 0x10 from the PC at its entrypoint.

Navigation menu