Hi,
I find a program will receive segv fault when I set a regular tracepoint
and a fast tracepoint at the same address, start tracing and resume program.
gdbserver has taken care of this situation in many places of the code,
when uninserting breakpoint or fast tracepoint, write_inferior_memory is
called to take care of layering breakpoints on top of fast tracepoints.
However, it is not right to me. Here is an example to illustrate this
problem.
Supposing I set a regular tracepoint and a fast tracepoint on 0x080484fc,
0x080484fc<+3>: e8 f3 ff ff ff call 0x80484f4<func>
During insertion, trap insn (for regular tracepoint) and jmp insn (for
fast tracepoint) are inserted, and gdbserver takes care of them to make
sure trap insn is *always* inserted on top of jmp insn.