Alternatively, volatile inc ax dec ax inc ax dec ax
which is the same size as 4 nops (on x86 assembly), has a net result of doing nothing (caveat interrupts/preemption), and is *absolutely illogical* to find in any machine-generated code... There must be some way to generate similar code on other supported platforms (I mean: code that's extremely unlikely to be generated by a machine but could be used as a sentinel code sequence to dyngen), but feasibility considerations apart, I don't really think this is the most elegant solution... 2005/5/8, Sebastian Kaliszewski <[EMAIL PROTECTED]>: > Hello! > > As I understand the problem with dyngen & GCC 3.4 and newer is that even > when using the following marcro (line 158 of dynget-exec.h) in op_* > functions > > #define FORCE_RET() asm volatile (""); > > GCC still puts multiple exit points of a function. > > But did anyone try the following one: > > #define FORCE_RET() asm volatile ("" : : : "memory" ); > > This tells GCC that that asm block clobbers arbitrary memory. If it doesnt > help, then maybe putting few instructions will help (increasing the weight > of the code thus convincing optimiser not to multiplicate the asm block)? > > #define FORCE_RET() asm volatile ("nop; nop; nop; nop" : : : "memory" ); > > or > > #define FORCE_RET() asm volatile ("ret; ret; ret; ret" : : : "memory" ); > > Then if the above fails, then simply search the binary code for such block > of fout instructions (in case of nops it'd be 0x90909090, in case of ret's > -- don't remember). It's rather impossible, that such immediate value would > apear inside op_* code, so the only real possibility is FORCE_RET() > occurence (Ther is also slim possibility that such code would be an align > fill block -- but AFAIR gcc is instructed ther not to align code and AFAIR > gcc would use block of 4 one byte nops -- it will use longer nops in such > cases). So then replacing such nops with jumps to end inside blocks is > trivial. > > What do you think? > > rgds > Sebastian Kaliszewski _______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel