blob: ea8a51789e093b3b49623d718485413c23d4130a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
x86: 0.835
architecture: 0.777
performance: 0.722
graphic: 0.704
kernel: 0.680
device: 0.655
user-level: 0.638
assembly: 0.454
permissions: 0.448
ppc: 0.399
mistranslation: 0.398
semantic: 0.373
PID: 0.346
vnc: 0.337
debug: 0.269
arm: 0.263
register: 0.223
hypervisor: 0.214
socket: 0.200
VMM: 0.181
files: 0.170
virtual: 0.158
risc-v: 0.147
peripherals: 0.144
TCG: 0.132
boot: 0.116
i386: 0.113
network: 0.110
KVM: 0.093
Addresses with 4GB differences are consider as one single address in QEMU
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() {
char *array;
unsigned int i;
array = malloc(sizeof(char) * SIZE);
if(array == NULL) {
fprintf(stderr, "Could not allocate that much memory");
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
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)
Can you still reproduce this problem with the latest version of QEMU (currently version 2.9.0)?
[Expired for QEMU because there has been no activity for 60 days.]
|