What is the reason to duplicate cpu_{in,out}[bwl]() instead of
ioport-user.c?

On Wed, Dec 08, 2010 at 01:49:11PM +0100, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
> ---
>         I had this patch lying around but I don't think I ever got
>         qruncom to work completely.
> 
>  Makefile.target |    3 ++
>  tests/Makefile  |    7 ++--
>  tests/qruncom.c |   93 +++++++++++++++++++++++++++++++++++-------------------
>  3 files changed, 67 insertions(+), 36 deletions(-)
> 
> diff --git a/Makefile.target b/Makefile.target
> index 5784844..4ac8f6f 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -339,6 +339,9 @@ obj-y += $(addprefix ../libdis/, $(libdis-y))
>  obj-y += $(libobj-y)
>  obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y))
>  
> +else # !CONFIG_SOFTMMU
> +libqemu.a: $(addprefix ../, $(common-obj-y)) $(libobj-y) $(addprefix 
> ../libdis/, $(libdis-y))
> +     ar rc $@ $^
>  endif # CONFIG_SOFTMMU
>  
>  obj-y += $(addprefix ../, $(trace-obj-y))
> diff --git a/tests/Makefile b/tests/Makefile
> index e43ec70..6dbeb6f 100644
> --- a/tests/Makefile
> +++ b/tests/Makefile
> @@ -116,9 +116,10 @@ speed: sha1 sha1-i386
>  
>  # broken test
>  # NOTE: -fomit-frame-pointer is currently needed : this is a bug in libqemu
> -qruncom: qruncom.c ../ioport-user.c ../i386-user/libqemu.a
> -     $(CC) $(CFLAGS) -fomit-frame-pointer $(LDFLAGS) -I../target-i386 -I.. 
> -I../i386-user -I../fpu \
> -              -o $@ $(filter %.c, $^) -L../i386-user -lqemu -lm
> +qruncom: qruncom.c
> +     #$(MAKE) -C ../i386-linux-user libqemu.a
> +     $(CC) $(CFLAGS) -fomit-frame-pointer $(LDFLAGS) -I../target-i386 -I.. 
> -I../linux-user -I../i386-linux-user -I../fpu \
> +              -o $@ $(filter %.c, $^) -L../i386-linux-user -lqemu -lm
>  
>  # arm test
>  hello-arm: hello-arm.o
> diff --git a/tests/qruncom.c b/tests/qruncom.c
> index 079f7a2..66fc223 100644
> --- a/tests/qruncom.c
> +++ b/tests/qruncom.c
> @@ -12,10 +12,68 @@
>  #include <signal.h>
>  #include <malloc.h>
>  
> +#define NEED_CPU_H 1
>  #include "cpu.h"
>  
>  //#define SIGTEST
>  
> +unsigned long guest_base = 0;
> +int have_guest_base = 0;
> +int singlestep = 0;
> +unsigned long last_brk = 0;
> +
> +void cpu_outb(uint32_t addr, uint8_t val)
> +{
> +    fprintf(stderr, "outb: port=0x%04"PRIx32", data=%02"PRIx8"\n",
> +            addr, val);
> +}
> +
> +void cpu_outw(uint32_t addr, uint16_t val)
> +{
> +    fprintf(stderr, "outw: port=0x%04"PRIx32", data=%04"PRIx16"\n",
> +            addr, val);
> +}
> +
> +void cpu_outl(uint32_t addr, uint32_t val)
> +{
> +    fprintf(stderr, "outl: port=0x%04"PRIx32", data=%08"PRIx32"\n",
> +            addr, val);
> +}
> +
> +uint8_t cpu_inb(uint32_t addr)
> +{
> +    fprintf(stderr, "inb: port=0x%04"PRIx32"\n", addr);
> +    return 0;
> +}
> +
> +uint16_t cpu_inw(uint32_t addr)
> +{
> +    fprintf(stderr, "inw: port=0x%04"PRIx32"\n", addr);
> +    return 0;
> +}
> +
> +uint32_t cpu_inl(uint32_t addr)
> +{
> +    fprintf(stderr, "inl: port=0x%04"PRIx32"\n", addr);
> +    return 0;
> +}
> +
> +void cpu_list_lock(void)
> +{
> +}
> +
> +void cpu_list_unlock(void)
> +{
> +}
> +
> +void mmap_lock(void)
> +{
> +}
> +
> +void mmap_unlock(void)
> +{
> +}
> +
>  int cpu_get_pic_interrupt(CPUState *env)
>  {
>      return -1;
> @@ -44,26 +102,6 @@ static void set_idt(int n, unsigned int dpl)
>      set_gate(idt_table + n, 0, dpl, 0, 0);
>  }
>  
> -void qemu_free(void *ptr)
> -{
> -    free(ptr);
> -}
> -
> -void *qemu_malloc(size_t size)
> -{
> -    return malloc(size);
> -}
> -
> -void *qemu_mallocz(size_t size)
> -{
> -    void *ptr;
> -    ptr = qemu_malloc(size);
> -    if (!ptr)
> -        return NULL;
> -    memset(ptr, 0, size);
> -    return ptr;
> -}
> -
>  void *qemu_vmalloc(size_t size)
>  {
>      return memalign(4096, size);
> @@ -74,17 +112,6 @@ void qemu_vfree(void *ptr)
>      free(ptr);
>  }
>  
> -void qemu_printf(const char *fmt, ...)
> -{
> -    va_list ap;
> -    va_start(ap, fmt);
> -    vprintf(fmt, ap);
> -    va_end(ap);
> -}
> -
> -/* XXX: this is a bug in helper2.c */
> -int errno;
> -
>  /**********************************************/
>  
>  #define COM_BASE_ADDR    0x10100
> @@ -99,7 +126,7 @@ static void usage(void)
>  
>  static inline uint8_t *seg_to_linear(unsigned int seg, unsigned int reg)
>  {
> -    return (uint8_t *)((seg << 4) + (reg & 0xffff));
> +    return (uint8_t *)(uintptr_t) ((seg << 4) + (reg & 0xffff));
>  }
>  
>  static inline void pushw(CPUState *env, int val)
> @@ -241,7 +268,7 @@ int main(int argc, char **argv)
>          case EXCP0D_GPF:
>              {
>                  int int_num, ah;
> -                int_num = *(uint8_t *)(env->segs[R_CS].base + env->eip + 1);
> +                int_num = *(uint8_t *)(uintptr_t) (env->segs[R_CS].base + 
> env->eip + 1);
>                  if (int_num != 0x21)
>                      goto unknown_int;
>                  ah = (env->regs[R_EAX] >> 8) & 0xff;
> -- 
> 1.7.3.2
> 
> 

-- 
yamahata

Reply via email to