/* Reduced from an ICE seen in qemu's target/i386/tcg/translate.c */ typedef long int __jmp_buf[8]; struct __jmp_buf_tag { __jmp_buf __jmpbuf; }; typedef struct __jmp_buf_tag sigjmp_buf[1]; extern int __sigsetjmp(sigjmp_buf env, int savesigs); extern void siglongjmp(sigjmp_buf env, int val); typedef struct DisasContextBase { int num_insns; } DisasContextBase; typedef struct DisasContext { DisasContextBase base; sigjmp_buf jmpbuf; } DisasContext; extern int translator_ldub(DisasContextBase *base, int); int advance_pc(DisasContext *s, int num_bytes) { if (s->base.num_insns > 1) { siglongjmp(s->jmpbuf, 2); } return 0; } static inline int x86_ldub_code(DisasContext *s) { return translator_ldub(&s->base, advance_pc(s, 1)); } static void disas_insn(DisasContext *s) { int b; __sigsetjmp(s->jmpbuf, 0); b = x86_ldub_code(s); }