diff mbox

[1/3] Use uintptr_t for various op related functions

Message ID CAAu8pHs2+BmJmAixb+fb9tRvmTc2GHUNbutdPFmGeizguFgT9w@mail.gmail.com
State New
Headers show

Commit Message

Blue Swirl April 9, 2012, 7:17 p.m. UTC
Use uintptr_t instead of void * or unsigned long in
several op related functions, env->mem_io_pc and
GETPC() macro.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 cpu-defs.h                    |    4 ++--
 exec-all.h                    |   10 +++++-----
 exec.c                        |   12 ++++++------
 softmmu_template.h            |   20 ++++++++++----------
 target-alpha/cpu.h            |    6 +++---
 target-alpha/fpu_helper.c     |    6 +++---
 target-alpha/helper.c         |   13 ++++++-------
 target-alpha/mem_helper.c     |    6 +++---
 target-arm/op_helper.c        |    8 +++-----
 target-cris/op_helper.c       |   12 +++++-------
 target-i386/op_helper.c       |    8 +++-----
 target-lm32/op_helper.c       |    8 +++-----
 target-m68k/op_helper.c       |    8 +++-----
 target-microblaze/op_helper.c |    8 +++-----
 target-mips/op_helper.c       |   18 ++++++++----------
 target-ppc/op_helper.c        |    8 +++-----
 target-s390x/op_helper.c      |    8 +++-----
 target-sh4/op_helper.c        |   14 ++++++--------
 target-sparc/cpu.h            |    2 +-
 target-sparc/ldst_helper.c    |   12 +++++-------
 target-xtensa/op_helper.c     |    9 ++++-----
 user-exec.c                   |    2 +-
 22 files changed, 89 insertions(+), 113 deletions(-)

Comments

Stefan Weil April 10, 2012, 7:24 p.m. UTC | #1
Am 09.04.2012 21:17, schrieb Blue Swirl:
> Use uintptr_t instead of void * or unsigned long in
> several op related functions, env->mem_io_pc and
> GETPC() macro.
>
> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
> ---
> cpu-defs.h | 4 ++--
> exec-all.h | 10 +++++-----
> exec.c | 12 ++++++------
> softmmu_template.h | 20 ++++++++++----------
> target-alpha/cpu.h | 6 +++---
> target-alpha/fpu_helper.c | 6 +++---
> target-alpha/helper.c | 13 ++++++-------
> target-alpha/mem_helper.c | 6 +++---
> target-arm/op_helper.c | 8 +++-----
> target-cris/op_helper.c | 12 +++++-------
> target-i386/op_helper.c | 8 +++-----
> target-lm32/op_helper.c | 8 +++-----
> target-m68k/op_helper.c | 8 +++-----
> target-microblaze/op_helper.c | 8 +++-----
> target-mips/op_helper.c | 18 ++++++++----------
> target-ppc/op_helper.c | 8 +++-----
> target-s390x/op_helper.c | 8 +++-----
> target-sh4/op_helper.c | 14 ++++++--------
> target-sparc/cpu.h | 2 +-
> target-sparc/ldst_helper.c | 12 +++++-------
> target-xtensa/op_helper.c | 9 ++++-----
> user-exec.c | 2 +-
> 22 files changed, 89 insertions(+), 113 deletions(-)
>
> diff --git a/cpu-defs.h b/cpu-defs.h
> index 3268968..88d8093 100644
> --- a/cpu-defs.h
> +++ b/cpu-defs.h
> @@ -166,8 +166,8 @@ typedef struct CPUWatchpoint {
> /* in order to avoid passing too many arguments to the MMIO \
> helpers, we store some rarely used information in the CPU \
> context) */ \
> - unsigned long mem_io_pc; /* host pc at which the memory was \
> - accessed */ \
> + uintptr_t mem_io_pc; /* host pc at which the memory was \
> + accessed */ \
> target_ulong mem_io_vaddr; /* target virtual addr at which the \
> memory was accessed */ \
> uint32_t halted; /* Nonzero if the CPU is in suspend state */ \
> diff --git a/exec-all.h b/exec-all.h
> index fa7bdfe..fccce88 100644
> --- a/exec-all.h
> +++ b/exec-all.h
> @@ -87,7 +87,7 @@ int cpu_gen_code(CPUArchState *env, struct
> TranslationBlock *tb,
> int cpu_restore_state(struct TranslationBlock *tb,
> CPUArchState *env, uintptr_t searched_pc);
> void QEMU_NORETURN cpu_resume_from_signal(CPUArchState *env1, void *puc);
> -void QEMU_NORETURN cpu_io_recompile(CPUArchState *env, void *retaddr);
> +void QEMU_NORETURN cpu_io_recompile(CPUArchState *env, uintptr_t 
> retaddr);
> TranslationBlock *tb_gen_code(CPUArchState *env,
> target_ulong pc, target_ulong cs_base, int flags,
> int cflags);
> @@ -287,13 +287,13 @@ extern void *tci_tb_ptr;
> # endif
> #elif defined(__s390__) && !defined(__s390x__)
> # define GETPC() \
> - ((void *)(((uintptr_t)__builtin_return_address(0) & 0x7fffffffUL) - 1))
> + (((uintptr_t)__builtin_return_address(0) & 0x7fffffffUL) - 1)
> #elif defined(__arm__)
> /* Thumb return addresses have the low bit set, so we need to subtract 
> two.
> This is still safe in ARM mode because instructions are 4 bytes. */
> -# define GETPC() ((void *)((uintptr_t)__builtin_return_address(0) - 2))
> +# define GETPC() ((uintptr_t)__builtin_return_address(0) - 2)
> #else
> -# define GETPC() ((void *)((uintptr_t)__builtin_return_address(0) - 1))
> +# define GETPC() ((uintptr_t)__builtin_return_address(0) - 1)
> #endif
>
> #if !defined(CONFIG_USER_ONLY)
> @@ -305,7 +305,7 @@ void io_mem_write(struct MemoryRegion *mr,
> target_phys_addr_t addr,
> uint64_t value, unsigned size);
>
> void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr);
> + uintptr_t retaddr);
>
> #include "softmmu_defs.h"
>
> diff --git a/exec.c b/exec.c
> index 03d3a6b..63a0d2f 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1221,7 +1221,7 @@ static inline void
> tb_invalidate_phys_page_fast(tb_page_addr_t start, int len)
>
> #if !defined(CONFIG_SOFTMMU)
> static void tb_invalidate_phys_page(tb_page_addr_t addr,
> - unsigned long pc, void *puc)
> + uintptr_t pc, void *puc)
> {
> TranslationBlock *tb;
> PageDesc *p;
> @@ -4477,20 +4477,20 @@ int cpu_memory_rw_debug(CPUArchState *env,
> target_ulong addr,
>
> /* in deterministic execution mode, instructions doing device I/Os
> must be at the end of the TB */
> -void cpu_io_recompile(CPUArchState *env, void *retaddr)
> +void cpu_io_recompile(CPUArchState *env, uintptr_t retaddr)
> {
> TranslationBlock *tb;
> uint32_t n, cflags;
> target_ulong pc, cs_base;
> uint64_t flags;
>
> - tb = tb_find_pc((uintptr_t)retaddr);
> + tb = tb_find_pc(retaddr);
> if (!tb) {
> cpu_abort(env, "cpu_io_recompile: could not find TB for pc=%p",
> - retaddr);
> + (void *)retaddr);
> }
> n = env->icount_decr.u16.low + tb->icount;
> - cpu_restore_state(tb, env, (unsigned long)retaddr);
> + cpu_restore_state(tb, env, retaddr);
> /* Calculate how many instructions had been executed before the fault
> occurred. */
> n = n - env->icount_decr.u16.low;
> @@ -4638,7 +4638,7 @@ bool virtio_is_big_endian(void)
>
> #define MMUSUFFIX _cmmu
> #undef GETPC
> -#define GETPC() NULL
> +#define GETPC() ((uintptr_t)0)
> #define env cpu_single_env
> #define SOFTMMU_CODE_ACCESS
>
> diff --git a/softmmu_template.h b/softmmu_template.h
> index afcab1e..b285d78 100644
> --- a/softmmu_template.h
> +++ b/softmmu_template.h
> @@ -69,17 +69,17 @@
> static DATA_TYPE glue(glue(slow_ld, SUFFIX), MMUSUFFIX)(ENV_PARAM
> target_ulong addr,
> int mmu_idx,
> - void *retaddr);
> + uintptr_t retaddr);
> static inline DATA_TYPE glue(io_read, SUFFIX)(ENV_PARAM
> target_phys_addr_t physaddr,
> target_ulong addr,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> DATA_TYPE res;
> MemoryRegion *mr = iotlb_to_region(physaddr);
>
> physaddr = (physaddr & TARGET_PAGE_MASK) + addr;
> - env->mem_io_pc = (unsigned long)retaddr;
> + env->mem_io_pc = retaddr;
> if (mr != &io_mem_ram && mr != &io_mem_rom
> && mr != &io_mem_unassigned
> && mr != &io_mem_notdirty
> @@ -113,7 +113,7 @@ glue(glue(glue(HELPER_PREFIX, ld), SUFFIX),
> MMUSUFFIX)(ENV_PARAM
> target_ulong tlb_addr;
> target_phys_addr_t ioaddr;
> unsigned long addend;
> - void *retaddr;
> + uintptr_t retaddr;
>
> /* test if there is match for unaligned or IO access */
> /* XXX: could done more in memory macro in a non portable way */
> @@ -166,7 +166,7 @@ static DATA_TYPE
> glue(glue(slow_ld, SUFFIX), MMUSUFFIX)(ENV_PARAM
> target_ulong addr,
> int mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> DATA_TYPE res, res1, res2;
> int index, shift;
> @@ -219,13 +219,13 @@ static void glue(glue(slow_st, SUFFIX),
> MMUSUFFIX)(ENV_PARAM
> target_ulong addr,
> DATA_TYPE val,
> int mmu_idx,
> - void *retaddr);
> + uintptr_t retaddr);
>
> static inline void glue(io_write, SUFFIX)(ENV_PARAM
> target_phys_addr_t physaddr,
> DATA_TYPE val,
> target_ulong addr,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> MemoryRegion *mr = iotlb_to_region(physaddr);
>
> @@ -238,7 +238,7 @@ static inline void glue(io_write, SUFFIX)(ENV_PARAM
> }
>
> env->mem_io_vaddr = addr;
> - env->mem_io_pc = (unsigned long)retaddr;
> + env->mem_io_pc = retaddr;
> #if SHIFT <= 2
> io_mem_write(mr, physaddr, val, 1 << SHIFT);
> #else
> @@ -260,7 +260,7 @@ void glue(glue(glue(HELPER_PREFIX, st), SUFFIX),
> MMUSUFFIX)(ENV_PARAM
> target_phys_addr_t ioaddr;
> unsigned long addend;
> target_ulong tlb_addr;
> - void *retaddr;
> + uintptr_t retaddr;
> int index;
>
> index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
> @@ -310,7 +310,7 @@ static void glue(glue(slow_st, SUFFIX), 
> MMUSUFFIX)(ENV_PARAM
> target_ulong addr,
> DATA_TYPE val,
> int mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> target_phys_addr_t ioaddr;
> unsigned long addend;
> diff --git a/target-alpha/cpu.h b/target-alpha/cpu.h
> index 74bf7f7..fd578ce 100644
> --- a/target-alpha/cpu.h
> +++ b/target-alpha/cpu.h
> @@ -433,9 +433,9 @@ int cpu_alpha_handle_mmu_fault (CPUAlphaState
> *env, uint64_t address, int rw,
> int mmu_idx);
> #define cpu_handle_mmu_fault cpu_alpha_handle_mmu_fault
> void do_interrupt (CPUAlphaState *env);
> -void do_restore_state(CPUAlphaState *, void *retaddr);
> -void QEMU_NORETURN dynamic_excp(CPUAlphaState *, void *, int, int);
> -void QEMU_NORETURN arith_excp(CPUAlphaState *, void *, int, uint64_t);
> +void do_restore_state(CPUAlphaState *, uintptr_t retaddr);
> +void QEMU_NORETURN dynamic_excp(CPUAlphaState *, uintptr_t, int, int);
> +void QEMU_NORETURN arith_excp(CPUAlphaState *, uintptr_t, int, uint64_t);
>
> uint64_t cpu_alpha_load_fpcr (CPUAlphaState *env);
> void cpu_alpha_store_fpcr (CPUAlphaState *env, uint64_t val);
> diff --git a/target-alpha/fpu_helper.c b/target-alpha/fpu_helper.c
> index dda1103..fe988ec 100644
> --- a/target-alpha/fpu_helper.c
> +++ b/target-alpha/fpu_helper.c
> @@ -44,7 +44,7 @@ uint32_t helper_fp_exc_get(CPUAlphaState *env)
> return get_float_exception_flags(&FP_STATUS);
> }
>
> -static inline void inline_fp_exc_raise(CPUAlphaState *env, void *retaddr,
> +static inline void inline_fp_exc_raise(CPUAlphaState *env, uintptr_t 
> retaddr,
> uint32_t exc, uint32_t regno)
> {
> if (exc) {
> @@ -160,7 +160,7 @@ static uint64_t float32_to_f(float32 fa)
> return r;
> }
>
> -static float32 f_to_float32(CPUAlphaState *env, void *retaddr, 
> uint64_t a)
> +static float32 f_to_float32(CPUAlphaState *env, uintptr_t retaddr, 
> uint64_t a)
> {
> uint32_t exp, mant_sig;
> CPU_FloatU r;
> @@ -291,7 +291,7 @@ static uint64_t float64_to_g(float64 fa)
> return r;
> }
>
> -static float64 g_to_float64(CPUAlphaState *env, void *retaddr, 
> uint64_t a)
> +static float64 g_to_float64(CPUAlphaState *env, uintptr_t retaddr, 
> uint64_t a)
> {
> uint64_t exp, mant_sig;
> CPU_DoubleU r;
> diff --git a/target-alpha/helper.c b/target-alpha/helper.c
> index 765e650..81d4763 100644
> --- a/target-alpha/helper.c
> +++ b/target-alpha/helper.c
> @@ -494,13 +494,12 @@ void cpu_dump_state (CPUAlphaState *env, FILE
> *f, fprintf_function cpu_fprintf,
> cpu_fprintf(f, "\n");
> }
>
> -void do_restore_state(CPUAlphaState *env, void *retaddr)
> +void do_restore_state(CPUAlphaState *env, uintptr_t retaddr)
> {
> - uintptr_t pc = (uintptr_t)retaddr;
> - if (pc) {
> - TranslationBlock *tb = tb_find_pc(pc);
> + if (retaddr) {
> + TranslationBlock *tb = tb_find_pc(retaddr);
> if (tb) {
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> }
> @@ -515,7 +514,7 @@ void QEMU_NORETURN helper_excp(CPUAlphaState *env,
> int excp, int error)
> }
>
> /* This may be called from any of the helpers to set up 
> EXCEPTION_INDEX. */
> -void QEMU_NORETURN dynamic_excp(CPUAlphaState *env, void *retaddr,
> +void QEMU_NORETURN dynamic_excp(CPUAlphaState *env, uintptr_t retaddr,
> int excp, int error)
> {
> env->exception_index = excp;
> @@ -524,7 +523,7 @@ void QEMU_NORETURN dynamic_excp(CPUAlphaState
> *env, void *retaddr,
> cpu_loop_exit(env);
> }
>
> -void QEMU_NORETURN arith_excp(CPUAlphaState *env, void *retaddr,
> +void QEMU_NORETURN arith_excp(CPUAlphaState *env, uintptr_t retaddr,
> int exc, uint64_t mask)
> {
> env->trap_arg0 = exc;
> diff --git a/target-alpha/mem_helper.c b/target-alpha/mem_helper.c
> index dd5ca49..87cada4 100644
> --- a/target-alpha/mem_helper.c
> +++ b/target-alpha/mem_helper.c
> @@ -89,7 +89,7 @@ uint64_t helper_stq_c_phys(CPUAlphaState *env,
> uint64_t p, uint64_t v)
> }
>
> static void do_unaligned_access(CPUAlphaState *env, target_ulong addr,
> - int is_write, int is_user, void *retaddr)
> + int is_write, int is_user, uintptr_t retaddr)
> {
> uint64_t pc;
> uint32_t insn;
> @@ -112,7 +112,7 @@ void cpu_unassigned_access(CPUAlphaState *env,
> target_phys_addr_t addr,
> {
> env->trap_arg0 = addr;
> env->trap_arg1 = is_write;
> - dynamic_excp(env, NULL, EXCP_MCHK, 0);
> + dynamic_excp(env, 0, EXCP_MCHK, 0);
> }
>
> #include "softmmu_exec.h"
> @@ -137,7 +137,7 @@ void cpu_unassigned_access(CPUAlphaState *env,
> target_phys_addr_t addr,
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUAlphaState *env, target_ulong addr, int is_write,
> - int mmu_idx, void *retaddr)
> + int mmu_idx, uintptr_t retaddr)
> {
> int ret;
>
> diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c
> index c728432..b53369d 100644
> --- a/target-arm/op_helper.c
> +++ b/target-arm/op_helper.c
> @@ -76,11 +76,10 @@ uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def,
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUARMState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUARMState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -89,12 +88,11 @@ void tlb_fill(CPUARMState *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (unlikely(ret)) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> raise_exception(env->exception_index);
> diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c
> index c568e2b..b92c106 100644
> --- a/target-cris/op_helper.c
> +++ b/target-cris/op_helper.c
> @@ -57,28 +57,26 @@
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUCRISState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUCRISState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> env = env1;
>
> - D_LOG("%s pc=%x tpc=%x ra=%x\n", __func__,
> - env->pc, env->debug1, retaddr);
> + D_LOG("%s pc=%x tpc=%x ra=%p\n", __func__,
> + env->pc, env->debug1, (void *)retaddr);
> ret = cpu_cris_handle_mmu_fault(env, addr, is_write, mmu_idx);
> if (unlikely(ret)) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
>
> /* Evaluate flags after retranslation. */
> helper_top_evaluate_flags();
> diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
> index c04ae44..bc3b94e 100644
> --- a/target-i386/op_helper.c
> +++ b/target-i386/op_helper.c
> @@ -5003,11 +5003,10 @@ void helper_boundl(target_ulong a0, int v)
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUX86State *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> int ret;
> - unsigned long pc;
> CPUX86State *saved_env;
>
> saved_env = env;
> @@ -5017,12 +5016,11 @@ void tlb_fill(CPUX86State *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (ret) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> raise_exception_err(env->exception_index, env->error_code);
> diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c
> index e9c9638..51edc1a 100644
> --- a/target-lm32/op_helper.c
> +++ b/target-lm32/op_helper.c
> @@ -76,11 +76,10 @@ uint32_t helper_rcsr_jrx(void)
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPULM32State *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -90,12 +89,11 @@ void tlb_fill(CPULM32State *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (unlikely(ret)) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> cpu_loop_exit(env);
> diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c
> index bc8c1f0..1971a57 100644
> --- a/target-m68k/op_helper.c
> +++ b/target-m68k/op_helper.c
> @@ -56,11 +56,10 @@ extern int semihosting_enabled;
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUM68KState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUM68KState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -69,12 +68,11 @@ void tlb_fill(CPUM68KState *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (unlikely(ret)) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> cpu_loop_exit(env);
> diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c
> index 76cc0e0..498e4cc 100644
> --- a/target-microblaze/op_helper.c
> +++ b/target-microblaze/op_helper.c
> @@ -43,11 +43,10 @@
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUMBState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUMBState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -57,12 +56,11 @@ void tlb_fill(CPUMBState *env1, target_ulong addr,
> int is_write, int mmu_idx,
> if (unlikely(ret)) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> cpu_loop_exit(env);
> diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
> index ce01225..bca1d70 100644
> --- a/target-mips/op_helper.c
> +++ b/target-mips/op_helper.c
> @@ -101,11 +101,10 @@ void helper_raise_exception (uint32_t exception)
> }
>
> #if !defined(CONFIG_USER_ONLY)
> -static void do_restore_state (void *pc_ptr)
> +static void do_restore_state(uintptr_t pc)
> {
> TranslationBlock *tb;
> - unsigned long pc = (unsigned long) pc_ptr;
> -
> +
> tb = tb_find_pc (pc);
> if (tb) {
> cpu_restore_state(tb, env, pc);
> @@ -2293,7 +2292,7 @@ void helper_wait (void)
> #if !defined(CONFIG_USER_ONLY)
>
> static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int 
> is_write,
> - int is_user, void *retaddr);
> + int is_user, uintptr_t retaddr);
>
> #define MMUSUFFIX _mmu
> #define ALIGNED_ONLY
> @@ -2310,7 +2309,8 @@ static void QEMU_NORETURN
> do_unaligned_access(target_ulong addr, int is_write,
> #define SHIFT 3
> #include "softmmu_template.h"
>
> -static void do_unaligned_access (target_ulong addr, int is_write, int
> is_user, void *retaddr)
> +static void do_unaligned_access(target_ulong addr, int is_write,
> + int is_user, uintptr_t retaddr)
> {
> env->CP0_BadVAddr = addr;
> do_restore_state (retaddr);
> @@ -2318,11 +2318,10 @@ static void do_unaligned_access (target_ulong
> addr, int is_write, int is_user, v
> }
>
> void tlb_fill(CPUMIPSState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUMIPSState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -2331,12 +2330,11 @@ void tlb_fill(CPUMIPSState *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (ret) {
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> helper_raise_exception_err(env->exception_index, env->error_code);
> diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
> index 40927b6..4ef2332 100644
> --- a/target-ppc/op_helper.c
> +++ b/target-ppc/op_helper.c
> @@ -3715,11 +3715,10 @@ uint32_t helper_efdcmpeq (uint64_t op1, 
> uint64_t op2)
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUPPCState *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUPPCState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -3728,12 +3727,11 @@ void tlb_fill(CPUPPCState *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (unlikely(ret != 0)) {
> if (likely(retaddr)) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (likely(tb)) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> helper_raise_exception_err(env->exception_index, env->error_code);
> diff --git a/target-s390x/op_helper.c b/target-s390x/op_helper.c
> index 18fdbb2..7b72473 100644
> --- a/target-s390x/op_helper.c
> +++ b/target-s390x/op_helper.c
> @@ -57,11 +57,10 @@
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUS390XState *env1, target_ulong addr, int is_write,
> int mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> TranslationBlock *tb;
> CPUS390XState *saved_env;
> - unsigned long pc;
> int ret;
>
> saved_env = env;
> @@ -70,12 +69,11 @@ void tlb_fill(CPUS390XState *env1, target_ulong
> addr, int is_write, int mmu_idx,
> if (unlikely(ret != 0)) {
> if (likely(retaddr)) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (likely(tb)) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> cpu_loop_exit(env);
> diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c
> index 30f762f..4054791 100644
> --- a/target-sh4/op_helper.c
> +++ b/target-sh4/op_helper.c
> @@ -22,18 +22,16 @@
> #include "dyngen-exec.h"
> #include "helper.h"
>
> -static void cpu_restore_state_from_retaddr(void *retaddr)
> +static void cpu_restore_state_from_retaddr(uintptr_t retaddr)
> {
> TranslationBlock *tb;
> - unsigned long pc;
>
> if (retaddr) {
> - pc = (unsigned long) retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> }
> @@ -56,7 +54,7 @@ static void cpu_restore_state_from_retaddr(void 
> *retaddr)
> #include "softmmu_template.h"
>
> void tlb_fill(CPUSH4State *env1, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> CPUSH4State *saved_env;
> int ret;
> @@ -84,7 +82,7 @@ void helper_ldtlb(void)
> #endif
> }
>
> -static inline void raise_exception(int index, void *retaddr)
> +static inline void raise_exception(int index, uintptr_t retaddr)
> {
> env->exception_index = index;
> cpu_restore_state_from_retaddr(retaddr);
> @@ -447,7 +445,7 @@ void helper_ld_fpscr(uint32_t val)
> set_flush_to_zero((val & FPSCR_DN) != 0, &env->fp_status);
> }
>
> -static void update_fpscr(void *retaddr)
> +static void update_fpscr(uintptr_t retaddr)
> {
> int xcpt, cause, enable;
>
> diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h
> index 865288c..29c63c7 100644
> --- a/target-sparc/cpu.h
> +++ b/target-sparc/cpu.h
> @@ -702,7 +702,7 @@ trap_state* cpu_tsptr(CPUSPARCState* env);
> #endif
> void QEMU_NORETURN do_unaligned_access(CPUSPARCState *env, 
> target_ulong addr,
> int is_write, int is_user,
> - void *retaddr);
> + uintptr_t retaddr);
>
> #define TB_FLAG_FPU_ENABLED (1 << 4)
> #define TB_FLAG_AM_ENABLED (1 << 5)
> diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c
> index 1418205..04ffddf 100644
> --- a/target-sparc/ldst_helper.c
> +++ b/target-sparc/ldst_helper.c
> @@ -2376,25 +2376,23 @@ void cpu_unassigned_access(CPUSPARCState *env,
> target_phys_addr_t addr,
>
> #if !defined(CONFIG_USER_ONLY)
> /* XXX: make it generic ? */
> -static void cpu_restore_state2(CPUSPARCState *env, void *retaddr)
> +static void cpu_restore_state2(CPUSPARCState *env, uintptr_t retaddr)
> {
> TranslationBlock *tb;
> - unsigned long pc;
>
> if (retaddr) {
> /* now we have a real cpu fault */
> - pc = (unsigned long)retaddr;
> - tb = tb_find_pc(pc);
> + tb = tb_find_pc(retaddr);
> if (tb) {
> /* the PC is inside the translated code. It means that we have
> a virtual CPU fault */
> - cpu_restore_state(tb, env, pc);
> + cpu_restore_state(tb, env, retaddr);
> }
> }
> }
>
> void do_unaligned_access(CPUSPARCState *env, target_ulong addr, int 
> is_write,
> - int is_user, void *retaddr)
> + int is_user, uintptr_t retaddr)
> {
> #ifdef DEBUG_UNALIGNED
> printf("Unaligned access to 0x" TARGET_FMT_lx " from 0x" TARGET_FMT_lx
> @@ -2409,7 +2407,7 @@ void do_unaligned_access(CPUSPARCState *env,
> target_ulong addr, int is_write,
> from generated code or from helper.c) */
> /* XXX: fix it to restore all registers */
> void tlb_fill(CPUSPARCState *env, target_ulong addr, int is_write, int 
> mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> int ret;
>
> diff --git a/target-xtensa/op_helper.c b/target-xtensa/op_helper.c
> index cdef0db..3aa4dee 100644
> --- a/target-xtensa/op_helper.c
> +++ b/target-xtensa/op_helper.c
> @@ -31,7 +31,7 @@
> #include "host-utils.h"
>
> static void do_unaligned_access(target_ulong addr, int is_write, int 
> is_user,
> - void *retaddr);
> + uintptr_t retaddr);
>
> #define ALIGNED_ONLY
> #define MMUSUFFIX _mmu
> @@ -48,10 +48,9 @@ static void do_unaligned_access(target_ulong addr,
> int is_write, int is_user,
> #define SHIFT 3
> #include "softmmu_template.h"
>
> -static void do_restore_state(void *pc_ptr)
> +static void do_restore_state(uintptr_t pc)
> {
> TranslationBlock *tb;
> - uint32_t pc = (uint32_t)(intptr_t)pc_ptr;
>
> tb = tb_find_pc(pc);
> if (tb) {
> @@ -60,7 +59,7 @@ static void do_restore_state(void *pc_ptr)
> }
>
> static void do_unaligned_access(target_ulong addr, int is_write, int 
> is_user,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> if (xtensa_option_enabled(env->config,
> XTENSA_OPTION_UNALIGNED_EXCEPTION) &&
> !xtensa_option_enabled(env->config, XTENSA_OPTION_HW_ALIGNMENT)) {
> @@ -71,7 +70,7 @@ static void do_unaligned_access(target_ulong addr,
> int is_write, int is_user,
> }
>
> void tlb_fill(CPUXtensaState *env1, target_ulong vaddr, int is_write,
> int mmu_idx,
> - void *retaddr)
> + uintptr_t retaddr)
> {
> CPUXtensaState *saved_env = env;
>
> diff --git a/user-exec.c b/user-exec.c
> index cd905ff..be6bc4f 100644
> --- a/user-exec.c
> +++ b/user-exec.c
> @@ -82,7 +82,7 @@ void cpu_resume_from_signal(CPUArchState *env1, void 
> *puc)
> the effective address of the memory exception. 'is_write' is 1 if a
> write caused the exception and otherwise 0'. 'old_set' is the
> signal set which should be restored */
> -static inline int handle_cpu_signal(unsigned long pc, unsigned long 
> address,
> +static inline int handle_cpu_signal(uintptr_t pc, unsigned long address,
> int is_write, sigset_t *old_set,
> void *puc)
> {


Reviewed-by: Stefan Weil <sw@weilnetz.de>

I'll rebase by next w64 patches on this one.

Cheers,
Stefan
Richard Henderson April 15, 2012, 4:15 p.m. UTC | #2
On 04/09/2012 03:17 PM, Blue Swirl wrote:
> Use uintptr_t instead of void * or unsigned long in
> several op related functions, env->mem_io_pc and
> GETPC() macro.
> 
> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

Reviewed-by: Richard Henderson <rth@twiddle.net>


r~
diff mbox

Patch

From 5c865cbcae81430ab1bed4e9c3c5b8bf0dd43e0b Mon Sep 17 00:00:00 2001
Message-Id: <5c865cbcae81430ab1bed4e9c3c5b8bf0dd43e0b.1333999034.git.blauwirbel@gmail.com>
From: Blue Swirl <blauwirbel@gmail.com>
Date: Mon, 9 Apr 2012 14:20:20 +0000
Subject: [PATCH 1/3] Use uintptr_t for various op related functions

Use uintptr_t instead of void * or unsigned long in
several op related functions, env->mem_io_pc and
GETPC() macro.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 cpu-defs.h                    |    4 ++--
 exec-all.h                    |   10 +++++-----
 exec.c                        |   12 ++++++------
 softmmu_template.h            |   20 ++++++++++----------
 target-alpha/cpu.h            |    6 +++---
 target-alpha/fpu_helper.c     |    6 +++---
 target-alpha/helper.c         |   13 ++++++-------
 target-alpha/mem_helper.c     |    6 +++---
 target-arm/op_helper.c        |    8 +++-----
 target-cris/op_helper.c       |   12 +++++-------
 target-i386/op_helper.c       |    8 +++-----
 target-lm32/op_helper.c       |    8 +++-----
 target-m68k/op_helper.c       |    8 +++-----
 target-microblaze/op_helper.c |    8 +++-----
 target-mips/op_helper.c       |   18 ++++++++----------
 target-ppc/op_helper.c        |    8 +++-----
 target-s390x/op_helper.c      |    8 +++-----
 target-sh4/op_helper.c        |   14 ++++++--------
 target-sparc/cpu.h            |    2 +-
 target-sparc/ldst_helper.c    |   12 +++++-------
 target-xtensa/op_helper.c     |    9 ++++-----
 user-exec.c                   |    2 +-
 22 files changed, 89 insertions(+), 113 deletions(-)

diff --git a/cpu-defs.h b/cpu-defs.h
index 3268968..88d8093 100644
--- a/cpu-defs.h
+++ b/cpu-defs.h
@@ -166,8 +166,8 @@  typedef struct CPUWatchpoint {
     /* in order to avoid passing too many arguments to the MMIO         \
        helpers, we store some rarely used information in the CPU        \
        context) */                                                      \
-    unsigned long mem_io_pc; /* host pc at which the memory was         \
-                                accessed */                             \
+    uintptr_t mem_io_pc; /* host pc at which the memory was             \
+                            accessed */                                 \
     target_ulong mem_io_vaddr; /* target virtual addr at which the      \
                                      memory was accessed */             \
     uint32_t halted; /* Nonzero if the CPU is in suspend state */       \
diff --git a/exec-all.h b/exec-all.h
index fa7bdfe..fccce88 100644
--- a/exec-all.h
+++ b/exec-all.h
@@ -87,7 +87,7 @@  int cpu_gen_code(CPUArchState *env, struct TranslationBlock *tb,
 int cpu_restore_state(struct TranslationBlock *tb,
                       CPUArchState *env, uintptr_t searched_pc);
 void QEMU_NORETURN cpu_resume_from_signal(CPUArchState *env1, void *puc);
-void QEMU_NORETURN cpu_io_recompile(CPUArchState *env, void *retaddr);
+void QEMU_NORETURN cpu_io_recompile(CPUArchState *env, uintptr_t retaddr);
 TranslationBlock *tb_gen_code(CPUArchState *env, 
                               target_ulong pc, target_ulong cs_base, int flags,
                               int cflags);
@@ -287,13 +287,13 @@  extern void *tci_tb_ptr;
 # endif
 #elif defined(__s390__) && !defined(__s390x__)
 # define GETPC() \
-    ((void *)(((uintptr_t)__builtin_return_address(0) & 0x7fffffffUL) - 1))
+    (((uintptr_t)__builtin_return_address(0) & 0x7fffffffUL) - 1)
 #elif defined(__arm__)
 /* Thumb return addresses have the low bit set, so we need to subtract two.
    This is still safe in ARM mode because instructions are 4 bytes.  */
-# define GETPC() ((void *)((uintptr_t)__builtin_return_address(0) - 2))
+# define GETPC() ((uintptr_t)__builtin_return_address(0) - 2)
 #else
-# define GETPC() ((void *)((uintptr_t)__builtin_return_address(0) - 1))
+# define GETPC() ((uintptr_t)__builtin_return_address(0) - 1)
 #endif
 
 #if !defined(CONFIG_USER_ONLY)
@@ -305,7 +305,7 @@  void io_mem_write(struct MemoryRegion *mr, target_phys_addr_t addr,
                   uint64_t value, unsigned size);
 
 void tlb_fill(CPUArchState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr);
+              uintptr_t retaddr);
 
 #include "softmmu_defs.h"
 
diff --git a/exec.c b/exec.c
index 03d3a6b..63a0d2f 100644
--- a/exec.c
+++ b/exec.c
@@ -1221,7 +1221,7 @@  static inline void tb_invalidate_phys_page_fast(tb_page_addr_t start, int len)
 
 #if !defined(CONFIG_SOFTMMU)
 static void tb_invalidate_phys_page(tb_page_addr_t addr,
-                                    unsigned long pc, void *puc)
+                                    uintptr_t pc, void *puc)
 {
     TranslationBlock *tb;
     PageDesc *p;
@@ -4477,20 +4477,20 @@  int cpu_memory_rw_debug(CPUArchState *env, target_ulong addr,
 
 /* in deterministic execution mode, instructions doing device I/Os
    must be at the end of the TB */
-void cpu_io_recompile(CPUArchState *env, void *retaddr)
+void cpu_io_recompile(CPUArchState *env, uintptr_t retaddr)
 {
     TranslationBlock *tb;
     uint32_t n, cflags;
     target_ulong pc, cs_base;
     uint64_t flags;
 
-    tb = tb_find_pc((uintptr_t)retaddr);
+    tb = tb_find_pc(retaddr);
     if (!tb) {
         cpu_abort(env, "cpu_io_recompile: could not find TB for pc=%p", 
-                  retaddr);
+                  (void *)retaddr);
     }
     n = env->icount_decr.u16.low + tb->icount;
-    cpu_restore_state(tb, env, (unsigned long)retaddr);
+    cpu_restore_state(tb, env, retaddr);
     /* Calculate how many instructions had been executed before the fault
        occurred.  */
     n = n - env->icount_decr.u16.low;
@@ -4638,7 +4638,7 @@  bool virtio_is_big_endian(void)
 
 #define MMUSUFFIX _cmmu
 #undef GETPC
-#define GETPC() NULL
+#define GETPC() ((uintptr_t)0)
 #define env cpu_single_env
 #define SOFTMMU_CODE_ACCESS
 
diff --git a/softmmu_template.h b/softmmu_template.h
index afcab1e..b285d78 100644
--- a/softmmu_template.h
+++ b/softmmu_template.h
@@ -69,17 +69,17 @@ 
 static DATA_TYPE glue(glue(slow_ld, SUFFIX), MMUSUFFIX)(ENV_PARAM
                                                         target_ulong addr,
                                                         int mmu_idx,
-                                                        void *retaddr);
+                                                        uintptr_t retaddr);
 static inline DATA_TYPE glue(io_read, SUFFIX)(ENV_PARAM
                                               target_phys_addr_t physaddr,
                                               target_ulong addr,
-                                              void *retaddr)
+                                              uintptr_t retaddr)
 {
     DATA_TYPE res;
     MemoryRegion *mr = iotlb_to_region(physaddr);
 
     physaddr = (physaddr & TARGET_PAGE_MASK) + addr;
-    env->mem_io_pc = (unsigned long)retaddr;
+    env->mem_io_pc = retaddr;
     if (mr != &io_mem_ram && mr != &io_mem_rom
         && mr != &io_mem_unassigned
         && mr != &io_mem_notdirty
@@ -113,7 +113,7 @@  glue(glue(glue(HELPER_PREFIX, ld), SUFFIX), MMUSUFFIX)(ENV_PARAM
     target_ulong tlb_addr;
     target_phys_addr_t ioaddr;
     unsigned long addend;
-    void *retaddr;
+    uintptr_t retaddr;
 
     /* test if there is match for unaligned or IO access */
     /* XXX: could done more in memory macro in a non portable way */
@@ -166,7 +166,7 @@  static DATA_TYPE
 glue(glue(slow_ld, SUFFIX), MMUSUFFIX)(ENV_PARAM
                                        target_ulong addr,
                                        int mmu_idx,
-                                       void *retaddr)
+                                       uintptr_t retaddr)
 {
     DATA_TYPE res, res1, res2;
     int index, shift;
@@ -219,13 +219,13 @@  static void glue(glue(slow_st, SUFFIX), MMUSUFFIX)(ENV_PARAM
                                                    target_ulong addr,
                                                    DATA_TYPE val,
                                                    int mmu_idx,
-                                                   void *retaddr);
+                                                   uintptr_t retaddr);
 
 static inline void glue(io_write, SUFFIX)(ENV_PARAM
                                           target_phys_addr_t physaddr,
                                           DATA_TYPE val,
                                           target_ulong addr,
-                                          void *retaddr)
+                                          uintptr_t retaddr)
 {
     MemoryRegion *mr = iotlb_to_region(physaddr);
 
@@ -238,7 +238,7 @@  static inline void glue(io_write, SUFFIX)(ENV_PARAM
     }
 
     env->mem_io_vaddr = addr;
-    env->mem_io_pc = (unsigned long)retaddr;
+    env->mem_io_pc = retaddr;
 #if SHIFT <= 2
     io_mem_write(mr, physaddr, val, 1 << SHIFT);
 #else
@@ -260,7 +260,7 @@  void glue(glue(glue(HELPER_PREFIX, st), SUFFIX), MMUSUFFIX)(ENV_PARAM
     target_phys_addr_t ioaddr;
     unsigned long addend;
     target_ulong tlb_addr;
-    void *retaddr;
+    uintptr_t retaddr;
     int index;
 
     index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
@@ -310,7 +310,7 @@  static void glue(glue(slow_st, SUFFIX), MMUSUFFIX)(ENV_PARAM
                                                    target_ulong addr,
                                                    DATA_TYPE val,
                                                    int mmu_idx,
-                                                   void *retaddr)
+                                                   uintptr_t retaddr)
 {
     target_phys_addr_t ioaddr;
     unsigned long addend;
diff --git a/target-alpha/cpu.h b/target-alpha/cpu.h
index 74bf7f7..fd578ce 100644
--- a/target-alpha/cpu.h
+++ b/target-alpha/cpu.h
@@ -433,9 +433,9 @@  int cpu_alpha_handle_mmu_fault (CPUAlphaState *env, uint64_t address, int rw,
                                 int mmu_idx);
 #define cpu_handle_mmu_fault cpu_alpha_handle_mmu_fault
 void do_interrupt (CPUAlphaState *env);
-void do_restore_state(CPUAlphaState *, void *retaddr);
-void QEMU_NORETURN dynamic_excp(CPUAlphaState *, void *, int, int);
-void QEMU_NORETURN arith_excp(CPUAlphaState *, void *, int, uint64_t);
+void do_restore_state(CPUAlphaState *, uintptr_t retaddr);
+void QEMU_NORETURN dynamic_excp(CPUAlphaState *, uintptr_t, int, int);
+void QEMU_NORETURN arith_excp(CPUAlphaState *, uintptr_t, int, uint64_t);
 
 uint64_t cpu_alpha_load_fpcr (CPUAlphaState *env);
 void cpu_alpha_store_fpcr (CPUAlphaState *env, uint64_t val);
diff --git a/target-alpha/fpu_helper.c b/target-alpha/fpu_helper.c
index dda1103..fe988ec 100644
--- a/target-alpha/fpu_helper.c
+++ b/target-alpha/fpu_helper.c
@@ -44,7 +44,7 @@  uint32_t helper_fp_exc_get(CPUAlphaState *env)
     return get_float_exception_flags(&FP_STATUS);
 }
 
-static inline void inline_fp_exc_raise(CPUAlphaState *env, void *retaddr,
+static inline void inline_fp_exc_raise(CPUAlphaState *env, uintptr_t retaddr,
                                        uint32_t exc, uint32_t regno)
 {
     if (exc) {
@@ -160,7 +160,7 @@  static uint64_t float32_to_f(float32 fa)
     return r;
 }
 
-static float32 f_to_float32(CPUAlphaState *env, void *retaddr, uint64_t a)
+static float32 f_to_float32(CPUAlphaState *env, uintptr_t retaddr, uint64_t a)
 {
     uint32_t exp, mant_sig;
     CPU_FloatU r;
@@ -291,7 +291,7 @@  static uint64_t float64_to_g(float64 fa)
     return r;
 }
 
-static float64 g_to_float64(CPUAlphaState *env, void *retaddr, uint64_t a)
+static float64 g_to_float64(CPUAlphaState *env, uintptr_t retaddr, uint64_t a)
 {
     uint64_t exp, mant_sig;
     CPU_DoubleU r;
diff --git a/target-alpha/helper.c b/target-alpha/helper.c
index 765e650..81d4763 100644
--- a/target-alpha/helper.c
+++ b/target-alpha/helper.c
@@ -494,13 +494,12 @@  void cpu_dump_state (CPUAlphaState *env, FILE *f, fprintf_function cpu_fprintf,
     cpu_fprintf(f, "\n");
 }
 
-void do_restore_state(CPUAlphaState *env, void *retaddr)
+void do_restore_state(CPUAlphaState *env, uintptr_t retaddr)
 {
-    uintptr_t pc = (uintptr_t)retaddr;
-    if (pc) {
-        TranslationBlock *tb = tb_find_pc(pc);
+    if (retaddr) {
+        TranslationBlock *tb = tb_find_pc(retaddr);
         if (tb) {
-            cpu_restore_state(tb, env, pc);
+            cpu_restore_state(tb, env, retaddr);
         }
     }
 }
@@ -515,7 +514,7 @@  void QEMU_NORETURN helper_excp(CPUAlphaState *env, int excp, int error)
 }
 
 /* This may be called from any of the helpers to set up EXCEPTION_INDEX.  */
-void QEMU_NORETURN dynamic_excp(CPUAlphaState *env, void *retaddr,
+void QEMU_NORETURN dynamic_excp(CPUAlphaState *env, uintptr_t retaddr,
                                 int excp, int error)
 {
     env->exception_index = excp;
@@ -524,7 +523,7 @@  void QEMU_NORETURN dynamic_excp(CPUAlphaState *env, void *retaddr,
     cpu_loop_exit(env);
 }
 
-void QEMU_NORETURN arith_excp(CPUAlphaState *env, void *retaddr,
+void QEMU_NORETURN arith_excp(CPUAlphaState *env, uintptr_t retaddr,
                               int exc, uint64_t mask)
 {
     env->trap_arg0 = exc;
diff --git a/target-alpha/mem_helper.c b/target-alpha/mem_helper.c
index dd5ca49..87cada4 100644
--- a/target-alpha/mem_helper.c
+++ b/target-alpha/mem_helper.c
@@ -89,7 +89,7 @@  uint64_t helper_stq_c_phys(CPUAlphaState *env, uint64_t p, uint64_t v)
 }
 
 static void do_unaligned_access(CPUAlphaState *env, target_ulong addr,
-                                int is_write, int is_user, void *retaddr)
+                                int is_write, int is_user, uintptr_t retaddr)
 {
     uint64_t pc;
     uint32_t insn;
@@ -112,7 +112,7 @@  void cpu_unassigned_access(CPUAlphaState *env, target_phys_addr_t addr,
 {
     env->trap_arg0 = addr;
     env->trap_arg1 = is_write;
-    dynamic_excp(env, NULL, EXCP_MCHK, 0);
+    dynamic_excp(env, 0, EXCP_MCHK, 0);
 }
 
 #include "softmmu_exec.h"
@@ -137,7 +137,7 @@  void cpu_unassigned_access(CPUAlphaState *env, target_phys_addr_t addr,
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUAlphaState *env, target_ulong addr, int is_write,
-              int mmu_idx, void *retaddr)
+              int mmu_idx, uintptr_t retaddr)
 {
     int ret;
 
diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c
index c728432..b53369d 100644
--- a/target-arm/op_helper.c
+++ b/target-arm/op_helper.c
@@ -76,11 +76,10 @@  uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def,
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUARMState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUARMState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -89,12 +88,11 @@  void tlb_fill(CPUARMState *env1, target_ulong addr, int is_write, int mmu_idx,
     if (unlikely(ret)) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         raise_exception(env->exception_index);
diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c
index c568e2b..b92c106 100644
--- a/target-cris/op_helper.c
+++ b/target-cris/op_helper.c
@@ -57,28 +57,26 @@ 
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUCRISState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUCRISState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
     env = env1;
 
-    D_LOG("%s pc=%x tpc=%x ra=%x\n", __func__, 
-	     env->pc, env->debug1, retaddr);
+    D_LOG("%s pc=%x tpc=%x ra=%p\n", __func__,
+          env->pc, env->debug1, (void *)retaddr);
     ret = cpu_cris_handle_mmu_fault(env, addr, is_write, mmu_idx);
     if (unlikely(ret)) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
 
 		/* Evaluate flags after retranslation.  */
                 helper_top_evaluate_flags();
diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
index c04ae44..bc3b94e 100644
--- a/target-i386/op_helper.c
+++ b/target-i386/op_helper.c
@@ -5003,11 +5003,10 @@  void helper_boundl(target_ulong a0, int v)
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUX86State *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     int ret;
-    unsigned long pc;
     CPUX86State *saved_env;
 
     saved_env = env;
@@ -5017,12 +5016,11 @@  void tlb_fill(CPUX86State *env1, target_ulong addr, int is_write, int mmu_idx,
     if (ret) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         raise_exception_err(env->exception_index, env->error_code);
diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c
index e9c9638..51edc1a 100644
--- a/target-lm32/op_helper.c
+++ b/target-lm32/op_helper.c
@@ -76,11 +76,10 @@  uint32_t helper_rcsr_jrx(void)
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPULM32State *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -90,12 +89,11 @@  void tlb_fill(CPULM32State *env1, target_ulong addr, int is_write, int mmu_idx,
     if (unlikely(ret)) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         cpu_loop_exit(env);
diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c
index bc8c1f0..1971a57 100644
--- a/target-m68k/op_helper.c
+++ b/target-m68k/op_helper.c
@@ -56,11 +56,10 @@  extern int semihosting_enabled;
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUM68KState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUM68KState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -69,12 +68,11 @@  void tlb_fill(CPUM68KState *env1, target_ulong addr, int is_write, int mmu_idx,
     if (unlikely(ret)) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         cpu_loop_exit(env);
diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c
index 76cc0e0..498e4cc 100644
--- a/target-microblaze/op_helper.c
+++ b/target-microblaze/op_helper.c
@@ -43,11 +43,10 @@ 
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUMBState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUMBState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -57,12 +56,11 @@  void tlb_fill(CPUMBState *env1, target_ulong addr, int is_write, int mmu_idx,
     if (unlikely(ret)) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         cpu_loop_exit(env);
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index ce01225..bca1d70 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -101,11 +101,10 @@  void helper_raise_exception (uint32_t exception)
 }
 
 #if !defined(CONFIG_USER_ONLY)
-static void do_restore_state (void *pc_ptr)
+static void do_restore_state(uintptr_t pc)
 {
     TranslationBlock *tb;
-    unsigned long pc = (unsigned long) pc_ptr;
-    
+
     tb = tb_find_pc (pc);
     if (tb) {
         cpu_restore_state(tb, env, pc);
@@ -2293,7 +2292,7 @@  void helper_wait (void)
 #if !defined(CONFIG_USER_ONLY)
 
 static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int is_write,
-                                              int is_user, void *retaddr);
+                                              int is_user, uintptr_t retaddr);
 
 #define MMUSUFFIX _mmu
 #define ALIGNED_ONLY
@@ -2310,7 +2309,8 @@  static void QEMU_NORETURN do_unaligned_access(target_ulong addr, int is_write,
 #define SHIFT 3
 #include "softmmu_template.h"
 
-static void do_unaligned_access (target_ulong addr, int is_write, int is_user, void *retaddr)
+static void do_unaligned_access(target_ulong addr, int is_write,
+                                int is_user, uintptr_t retaddr)
 {
     env->CP0_BadVAddr = addr;
     do_restore_state (retaddr);
@@ -2318,11 +2318,10 @@  static void do_unaligned_access (target_ulong addr, int is_write, int is_user, v
 }
 
 void tlb_fill(CPUMIPSState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUMIPSState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -2331,12 +2330,11 @@  void tlb_fill(CPUMIPSState *env1, target_ulong addr, int is_write, int mmu_idx,
     if (ret) {
         if (retaddr) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (tb) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         helper_raise_exception_err(env->exception_index, env->error_code);
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index 40927b6..4ef2332 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -3715,11 +3715,10 @@  uint32_t helper_efdcmpeq (uint64_t op1, uint64_t op2)
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUPPCState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUPPCState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -3728,12 +3727,11 @@  void tlb_fill(CPUPPCState *env1, target_ulong addr, int is_write, int mmu_idx,
     if (unlikely(ret != 0)) {
         if (likely(retaddr)) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (likely(tb)) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         helper_raise_exception_err(env->exception_index, env->error_code);
diff --git a/target-s390x/op_helper.c b/target-s390x/op_helper.c
index 18fdbb2..7b72473 100644
--- a/target-s390x/op_helper.c
+++ b/target-s390x/op_helper.c
@@ -57,11 +57,10 @@ 
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUS390XState *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     TranslationBlock *tb;
     CPUS390XState *saved_env;
-    unsigned long pc;
     int ret;
 
     saved_env = env;
@@ -70,12 +69,11 @@  void tlb_fill(CPUS390XState *env1, target_ulong addr, int is_write, int mmu_idx,
     if (unlikely(ret != 0)) {
         if (likely(retaddr)) {
             /* now we have a real cpu fault */
-            pc = (unsigned long)retaddr;
-            tb = tb_find_pc(pc);
+            tb = tb_find_pc(retaddr);
             if (likely(tb)) {
                 /* the PC is inside the translated code. It means that we have
                    a virtual CPU fault */
-                cpu_restore_state(tb, env, pc);
+                cpu_restore_state(tb, env, retaddr);
             }
         }
         cpu_loop_exit(env);
diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c
index 30f762f..4054791 100644
--- a/target-sh4/op_helper.c
+++ b/target-sh4/op_helper.c
@@ -22,18 +22,16 @@ 
 #include "dyngen-exec.h"
 #include "helper.h"
 
-static void cpu_restore_state_from_retaddr(void *retaddr)
+static void cpu_restore_state_from_retaddr(uintptr_t retaddr)
 {
     TranslationBlock *tb;
-    unsigned long pc;
 
     if (retaddr) {
-        pc = (unsigned long) retaddr;
-        tb = tb_find_pc(pc);
+        tb = tb_find_pc(retaddr);
         if (tb) {
             /* the PC is inside the translated code. It means that we have
                a virtual CPU fault */
-            cpu_restore_state(tb, env, pc);
+            cpu_restore_state(tb, env, retaddr);
         }
     }
 }
@@ -56,7 +54,7 @@  static void cpu_restore_state_from_retaddr(void *retaddr)
 #include "softmmu_template.h"
 
 void tlb_fill(CPUSH4State *env1, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     CPUSH4State *saved_env;
     int ret;
@@ -84,7 +82,7 @@  void helper_ldtlb(void)
 #endif
 }
 
-static inline void raise_exception(int index, void *retaddr)
+static inline void raise_exception(int index, uintptr_t retaddr)
 {
     env->exception_index = index;
     cpu_restore_state_from_retaddr(retaddr);
@@ -447,7 +445,7 @@  void helper_ld_fpscr(uint32_t val)
     set_flush_to_zero((val & FPSCR_DN) != 0, &env->fp_status);
 }
 
-static void update_fpscr(void *retaddr)
+static void update_fpscr(uintptr_t retaddr)
 {
     int xcpt, cause, enable;
 
diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h
index 865288c..29c63c7 100644
--- a/target-sparc/cpu.h
+++ b/target-sparc/cpu.h
@@ -702,7 +702,7 @@  trap_state* cpu_tsptr(CPUSPARCState* env);
 #endif
 void QEMU_NORETURN do_unaligned_access(CPUSPARCState *env, target_ulong addr,
                                        int is_write, int is_user,
-                                       void *retaddr);
+                                       uintptr_t retaddr);
 
 #define TB_FLAG_FPU_ENABLED (1 << 4)
 #define TB_FLAG_AM_ENABLED (1 << 5)
diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c
index 1418205..04ffddf 100644
--- a/target-sparc/ldst_helper.c
+++ b/target-sparc/ldst_helper.c
@@ -2376,25 +2376,23 @@  void cpu_unassigned_access(CPUSPARCState *env, target_phys_addr_t addr,
 
 #if !defined(CONFIG_USER_ONLY)
 /* XXX: make it generic ? */
-static void cpu_restore_state2(CPUSPARCState *env, void *retaddr)
+static void cpu_restore_state2(CPUSPARCState *env, uintptr_t retaddr)
 {
     TranslationBlock *tb;
-    unsigned long pc;
 
     if (retaddr) {
         /* now we have a real cpu fault */
-        pc = (unsigned long)retaddr;
-        tb = tb_find_pc(pc);
+        tb = tb_find_pc(retaddr);
         if (tb) {
             /* the PC is inside the translated code. It means that we have
                a virtual CPU fault */
-            cpu_restore_state(tb, env, pc);
+            cpu_restore_state(tb, env, retaddr);
         }
     }
 }
 
 void do_unaligned_access(CPUSPARCState *env, target_ulong addr, int is_write,
-                         int is_user, void *retaddr)
+                         int is_user, uintptr_t retaddr)
 {
 #ifdef DEBUG_UNALIGNED
     printf("Unaligned access to 0x" TARGET_FMT_lx " from 0x" TARGET_FMT_lx
@@ -2409,7 +2407,7 @@  void do_unaligned_access(CPUSPARCState *env, target_ulong addr, int is_write,
    from generated code or from helper.c) */
 /* XXX: fix it to restore all registers */
 void tlb_fill(CPUSPARCState *env, target_ulong addr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     int ret;
 
diff --git a/target-xtensa/op_helper.c b/target-xtensa/op_helper.c
index cdef0db..3aa4dee 100644
--- a/target-xtensa/op_helper.c
+++ b/target-xtensa/op_helper.c
@@ -31,7 +31,7 @@ 
 #include "host-utils.h"
 
 static void do_unaligned_access(target_ulong addr, int is_write, int is_user,
-        void *retaddr);
+                                uintptr_t retaddr);
 
 #define ALIGNED_ONLY
 #define MMUSUFFIX _mmu
@@ -48,10 +48,9 @@  static void do_unaligned_access(target_ulong addr, int is_write, int is_user,
 #define SHIFT 3
 #include "softmmu_template.h"
 
-static void do_restore_state(void *pc_ptr)
+static void do_restore_state(uintptr_t pc)
 {
     TranslationBlock *tb;
-    uint32_t pc = (uint32_t)(intptr_t)pc_ptr;
 
     tb = tb_find_pc(pc);
     if (tb) {
@@ -60,7 +59,7 @@  static void do_restore_state(void *pc_ptr)
 }
 
 static void do_unaligned_access(target_ulong addr, int is_write, int is_user,
-        void *retaddr)
+                                uintptr_t retaddr)
 {
     if (xtensa_option_enabled(env->config, XTENSA_OPTION_UNALIGNED_EXCEPTION) &&
             !xtensa_option_enabled(env->config, XTENSA_OPTION_HW_ALIGNMENT)) {
@@ -71,7 +70,7 @@  static void do_unaligned_access(target_ulong addr, int is_write, int is_user,
 }
 
 void tlb_fill(CPUXtensaState *env1, target_ulong vaddr, int is_write, int mmu_idx,
-              void *retaddr)
+              uintptr_t retaddr)
 {
     CPUXtensaState *saved_env = env;
 
diff --git a/user-exec.c b/user-exec.c
index cd905ff..be6bc4f 100644
--- a/user-exec.c
+++ b/user-exec.c
@@ -82,7 +82,7 @@  void cpu_resume_from_signal(CPUArchState *env1, void *puc)
    the effective address of the memory exception. 'is_write' is 1 if a
    write caused the exception and otherwise 0'. 'old_set' is the
    signal set which should be restored */
-static inline int handle_cpu_signal(unsigned long pc, unsigned long address,
+static inline int handle_cpu_signal(uintptr_t pc, unsigned long address,
                                     int is_write, sigset_t *old_set,
                                     void *puc)
 {
-- 
1.7.2.5