qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Bug 796480] [NEW] Addresses with 4GB differences are c


From: malc
Subject: Re: [Qemu-devel] [Bug 796480] [NEW] Addresses with 4GB differences are consider as one single address in QEMU
Date: Mon, 13 Jun 2011 13:11:07 +0400 (MSD)
User-agent: Alpine 2.00 (LNX 1167 2008-08-23)

On Mon, 13 Jun 2011, Khansa Butt wrote:

> Public bug reported:
> 
> THIS IS THE ISSUE OF USER MODE EMULATION
> Information about guest and host
> **********************************
> guest: 64 bit x86 user mode binary
> host: 32 bit Linux OS
> uname -a :Linux KICS-HPCNL-32blue 2.6.33.3-85.fc13.i686.PAE #1 SMP
> architecture: intel64
> Bug Description
> ****************
> for memory reference instructions, suppose I have two addresses in guest 
> address space(64 bit)
> 0x220000000
> 0x320000000
> as lower 32 bit part of both addresses are same, when particular instructions 
> are translated into host code(32 bit)
> in both above cases the value is loaded from same memory and we get same 
> value. where actual behaviour was to get two different values.
> here is the program which i used to test:
> #include <stdio.h>
> #include <stdlib.h>
> #include <limits.h>
> #define SIZE 4294967298 /* 4Gib*/
> 
> int main() {

Invalid declaration of main.

>    char *array;
>    unsigned int i;

i is never used.

> 
>    array = malloc(sizeof(char) * SIZE);

sizeof(char) is by definition 1.

>    if(array == NULL)    {
>       fprintf(stderr, "Could not allocate that much memory");

This lacks line termination.

>       return 1;    }
>     array[0] = 'a';
>    array[SIZE-2] = 'z';
>    printf("array[SIZE-2] = %c array[0] = %c\n",array[SIZE-2], array[0]);
>   return 0;
> }

> I have 8 gib RAM
> I compiled this program on 64 bit linux  and run this on 32 bit linux with 
> qemu
> QEMU command line and output
> **********************************
> $x86_64-linux-user/qemu-x86_64 ~/ar_x86 
> output: array[SIZE-1] = z,array[0] = z 

And this doesn't match what you printf at all (it's spelled "SIZE-2" in 
the format string in the code snippet above), but since main is misdeclared
(hello UB) all bets are off and nasal monsters are to be expected anyways.

> Release information
> ********************
> x86_64 binary is tested with latest release : qemu-0.14.1
> and with current development tree as well( live code of QEMU using git)
> 
> ** Affects: qemu
>      Importance: Undecided
>          Status: New
> 

-- 
mailto:address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]