diff options
-rw-r--r-- | meta/packages/qemu/qemu-git/06_exit_segfault.patch | 45 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/11_signal_sigaction.patch | 21 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/22_net_tuntap_stall.patch | 18 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/31_syscalls.patch | 27 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/52_ne2000_return.patch | 17 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/63_sparc_build.patch | 18 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/64_ppc_asm_constraints.patch | 18 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/66_tls_ld.patch | 55 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/91-oh-sdl-cursor.patch | 18 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/fix-nogl.patch | 40 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/qemu-amd64-32b-mapping-0.9.0.patch | 37 | ||||
-rw-r--r-- | meta/packages/qemu/qemu-git/qemu-git-qemugl-host.patch (renamed from meta/packages/qemu/qemu-git/qemu-add-gl-host-code.patch) | 966 | ||||
-rw-r--r-- | meta/packages/qemu/qemu_git.bb | 15 |
13 files changed, 849 insertions, 446 deletions
diff --git a/meta/packages/qemu/qemu-git/06_exit_segfault.patch b/meta/packages/qemu/qemu-git/06_exit_segfault.patch deleted file mode 100644 index 06123d0626..0000000000 --- a/meta/packages/qemu/qemu-git/06_exit_segfault.patch +++ /dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | #DPATCHLEVEL=0 | ||
2 | --- | ||
3 | # linux-user/main.c | 8 ++++---- | ||
4 | # 1 file changed, 4 insertions(+), 4 deletions(-) | ||
5 | # | ||
6 | Index: linux-user/main.c | ||
7 | =================================================================== | ||
8 | --- linux-user/main.c.orig 2007-12-03 23:47:25.000000000 +0000 | ||
9 | +++ linux-user/main.c 2007-12-03 23:47:41.000000000 +0000 | ||
10 | @@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env) | ||
11 | default: | ||
12 | printf ("Unhandled trap: 0x%x\n", trapnr); | ||
13 | cpu_dump_state(env, stderr, fprintf, 0); | ||
14 | - exit (1); | ||
15 | + _exit (1); | ||
16 | } | ||
17 | process_pending_signals (env); | ||
18 | } | ||
19 | @@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env) | ||
20 | default: | ||
21 | printf ("Unhandled trap: 0x%x\n", trapnr); | ||
22 | cpu_dump_state(env, stderr, fprintf, 0); | ||
23 | - exit (1); | ||
24 | + _exit (1); | ||
25 | } | ||
26 | process_pending_signals (env); | ||
27 | } | ||
28 | @@ -1954,7 +1954,7 @@ int main(int argc, char **argv) | ||
29 | for(item = cpu_log_items; item->mask != 0; item++) { | ||
30 | printf("%-10s %s\n", item->name, item->help); | ||
31 | } | ||
32 | - exit(1); | ||
33 | + _exit(1); | ||
34 | } | ||
35 | cpu_set_log(mask); | ||
36 | } else if (!strcmp(r, "s")) { | ||
37 | @@ -1973,7 +1973,7 @@ int main(int argc, char **argv) | ||
38 | if (qemu_host_page_size == 0 || | ||
39 | (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) { | ||
40 | fprintf(stderr, "page size must be a power of two\n"); | ||
41 | - exit(1); | ||
42 | + _exit(1); | ||
43 | } | ||
44 | } else if (!strcmp(r, "g")) { | ||
45 | gdbstub_port = atoi(argv[optind++]); | ||
diff --git a/meta/packages/qemu/qemu-git/11_signal_sigaction.patch b/meta/packages/qemu/qemu-git/11_signal_sigaction.patch deleted file mode 100644 index 33c5e8b12d..0000000000 --- a/meta/packages/qemu/qemu-git/11_signal_sigaction.patch +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #DPATCHLEVEL=0 | ||
2 | --- | ||
3 | # linux-user/signal.c | 5 +++++ | ||
4 | # 1 file changed, 5 insertions(+) | ||
5 | # | ||
6 | Index: linux-user/signal.c | ||
7 | =================================================================== | ||
8 | --- linux-user/signal.c.orig 2007-12-03 23:47:44.000000000 +0000 | ||
9 | +++ linux-user/signal.c 2007-12-03 23:47:46.000000000 +0000 | ||
10 | @@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t | ||
11 | |||
12 | if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP) | ||
13 | return -EINVAL; | ||
14 | + | ||
15 | + /* no point doing the stuff as those are not allowed for sigaction */ | ||
16 | + if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP)) | ||
17 | + return -EINVAL; | ||
18 | + | ||
19 | k = &sigact_table[sig - 1]; | ||
20 | #if defined(DEBUG_SIGNAL) | ||
21 | fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n", | ||
diff --git a/meta/packages/qemu/qemu-git/22_net_tuntap_stall.patch b/meta/packages/qemu/qemu-git/22_net_tuntap_stall.patch deleted file mode 100644 index f2bfbc9102..0000000000 --- a/meta/packages/qemu/qemu-git/22_net_tuntap_stall.patch +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #DPATCHLEVEL=0 | ||
2 | --- | ||
3 | # vl.c | 2 +- | ||
4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
5 | # | ||
6 | Index: net.c | ||
7 | =================================================================== | ||
8 | --- net.c.orig 2009-01-05 11:27:29.000000000 +0000 | ||
9 | +++ net.c 2009-01-05 11:27:40.000000000 +0000 | ||
10 | @@ -852,7 +852,7 @@ | ||
11 | return -1; | ||
12 | } | ||
13 | memset(&ifr, 0, sizeof(ifr)); | ||
14 | - ifr.ifr_flags = IFF_TAP | IFF_NO_PI; | ||
15 | + ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;; | ||
16 | if (ifname[0] != '\0') | ||
17 | pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); | ||
18 | else | ||
diff --git a/meta/packages/qemu/qemu-git/31_syscalls.patch b/meta/packages/qemu/qemu-git/31_syscalls.patch deleted file mode 100644 index df2aa84bb1..0000000000 --- a/meta/packages/qemu/qemu-git/31_syscalls.patch +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | #DPATCHLEVEL=0 | ||
2 | --- | ||
3 | # linux-user/syscall.c | 11 ++++++++--- | ||
4 | # 1 file changed, 8 insertions(+), 3 deletions(-) | ||
5 | # | ||
6 | Index: linux-user/syscall.c | ||
7 | =================================================================== | ||
8 | --- linux-user/syscall.c.orig 2009-01-05 12:32:37.000000000 +0000 | ||
9 | +++ linux-user/syscall.c 2009-01-05 12:32:37.000000000 +0000 | ||
10 | @@ -298,6 +298,7 @@ | ||
11 | extern int setfsuid(int); | ||
12 | extern int setfsgid(int); | ||
13 | extern int setgroups(int, gid_t *); | ||
14 | +extern int uselib(const char*); | ||
15 | |||
16 | #define ERRNO_TABLE_SIZE 1200 | ||
17 | |||
18 | @@ -4397,7 +4398,8 @@ | ||
19 | #endif | ||
20 | #ifdef TARGET_NR_uselib | ||
21 | case TARGET_NR_uselib: | ||
22 | - goto unimplemented; | ||
23 | + ret = get_errno(uselib(path((const char*)arg1))); | ||
24 | + break; | ||
25 | #endif | ||
26 | #ifdef TARGET_NR_swapon | ||
27 | case TARGET_NR_swapon: | ||
diff --git a/meta/packages/qemu/qemu-git/52_ne2000_return.patch b/meta/packages/qemu/qemu-git/52_ne2000_return.patch deleted file mode 100644 index e4ea33f2c6..0000000000 --- a/meta/packages/qemu/qemu-git/52_ne2000_return.patch +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | --- | ||
2 | hw/ne2000.c | 2 +- | ||
3 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
4 | |||
5 | Index: qemu/hw/ne2000.c | ||
6 | =================================================================== | ||
7 | --- qemu.orig/hw/ne2000.c 2007-12-03 19:32:52.000000000 +0000 | ||
8 | +++ qemu/hw/ne2000.c 2007-12-03 19:33:55.000000000 +0000 | ||
9 | @@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq | ||
10 | NE2000State *s = opaque; | ||
11 | |||
12 | if (s->cmd & E8390_STOP) | ||
13 | - return 1; | ||
14 | + return 0; | ||
15 | return !ne2000_buffer_full(s); | ||
16 | } | ||
17 | |||
diff --git a/meta/packages/qemu/qemu-git/63_sparc_build.patch b/meta/packages/qemu/qemu-git/63_sparc_build.patch deleted file mode 100644 index 37b38f641b..0000000000 --- a/meta/packages/qemu/qemu-git/63_sparc_build.patch +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #DPATCHLEVEL=0 | ||
2 | --- | ||
3 | # sparc.ld | 2 +- | ||
4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
5 | # | ||
6 | Index: sparc.ld | ||
7 | =================================================================== | ||
8 | --- sparc.ld.orig 2007-12-03 15:40:26.000000000 +0000 | ||
9 | +++ sparc.ld 2007-12-03 16:05:06.000000000 +0000 | ||
10 | @@ -6,7 +6,7 @@ ENTRY(_start) | ||
11 | SECTIONS | ||
12 | { | ||
13 | /* Read-only sections, merged into text segment: */ | ||
14 | - . = 0x60000000 + SIZEOF_HEADERS; | ||
15 | + . = 0x60000000 + 0x400; | ||
16 | .interp : { *(.interp) } | ||
17 | .hash : { *(.hash) } | ||
18 | .dynsym : { *(.dynsym) } | ||
diff --git a/meta/packages/qemu/qemu-git/64_ppc_asm_constraints.patch b/meta/packages/qemu/qemu-git/64_ppc_asm_constraints.patch deleted file mode 100644 index e4858b79d7..0000000000 --- a/meta/packages/qemu/qemu-git/64_ppc_asm_constraints.patch +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #DPATCHLEVEL=1 | ||
2 | --- | ||
3 | # cpu-all.h | 2 +- | ||
4 | # 1 file changed, 1 insertion(+), 1 deletion(-) | ||
5 | # | ||
6 | Index: qemu/cpu-all.h | ||
7 | =================================================================== | ||
8 | --- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100 | ||
9 | +++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100 | ||
10 | @@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i | ||
11 | static inline void stl_le_p(void *ptr, int v) | ||
12 | { | ||
13 | #ifdef __powerpc__ | ||
14 | - __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr)); | ||
15 | + __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory"); | ||
16 | #else | ||
17 | uint8_t *p = ptr; | ||
18 | p[0] = v; | ||
diff --git a/meta/packages/qemu/qemu-git/66_tls_ld.patch b/meta/packages/qemu/qemu-git/66_tls_ld.patch deleted file mode 100644 index 54e02eff8b..0000000000 --- a/meta/packages/qemu/qemu-git/66_tls_ld.patch +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | --- | ||
2 | arm.ld | 7 +++++++ | ||
3 | i386.ld | 7 +++++++ | ||
4 | 2 files changed, 14 insertions(+) | ||
5 | |||
6 | Index: arm.ld | ||
7 | =================================================================== | ||
8 | --- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100 | ||
9 | +++ arm.ld 2007-06-13 11:51:56.000000000 +0100 | ||
10 | @@ -26,6 +26,10 @@ SECTIONS | ||
11 | { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } | ||
12 | .rela.rodata : | ||
13 | { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } | ||
14 | + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } | ||
15 | + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } | ||
16 | + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } | ||
17 | + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } | ||
18 | .rel.got : { *(.rel.got) } | ||
19 | .rela.got : { *(.rela.got) } | ||
20 | .rel.ctors : { *(.rel.ctors) } | ||
21 | @@ -58,6 +62,9 @@ SECTIONS | ||
22 | .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } | ||
23 | __exidx_end = .; | ||
24 | .reginfo : { *(.reginfo) } | ||
25 | + /* Thread Local Storage sections */ | ||
26 | + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } | ||
27 | + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } | ||
28 | /* Adjust the address for the data segment. We want to adjust up to | ||
29 | the same address within the page on the next page up. */ | ||
30 | . = ALIGN(0x100000) + (. & (0x100000 - 1)); | ||
31 | Index: i386.ld | ||
32 | =================================================================== | ||
33 | --- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100 | ||
34 | +++ i386.ld 2007-06-13 11:51:56.000000000 +0100 | ||
35 | @@ -28,6 +28,10 @@ SECTIONS | ||
36 | { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } | ||
37 | .rela.rodata : | ||
38 | { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } | ||
39 | + .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } | ||
40 | + .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } | ||
41 | + .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } | ||
42 | + .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } | ||
43 | .rel.got : { *(.rel.got) } | ||
44 | .rela.got : { *(.rela.got) } | ||
45 | .rel.ctors : { *(.rel.ctors) } | ||
46 | @@ -53,6 +57,9 @@ SECTIONS | ||
47 | _etext = .; | ||
48 | PROVIDE (etext = .); | ||
49 | .fini : { *(.fini) } =0x47ff041f | ||
50 | + /* Thread Local Storage sections */ | ||
51 | + .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } | ||
52 | + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } | ||
53 | . = ALIGN(32 / 8); | ||
54 | PROVIDE (__preinit_array_start = .); | ||
55 | .preinit_array : { *(.preinit_array) } | ||
diff --git a/meta/packages/qemu/qemu-git/91-oh-sdl-cursor.patch b/meta/packages/qemu/qemu-git/91-oh-sdl-cursor.patch deleted file mode 100644 index 0d60c1c306..0000000000 --- a/meta/packages/qemu/qemu-git/91-oh-sdl-cursor.patch +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | === modified file 'sdl.c' | ||
2 | --- | ||
3 | sdl.c | 2 +- | ||
4 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
5 | |||
6 | Index: sdl.c | ||
7 | =================================================================== | ||
8 | --- sdl.c.orig 2007-12-03 19:32:15.000000000 +0000 | ||
9 | +++ sdl.c 2007-12-03 19:34:04.000000000 +0000 | ||
10 | @@ -247,7 +247,7 @@ static void sdl_hide_cursor(void) | ||
11 | |||
12 | if (kbd_mouse_is_absolute()) { | ||
13 | SDL_ShowCursor(1); | ||
14 | - SDL_SetCursor(sdl_cursor_hidden); | ||
15 | + /* SDL_SetCursor(sdl_cursor_hidden); */ | ||
16 | } else { | ||
17 | SDL_ShowCursor(0); | ||
18 | } | ||
diff --git a/meta/packages/qemu/qemu-git/fix-nogl.patch b/meta/packages/qemu/qemu-git/fix-nogl.patch new file mode 100644 index 0000000000..f1f9bcf00b --- /dev/null +++ b/meta/packages/qemu/qemu-git/fix-nogl.patch | |||
@@ -0,0 +1,40 @@ | |||
1 | Index: git/Makefile.target | ||
2 | =================================================================== | ||
3 | --- git.orig/Makefile.target 2009-06-09 22:05:27.000000000 +0100 | ||
4 | +++ git/Makefile.target 2009-06-09 22:05:28.000000000 +0100 | ||
5 | @@ -155,6 +155,8 @@ | ||
6 | |||
7 | ifeq ($(TARGET_BASE_ARCH), i386) | ||
8 | LIBOBJS+=helper_opengl.o opengl_exec.o | ||
9 | +else | ||
10 | +LIBOBJS+=dummygl.o | ||
11 | endif | ||
12 | |||
13 | ifeq ($(TARGET_BASE_ARCH), arm) | ||
14 | Index: git/target-arm/dummygl.c | ||
15 | =================================================================== | ||
16 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | ||
17 | +++ git/target-arm/dummygl.c 2009-06-09 22:15:55.000000000 +0100 | ||
18 | @@ -0,0 +1,22 @@ | ||
19 | +#include <string.h> | ||
20 | +#include <stdlib.h> | ||
21 | +#include <assert.h> | ||
22 | +#include <stdint.h> | ||
23 | +#include <X11/Xlib.h> | ||
24 | +#include <X11/Xutil.h> | ||
25 | + | ||
26 | +void opengl_exec_set_parent_window(Display* _dpy, Window _parent_window) | ||
27 | +{ | ||
28 | + | ||
29 | +} | ||
30 | + | ||
31 | +void opengl_process_enable(void) | ||
32 | +{ | ||
33 | + | ||
34 | +} | ||
35 | + | ||
36 | + | ||
37 | +void mem_opengl(uint64_t ptr) | ||
38 | +{ | ||
39 | + | ||
40 | +} | ||
diff --git a/meta/packages/qemu/qemu-git/qemu-amd64-32b-mapping-0.9.0.patch b/meta/packages/qemu/qemu-git/qemu-amd64-32b-mapping-0.9.0.patch deleted file mode 100644 index 40ab59c762..0000000000 --- a/meta/packages/qemu/qemu-git/qemu-amd64-32b-mapping-0.9.0.patch +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | --- | ||
2 | linux-user/mmap.c | 8 ++++++-- | ||
3 | 1 file changed, 6 insertions(+), 2 deletions(-) | ||
4 | |||
5 | Index: trunk/linux-user/mmap.c | ||
6 | =================================================================== | ||
7 | --- trunk.orig/linux-user/mmap.c 2009-01-05 11:09:58.000000000 +0000 | ||
8 | +++ trunk/linux-user/mmap.c 2009-01-05 12:46:33.000000000 +0000 | ||
9 | @@ -122,6 +122,10 @@ | ||
10 | munmap(p, *p); | ||
11 | } | ||
12 | |||
13 | +#ifndef MAP_32BIT | ||
14 | +#define MAP_32BIT 0 | ||
15 | +#endif | ||
16 | + | ||
17 | /* NOTE: all the constants are the HOST ones, but addresses are target. */ | ||
18 | int target_mprotect(abi_ulong start, abi_ulong len, int prot) | ||
19 | { | ||
20 | @@ -365,7 +369,7 @@ | ||
21 | especially important if qemu_host_page_size > | ||
22 | qemu_real_host_page_size */ | ||
23 | p = mmap(g2h(mmap_start), | ||
24 | - host_len, prot, flags | MAP_FIXED, fd, host_offset); | ||
25 | + host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset); | ||
26 | if (p == MAP_FAILED) | ||
27 | goto fail; | ||
28 | /* update start so that it points to the file position at 'offset' */ | ||
29 | @@ -567,7 +571,7 @@ | ||
30 | flags | MREMAP_FIXED, | ||
31 | g2h(mmap_start)); | ||
32 | } else { | ||
33 | - host_addr = mremap(g2h(old_addr), old_size, new_size, flags); | ||
34 | + host_addr = mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT); | ||
35 | /* Check if address fits target address space */ | ||
36 | if ((unsigned long)host_addr + new_size > (abi_ulong)-1) { | ||
37 | /* Revert mremap() changes */ | ||
diff --git a/meta/packages/qemu/qemu-git/qemu-add-gl-host-code.patch b/meta/packages/qemu/qemu-git/qemu-git-qemugl-host.patch index 25ee379251..3ad5c081f1 100644 --- a/meta/packages/qemu/qemu-git/qemu-add-gl-host-code.patch +++ b/meta/packages/qemu/qemu-git/qemu-git-qemugl-host.patch | |||
@@ -1,21 +1,19 @@ | |||
1 | Index: git/Makefile.target | 1 | diff --git a/Makefile.target b/Makefile.target |
2 | =================================================================== | 2 | index f33f762..d1eb876 100644 |
3 | --- git.orig/Makefile.target 2009-05-23 11:22:16.000000000 +0100 | 3 | --- a/Makefile.target |
4 | +++ git/Makefile.target 2009-05-23 11:59:35.000000000 +0100 | 4 | +++ b/Makefile.target |
5 | @@ -153,6 +153,12 @@ | 5 | @@ -153,6 +153,10 @@ endif |
6 | CPPFLAGS+=-I$(SRC_PATH)/fpu | 6 | CPPFLAGS+=-I$(SRC_PATH)/fpu |
7 | LIBOBJS+= op_helper.o helper.o | 7 | LIBOBJS+= op_helper.o helper.o |
8 | 8 | ||
9 | +ifeq ($(TARGET_BASE_ARCH), i386) | 9 | +ifeq ($(TARGET_BASE_ARCH), i386) |
10 | +LIBOBJS+=helper_opengl.o opengl_exec.o | 10 | +LIBOBJS+=helper_opengl.o opengl_exec.o |
11 | +else | ||
12 | +LIBOBJS+=opengl_dummy.o | ||
13 | +endif | 11 | +endif |
14 | + | 12 | + |
15 | ifeq ($(TARGET_BASE_ARCH), arm) | 13 | ifeq ($(TARGET_BASE_ARCH), arm) |
16 | LIBOBJS+= neon_helper.o iwmmxt_helper.o | 14 | LIBOBJS+= neon_helper.o iwmmxt_helper.o |
17 | endif | 15 | endif |
18 | @@ -224,6 +230,21 @@ | 16 | @@ -224,6 +228,21 @@ op_helper.o: CFLAGS += $(HELPER_CFLAGS) $(I386_CFLAGS) |
19 | 17 | ||
20 | cpu-exec.o: CFLAGS += $(HELPER_CFLAGS) | 18 | cpu-exec.o: CFLAGS += $(HELPER_CFLAGS) |
21 | 19 | ||
@@ -37,20 +35,46 @@ Index: git/Makefile.target | |||
37 | ######################################################### | 35 | ######################################################### |
38 | # Linux user emulator target | 36 | # Linux user emulator target |
39 | 37 | ||
40 | @@ -724,7 +745,7 @@ | 38 | @@ -584,7 +603,7 @@ OBJS+= fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o |
41 | main.o: CFLAGS+=-p | 39 | OBJS+= cirrus_vga.o apic.o parallel.o acpi.o piix_pci.o |
40 | OBJS+= usb-uhci.o vmmouse.o vmport.o vmware_vga.o hpet.o | ||
41 | OBJS += device-hotplug.o pci-hotplug.o | ||
42 | -CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE | ||
43 | +CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE -DTARGET_OPENGL_OK | ||
42 | endif | 44 | endif |
43 | 45 | ifeq ($(TARGET_BASE_ARCH), ppc) | |
44 | -$(QEMU_PROG): LIBS += $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) $(VDE_LIBS) | 46 | CPPFLAGS += -DHAS_AUDIO -DHAS_AUDIO_CHOICE |
45 | +$(QEMU_PROG): LIBS += $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) $(VDE_LIBS) -lGL -lGLU | 47 | @@ -727,7 +746,7 @@ endif |
48 | $(QEMU_PROG): LIBS += $(SDL_LIBS) $(COCOA_LIBS) $(CURSES_LIBS) $(BRLAPI_LIBS) $(VDE_LIBS) | ||
46 | 49 | ||
47 | $(QEMU_PROG): $(OBJS) ../libqemu_common.a libqemu.a | 50 | $(QEMU_PROG): $(OBJS) ../libqemu_common.a libqemu.a |
48 | $(LINK) | 51 | - $(LINK) |
49 | Index: git/hw/vmware_vga.c | 52 | + $(LINK) -lGL -lGLU |
50 | =================================================================== | 53 | |
51 | --- git.orig/hw/vmware_vga.c 2009-05-23 11:22:16.000000000 +0100 | 54 | endif # !CONFIG_USER_ONLY |
52 | +++ git/hw/vmware_vga.c 2009-05-23 11:22:17.000000000 +0100 | 55 | |
53 | @@ -484,6 +484,8 @@ | 56 | diff --git a/hw/pixel_ops.h b/hw/pixel_ops.h |
57 | index d390adf..9100b5c 100644 | ||
58 | --- a/hw/pixel_ops.h | ||
59 | +++ b/hw/pixel_ops.h | ||
60 | @@ -4,6 +4,12 @@ static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g, | ||
61 | return ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6); | ||
62 | } | ||
63 | |||
64 | +static inline unsigned int rgb_to_pixel8bgr(unsigned int r, unsigned int g, | ||
65 | + unsigned int b) | ||
66 | +{ | ||
67 | + return ((b >> 5) << 5) | ((g >> 5) << 2) | (r >> 6); | ||
68 | +} | ||
69 | + | ||
70 | static inline unsigned int rgb_to_pixel15(unsigned int r, unsigned int g, | ||
71 | unsigned int b) | ||
72 | { | ||
73 | diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c | ||
74 | index d1cba28..c918afb 100644 | ||
75 | --- a/hw/vmware_vga.c | ||
76 | +++ b/hw/vmware_vga.c | ||
77 | @@ -484,6 +484,8 @@ static inline void vmsvga_cursor_define(struct vmsvga_state_s *s, | ||
54 | 78 | ||
55 | #define CMD(f) le32_to_cpu(s->cmd->f) | 79 | #define CMD(f) le32_to_cpu(s->cmd->f) |
56 | 80 | ||
@@ -59,7 +83,7 @@ Index: git/hw/vmware_vga.c | |||
59 | static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) | 83 | static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) |
60 | { | 84 | { |
61 | if (!s->config || !s->enable) | 85 | if (!s->config || !s->enable) |
62 | @@ -493,11 +495,18 @@ | 86 | @@ -493,11 +495,18 @@ static inline int vmsvga_fifo_empty(struct vmsvga_state_s *s) |
63 | 87 | ||
64 | static inline uint32_t vmsvga_fifo_read_raw(struct vmsvga_state_s *s) | 88 | static inline uint32_t vmsvga_fifo_read_raw(struct vmsvga_state_s *s) |
65 | { | 89 | { |
@@ -82,7 +106,7 @@ Index: git/hw/vmware_vga.c | |||
82 | } | 106 | } |
83 | 107 | ||
84 | static inline uint32_t vmsvga_fifo_read(struct vmsvga_state_s *s) | 108 | static inline uint32_t vmsvga_fifo_read(struct vmsvga_state_s *s) |
85 | @@ -507,12 +516,12 @@ | 109 | @@ -507,12 +516,12 @@ static inline uint32_t vmsvga_fifo_read(struct vmsvga_state_s *s) |
86 | 110 | ||
87 | static void vmsvga_fifo_run(struct vmsvga_state_s *s) | 111 | static void vmsvga_fifo_run(struct vmsvga_state_s *s) |
88 | { | 112 | { |
@@ -97,7 +121,7 @@ Index: git/hw/vmware_vga.c | |||
97 | case SVGA_CMD_UPDATE: | 121 | case SVGA_CMD_UPDATE: |
98 | case SVGA_CMD_UPDATE_VERBOSE: | 122 | case SVGA_CMD_UPDATE_VERBOSE: |
99 | x = vmsvga_fifo_read(s); | 123 | x = vmsvga_fifo_read(s); |
100 | @@ -612,7 +621,7 @@ | 124 | @@ -612,7 +621,7 @@ static void vmsvga_fifo_run(struct vmsvga_state_s *s) |
101 | while (args --) | 125 | while (args --) |
102 | vmsvga_fifo_read(s); | 126 | vmsvga_fifo_read(s); |
103 | printf("%s: Unknown command 0x%02x in SVGA command FIFO\n", | 127 | printf("%s: Unknown command 0x%02x in SVGA command FIFO\n", |
@@ -106,11 +130,35 @@ Index: git/hw/vmware_vga.c | |||
106 | break; | 130 | break; |
107 | } | 131 | } |
108 | 132 | ||
109 | Index: git/kqemu.c | 133 | @@ -914,8 +923,9 @@ static void vmsvga_reset(struct vmsvga_state_s *s) |
110 | =================================================================== | 134 | s->width = -1; |
111 | --- git.orig/kqemu.c 2009-05-23 11:22:16.000000000 +0100 | 135 | s->height = -1; |
112 | +++ git/kqemu.c 2009-05-23 11:22:17.000000000 +0100 | 136 | s->svgaid = SVGA_ID; |
113 | @@ -93,6 +93,8 @@ | 137 | - s->depth = 24; |
138 | + s->depth = 32; | ||
139 | s->bypp = (s->depth + 7) >> 3; | ||
140 | + s->bypp = 4; /* XXX: until we can get host's actual depth */ | ||
141 | s->cursor.on = 0; | ||
142 | s->redraw_fifo_first = 0; | ||
143 | s->redraw_fifo_last = 0; | ||
144 | @@ -1140,6 +1150,12 @@ static void vmsvga_init(struct vmsvga_state_s *s, | ||
145 | /* XXX: use optimized standard vga accesses */ | ||
146 | cpu_register_physical_memory(VBE_DISPI_LFB_PHYSICAL_ADDRESS, | ||
147 | vga_ram_size, vga_ram_offset); | ||
148 | + | ||
149 | +#ifdef EMBED_STDVGA | ||
150 | + s->map_addr = VBE_DISPI_LFB_PHYSICAL_ADDRESS; | ||
151 | + s->map_end = VBE_DISPI_LFB_PHYSICAL_ADDRESS + vga_ram_size; | ||
152 | + vga_dirty_log_start((VGAState *) s); | ||
153 | +#endif | ||
154 | #endif | ||
155 | } | ||
156 | |||
157 | diff --git a/kqemu.c b/kqemu.c | ||
158 | index 25f4ea7..09c761a 100644 | ||
159 | --- a/kqemu.c | ||
160 | +++ b/kqemu.c | ||
161 | @@ -93,6 +93,8 @@ uint8_t *modified_ram_pages_table; | ||
114 | int qpi_io_memory; | 162 | int qpi_io_memory; |
115 | uint32_t kqemu_comm_base; /* physical address of the QPI communication page */ | 163 | uint32_t kqemu_comm_base; /* physical address of the QPI communication page */ |
116 | 164 | ||
@@ -119,7 +167,7 @@ Index: git/kqemu.c | |||
119 | #define cpuid(index, eax, ebx, ecx, edx) \ | 167 | #define cpuid(index, eax, ebx, ecx, edx) \ |
120 | asm volatile ("cpuid" \ | 168 | asm volatile ("cpuid" \ |
121 | : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \ | 169 | : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) \ |
122 | @@ -860,6 +862,22 @@ | 170 | @@ -860,6 +862,22 @@ int kqemu_cpu_exec(CPUState *env) |
123 | else | 171 | else |
124 | env->hflags &= ~HF_OSFXSR_MASK; | 172 | env->hflags &= ~HF_OSFXSR_MASK; |
125 | 173 | ||
@@ -134,7 +182,7 @@ Index: git/kqemu.c | |||
134 | + | 182 | + |
135 | + if (env->tlb_table[1][index].addend) { | 183 | + if (env->tlb_table[1][index].addend) { |
136 | + unsigned char *ptr = env->eip + env->tlb_table[1][index].addend; | 184 | + unsigned char *ptr = env->eip + env->tlb_table[1][index].addend; |
137 | + if (ptr[0] == 0xCD && ptr[1] == 0x99) | 185 | + if (ptr[0] == 0xcd && ptr[1] == 0x99) |
138 | + helper_opengl(); | 186 | + helper_opengl(); |
139 | + } | 187 | + } |
140 | + } | 188 | + } |
@@ -142,10 +190,271 @@ Index: git/kqemu.c | |||
142 | LOG_INT("kqemu: kqemu_cpu_exec: ret=0x%x\n", ret); | 190 | LOG_INT("kqemu: kqemu_cpu_exec: ret=0x%x\n", ret); |
143 | if (ret == KQEMU_RET_SYSCALL) { | 191 | if (ret == KQEMU_RET_SYSCALL) { |
144 | /* syscall instruction */ | 192 | /* syscall instruction */ |
145 | Index: git/target-i386/beginend_funcs.sh | 193 | diff --git a/qemu-char.c b/qemu-char.c |
146 | =================================================================== | 194 | index 64d41d0..424ea9b 100644 |
147 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 195 | --- a/qemu-char.c |
148 | +++ git/target-i386/beginend_funcs.sh 2009-05-23 11:22:17.000000000 +0100 | 196 | +++ b/qemu-char.c |
197 | @@ -2112,6 +2112,69 @@ static CharDriverState *qemu_chr_open_tcp(const char *host_str, | ||
198 | return NULL; | ||
199 | } | ||
200 | |||
201 | +#define TARGET_OPENGL_OK | ||
202 | +#if defined(TARGET_OPENGL_OK) | ||
203 | +static uint8_t buffer[32]; | ||
204 | +static int buffer_len; | ||
205 | +static int hexdigit[128] = { | ||
206 | + ['0'] = 0x0, | ||
207 | + ['1'] = 0x1, | ||
208 | + ['2'] = 0x2, | ||
209 | + ['3'] = 0x3, | ||
210 | + ['4'] = 0x4, | ||
211 | + ['5'] = 0x5, | ||
212 | + ['6'] = 0x6, | ||
213 | + ['7'] = 0x7, | ||
214 | + ['8'] = 0x8, | ||
215 | + ['9'] = 0x9, | ||
216 | + ['a'] = 0xa, | ||
217 | + ['b'] = 0xb, | ||
218 | + ['c'] = 0xc, | ||
219 | + ['d'] = 0xd, | ||
220 | + ['e'] = 0xe, | ||
221 | + ['f'] = 0xf, | ||
222 | +}; | ||
223 | + | ||
224 | +static int opengl_chr_write(CharDriverState *chr, const uint8_t *buf, int len) | ||
225 | +{ | ||
226 | + uint64_t ptr = 0; | ||
227 | + int i; | ||
228 | + | ||
229 | + if (memchr(buf, 'x', len)) | ||
230 | + opengl_process_enable(); | ||
231 | + return len; | ||
232 | + memcpy(buffer + buffer_len, buf, len); | ||
233 | + buffer_len += len; | ||
234 | + | ||
235 | + if (buffer_len >= 16) { | ||
236 | + for (i = 0; i < 16; i ++) | ||
237 | + ptr = (ptr << 4) + hexdigit[buffer[i]]; | ||
238 | + | ||
239 | + buffer_len -= 16; | ||
240 | + if (buffer_len) | ||
241 | + memcpy(buffer, buffer + 16, buffer_len); | ||
242 | + | ||
243 | + mem_opengl(ptr); | ||
244 | + } | ||
245 | + | ||
246 | + return len; | ||
247 | +} | ||
248 | + | ||
249 | +CharDriverState *qemu_chr_open_opengl(void) | ||
250 | +{ | ||
251 | + CharDriverState *chr = qemu_mallocz(sizeof(CharDriverState)); | ||
252 | + | ||
253 | + chr->opaque = chr; | ||
254 | + chr->chr_write = opengl_chr_write; | ||
255 | + | ||
256 | + qemu_chr_reset(chr); | ||
257 | + | ||
258 | + return chr; | ||
259 | +} | ||
260 | +#else | ||
261 | +#define qemu_chr_open_opengl() 0 | ||
262 | +#endif | ||
263 | + | ||
264 | CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s)) | ||
265 | { | ||
266 | const char *p; | ||
267 | @@ -2192,6 +2255,9 @@ CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*i | ||
268 | chr = chr_baum_init(); | ||
269 | } else | ||
270 | #endif | ||
271 | + if (!strcmp(filename, "opengl")) { | ||
272 | + chr = qemu_chr_open_opengl(); | ||
273 | + } else | ||
274 | { | ||
275 | chr = NULL; | ||
276 | } | ||
277 | diff --git a/sdl.c b/sdl.c | ||
278 | index 74f084c..b78f754 100644 | ||
279 | --- a/sdl.c | ||
280 | +++ b/sdl.c | ||
281 | @@ -54,6 +54,8 @@ static int guest_cursor = 0; | ||
282 | static int guest_x, guest_y; | ||
283 | static SDL_Cursor *guest_sprite = 0; | ||
284 | |||
285 | +extern void opengl_exec_set_parent_window(Display* _dpy, Window _parent_window); | ||
286 | + | ||
287 | static void sdl_update(DisplayState *ds, int x, int y, int w, int h) | ||
288 | { | ||
289 | SDL_Rect rec; | ||
290 | @@ -85,7 +87,9 @@ static void sdl_setdata(DisplayState *ds) | ||
291 | |||
292 | static void sdl_resize(DisplayState *ds) | ||
293 | { | ||
294 | + SDL_SysWMinfo info; | ||
295 | int flags; | ||
296 | + static Display *dpy; | ||
297 | |||
298 | // printf("resizing to %d %d\n", w, h); | ||
299 | |||
300 | @@ -104,6 +108,13 @@ static void sdl_resize(DisplayState *ds) | ||
301 | } | ||
302 | |||
303 | sdl_setdata(ds); | ||
304 | + | ||
305 | + SDL_GetWMInfo(&info); | ||
306 | + if (info.subsystem == SDL_SYSWM_X11 && info.info.x11.display && | ||
307 | + (!dpy || dpy == info.info.x11.display)) { | ||
308 | + dpy = info.info.x11.display; | ||
309 | + opengl_exec_set_parent_window(dpy, info.info.x11.window); | ||
310 | + } | ||
311 | } | ||
312 | |||
313 | /* generic keyboard conversion */ | ||
314 | @@ -320,7 +331,7 @@ static void sdl_show_cursor(void) | ||
315 | |||
316 | if (!kbd_mouse_is_absolute()) { | ||
317 | SDL_ShowCursor(1); | ||
318 | - if (guest_cursor && | ||
319 | + if (guest_cursor && !force_pointer && | ||
320 | (gui_grab || kbd_mouse_is_absolute() || absolute_enabled)) | ||
321 | SDL_SetCursor(guest_sprite); | ||
322 | else | ||
323 | @@ -331,7 +342,8 @@ static void sdl_show_cursor(void) | ||
324 | static void sdl_grab_start(void) | ||
325 | { | ||
326 | if (guest_cursor) { | ||
327 | - SDL_SetCursor(guest_sprite); | ||
328 | + if (!force_pointer) | ||
329 | + SDL_SetCursor(guest_sprite); | ||
330 | if (!kbd_mouse_is_absolute() && !absolute_enabled) | ||
331 | SDL_WarpMouse(guest_x, guest_y); | ||
332 | } else | ||
333 | @@ -372,8 +384,8 @@ static void sdl_send_mouse_event(int dx, int dy, int dz, int x, int y, int state | ||
334 | absolute_enabled = 1; | ||
335 | } | ||
336 | |||
337 | - dx = x * 0x7FFF / (width - 1); | ||
338 | - dy = y * 0x7FFF / (height - 1); | ||
339 | + dx = x * 0x7FFF / (width - 1); | ||
340 | + dy = y * 0x7FFF / (height - 1); | ||
341 | } else if (absolute_enabled) { | ||
342 | sdl_show_cursor(); | ||
343 | absolute_enabled = 0; | ||
344 | @@ -603,7 +615,8 @@ static void sdl_mouse_warp(int x, int y, int on) | ||
345 | if (!guest_cursor) | ||
346 | sdl_show_cursor(); | ||
347 | if (gui_grab || kbd_mouse_is_absolute() || absolute_enabled) { | ||
348 | - SDL_SetCursor(guest_sprite); | ||
349 | + if (!force_pointer) | ||
350 | + SDL_SetCursor(guest_sprite); | ||
351 | if (!kbd_mouse_is_absolute() && !absolute_enabled) | ||
352 | SDL_WarpMouse(x, y); | ||
353 | } | ||
354 | @@ -628,6 +641,10 @@ static void sdl_mouse_define(int width, int height, int bpp, | ||
355 | line = image; | ||
356 | for (x = 0; x < width; x ++, dst ++) { | ||
357 | switch (bpp) { | ||
358 | + case 32: | ||
359 | + src = *(line ++); src |= *(line ++); | ||
360 | + src = *(line ++); src |= *(line ++); | ||
361 | + break; | ||
362 | case 24: | ||
363 | src = *(line ++); src |= *(line ++); src |= *(line ++); | ||
364 | break; | ||
365 | @@ -654,7 +671,7 @@ static void sdl_mouse_define(int width, int height, int bpp, | ||
366 | } | ||
367 | guest_sprite = SDL_CreateCursor(sprite, mask, width, height, hot_x, hot_y); | ||
368 | |||
369 | - if (guest_cursor && | ||
370 | + if (guest_cursor && !force_pointer && | ||
371 | (gui_grab || kbd_mouse_is_absolute() || absolute_enabled)) | ||
372 | SDL_SetCursor(guest_sprite); | ||
373 | } | ||
374 | @@ -670,6 +687,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) | ||
375 | { | ||
376 | int flags; | ||
377 | uint8_t data = 0; | ||
378 | + SDL_SysWMinfo info; | ||
379 | |||
380 | #if defined(__APPLE__) | ||
381 | /* always use generic keymaps */ | ||
382 | @@ -691,6 +709,12 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) | ||
383 | exit(1); | ||
384 | } | ||
385 | |||
386 | + SDL_GetWMInfo(&info); | ||
387 | + if (info.subsystem == SDL_SYSWM_X11 && info.info.x11.display) | ||
388 | + opengl_exec_set_parent_window(info.info.x11.display, | ||
389 | + RootWindow(info.info.x11.display, | ||
390 | + DefaultScreen(info.info.x11.display))); | ||
391 | + | ||
392 | dcl = qemu_mallocz(sizeof(DisplayChangeListener)); | ||
393 | dcl->dpy_update = sdl_update; | ||
394 | dcl->dpy_resize = sdl_resize; | ||
395 | @@ -714,4 +738,9 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) | ||
396 | gui_fullscreen_initial_grab = 1; | ||
397 | sdl_grab_start(); | ||
398 | } | ||
399 | + | ||
400 | + SDL_GetWMInfo(&info); | ||
401 | + if (info.subsystem == SDL_SYSWM_X11 && info.info.x11.display) | ||
402 | + opengl_exec_set_parent_window(info.info.x11.display, | ||
403 | + info.info.x11.window); | ||
404 | } | ||
405 | diff --git a/slirp/ctl.h b/slirp/ctl.h | ||
406 | index 4a8576d..201ae4b 100644 | ||
407 | --- a/slirp/ctl.h | ||
408 | +++ b/slirp/ctl.h | ||
409 | @@ -2,6 +2,7 @@ | ||
410 | #define CTL_EXEC 1 | ||
411 | #define CTL_ALIAS 2 | ||
412 | #define CTL_DNS 3 | ||
413 | +#define CTL_OPENGL 6 | ||
414 | |||
415 | #define CTL_SPECIAL "10.0.2.0" | ||
416 | #define CTL_LOCAL "10.0.2.15" | ||
417 | diff --git a/slirp/udp.c b/slirp/udp.c | ||
418 | index 8d3bdd2..e5f40cc 100644 | ||
419 | --- a/slirp/udp.c | ||
420 | +++ b/slirp/udp.c | ||
421 | @@ -40,6 +40,7 @@ | ||
422 | |||
423 | #include <slirp.h> | ||
424 | #include "ip_icmp.h" | ||
425 | +#include "bswap.h" | ||
426 | |||
427 | #ifdef LOG_ENABLED | ||
428 | struct udpstat udpstat; | ||
429 | @@ -153,6 +154,11 @@ udp_input(m, iphlen) | ||
430 | goto bad; | ||
431 | } | ||
432 | |||
433 | + if (ntohs(uh->uh_dport) == 9999 && m->m_len - iphlen == 16) { | ||
434 | + mem_opengl(le64_to_cpup((uint64_t *) (m->m_data + iphlen + 8))); | ||
435 | + goto bad; | ||
436 | + } | ||
437 | + | ||
438 | if (slirp_restrict) | ||
439 | goto bad; | ||
440 | |||
441 | diff --git a/sysemu.h b/sysemu.h | ||
442 | index 57217c1..f0a48cd 100644 | ||
443 | --- a/sysemu.h | ||
444 | +++ b/sysemu.h | ||
445 | @@ -96,6 +96,7 @@ extern int graphic_rotate; | ||
446 | extern int no_quit; | ||
447 | extern int semihosting_enabled; | ||
448 | extern int old_param; | ||
449 | +extern int force_pointer; | ||
450 | extern const char *bootp_filename; | ||
451 | |||
452 | #ifdef USE_KQEMU | ||
453 | diff --git a/target-i386/beginend_funcs.sh b/target-i386/beginend_funcs.sh | ||
454 | new file mode 100755 | ||
455 | index 0000000..bdd7684 | ||
456 | --- /dev/null | ||
457 | +++ b/target-i386/beginend_funcs.sh | ||
149 | @@ -0,0 +1,23 @@ | 458 | @@ -0,0 +1,23 @@ |
150 | +#! /bin/sh | 459 | +#! /bin/sh |
151 | +# Copyright 2008 (C) Intel Corporation | 460 | +# Copyright 2008 (C) Intel Corporation |
@@ -170,10 +479,11 @@ Index: git/target-i386/beginend_funcs.sh | |||
170 | +echo -e MAGIC_MACRO\(glCallList\)\\n | 479 | +echo -e MAGIC_MACRO\(glCallList\)\\n |
171 | +echo -e MAGIC_MACRO\(glCallLists\)\\n | 480 | +echo -e MAGIC_MACRO\(glCallLists\)\\n |
172 | +echo -e MAGIC_MACRO\(glEdgeFlag{,v}\)\\n | 481 | +echo -e MAGIC_MACRO\(glEdgeFlag{,v}\)\\n |
173 | Index: git/target-i386/ghash.c | 482 | diff --git a/target-i386/ghash.c b/target-i386/ghash.c |
174 | =================================================================== | 483 | new file mode 100644 |
175 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 484 | index 0000000..1f0c380 |
176 | +++ git/target-i386/ghash.c 2009-05-23 11:22:17.000000000 +0100 | 485 | --- /dev/null |
486 | +++ b/target-i386/ghash.c | ||
177 | @@ -0,0 +1,347 @@ | 487 | @@ -0,0 +1,347 @@ |
178 | +/* This is a modified and simplified version of original ghash.c */ | 488 | +/* This is a modified and simplified version of original ghash.c */ |
179 | + | 489 | + |
@@ -522,10 +832,11 @@ Index: git/target-i386/ghash.c | |||
522 | + hash_node = next; | 832 | + hash_node = next; |
523 | + } | 833 | + } |
524 | +} | 834 | +} |
525 | Index: git/target-i386/ghash.h | 835 | diff --git a/target-i386/ghash.h b/target-i386/ghash.h |
526 | =================================================================== | 836 | new file mode 100644 |
527 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 837 | index 0000000..7f34436 |
528 | +++ git/target-i386/ghash.h 2009-05-23 11:22:17.000000000 +0100 | 838 | --- /dev/null |
839 | +++ b/target-i386/ghash.h | ||
529 | @@ -0,0 +1,59 @@ | 840 | @@ -0,0 +1,59 @@ |
530 | +/* This is a modified and simplified version of original ghash.h */ | 841 | +/* This is a modified and simplified version of original ghash.h */ |
531 | + | 842 | + |
@@ -586,10 +897,11 @@ Index: git/target-i386/ghash.h | |||
586 | + | 897 | + |
587 | +#endif /* __SIMPLE_HASH_H__ */ | 898 | +#endif /* __SIMPLE_HASH_H__ */ |
588 | + | 899 | + |
589 | Index: git/target-i386/gl_func_perso.h | 900 | diff --git a/target-i386/gl_func_perso.h b/target-i386/gl_func_perso.h |
590 | =================================================================== | 901 | new file mode 100644 |
591 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 902 | index 0000000..401c0a8 |
592 | +++ git/target-i386/gl_func_perso.h 2009-05-23 11:22:17.000000000 +0100 | 903 | --- /dev/null |
904 | +++ b/target-i386/gl_func_perso.h | ||
593 | @@ -0,0 +1,135 @@ | 905 | @@ -0,0 +1,135 @@ |
594 | +/* | 906 | +/* |
595 | + * Hand-implemented GL/GLX API | 907 | + * Hand-implemented GL/GLX API |
@@ -726,22 +1038,36 @@ Index: git/target-i386/gl_func_perso.h | |||
726 | +MAGIC_MACRO(_glGetSelectBuffer_fake), | 1038 | +MAGIC_MACRO(_glGetSelectBuffer_fake), |
727 | +MAGIC_MACRO(_glFeedbackBuffer_fake), | 1039 | +MAGIC_MACRO(_glFeedbackBuffer_fake), |
728 | +MAGIC_MACRO(_glGetFeedbackBuffer_fake), | 1040 | +MAGIC_MACRO(_glGetFeedbackBuffer_fake), |
729 | Index: git/target-i386/helper.h | 1041 | diff --git a/target-i386/helper.c b/target-i386/helper.c |
730 | =================================================================== | 1042 | index e714994..7354220 100644 |
731 | --- git.orig/target-i386/helper.h 2009-05-23 11:22:16.000000000 +0100 | 1043 | --- a/target-i386/helper.c |
732 | +++ git/target-i386/helper.h 2009-05-23 11:22:17.000000000 +0100 | 1044 | +++ b/target-i386/helper.c |
733 | @@ -214,4 +214,6 @@ | 1045 | @@ -1320,7 +1320,7 @@ target_phys_addr_t cpu_get_phys_page_debug(CPUState *env, target_ulong addr) |
1046 | } | ||
1047 | |||
1048 | page_offset = (addr & TARGET_PAGE_MASK) & (page_size - 1); | ||
1049 | - paddr = (pte & TARGET_PAGE_MASK) + page_offset; | ||
1050 | + paddr = (pte & PHYS_ADDR_MASK) + page_offset; | ||
1051 | return paddr; | ||
1052 | } | ||
1053 | |||
1054 | diff --git a/target-i386/helper.h b/target-i386/helper.h | ||
1055 | index 0c36783..b247b35 100644 | ||
1056 | --- a/target-i386/helper.h | ||
1057 | +++ b/target-i386/helper.h | ||
1058 | @@ -214,4 +214,6 @@ DEF_HELPER_2(rclq, tl, tl, tl) | ||
734 | DEF_HELPER_2(rcrq, tl, tl, tl) | 1059 | DEF_HELPER_2(rcrq, tl, tl, tl) |
735 | #endif | 1060 | #endif |
736 | 1061 | ||
737 | +DEF_HELPER_0(opengl, void) | 1062 | +DEF_HELPER_0(opengl, void) |
738 | + | 1063 | + |
739 | #include "def-helper.h" | 1064 | #include "def-helper.h" |
740 | Index: git/target-i386/helper_opengl.c | 1065 | diff --git a/target-i386/helper_opengl.c b/target-i386/helper_opengl.c |
741 | =================================================================== | 1066 | new file mode 100644 |
742 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 1067 | index 0000000..f83d02b |
743 | +++ git/target-i386/helper_opengl.c 2009-05-23 11:22:17.000000000 +0100 | 1068 | --- /dev/null |
744 | @@ -0,0 +1,979 @@ | 1069 | +++ b/target-i386/helper_opengl.c |
1070 | @@ -0,0 +1,1205 @@ | ||
745 | +/* | 1071 | +/* |
746 | + * Host-side implementation of GL/GLX API | 1072 | + * Host-side implementation of GL/GLX API |
747 | + * | 1073 | + * |
@@ -796,13 +1122,16 @@ Index: git/target-i386/helper_opengl.c | |||
796 | +static int last_process_id = 0; | 1122 | +static int last_process_id = 0; |
797 | +static int must_save = 0; | 1123 | +static int must_save = 0; |
798 | + | 1124 | + |
1125 | +static int allow_kernel = 0; | ||
1126 | + | ||
799 | +static inline void *get_phys_mem_addr(const CPUState *env, target_ulong addr) | 1127 | +static inline void *get_phys_mem_addr(const CPUState *env, target_ulong addr) |
800 | +{ | 1128 | +{ |
801 | + int is_user, index; | 1129 | + int is_user, index; |
802 | + | 1130 | + |
803 | + index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); | 1131 | + index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); |
804 | + is_user = ((env->hflags & HF_CPL_MASK) == 3); | 1132 | + is_user = ((env->hflags & HF_CPL_MASK) == 3); |
805 | + if (is_user == 0) { | 1133 | + /* A sanity check for the int0x99 case */ |
1134 | + if (unlikely(is_user == 0 && !allow_kernel)) { | ||
806 | + fprintf(stderr, "not in userland !!!\n"); | 1135 | + fprintf(stderr, "not in userland !!!\n"); |
807 | + return NULL; | 1136 | + return NULL; |
808 | + } | 1137 | + } |
@@ -830,7 +1159,7 @@ Index: git/target-i386/helper_opengl.c | |||
830 | + } else { | 1159 | + } else { |
831 | + fprintf(stderr, | 1160 | + fprintf(stderr, |
832 | + "cpu_get_phys_page_debug(env, " TARGET_FMT_lx ") == " | 1161 | + "cpu_get_phys_page_debug(env, " TARGET_FMT_lx ") == " |
833 | + TARGET_FMT_lx "p\n", addr, ret); | 1162 | + TARGET_FMT_lx "\n", addr, ret); |
834 | + fprintf(stderr, | 1163 | + fprintf(stderr, |
835 | + "ret=" TARGET_FMT_lx " phys_ram_size= " TARGET_FMT_lx | 1164 | + "ret=" TARGET_FMT_lx " phys_ram_size= " TARGET_FMT_lx |
836 | + "\n", ret, (target_ulong) phys_ram_size); | 1165 | + "\n", ret, (target_ulong) phys_ram_size); |
@@ -1222,7 +1551,19 @@ Index: git/target-i386/helper_opengl.c | |||
1222 | + if (unlikely(func_number == _exit_process_func)) | 1551 | + if (unlikely(func_number == _exit_process_func)) |
1223 | + last_process_id = 0; | 1552 | + last_process_id = 0; |
1224 | + | 1553 | + |
1225 | + argcpy: | 1554 | + if (!wordsize) { |
1555 | + if (func_number == _init32_func || func_number == _init64_func) { | ||
1556 | + if (func_number == _init32_func) { | ||
1557 | + wordsize = 32; | ||
1558 | + argcpy_target_to_host = memcpy_target32_to_host; | ||
1559 | + } else { | ||
1560 | + wordsize = 64; | ||
1561 | + argcpy_target_to_host = memcpy_target64_to_host; | ||
1562 | + } | ||
1563 | + } else | ||
1564 | + fprintf(stderr, "commands submitted before initialisation done\n"); | ||
1565 | + } | ||
1566 | + | ||
1226 | + reset_host_offset(); | 1567 | + reset_host_offset(); |
1227 | + | 1568 | + |
1228 | + if (nb_args) { | 1569 | + if (nb_args) { |
@@ -1606,24 +1947,12 @@ Index: git/target-i386/helper_opengl.c | |||
1606 | + | 1947 | + |
1607 | + if (func_number == _init32_func || func_number == _init64_func) { | 1948 | + if (func_number == _init32_func || func_number == _init64_func) { |
1608 | + if (func_number == _init32_func) { | 1949 | + if (func_number == _init32_func) { |
1609 | + if (!wordsize) { | ||
1610 | + wordsize = 32; | ||
1611 | + argcpy_target_to_host = memcpy_target32_to_host; | ||
1612 | + goto argcpy; | ||
1613 | + } | ||
1614 | + | ||
1615 | + if (wordsize != 32) { | 1950 | + if (wordsize != 32) { |
1616 | + fprintf(stderr, | 1951 | + fprintf(stderr, |
1617 | + "clients with different ABIs not supported\n"); | 1952 | + "clients with different ABIs not supported\n"); |
1618 | + exit(-1); | 1953 | + exit(-1); |
1619 | + } | 1954 | + } |
1620 | + } else { | 1955 | + } else { |
1621 | + if (!wordsize) { | ||
1622 | + wordsize = 64; | ||
1623 | + argcpy_target_to_host = memcpy_target64_to_host; | ||
1624 | + goto argcpy; | ||
1625 | + } | ||
1626 | + | ||
1627 | + if (wordsize != 64) { | 1956 | + if (wordsize != 64) { |
1628 | + fprintf(stderr, | 1957 | + fprintf(stderr, |
1629 | + "clients with different ABIs not supported\n"); | 1958 | + "clients with different ABIs not supported\n"); |
@@ -1720,11 +2049,248 @@ Index: git/target-i386/helper_opengl.c | |||
1720 | + env->regs[R_EDX], env->regs[R_ESI]); | 2049 | + env->regs[R_EDX], env->regs[R_ESI]); |
1721 | + doing_opengl = 0; | 2050 | + doing_opengl = 0; |
1722 | +} | 2051 | +} |
2052 | + | ||
2053 | +void mem_opengl(uint64_t ptr) | ||
2054 | +{ | ||
2055 | + uint64_t *params = get_phys_mem_addr(env, ptr); | ||
2056 | + int ret; | ||
2057 | + | ||
2058 | + /* Execute */ | ||
2059 | + doing_opengl = 1; | ||
2060 | + ret = decode_call(env, le64_to_cpu(params[0]), | ||
2061 | + le64_to_cpu(params[1]), le64_to_cpu(params[2]), | ||
2062 | + le64_to_cpu(params[3]), le64_to_cpu(params[4])); | ||
2063 | + doing_opengl = 0; | ||
2064 | + | ||
2065 | + params[0] = cpu_to_le64(ret); | ||
2066 | + params[5] = 0; | ||
2067 | +} | ||
2068 | + | ||
2069 | +#define THREADINFO_TASK_OFFSET 0x0 //// 0x0 | ||
2070 | +#define THREADSTRUCT_IOPL_OFFSET 0x78 //// 0x80 | ||
2071 | +#define TASKSTRUCT_NEXT_OFFSET 0x1a0 //// 0x1e8 | ||
2072 | +#define TASKSTRUCT_PREV_OFFSET 0x1a4 //// 0x1ec | ||
2073 | +#define TASKSTRUCT_RCRED_OFFSET 0x29c //// 0x2b4 | ||
2074 | +#define TASKSTRUCT_CRED_OFFSET 0x2a0 //// 0x2b8 | ||
2075 | +#define TASKSTRUCT_COMM_OFFSET 0x2c0 //// 0x2fc | ||
2076 | +#define TASKSTRUCT_THREAD_OFFSET 0x2e4 //// 0x318 | ||
2077 | +#define TASKSTRUCT_IO_CTX_OFFSET 0x40c //// 0x428 | ||
2078 | +#define CRED_CAPINH_OFFSET 0x28 | ||
2079 | +#define CRED_CAPPER_OFFSET 0x30 | ||
2080 | +#define CRED_CAPEFF_OFFSET 0x38 | ||
2081 | +#define CRED_CAPBST_OFFSET 0x40 | ||
2082 | +/* How to obtain the numbers: | ||
2083 | + * $ gbd vmlinux | ||
2084 | + * ... | ||
2085 | + * (gdb) print &((struct task_struct *) 0)->real_cred | ||
2086 | + * $22 = (const struct cred **) 0x29c | ||
2087 | + * (gdb) print &((struct task_struct *) 0)->cred | ||
2088 | + * $23 = (const struct cred **) 0x2a0 | ||
2089 | + * (gbd) ... | ||
2090 | + * ... | ||
2091 | + * (gdb) ^D | ||
2092 | + * $ vim target-i386/helper_opengl.c | ||
2093 | + * ... | ||
2094 | + * :wq | ||
2095 | + * $ make | ||
2096 | + * ... | ||
2097 | + * | ||
2098 | + * Testing: | ||
2099 | + * $ x86_64-softmmu/qemu-system-x86_64 -s -hda ... | ||
2100 | + * ^Z | ||
2101 | + * [1]+ Stopped x86_64-softmmu/qemu-system-x86_64 -s -hda ... | ||
2102 | + * $ bg | ||
2103 | + * [1]+ x86_64-softmmu/qemu-system-x86_64 -s -hda ... | ||
2104 | + * $ gdb | ||
2105 | + * ... | ||
2106 | + * (gdb) target remote localhost:1234 | ||
2107 | + * ... | ||
2108 | + * (gdb) print ((char *) *(unsigned int *) ((unsigned int) $rsp & ~8191)) + | ||
2109 | + * 0x2c0 | ||
2110 | + * $9 = 0xc094062c "swapper" | ||
2111 | + * (gdb) print (char *) (*(unsigned int *) (((char *) *(unsigned int *) | ||
2112 | + * ((unsigned int) $rsp & ~8191)) + 0x1a0) - 0x1a0) + 0x2c0 | ||
2113 | + * $10 = 0xdf87cee0 "init" | ||
2114 | + * ... | ||
2115 | + */ | ||
2116 | + | ||
2117 | +#define CAP_SYS_RAWIO 17 | ||
2118 | + | ||
2119 | +#define THREAD_SIZE (TARGET_PAGE_SIZE << 1) | ||
2120 | +static ram_addr_t x86_current_thread(void) | ||
2121 | +{ | ||
2122 | + return env->regs[R_ESP] & ~(THREAD_SIZE - 1); | ||
2123 | +} | ||
2124 | + | ||
2125 | +static ram_addr_t x86_current_task(void) | ||
2126 | +{ | ||
2127 | + return *(uint32_t *) get_phys_mem_addr(env, | ||
2128 | + x86_current_thread() + THREADINFO_TASK_OFFSET); | ||
2129 | +} | ||
2130 | + | ||
2131 | +static ram_addr_t x86_current_io_ctx(void) | ||
2132 | +{ | ||
2133 | + return *(uint32_t *) get_phys_mem_addr(env, | ||
2134 | + x86_current_task() + TASKSTRUCT_IO_CTX_OFFSET); | ||
2135 | +} | ||
2136 | + | ||
2137 | +static ram_addr_t x86_task_name(ram_addr_t proc) | ||
2138 | +{ | ||
2139 | + return x86_current_task() + TASKSTRUCT_COMM_OFFSET; | ||
2140 | +} | ||
2141 | + | ||
2142 | +static ram_addr_t x86_task_next(ram_addr_t proc) | ||
2143 | +{ | ||
2144 | + return *(uint32_t *) get_phys_mem_addr(env, | ||
2145 | + x86_current_task() + TASKSTRUCT_NEXT_OFFSET) - | ||
2146 | + TASKSTRUCT_NEXT_OFFSET; | ||
2147 | +} | ||
2148 | + | ||
2149 | +static void x86_cap_set(ram_addr_t caps, int cap) | ||
2150 | +{ | ||
2151 | + int offset = cap >> 5; | ||
2152 | + int mask = 1 << (cap & 31); | ||
2153 | + | ||
2154 | + *(uint32_t *) get_phys_mem_addr(env, caps + offset) |= mask; | ||
2155 | +} | ||
2156 | + | ||
2157 | +static void x86_cred_cap_set(ram_addr_t creds, int cap) | ||
2158 | +{ | ||
2159 | + x86_cap_set(creds + CRED_CAPINH_OFFSET, cap); | ||
2160 | + x86_cap_set(creds + CRED_CAPPER_OFFSET, cap); | ||
2161 | + x86_cap_set(creds + CRED_CAPEFF_OFFSET, cap); | ||
2162 | + x86_cap_set(creds + CRED_CAPBST_OFFSET, cap); | ||
2163 | +} | ||
2164 | + | ||
2165 | +static void x86_task_cap_set(ram_addr_t proc, int cap) | ||
2166 | +{ | ||
2167 | + x86_cred_cap_set(*(uint32_t *) get_phys_mem_addr(env, | ||
2168 | + proc + TASKSTRUCT_RCRED_OFFSET), cap); | ||
2169 | + x86_cred_cap_set(*(uint32_t *) get_phys_mem_addr(env, | ||
2170 | + proc + TASKSTRUCT_CRED_OFFSET), cap); | ||
2171 | +} | ||
2172 | + | ||
2173 | +#include "kvm.h" | ||
2174 | + | ||
2175 | +/* The putting and getting of the register set seems to incure a too | ||
2176 | + * high overhead. It's at least 4 ioctl's each. */ | ||
2177 | +#if 0 | ||
2178 | +static void opengl_ioport_write(void *data, uint32_t addr, uint32_t val) | ||
2179 | +{ | ||
2180 | + /* Ignore the first outb after iopl which is emulated by the kernel. */ | ||
2181 | + if (val == (uint8_t) -1) | ||
2182 | + return; | ||
2183 | + | ||
2184 | + if (kvm_enabled()) | ||
2185 | + kvm_arch_get_registers(env); | ||
2186 | + doing_opengl = 1; | ||
2187 | + env->regs[R_EAX] = | ||
2188 | + decode_call(env, env->regs[R_EAX], env->regs[R_EBX], env->regs[R_ECX], | ||
2189 | + env->regs[R_ESI], env->regs[R_EDI]); | ||
2190 | + doing_opengl = 0; | ||
2191 | + if (kvm_enabled()) | ||
2192 | + kvm_arch_put_registers(env); | ||
2193 | +} | ||
2194 | +#else | ||
2195 | +static void get_regs(void) | ||
2196 | +{ | ||
2197 | + /* We only really need the eflags and cr[0..4] */ | ||
2198 | + if (kvm_enabled()) | ||
2199 | + kvm_get_sregs(env); | ||
2200 | +} | ||
2201 | + | ||
2202 | +static void opengl_ioport_write(void *data, uint32_t addr, uint32_t val) | ||
2203 | +{ | ||
2204 | + uint64_t *params; | ||
2205 | + int ret; | ||
2206 | + | ||
2207 | + /* Only need to fetch the registers after a guest's context switch... | ||
2208 | + * the problem is, to find out about context switches we already need | ||
2209 | + * to fetch rsp | ||
2210 | + * TODO: pass the pid in val. the params pointer doesn't need to be | ||
2211 | + * passed on all calls because it can be a global and be constant. | ||
2212 | + */ | ||
2213 | + get_regs(); | ||
2214 | + | ||
2215 | + params = get_phys_mem_addr(env, (target_ulong) val); | ||
2216 | + | ||
2217 | + /* Execute */ | ||
2218 | + doing_opengl = 1; | ||
2219 | + ret = decode_call(env, le64_to_cpu(params[0]), | ||
2220 | + le64_to_cpu(params[1]), le64_to_cpu(params[2]), | ||
2221 | + le64_to_cpu(params[3]), le64_to_cpu(params[4])); | ||
2222 | + doing_opengl = 0; | ||
2223 | + | ||
2224 | + params[0] = cpu_to_le64(ret); | ||
2225 | + params[5] = 0; | ||
2226 | +} | ||
1723 | +#endif | 2227 | +#endif |
1724 | Index: git/target-i386/mesa_enums.c | 2228 | + |
1725 | =================================================================== | 2229 | +static void opengl_ioport_write_first(void *data, uint32_t addr, uint32_t val) |
1726 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 2230 | +{ |
1727 | +++ git/target-i386/mesa_enums.c 2009-05-23 11:22:17.000000000 +0100 | 2231 | + if (val != (uint32_t) -1) |
2232 | + return; | ||
2233 | + | ||
2234 | + /* Ignore the first outb after iopl which is emulated by the kernel. */ | ||
2235 | + | ||
2236 | + register_ioport_write(9996, 4, 4, opengl_ioport_write, (void *) 1); | ||
2237 | +} | ||
2238 | + | ||
2239 | +void io_register(void) | ||
2240 | +{ | ||
2241 | + register_ioport_write(9996, 4, 4, opengl_ioport_write_first, (void *) 1); | ||
2242 | +} | ||
2243 | + | ||
2244 | +void opengl_process_enable(void) | ||
2245 | +{ | ||
2246 | + ram_addr_t task; | ||
2247 | + char *name; | ||
2248 | + int newlevel = 3; | ||
2249 | + uint32_t iopl = newlevel << 12; | ||
2250 | + void *ioplptr; | ||
2251 | + | ||
2252 | + if (kvm_enabled()) | ||
2253 | + kvm_arch_get_registers(env); | ||
2254 | + allow_kernel = 1; | ||
2255 | + | ||
2256 | + task = x86_current_task(); | ||
2257 | + x86_task_cap_set(task, CAP_SYS_RAWIO); | ||
2258 | + name = get_phys_mem_addr(env, x86_task_name(task)); | ||
2259 | + | ||
2260 | + ioplptr = get_phys_mem_addr(env, task + | ||
2261 | + TASKSTRUCT_THREAD_OFFSET + THREADSTRUCT_IOPL_OFFSET); | ||
2262 | + ((uint32_t *) ioplptr)[0] = cpu_to_le32(iopl); | ||
2263 | + | ||
2264 | + env->eflags &= ~0x3000; | ||
2265 | + env->eflags |= newlevel << 12; | ||
2266 | + | ||
2267 | + allow_kernel = 0; | ||
2268 | + if (kvm_enabled()) | ||
2269 | + kvm_arch_put_registers(env); | ||
2270 | + | ||
2271 | + printf("Granted OpenGL access to process '%s'\n", name); | ||
2272 | + | ||
2273 | + io_register(); | ||
2274 | +} | ||
2275 | +#endif | ||
2276 | diff --git a/target-i386/kvm.c b/target-i386/kvm.c | ||
2277 | index eb61598..5c6fbae 100644 | ||
2278 | --- a/target-i386/kvm.c | ||
2279 | +++ b/target-i386/kvm.c | ||
2280 | @@ -480,7 +480,7 @@ static int kvm_get_fpu(CPUState *env) | ||
2281 | return 0; | ||
2282 | } | ||
2283 | |||
2284 | -static int kvm_get_sregs(CPUState *env) | ||
2285 | +int kvm_get_sregs(CPUState *env) | ||
2286 | { | ||
2287 | struct kvm_sregs sregs; | ||
2288 | uint32_t hflags; | ||
2289 | diff --git a/target-i386/mesa_enums.c b/target-i386/mesa_enums.c | ||
2290 | new file mode 100644 | ||
2291 | index 0000000..61a540c | ||
2292 | --- /dev/null | ||
2293 | +++ b/target-i386/mesa_enums.c | ||
1728 | @@ -0,0 +1,4890 @@ | 2294 | @@ -0,0 +1,4890 @@ |
1729 | +/* DO NOT EDIT - This file generated automatically by gl_enums.py (from Mesa) script */ | 2295 | +/* DO NOT EDIT - This file generated automatically by gl_enums.py (from Mesa) script */ |
1730 | + | 2296 | + |
@@ -6616,10 +7182,11 @@ Index: git/target-i386/mesa_enums.c | |||
6616 | +} | 7182 | +} |
6617 | + | 7183 | + |
6618 | + | 7184 | + |
6619 | Index: git/target-i386/mesa_get.c | 7185 | diff --git a/target-i386/mesa_get.c b/target-i386/mesa_get.c |
6620 | =================================================================== | 7186 | new file mode 100644 |
6621 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 7187 | index 0000000..3b4c9aa |
6622 | +++ git/target-i386/mesa_get.c 2009-05-23 11:22:17.000000000 +0100 | 7188 | --- /dev/null |
7189 | +++ b/target-i386/mesa_get.c | ||
6623 | @@ -0,0 +1,5563 @@ | 7190 | @@ -0,0 +1,5563 @@ |
6624 | + | 7191 | + |
6625 | +/*** | 7192 | +/*** |
@@ -12184,10 +12751,11 @@ Index: git/target-i386/mesa_get.c | |||
12184 | + params[i] = (GLdouble) values[i]; | 12751 | + params[i] = (GLdouble) values[i]; |
12185 | +} | 12752 | +} |
12186 | + | 12753 | + |
12187 | Index: git/target-i386/mesa_gl.h | 12754 | diff --git a/target-i386/mesa_gl.h b/target-i386/mesa_gl.h |
12188 | =================================================================== | 12755 | new file mode 100644 |
12189 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 12756 | index 0000000..dc2047c |
12190 | +++ git/target-i386/mesa_gl.h 2009-05-23 11:22:17.000000000 +0100 | 12757 | --- /dev/null |
12758 | +++ b/target-i386/mesa_gl.h | ||
12191 | @@ -0,0 +1,2251 @@ | 12759 | @@ -0,0 +1,2251 @@ |
12192 | +/* | 12760 | +/* |
12193 | + * Mesa 3-D graphics library | 12761 | + * Mesa 3-D graphics library |
@@ -14440,10 +15008,11 @@ Index: git/target-i386/mesa_gl.h | |||
14440 | +#endif | 15008 | +#endif |
14441 | + | 15009 | + |
14442 | +#endif /* __gl_h_ */ | 15010 | +#endif /* __gl_h_ */ |
14443 | Index: git/target-i386/mesa_glext.h | 15011 | diff --git a/target-i386/mesa_glext.h b/target-i386/mesa_glext.h |
14444 | =================================================================== | 15012 | new file mode 100644 |
14445 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 15013 | index 0000000..f8cf2d2 |
14446 | +++ git/target-i386/mesa_glext.h 2009-05-23 11:22:17.000000000 +0100 | 15014 | --- /dev/null |
15015 | +++ b/target-i386/mesa_glext.h | ||
14447 | @@ -0,0 +1,7279 @@ | 15016 | @@ -0,0 +1,7279 @@ |
14448 | +#ifndef __glext_h_ | 15017 | +#ifndef __glext_h_ |
14449 | +#define __glext_h_ | 15018 | +#define __glext_h_ |
@@ -21724,10 +22293,11 @@ Index: git/target-i386/mesa_glext.h | |||
21724 | + | 22293 | + |
21725 | +/* ERO */ | 22294 | +/* ERO */ |
21726 | +GLAPI void GLAPIENTRY fake_gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data); | 22295 | +GLAPI void GLAPIENTRY fake_gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data); |
21727 | Index: git/target-i386/mesa_glu.h | 22296 | diff --git a/target-i386/mesa_glu.h b/target-i386/mesa_glu.h |
21728 | =================================================================== | 22297 | new file mode 100644 |
21729 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 22298 | index 0000000..f1a704b |
21730 | +++ git/target-i386/mesa_glu.h 2009-05-23 11:22:17.000000000 +0100 | 22299 | --- /dev/null |
22300 | +++ b/target-i386/mesa_glu.h | ||
21731 | @@ -0,0 +1,354 @@ | 22301 | @@ -0,0 +1,354 @@ |
21732 | +/* | 22302 | +/* |
21733 | +** License Applicability. Except to the extent portions of this file are | 22303 | +** License Applicability. Except to the extent portions of this file are |
@@ -22083,10 +22653,11 @@ Index: git/target-i386/mesa_glu.h | |||
22083 | +#endif | 22653 | +#endif |
22084 | + | 22654 | + |
22085 | +#endif /* __glu_h__ */ | 22655 | +#endif /* __glu_h__ */ |
22086 | Index: git/target-i386/mesa_glx.h | 22656 | diff --git a/target-i386/mesa_glx.h b/target-i386/mesa_glx.h |
22087 | =================================================================== | 22657 | new file mode 100644 |
22088 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 22658 | index 0000000..2930461 |
22089 | +++ git/target-i386/mesa_glx.h 2009-05-23 11:22:17.000000000 +0100 | 22659 | --- /dev/null |
22660 | +++ b/target-i386/mesa_glx.h | ||
22090 | @@ -0,0 +1,510 @@ | 22661 | @@ -0,0 +1,510 @@ |
22091 | +/* | 22662 | +/* |
22092 | + * Mesa 3-D graphics library | 22663 | + * Mesa 3-D graphics library |
@@ -22598,10 +23169,11 @@ Index: git/target-i386/mesa_glx.h | |||
22598 | +#endif | 23169 | +#endif |
22599 | + | 23170 | + |
22600 | +#endif | 23171 | +#endif |
22601 | Index: git/target-i386/mesa_glxext.h | 23172 | diff --git a/target-i386/mesa_glxext.h b/target-i386/mesa_glxext.h |
22602 | =================================================================== | 23173 | new file mode 100644 |
22603 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 23174 | index 0000000..0f66df6 |
22604 | +++ git/target-i386/mesa_glxext.h 2009-05-23 11:22:17.000000000 +0100 | 23175 | --- /dev/null |
23176 | +++ b/target-i386/mesa_glxext.h | ||
22605 | @@ -0,0 +1,785 @@ | 23177 | @@ -0,0 +1,785 @@ |
22606 | +#ifndef __glxext_h_ | 23178 | +#ifndef __glxext_h_ |
22607 | +#define __glxext_h_ | 23179 | +#define __glxext_h_ |
@@ -23388,10 +23960,11 @@ Index: git/target-i386/mesa_glxext.h | |||
23388 | +#endif | 23960 | +#endif |
23389 | + | 23961 | + |
23390 | +#endif | 23962 | +#endif |
23391 | Index: git/target-i386/mesa_mipmap.c | 23963 | diff --git a/target-i386/mesa_mipmap.c b/target-i386/mesa_mipmap.c |
23392 | =================================================================== | 23964 | new file mode 100644 |
23393 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 23965 | index 0000000..f623ea1 |
23394 | +++ git/target-i386/mesa_mipmap.c 2009-05-23 11:22:17.000000000 +0100 | 23966 | --- /dev/null |
23967 | +++ b/target-i386/mesa_mipmap.c | ||
23395 | @@ -0,0 +1,824 @@ | 23968 | @@ -0,0 +1,824 @@ |
23396 | + | 23969 | + |
23397 | +/* | 23970 | +/* |
@@ -24217,10 +24790,11 @@ Index: git/target-i386/mesa_mipmap.c | |||
24217 | + | 24790 | + |
24218 | + return retval; | 24791 | + return retval; |
24219 | +} | 24792 | +} |
24220 | Index: git/target-i386/opengl_exec.c | 24793 | diff --git a/target-i386/opengl_exec.c b/target-i386/opengl_exec.c |
24221 | =================================================================== | 24794 | new file mode 100644 |
24222 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 24795 | index 0000000..4a69b9b |
24223 | +++ git/target-i386/opengl_exec.c 2009-05-23 11:22:17.000000000 +0100 | 24796 | --- /dev/null |
24797 | +++ b/target-i386/opengl_exec.c | ||
24224 | @@ -0,0 +1,3931 @@ | 24798 | @@ -0,0 +1,3931 @@ |
24225 | +/* | 24799 | +/* |
24226 | + * Host-side implementation of GL/GLX API | 24800 | + * Host-side implementation of GL/GLX API |
@@ -28153,10 +28727,11 @@ Index: git/target-i386/opengl_exec.c | |||
28153 | + | 28727 | + |
28154 | + return ret_int; | 28728 | + return ret_int; |
28155 | +} | 28729 | +} |
28156 | Index: git/target-i386/opengl_func.h | 28730 | diff --git a/target-i386/opengl_func.h b/target-i386/opengl_func.h |
28157 | =================================================================== | 28731 | new file mode 100644 |
28158 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 28732 | index 0000000..d1b50fd |
28159 | +++ git/target-i386/opengl_func.h 2009-05-23 11:22:17.000000000 +0100 | 28733 | --- /dev/null |
28734 | +++ b/target-i386/opengl_func.h | ||
28160 | @@ -0,0 +1,1108 @@ | 28735 | @@ -0,0 +1,1108 @@ |
28161 | +/* | 28736 | +/* |
28162 | + * Main header for both host and guest sides | 28737 | + * Main header for both host and guest sides |
@@ -29266,10 +29841,11 @@ Index: git/target-i386/opengl_func.h | |||
29266 | +#error Unsupported ABI | 29841 | +#error Unsupported ABI |
29267 | +#endif | 29842 | +#endif |
29268 | +#endif | 29843 | +#endif |
29269 | Index: git/target-i386/opengl_player.c | 29844 | diff --git a/target-i386/opengl_player.c b/target-i386/opengl_player.c |
29270 | =================================================================== | 29845 | new file mode 100644 |
29271 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 29846 | index 0000000..f071b7f |
29272 | +++ git/target-i386/opengl_player.c 2009-05-23 11:22:17.000000000 +0100 | 29847 | --- /dev/null |
29848 | +++ b/target-i386/opengl_player.c | ||
29273 | @@ -0,0 +1,1461 @@ | 29849 | @@ -0,0 +1,1461 @@ |
29274 | +/* | 29850 | +/* |
29275 | + * Plays a sequence of OpenGL calls recorded either under qemu or with opengl_server | 29851 | + * Plays a sequence of OpenGL calls recorded either under qemu or with opengl_server |
@@ -30732,10 +31308,11 @@ Index: git/target-i386/opengl_player.c | |||
30732 | + } | 31308 | + } |
30733 | + return 0; | 31309 | + return 0; |
30734 | +} | 31310 | +} |
30735 | Index: git/target-i386/opengl_server.c | 31311 | diff --git a/target-i386/opengl_server.c b/target-i386/opengl_server.c |
30736 | =================================================================== | 31312 | new file mode 100644 |
30737 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 31313 | index 0000000..80060ba |
30738 | +++ git/target-i386/opengl_server.c 2009-05-23 11:22:17.000000000 +0100 | 31314 | --- /dev/null |
31315 | +++ b/target-i386/opengl_server.c | ||
30739 | @@ -0,0 +1,826 @@ | 31316 | @@ -0,0 +1,826 @@ |
30740 | +/* | 31317 | +/* |
30741 | + * TCP/IP OpenGL server | 31318 | + * TCP/IP OpenGL server |
@@ -31563,10 +32140,11 @@ Index: git/target-i386/opengl_server.c | |||
31563 | + | 32140 | + |
31564 | + return 0; | 32141 | + return 0; |
31565 | +} | 32142 | +} |
31566 | Index: git/target-i386/opengl_utils.h | 32143 | diff --git a/target-i386/opengl_utils.h b/target-i386/opengl_utils.h |
31567 | =================================================================== | 32144 | new file mode 100644 |
31568 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 32145 | index 0000000..01077ff |
31569 | +++ git/target-i386/opengl_utils.h 2009-05-23 11:22:17.000000000 +0100 | 32146 | --- /dev/null |
32147 | +++ b/target-i386/opengl_utils.h | ||
31570 | @@ -0,0 +1,453 @@ | 32148 | @@ -0,0 +1,453 @@ |
31571 | +/* | 32149 | +/* |
31572 | + * Functions used by host & client sides | 32150 | + * Functions used by host & client sides |
@@ -32021,10 +32599,11 @@ Index: git/target-i386/opengl_utils.h | |||
32021 | +} | 32599 | +} |
32022 | + | 32600 | + |
32023 | +#endif | 32601 | +#endif |
32024 | Index: git/target-i386/parse_gl_h.c | 32602 | diff --git a/target-i386/parse_gl_h.c b/target-i386/parse_gl_h.c |
32025 | =================================================================== | 32603 | new file mode 100644 |
32026 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 32604 | index 0000000..f1e93ec |
32027 | +++ git/target-i386/parse_gl_h.c 2009-05-23 11:22:17.000000000 +0100 | 32605 | --- /dev/null |
32606 | +++ b/target-i386/parse_gl_h.c | ||
32028 | @@ -0,0 +1,1496 @@ | 32607 | @@ -0,0 +1,1496 @@ |
32029 | +/* | 32608 | +/* |
32030 | + * Parse gl.h et glx.h to auto-generate source code | 32609 | + * Parse gl.h et glx.h to auto-generate source code |
@@ -33522,10 +34101,11 @@ Index: git/target-i386/parse_gl_h.c | |||
33522 | + | 34101 | + |
33523 | + return 0; | 34102 | + return 0; |
33524 | +} | 34103 | +} |
33525 | Index: git/target-i386/parse_mesa_get_c.c | 34104 | diff --git a/target-i386/parse_mesa_get_c.c b/target-i386/parse_mesa_get_c.c |
33526 | =================================================================== | 34105 | new file mode 100644 |
33527 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 34106 | index 0000000..b214358 |
33528 | +++ git/target-i386/parse_mesa_get_c.c 2009-05-23 11:22:17.000000000 +0100 | 34107 | --- /dev/null |
34108 | +++ b/target-i386/parse_mesa_get_c.c | ||
33529 | @@ -0,0 +1,225 @@ | 34109 | @@ -0,0 +1,225 @@ |
33530 | +/* | 34110 | +/* |
33531 | + * Parse the "get.c" from mesa source tree to generate "glgetv_cst.h" | 34111 | + * Parse the "get.c" from mesa source tree to generate "glgetv_cst.h" |
@@ -33752,11 +34332,20 @@ Index: git/target-i386/parse_mesa_get_c.c | |||
33752 | + fclose(outf); | 34332 | + fclose(outf); |
33753 | + return 0; | 34333 | + return 0; |
33754 | +} | 34334 | +} |
33755 | Index: git/target-i386/translate.c | 34335 | diff --git a/target-i386/translate.c b/target-i386/translate.c |
33756 | =================================================================== | 34336 | index 4b894fd..10920a7 100644 |
33757 | --- git.orig/target-i386/translate.c 2009-05-23 11:22:16.000000000 +0100 | 34337 | --- a/target-i386/translate.c |
33758 | +++ git/target-i386/translate.c 2009-05-23 11:22:17.000000000 +0100 | 34338 | +++ b/target-i386/translate.c |
33759 | @@ -2592,11 +2592,18 @@ | 34339 | @@ -741,6 +741,8 @@ static void gen_check_io(DisasContext *s, int ot, target_ulong cur_eip, |
34340 | int state_saved; | ||
34341 | target_ulong next_eip; | ||
34342 | |||
34343 | + return; | ||
34344 | + | ||
34345 | state_saved = 0; | ||
34346 | if (s->pe && (s->cpl > s->iopl || s->vm86)) { | ||
34347 | if (s->cc_op != CC_OP_DYNAMIC) | ||
34348 | @@ -2592,11 +2594,18 @@ static void gen_exception(DisasContext *s, int trapno, target_ulong cur_eip) | ||
33760 | s->is_jmp = 3; | 34349 | s->is_jmp = 3; |
33761 | } | 34350 | } |
33762 | 34351 | ||
@@ -33775,11 +34364,19 @@ Index: git/target-i386/translate.c | |||
33775 | if (s->cc_op != CC_OP_DYNAMIC) | 34364 | if (s->cc_op != CC_OP_DYNAMIC) |
33776 | gen_op_set_cc_op(s->cc_op); | 34365 | gen_op_set_cc_op(s->cc_op); |
33777 | gen_jmp_im(cur_eip); | 34366 | gen_jmp_im(cur_eip); |
33778 | Index: git/vl.c | 34367 | diff --git a/vl.c b/vl.c |
33779 | =================================================================== | 34368 | index 56623fb..095da54 100644 |
33780 | --- git.orig/vl.c 2009-05-23 11:22:16.000000000 +0100 | 34369 | --- a/vl.c |
33781 | +++ git/vl.c 2009-05-23 11:23:18.000000000 +0100 | 34370 | +++ b/vl.c |
33782 | @@ -253,6 +253,7 @@ | 34371 | @@ -245,6 +245,7 @@ int semihosting_enabled = 0; |
34372 | #ifdef TARGET_ARM | ||
34373 | int old_param = 0; | ||
34374 | #endif | ||
34375 | +int force_pointer = 0; | ||
34376 | const char *qemu_name; | ||
34377 | int alt_grab = 0; | ||
34378 | #if defined(TARGET_SPARC) || defined(TARGET_PPC) | ||
34379 | @@ -253,6 +254,7 @@ const char *prom_envs[MAX_PROM_ENVS]; | ||
33783 | #endif | 34380 | #endif |
33784 | int nb_drives_opt; | 34381 | int nb_drives_opt; |
33785 | struct drive_opt drives_opt[MAX_DRIVES]; | 34382 | struct drive_opt drives_opt[MAX_DRIVES]; |
@@ -33787,23 +34384,68 @@ Index: git/vl.c | |||
33787 | 34384 | ||
33788 | static CPUState *cur_cpu; | 34385 | static CPUState *cur_cpu; |
33789 | static CPUState *next_cpu; | 34386 | static CPUState *next_cpu; |
33790 | @@ -4214,6 +4215,7 @@ | 34387 | @@ -4208,12 +4210,14 @@ enum { |
34388 | QEMU_OPTION_clock, | ||
34389 | QEMU_OPTION_localtime, | ||
34390 | QEMU_OPTION_startdate, | ||
34391 | + QEMU_OPTION_enable_gl, | ||
34392 | QEMU_OPTION_icount, | ||
34393 | QEMU_OPTION_echr, | ||
34394 | QEMU_OPTION_virtiocon, | ||
33791 | QEMU_OPTION_show_cursor, | 34395 | QEMU_OPTION_show_cursor, |
33792 | QEMU_OPTION_semihosting, | 34396 | QEMU_OPTION_semihosting, |
33793 | QEMU_OPTION_old_param, | 34397 | QEMU_OPTION_old_param, |
33794 | + QEMU_OPTION_enable_gl, | 34398 | + QEMU_OPTION_force_pointer, |
33795 | QEMU_OPTION_tb_size, | 34399 | QEMU_OPTION_tb_size, |
33796 | QEMU_OPTION_incoming, | 34400 | QEMU_OPTION_incoming, |
33797 | QEMU_OPTION_chroot, | 34401 | QEMU_OPTION_chroot, |
33798 | @@ -4345,6 +4347,7 @@ | 34402 | @@ -4344,6 +4348,8 @@ static const QEMUOption qemu_options[] = { |
34403 | #if defined(TARGET_ARM) | ||
33799 | { "old-param", 0, QEMU_OPTION_old_param }, | 34404 | { "old-param", 0, QEMU_OPTION_old_param }, |
33800 | #endif | 34405 | #endif |
33801 | { "tb-size", HAS_ARG, QEMU_OPTION_tb_size }, | 34406 | + { "force-pointer", 0, QEMU_OPTION_force_pointer }, |
33802 | + { "enable-gl", 0, QEMU_OPTION_enable_gl }, | 34407 | + { "enable-gl", 0, QEMU_OPTION_enable_gl }, |
34408 | { "tb-size", HAS_ARG, QEMU_OPTION_tb_size }, | ||
33803 | { "incoming", HAS_ARG, QEMU_OPTION_incoming }, | 34409 | { "incoming", HAS_ARG, QEMU_OPTION_incoming }, |
33804 | { "chroot", HAS_ARG, QEMU_OPTION_chroot }, | 34410 | { "chroot", HAS_ARG, QEMU_OPTION_chroot }, |
33805 | { "runas", HAS_ARG, QEMU_OPTION_runas }, | 34411 | @@ -4496,22 +4502,17 @@ static void select_vgahw (const char *p) |
33806 | @@ -5261,6 +5264,11 @@ | 34412 | { |
34413 | const char *opts; | ||
34414 | |||
34415 | + std_vga_enabled = 0; | ||
34416 | + cirrus_vga_enabled = 0; | ||
34417 | + vmsvga_enabled = 0; | ||
34418 | + | ||
34419 | if (strstart(p, "std", &opts)) { | ||
34420 | std_vga_enabled = 1; | ||
34421 | - cirrus_vga_enabled = 0; | ||
34422 | - vmsvga_enabled = 0; | ||
34423 | } else if (strstart(p, "cirrus", &opts)) { | ||
34424 | cirrus_vga_enabled = 1; | ||
34425 | - std_vga_enabled = 0; | ||
34426 | - vmsvga_enabled = 0; | ||
34427 | } else if (strstart(p, "vmware", &opts)) { | ||
34428 | - cirrus_vga_enabled = 0; | ||
34429 | - std_vga_enabled = 0; | ||
34430 | vmsvga_enabled = 1; | ||
34431 | } else if (strstart(p, "none", &opts)) { | ||
34432 | - cirrus_vga_enabled = 0; | ||
34433 | - std_vga_enabled = 0; | ||
34434 | - vmsvga_enabled = 0; | ||
34435 | } else { | ||
34436 | invalid_vga: | ||
34437 | fprintf(stderr, "Unknown vga type: %s\n", p); | ||
34438 | @@ -5220,6 +5221,9 @@ int main(int argc, char **argv, char **envp) | ||
34439 | old_param = 1; | ||
34440 | break; | ||
34441 | #endif | ||
34442 | + case QEMU_OPTION_force_pointer: | ||
34443 | + force_pointer = 1; | ||
34444 | + break; | ||
34445 | case QEMU_OPTION_clock: | ||
34446 | configure_alarms(optarg); | ||
34447 | break; | ||
34448 | @@ -5261,6 +5265,11 @@ int main(int argc, char **argv, char **envp) | ||
33807 | } | 34449 | } |
33808 | } | 34450 | } |
33809 | break; | 34451 | break; |
@@ -33815,17 +34457,21 @@ Index: git/vl.c | |||
33815 | case QEMU_OPTION_tb_size: | 34457 | case QEMU_OPTION_tb_size: |
33816 | tb_size = strtol(optarg, NULL, 0); | 34458 | tb_size = strtol(optarg, NULL, 0); |
33817 | if (tb_size < 0) | 34459 | if (tb_size < 0) |
33818 | Index: git/hw/opengl_dummy.c | 34460 | @@ -5545,6 +5554,17 @@ int main(int argc, char **argv, char **envp) |
33819 | =================================================================== | 34461 | exit(1); |
33820 | --- /dev/null 1970-01-01 00:00:00.000000000 +0000 | 34462 | } |
33821 | +++ git/hw/opengl_dummy.c 2009-05-23 11:22:17.000000000 +0100 | 34463 | } |
33822 | @@ -0,0 +1,9 @@ | 34464 | +#ifdef TARGET_OPENGL_OK |
33823 | +#include "../qemu-common.h" | 34465 | + if (enable_gl) { |
33824 | + | 34466 | + /* Use second serial port */ |
33825 | +#include <X11/Xlib.h> | 34467 | + int opengl_serial = 1; |
33826 | +#include <X11/Xutil.h> | 34468 | + |
33827 | + | 34469 | + if (serial_devices[opengl_serial]) |
33828 | +void opengl_exec_set_parent_window(Display *_dpy, Window _parent_window) | 34470 | + fprintf(stderr, "overriding second serial " |
33829 | +{ | 34471 | + "port for OpenGL use\n"); |
33830 | + return; | 34472 | + serial_devices[opengl_serial] = "opengl"; |
33831 | +} | 34473 | + } |
34474 | +#endif | ||
34475 | |||
34476 | if (monitor_device) { | ||
34477 | monitor_hd = qemu_chr_open("monitor", monitor_device, NULL); | ||
diff --git a/meta/packages/qemu/qemu_git.bb b/meta/packages/qemu/qemu_git.bb index b92ecf5520..bdd18e8fc6 100644 --- a/meta/packages/qemu/qemu_git.bb +++ b/meta/packages/qemu/qemu_git.bb | |||
@@ -1,28 +1,19 @@ | |||
1 | LICENSE = "GPL" | 1 | LICENSE = "GPL" |
2 | DEPENDS = "zlib" | 2 | DEPENDS = "zlib" |
3 | PV = "0.10.2+git${SRCREV}" | 3 | PV = "0.10.2+git${SRCREV}" |
4 | PR = "r1" | 4 | PR = "r4" |
5 | 5 | ||
6 | FILESPATH = "${FILE_DIRNAME}/qemu-${PV}/:${FILE_DIRNAME}/qemu-git/" | 6 | FILESPATH = "${FILE_DIRNAME}/qemu-${PV}/:${FILE_DIRNAME}/qemu-git/" |
7 | 7 | ||
8 | SRC_URI = "\ | 8 | SRC_URI = "\ |
9 | git://git.sv.gnu.org/qemu.git;protocol=git \ | 9 | git://git.sv.gnu.org/qemu.git;protocol=git \ |
10 | file://06_exit_segfault.patch;patch=1;pnum=0 \ | ||
11 | file://11_signal_sigaction.patch;patch=1;pnum=0 \ | ||
12 | file://22_net_tuntap_stall.patch;patch=1;pnum=0 \ | ||
13 | file://31_syscalls.patch;patch=1;pnum=0 \ | ||
14 | file://52_ne2000_return.patch;patch=1;pnum=1 \ | ||
15 | file://63_sparc_build.patch;patch=1;pnum=0 \ | ||
16 | file://66_tls_ld.patch;patch=1;pnum=0 \ | ||
17 | file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \ | ||
18 | file://workaround_bad_futex_headers.patch;patch=1 \ | 10 | file://workaround_bad_futex_headers.patch;patch=1 \ |
19 | file://qemu-add-gl-host-code.patch;patch=1 \ | 11 | file://qemu-git-qemugl-host.patch;patch=1 \ |
20 | file://no-strip.patch;patch=1 \ | 12 | file://no-strip.patch;patch=1 \ |
21 | file://fix-dirent.patch;patch=1 \ | 13 | file://fix-dirent.patch;patch=1 \ |
14 | file://fix-nogl.patch;patch=1 \ | ||
22 | file://zlibsearch.patch;patch=1 " | 15 | file://zlibsearch.patch;patch=1 " |
23 | 16 | ||
24 | # file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 | ||
25 | |||
26 | S = "${WORKDIR}/git" | 17 | S = "${WORKDIR}/git" |
27 | 18 | ||
28 | #EXTRA_OECONF += "--disable-sdl" | 19 | #EXTRA_OECONF += "--disable-sdl" |