On 11 April 2013 12:20, Abid, Hafiz <hafiz_a...@mentor.com> wrote: > Hi All, > I have faced a problem using GDB with user-mode qemu. Although problem was > observed for MIPS, I think it is a generic problem. I would appreciate an > advice from experts on how best to deal with. Here is the problem > description. > > GDB has ability to call function from the program being debugged > (http://sourceware.org/gdb/onlinedocs/gdb/Calling.html#Calling). For MIPS > (and on other architectures), it put a breakpoint on the stack that is used > as return address of the function. When that breakpoint is hit, GDB knows > that function is complete and it can return control to user. This breakpoint > on stack causes problem for QEMU. When it runs that instruction from stack, > it add write-protection to that page. So after the function call, GDB is not > able to write to stack. So any future function call or other operation that > need to write to stack will fail. I show an example session below taken > mostly from call-sc.exp of GDB testsuite. > > There are 2 possible solution in my mind. One was to allow writing memory if > this page originally had write access. This is a single line fix and a patch > is below.
My worry here is that this will mean that writes by the debugger won't trigger the "code area has been written, QEMU must throw away any cached translated code for that region" check. This is a tricky area of the code... thanks -- PMM