-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
I only have a pc=115c7a8, but since i start from 0x01000000, i guess that right?
115c7a8: e28cca13 add ip, ip, #77824 ; 0x13000
No way. This instruction adds a constant to a register and does not touch memory at all. Hence it won't raise a page fault. Did you objdump your program for that?
I'm not sure what you mean.
The error you are seeing is a page fault. Page faults happen, when you access memory that is not mapped. For this you need to be executing an instruction that actually accesses memory. The instruction you found does not access memory.
I'm not experienced with objdump, though. But i can't look at all Load & Store instructions, do i? Looking for pc=15c7a8 isn't the solution, neither, since it's not there. So, what would u recommend to look for?
We are looking for an instruction at address 0x15c7a8. Things I would check now:
* If the instruction is not in your program (the one in the build directory), is it maybe in another module that gets packed into your bootstrap.elf image? You get a list of the packed modules when you run make E=.. - the binaries should all be in your build directory.
* At the time of the page fault you end up in the kernel debugger. Use 'lp' to see the list of present threads. One of them will be the one that is in the debugger now. It should be one of the L4Re threads (those have names starting with # in the thread list). Which other thread is currently blocking in IPC to the L4Re thread? What is this thread's state (command 't<id>')? At what instruction is the thread stuck? What binary belongs to this thread?
* Easy stuff: is your program even executing code in its main() function already? How far does the program get before the page fault happens?
My problem again: The function foo() is only called at one place in the code. I have to comment some stuff out in foo() to make the program work. But even if i dont call foo() (it is useless for this test-case), the program fails at the same place. So, the fault can't be in foo().
Then there seems to be no need for debugging foo().
Btw., are you debugging this on real hardware or in an emulator, such as qemu?
Bjoern