Messages in this thread | ![/](/images/icornerl.gif) | | Date | Mon, 19 Mar 2007 17:23:31 -0800 | From | Zachary Amsden <> | Subject | Re: [patch 13/26] Xen-paravirt_ops: Consistently wrap paravirt ops callsites to make them patchable |
| |
Jeremy Fitzhardinge wrote: > For example, say we wanted to put a general call for sti into entry.S, > where its expected it won't touch any registers. In that case, we'd > have a sequence like: > > push %eax > push %ecx > push %edx > call paravirt_cli > pop %edx > pop %ecx > pop %eax > > > If we parse the relocs, then we'd find the reference to paravirt_cli. > If we look at the byte before and see 0xe8, then we can see if its a > call. If we then work out in each direction and see matched push/pops, > then we know what registers can be trashed in the call. This also > allows us to determine the callsite size, and therefore how much space > we need for inlining. >
No, that is a very dangerous suggestion. You absolutely *cannot* do this safely without explicitly marking the start EIP of this code. You *must* use metadata to do that. It is never safe to disassemble backwards or "rewind" EIP for x86 code.
Zach - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |