strange Bug

Björn Döbel doebel at os.inf.tu-dresden.de
Thu Nov 13 10:12:51 CET 2014


-----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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iEYEARECAAYFAlRkdg0ACgkQP5ijxgQLUNk2wgCdFqfh0aDAENgo9t/28ECVbER4
SRUAnishTar/4xTiAdU0v4YgLxaP19f7
=2KEd
-----END PGP SIGNATURE-----




More information about the l4-hackers mailing list