I compiled kernel for ARM processor.
I am trying to trace kernel control flow. I am looking at file "arch/arm/kernel/head.S" . Code starting with
-------------------
__INIT
.type stext, #function
ENTRY(stext)
mov r12, r0
.type stext, #function
ENTRY(stext)
mov r12, r0
mov r0, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ make sure svc mode
msr cpsr_c, r0 @ and all irqs disabled
bl __lookup_processor_type
-------------------
msr cpsr_c, r0 @ and all irqs disabled
bl __lookup_processor_type
-------------------
Question comes up at last line (bl __lookup_processor_type) of this code snippet.
If I look into System.map file I find the address of symbol "__lookup_processor_type" as c0008168 and as per my understanding kernel image is loaded in the memory starting after first 1 MB. Here I assume that I am correctly interpreting
System.map file. Please let me know if I am misinterpreting this file. I assume that first column contains address, second I dont know (please tell) and third symbol. Right?
Now since MMU is disabled at this point of time how come we can branch to "__lookup_processor_type" whose address is after 3 GB??? What I mean is - at this stage page tables have not been setup then how can we access a symbol which has been assigned address as c0008168 and lying in some memory region???
Thanks
- A.