qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefano Bonifazi <stefboombastic@gmail.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH] fix qruncom compilation problems
Date: Wed, 08 Dec 2010 22:43:54 +0100	[thread overview]
Message-ID: <4CFFFC1A.1090001@gmail.com> (raw)
In-Reply-To: <1291812551-12590-1-git-send-email-pbonzini@redhat.com>

On 12/08/2010 01:49 PM, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini<pbonzini@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;
Hi!
Thank you for your help!

I've linked qemu-malloc.o and cutils.o together with qruncom.c and I 
managed to succesfully make it!
here the make line:
>     #$(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 $@ ../qemu-malloc.o ../cutils.o $(filter %.c, $^) 
> -L../i386-linux-user -lqemu -lm

Anyway running it with a com file as argument gave the error:
> mmap: Operation not permitted
I think the problem is with "MAP_FIXED" parameter in mmap 
(http://opengroup.org/onlinepubs/007908799/xsh/mmap.html) having chosen 
0x00000000 as starting address.. but it is pretty difficult for me atm 
to understand it, I've never used this function before and I am a 
beginner in these topics
Removing that parameter mmap succeeds, but then I get "segmentation 
fault" in cpu_init
Any idea?
Thank you in advance!
Stefano B.

  reply	other threads:[~2010-12-08 21:44 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-08 11:39 [Qemu-devel] Compiling tests/qruncom.c Stefano Bonifazi
2010-12-08 12:49 ` [Qemu-devel] [PATCH] fix qruncom compilation problems Paolo Bonzini
2010-12-08 21:43   ` Stefano Bonifazi [this message]
2010-12-09  7:16     ` [Qemu-devel] " Paolo Bonzini
2010-12-09 17:29       ` Stefano Bonifazi
2010-12-10  8:53         ` Paolo Bonzini
2010-12-10 21:43           ` Stefano Bonifazi
     [not found]             ` <4D02A030.6080400@redhat.com>
2010-12-11 14:42               ` [Qemu-devel] " Stefano Bonifazi
2010-12-13  8:27                 ` [Qemu-devel] " Paolo Bonzini
2010-12-09  3:32   ` [Qemu-devel] " Isaku Yamahata
2010-12-09  7:16     ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CFFFC1A.1090001@gmail.com \
    --to=stefboombastic@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).