
Le 30/11/2010 09:28, Andreas Bießmann a écrit :
- beq clear_bss /* skip relocation */
- mov r1, r6
Why use r1?
Use a scratch register here cause stmia Rn! does increment Rn.
Therefore usage of r6 here would destroy the saved 'addr of destination'. Cause that fact we have saved the 'addr of destination' @ beginning of relocate_code twice, once to r6 and once to r7. This is obviously not needed iv we change the register in copy_loop (which was already used in comment .. if you saw that on the end of the line).
Understood.
I doubt if this a 'speed up' but we can have a cleaner interface. We have r4, r5, r6 as storage of input values to relocate_code. We do only use scratch registers for copy_loop, fixloop for relocation, clear_bss later on. We do decide if we need fixloop for relocation or if we can skip that and then setup the relevant scratch registers.
Well this is only an RFC. I found that plus the NULL pointer stuff worth to mention. It is not that important to get this special patch in cause the current implementation do also work.
The r8 issue and the zero-filled reloc entry issue are important to pull in as they can cause all sorts of time-wasting issues.
regards
Andreas Bießmann
Amicalement,