Accepting request 60601 from home:uli_suse:branches:Virtualization
OBS-URL: https://build.opensuse.org/request/show/60601 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=7
This commit is contained in:
parent
ac5014fe23
commit
eb5624499a
@ -1,7 +1,7 @@
|
|||||||
From 827af866df5674253ef563bd244277d31a93ba32 Mon Sep 17 00:00:00 2001
|
From 4af9300d36f0975213b0fb967131629ad6b4c550 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:17:39 +0200
|
Date: Tue, 14 Apr 2009 16:17:39 +0200
|
||||||
Subject: [PATCH 01/33] qemu-0.7.0-amd64
|
Subject: [PATCH 01/17] qemu-0.7.0-amd64
|
||||||
|
|
||||||
No clue why this is necessary or useful, nothing found in any changelogs.
|
No clue why this is necessary or useful, nothing found in any changelogs.
|
||||||
---
|
---
|
||||||
@ -9,10 +9,10 @@ No clue why this is necessary or useful, nothing found in any changelogs.
|
|||||||
1 files changed, 2 insertions(+), 4 deletions(-)
|
1 files changed, 2 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/x86_64.ld b/x86_64.ld
|
diff --git a/x86_64.ld b/x86_64.ld
|
||||||
index 878dafb..142e641 100644
|
index 46d8d4d..cce0a17 100644
|
||||||
--- a/x86_64.ld
|
--- a/x86_64.ld
|
||||||
+++ b/x86_64.ld
|
+++ b/x86_64.ld
|
||||||
@@ -59,8 +59,6 @@ SECTIONS
|
@@ -70,8 +70,6 @@ SECTIONS
|
||||||
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
|
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
|
||||||
.rodata1 : { *(.rodata1) }
|
.rodata1 : { *(.rodata1) }
|
||||||
.eh_frame_hdr : { *(.eh_frame_hdr) }
|
.eh_frame_hdr : { *(.eh_frame_hdr) }
|
||||||
@ -21,7 +21,7 @@ index 878dafb..142e641 100644
|
|||||||
/* Adjust the address for the data segment. We want to adjust up to
|
/* Adjust the address for the data segment. We want to adjust up to
|
||||||
the same address within the page on the next page up. */
|
the same address within the page on the next page up. */
|
||||||
. = ALIGN (0x100000) - ((0x100000 - .) & (0x100000 - 1)); . = DATA_SEGMENT_ALIGN (0x100000, 0x1000);
|
. = ALIGN (0x100000) - ((0x100000 - .) & (0x100000 - 1)); . = DATA_SEGMENT_ALIGN (0x100000, 0x1000);
|
||||||
@@ -86,8 +84,8 @@ SECTIONS
|
@@ -97,8 +95,8 @@ SECTIONS
|
||||||
.data1 : { *(.data1) }
|
.data1 : { *(.data1) }
|
||||||
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
|
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
|
||||||
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
|
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
|
||||||
@ -33,5 +33,5 @@ index 878dafb..142e641 100644
|
|||||||
.ctors :
|
.ctors :
|
||||||
{
|
{
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 496da9d6ffd6f42570cbed52adba37fea769d2ab Mon Sep 17 00:00:00 2001
|
From 8f16efecc00d3ee4615dcd2d5381b23df4465698 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:18:44 +0200
|
Date: Tue, 14 Apr 2009 16:18:44 +0200
|
||||||
Subject: [PATCH 02/33] qemu-0.9.0.cvs-binfmt
|
Subject: [PATCH 02/17] qemu-0.9.0.cvs-binfmt
|
||||||
|
|
||||||
Fixes binfmt_misc setup script:
|
Fixes binfmt_misc setup script:
|
||||||
- x86_64 is i386-compatible
|
- x86_64 is i386-compatible
|
||||||
@ -10,28 +10,15 @@ Fixes binfmt_misc setup script:
|
|||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
||||||
---
|
---
|
||||||
qemu-binfmt-conf.sh | 33 ++++++++++++++++++---------------
|
scripts/qemu-binfmt-conf.sh | 35 +++++++++++++++++++----------------
|
||||||
1 files changed, 18 insertions(+), 15 deletions(-)
|
1 files changed, 19 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
diff --git a/qemu-binfmt-conf.sh b/qemu-binfmt-conf.sh
|
diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh
|
||||||
index 941f0cf..67d6728 100644
|
index c50beb7..335ab05 100644
|
||||||
--- a/qemu-binfmt-conf.sh
|
--- a/scripts/qemu-binfmt-conf.sh
|
||||||
+++ b/qemu-binfmt-conf.sh
|
+++ b/scripts/qemu-binfmt-conf.sh
|
||||||
@@ -12,7 +12,7 @@ fi
|
@@ -27,40 +27,43 @@ case "$cpu" in
|
||||||
# probe cpu type
|
armv[4-9]*)
|
||||||
cpu=`uname -m`
|
|
||||||
case "$cpu" in
|
|
||||||
- i386|i486|i586|i686|i86pc|BePC)
|
|
||||||
+ i386|i486|i586|i686|i86pc|BePC|x86_64)
|
|
||||||
cpu="i386"
|
|
||||||
;;
|
|
||||||
m68k)
|
|
||||||
@@ -24,36 +24,39 @@ case "$cpu" in
|
|
||||||
"Power Macintosh"|ppc|ppc64)
|
|
||||||
cpu="ppc"
|
|
||||||
;;
|
|
||||||
- armv4l)
|
|
||||||
+ armv[4-9]*l)
|
|
||||||
cpu="arm"
|
cpu="arm"
|
||||||
;;
|
;;
|
||||||
+ sparc*)
|
+ sparc*)
|
||||||
@ -45,6 +32,10 @@ index 941f0cf..67d6728 100644
|
|||||||
- echo ':i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-i386:' > /proc/sys/fs/binfmt_misc/register
|
- echo ':i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-i386:' > /proc/sys/fs/binfmt_misc/register
|
||||||
+ echo ':i386:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-i386:' > /proc/sys/fs/binfmt_misc/register
|
+ echo ':i386:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-i386:' > /proc/sys/fs/binfmt_misc/register
|
||||||
+ echo ':i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-i386:' > /proc/sys/fs/binfmt_misc/register
|
+ echo ':i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-i386:' > /proc/sys/fs/binfmt_misc/register
|
||||||
|
fi
|
||||||
|
if [ $cpu != "alpha" ] ; then
|
||||||
|
- echo ':alpha:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x26\x90:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-alpha:' > /proc/sys/fs/binfmt_misc/register
|
||||||
|
+ echo ':alpha:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x26\x90:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-alpha:' > /proc/sys/fs/binfmt_misc/register
|
||||||
fi
|
fi
|
||||||
if [ $cpu != "arm" ] ; then
|
if [ $cpu != "arm" ] ; then
|
||||||
- echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register
|
- echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register
|
||||||
@ -80,6 +71,12 @@ index 941f0cf..67d6728 100644
|
|||||||
+ echo ':mips64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips64:' > /proc/sys/fs/binfmt_misc/register
|
+ echo ':mips64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips64:' > /proc/sys/fs/binfmt_misc/register
|
||||||
+ echo ':mips64el:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mips64el:' > /proc/sys/fs/binfmt_misc/register
|
+ echo ':mips64el:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mips64el:' > /proc/sys/fs/binfmt_misc/register
|
||||||
fi
|
fi
|
||||||
|
if [ $cpu != "sh" ] ; then
|
||||||
|
- echo ':sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-sh4:' > /proc/sys/fs/binfmt_misc/register
|
||||||
|
- echo ':sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/local/bin/qemu-sh4eb:' > /proc/sys/fs/binfmt_misc/register
|
||||||
|
+ echo ':sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-sh4:' > /proc/sys/fs/binfmt_misc/register
|
||||||
|
+ echo ':sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sh4eb:' > /proc/sys/fs/binfmt_misc/register
|
||||||
|
fi
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 4675ae349f0d4e489f1298f1cbf246dfa7124d79 Mon Sep 17 00:00:00 2001
|
From 8a88b86cc9a3ad0bb6da52fb0f938fe5a085c027 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:20:50 +0200
|
Date: Tue, 14 Apr 2009 16:20:50 +0200
|
||||||
Subject: [PATCH 03/33] qemu-cvs-alsa_bitfield
|
Subject: [PATCH 03/17] qemu-cvs-alsa_bitfield
|
||||||
|
|
||||||
Implements TYPE_INTBITFIELD partially. (required for ALSA support)
|
Implements TYPE_INTBITFIELD partially. (required for ALSA support)
|
||||||
|
|
||||||
@ -79,5 +79,5 @@ index 109c541..55890f3 100644
|
|||||||
case TYPE_LONGLONG:
|
case TYPE_LONGLONG:
|
||||||
case TYPE_ULONGLONG:
|
case TYPE_ULONGLONG:
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From ab27a247cbab3c5f780e14a3ad822a5e12955d8f Mon Sep 17 00:00:00 2001
|
From c5b614579d85877cfa39dfea8989040e43f9ba56 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:23:27 +0200
|
Date: Tue, 14 Apr 2009 16:23:27 +0200
|
||||||
Subject: [PATCH 04/33] qemu-cvs-alsa_ioctl
|
Subject: [PATCH 04/17] qemu-cvs-alsa_ioctl
|
||||||
|
|
||||||
Implements ALSA ioctls on PPC hosts.
|
Implements ALSA ioctls on PPC hosts.
|
||||||
|
|
||||||
@ -19,10 +19,10 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
create mode 100644 linux-user/syscall_types_alsa.h
|
create mode 100644 linux-user/syscall_types_alsa.h
|
||||||
|
|
||||||
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
|
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
|
||||||
index 685cc71..aee5a88 100644
|
index acff781..13ff54f 100644
|
||||||
--- a/linux-user/ioctls.h
|
--- a/linux-user/ioctls.h
|
||||||
+++ b/linux-user/ioctls.h
|
+++ b/linux-user/ioctls.h
|
||||||
@@ -301,6 +301,11 @@
|
@@ -308,6 +308,11 @@
|
||||||
IOCTL(VFAT_IOCTL_READDIR_BOTH, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
|
IOCTL(VFAT_IOCTL_READDIR_BOTH, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
|
||||||
IOCTL(VFAT_IOCTL_READDIR_SHORT, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
|
IOCTL(VFAT_IOCTL_READDIR_SHORT, IOC_R, MK_PTR(MK_ARRAY(MK_STRUCT(STRUCT_dirent), 2)))
|
||||||
|
|
||||||
@ -2254,16 +2254,16 @@ index 0000000..3de8614
|
|||||||
+ unsigned char *code;
|
+ unsigned char *code;
|
||||||
+};
|
+};
|
||||||
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
||||||
index ac5dbc5..78c6488 100644
|
index d02a9bf..be612ce 100644
|
||||||
--- a/linux-user/syscall_defs.h
|
--- a/linux-user/syscall_defs.h
|
||||||
+++ b/linux-user/syscall_defs.h
|
+++ b/linux-user/syscall_defs.h
|
||||||
@@ -2138,3 +2138,4 @@ struct target_mq_attr {
|
@@ -2205,3 +2205,4 @@ struct target_mq_attr {
|
||||||
#define FUTEX_CLOCK_REALTIME 256
|
#define FUTEX_CLOCK_REALTIME 256
|
||||||
#define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
|
#define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
|
||||||
|
|
||||||
+#include "ioctls_alsa_structs.h"
|
+#include "ioctls_alsa_structs.h"
|
||||||
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
|
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
|
||||||
index d3f3df9..1fa48d0 100644
|
index 0e67cd8..635fdef 100644
|
||||||
--- a/linux-user/syscall_types.h
|
--- a/linux-user/syscall_types.h
|
||||||
+++ b/linux-user/syscall_types.h
|
+++ b/linux-user/syscall_types.h
|
||||||
@@ -80,6 +80,11 @@ STRUCT(count_info,
|
@@ -80,6 +80,11 @@ STRUCT(count_info,
|
||||||
@ -3622,5 +3622,5 @@ index 0000000..6dbc964
|
|||||||
+)
|
+)
|
||||||
+
|
+
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From ed5099e1cc655c77344863855abe5c20c1b6eb0b Mon Sep 17 00:00:00 2001
|
From 3848cba4ed22ebef70e59cbb542e71a37fe74d1d Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:24:15 +0200
|
Date: Tue, 14 Apr 2009 16:24:15 +0200
|
||||||
Subject: [PATCH 05/33] qemu-cvs-alsa_mmap
|
Subject: [PATCH 05/17] qemu-cvs-alsa_mmap
|
||||||
|
|
||||||
Hack to prevent ALSA from using mmap() interface to simplify emulation.
|
Hack to prevent ALSA from using mmap() interface to simplify emulation.
|
||||||
|
|
||||||
@ -11,11 +11,11 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
1 files changed, 14 insertions(+), 0 deletions(-)
|
1 files changed, 14 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
||||||
index e05caa0..c33e5fe 100644
|
index abf21f6..e18c228 100644
|
||||||
--- a/linux-user/mmap.c
|
--- a/linux-user/mmap.c
|
||||||
+++ b/linux-user/mmap.c
|
+++ b/linux-user/mmap.c
|
||||||
@@ -321,6 +321,9 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
|
@@ -360,6 +360,9 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
|
||||||
return addr;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+#define SNDRV_PCM_MMAP_OFFSET_STATUS 0x80000000
|
+#define SNDRV_PCM_MMAP_OFFSET_STATUS 0x80000000
|
||||||
@ -24,7 +24,7 @@ index e05caa0..c33e5fe 100644
|
|||||||
/* NOTE: all the constants are the HOST ones */
|
/* NOTE: all the constants are the HOST ones */
|
||||||
abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
||||||
int flags, int fd, abi_ulong offset)
|
int flags, int fd, abi_ulong offset)
|
||||||
@@ -356,6 +359,17 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
@@ -395,6 +398,17 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -43,5 +43,5 @@ index e05caa0..c33e5fe 100644
|
|||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
goto fail;
|
goto fail;
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 69aca2fcdf61fbd4a5c0123a7e64cf99862076ff Mon Sep 17 00:00:00 2001
|
From da6cdca6cdbfccb4936f5df5e297a87fe1e4baa8 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:25:41 +0200
|
Date: Tue, 14 Apr 2009 16:25:41 +0200
|
||||||
Subject: [PATCH 06/33] qemu-cvs-gettimeofday
|
Subject: [PATCH 06/17] qemu-cvs-gettimeofday
|
||||||
|
|
||||||
No clue what this is for.
|
No clue what this is for.
|
||||||
---
|
---
|
||||||
@ -9,10 +9,10 @@ No clue what this is for.
|
|||||||
1 files changed, 2 insertions(+), 0 deletions(-)
|
1 files changed, 2 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||||
index 7b57323..70d3b2d 100644
|
index 499c4d7..92f2aa6 100644
|
||||||
--- a/linux-user/syscall.c
|
--- a/linux-user/syscall.c
|
||||||
+++ b/linux-user/syscall.c
|
+++ b/linux-user/syscall.c
|
||||||
@@ -5063,6 +5063,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
@@ -5399,6 +5399,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||||
case TARGET_NR_gettimeofday:
|
case TARGET_NR_gettimeofday:
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
@ -22,5 +22,5 @@ index 7b57323..70d3b2d 100644
|
|||||||
if (!is_error(ret)) {
|
if (!is_error(ret)) {
|
||||||
if (copy_to_user_timeval(arg1, &tv))
|
if (copy_to_user_timeval(arg1, &tv))
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 4ec256fd6d555ec61f0a1bd530ff66860937b232 Mon Sep 17 00:00:00 2001
|
From 1a883714ac7e953bab2bbdeba651d0696f49dd81 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:26:33 +0200
|
Date: Tue, 14 Apr 2009 16:26:33 +0200
|
||||||
Subject: [PATCH 07/33] qemu-cvs-ioctl_debug
|
Subject: [PATCH 07/17] qemu-cvs-ioctl_debug
|
||||||
|
|
||||||
Extends unsupported ioctl debug output.
|
Extends unsupported ioctl debug output.
|
||||||
|
|
||||||
@ -11,10 +11,10 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
1 files changed, 6 insertions(+), 1 deletions(-)
|
1 files changed, 6 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||||
index 70d3b2d..ce5283c 100644
|
index 92f2aa6..04f77ef 100644
|
||||||
--- a/linux-user/syscall.c
|
--- a/linux-user/syscall.c
|
||||||
+++ b/linux-user/syscall.c
|
+++ b/linux-user/syscall.c
|
||||||
@@ -2890,7 +2890,12 @@ static abi_long do_ioctl(int fd, abi_long cmd, abi_long arg)
|
@@ -3100,7 +3100,12 @@ static abi_long do_ioctl(int fd, abi_long cmd, abi_long arg)
|
||||||
ie = ioctl_entries;
|
ie = ioctl_entries;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
if (ie->target_cmd == 0) {
|
if (ie->target_cmd == 0) {
|
||||||
@ -29,5 +29,5 @@ index 70d3b2d..ce5283c 100644
|
|||||||
}
|
}
|
||||||
if (ie->target_cmd == cmd)
|
if (ie->target_cmd == cmd)
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 5a0ba0e95920618c8ae38f4842d9dd56943f4343 Mon Sep 17 00:00:00 2001
|
From d03d586aabc9000cabc56de7e327c5b5640f3179 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:27:36 +0200
|
Date: Tue, 14 Apr 2009 16:27:36 +0200
|
||||||
Subject: [PATCH 08/33] qemu-cvs-ioctl_nodirection
|
Subject: [PATCH 08/17] qemu-cvs-ioctl_nodirection
|
||||||
|
|
||||||
the direction given in the ioctl should be correct so we can assume the
|
the direction given in the ioctl should be correct so we can assume the
|
||||||
communication is uni-directional. The alsa developers did not like this
|
communication is uni-directional. The alsa developers did not like this
|
||||||
@ -14,10 +14,10 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
1 files changed, 6 insertions(+), 0 deletions(-)
|
1 files changed, 6 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||||
index ce5283c..b7230c7 100644
|
index 04f77ef..b51634b 100644
|
||||||
--- a/linux-user/syscall.c
|
--- a/linux-user/syscall.c
|
||||||
+++ b/linux-user/syscall.c
|
+++ b/linux-user/syscall.c
|
||||||
@@ -2920,6 +2920,11 @@ static abi_long do_ioctl(int fd, abi_long cmd, abi_long arg)
|
@@ -3134,6 +3134,11 @@ static abi_long do_ioctl(int fd, abi_long cmd, abi_long arg)
|
||||||
arg_type++;
|
arg_type++;
|
||||||
target_size = thunk_type_size(arg_type, 0);
|
target_size = thunk_type_size(arg_type, 0);
|
||||||
switch(ie->access) {
|
switch(ie->access) {
|
||||||
@ -29,7 +29,7 @@ index ce5283c..b7230c7 100644
|
|||||||
case IOC_R:
|
case IOC_R:
|
||||||
ret = get_errno(ioctl(fd, ie->host_cmd, buf_temp));
|
ret = get_errno(ioctl(fd, ie->host_cmd, buf_temp));
|
||||||
if (!is_error(ret)) {
|
if (!is_error(ret)) {
|
||||||
@@ -2938,6 +2943,7 @@ static abi_long do_ioctl(int fd, abi_long cmd, abi_long arg)
|
@@ -3152,6 +3157,7 @@ static abi_long do_ioctl(int fd, abi_long cmd, abi_long arg)
|
||||||
unlock_user(argptr, arg, 0);
|
unlock_user(argptr, arg, 0);
|
||||||
ret = get_errno(ioctl(fd, ie->host_cmd, buf_temp));
|
ret = get_errno(ioctl(fd, ie->host_cmd, buf_temp));
|
||||||
break;
|
break;
|
||||||
@ -38,5 +38,5 @@ index ce5283c..b7230c7 100644
|
|||||||
case IOC_RW:
|
case IOC_RW:
|
||||||
argptr = lock_user(VERIFY_READ, arg, target_size, 1);
|
argptr = lock_user(VERIFY_READ, arg, target_size, 1);
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
||||||
|
@ -1,235 +0,0 @@
|
|||||||
From bc376b5848fef44ed9a56ec2e0e9bfd22aa1b24d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Tue, 14 Apr 2009 16:28:45 +0200
|
|
||||||
Subject: [PATCH 09/33] qemu-cvs-newpath
|
|
||||||
|
|
||||||
fast path mangling patch by Kirill A. Shutemov
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/path.c | 190 ++++++++++++++++-------------------------------------
|
|
||||||
1 files changed, 56 insertions(+), 134 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/path.c b/linux-user/path.c
|
|
||||||
index 06b1f5f..aedff50 100644
|
|
||||||
--- a/linux-user/path.c
|
|
||||||
+++ b/linux-user/path.c
|
|
||||||
@@ -1,159 +1,81 @@
|
|
||||||
/* Code to mangle pathnames into those matching a given prefix.
|
|
||||||
eg. open("/lib/foo.so") => open("/usr/gnemul/i386-linux/lib/foo.so");
|
|
||||||
-
|
|
||||||
- The assumption is that this area does not change.
|
|
||||||
*/
|
|
||||||
#include <sys/types.h>
|
|
||||||
-#include <dirent.h>
|
|
||||||
+#include <sys/stat.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
-#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
-#include <errno.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "qemu.h"
|
|
||||||
|
|
||||||
-struct pathelem
|
|
||||||
-{
|
|
||||||
- /* Name of this, eg. lib */
|
|
||||||
- char *name;
|
|
||||||
- /* Full path name, eg. /usr/gnemul/x86-linux/lib. */
|
|
||||||
- char *pathname;
|
|
||||||
- struct pathelem *parent;
|
|
||||||
- /* Children */
|
|
||||||
- unsigned int num_entries;
|
|
||||||
- struct pathelem *entries[0];
|
|
||||||
+struct path_list_head {
|
|
||||||
+ struct path_list_head *next;
|
|
||||||
+ char* path;
|
|
||||||
};
|
|
||||||
|
|
||||||
-static struct pathelem *base;
|
|
||||||
-
|
|
||||||
-/* First N chars of S1 match S2, and S2 is N chars long. */
|
|
||||||
-static int strneq(const char *s1, unsigned int n, const char *s2)
|
|
||||||
-{
|
|
||||||
- unsigned int i;
|
|
||||||
-
|
|
||||||
- for (i = 0; i < n; i++)
|
|
||||||
- if (s1[i] != s2[i])
|
|
||||||
- return 0;
|
|
||||||
- return s2[i] == 0;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static struct pathelem *add_entry(struct pathelem *root, const char *name);
|
|
||||||
-
|
|
||||||
-static struct pathelem *new_entry(const char *root,
|
|
||||||
- struct pathelem *parent,
|
|
||||||
- const char *name)
|
|
||||||
-{
|
|
||||||
- struct pathelem *new = malloc(sizeof(*new));
|
|
||||||
- new->name = strdup(name);
|
|
||||||
- asprintf(&new->pathname, "%s/%s", root, name);
|
|
||||||
- new->num_entries = 0;
|
|
||||||
- return new;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-#define streq(a,b) (strcmp((a), (b)) == 0)
|
|
||||||
-
|
|
||||||
-static struct pathelem *add_dir_maybe(struct pathelem *path)
|
|
||||||
-{
|
|
||||||
- DIR *dir;
|
|
||||||
-
|
|
||||||
- if ((dir = opendir(path->pathname)) != NULL) {
|
|
||||||
- struct dirent *dirent;
|
|
||||||
-
|
|
||||||
- while ((dirent = readdir(dir)) != NULL) {
|
|
||||||
- if (!streq(dirent->d_name,".") && !streq(dirent->d_name,"..")){
|
|
||||||
- path = add_entry(path, dirent->d_name);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- closedir(dir);
|
|
||||||
- }
|
|
||||||
- return path;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static struct pathelem *add_entry(struct pathelem *root, const char *name)
|
|
||||||
-{
|
|
||||||
- root->num_entries++;
|
|
||||||
-
|
|
||||||
- root = realloc(root, sizeof(*root)
|
|
||||||
- + sizeof(root->entries[0])*root->num_entries);
|
|
||||||
-
|
|
||||||
- root->entries[root->num_entries-1] = new_entry(root->pathname, root, name);
|
|
||||||
- root->entries[root->num_entries-1]
|
|
||||||
- = add_dir_maybe(root->entries[root->num_entries-1]);
|
|
||||||
- return root;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-/* This needs to be done after tree is stabilized (ie. no more reallocs!). */
|
|
||||||
-static void set_parents(struct pathelem *child, struct pathelem *parent)
|
|
||||||
-{
|
|
||||||
- unsigned int i;
|
|
||||||
-
|
|
||||||
- child->parent = parent;
|
|
||||||
- for (i = 0; i < child->num_entries; i++)
|
|
||||||
- set_parents(child->entries[i], child);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-/* FIXME: Doesn't handle DIR/.. where DIR is not in emulated dir. */
|
|
||||||
-static const char *
|
|
||||||
-follow_path(const struct pathelem *cursor, const char *name)
|
|
||||||
-{
|
|
||||||
- unsigned int i, namelen;
|
|
||||||
-
|
|
||||||
- name += strspn(name, "/");
|
|
||||||
- namelen = strcspn(name, "/");
|
|
||||||
-
|
|
||||||
- if (namelen == 0)
|
|
||||||
- return cursor->pathname;
|
|
||||||
-
|
|
||||||
- if (strneq(name, namelen, ".."))
|
|
||||||
- return follow_path(cursor->parent, name + namelen);
|
|
||||||
-
|
|
||||||
- if (strneq(name, namelen, "."))
|
|
||||||
- return follow_path(cursor, name + namelen);
|
|
||||||
-
|
|
||||||
- for (i = 0; i < cursor->num_entries; i++)
|
|
||||||
- if (strneq(name, namelen, cursor->entries[i]->name))
|
|
||||||
- return follow_path(cursor->entries[i], name + namelen);
|
|
||||||
-
|
|
||||||
- /* Not found */
|
|
||||||
- return NULL;
|
|
||||||
-}
|
|
||||||
+static struct path_list_head* list_head;
|
|
||||||
|
|
||||||
void init_paths(const char *prefix)
|
|
||||||
{
|
|
||||||
- char pref_buf[PATH_MAX];
|
|
||||||
-
|
|
||||||
- if (prefix[0] == '\0' ||
|
|
||||||
- !strcmp(prefix, "/"))
|
|
||||||
+ if (prefix[0] != '/' ||
|
|
||||||
+ prefix[0] == '\0' ||
|
|
||||||
+ !strcmp(prefix, "/"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
- if (prefix[0] != '/') {
|
|
||||||
- char *cwd = get_current_dir_name();
|
|
||||||
- if (!cwd)
|
|
||||||
- abort();
|
|
||||||
- strcpy(pref_buf, cwd);
|
|
||||||
- strcat(pref_buf, "/");
|
|
||||||
- strcat(pref_buf, prefix);
|
|
||||||
- free(cwd);
|
|
||||||
- } else
|
|
||||||
- strcpy(pref_buf,prefix + 1);
|
|
||||||
+ list_head = malloc(sizeof(struct path_list_head));
|
|
||||||
|
|
||||||
- base = new_entry("", NULL, pref_buf);
|
|
||||||
- base = add_dir_maybe(base);
|
|
||||||
- if (base->num_entries == 0) {
|
|
||||||
- free (base);
|
|
||||||
- base = NULL;
|
|
||||||
- } else {
|
|
||||||
- set_parents(base, base);
|
|
||||||
- }
|
|
||||||
+ /* first element of list is prefix */
|
|
||||||
+ list_head->path = strdup(prefix);
|
|
||||||
+ list_head->next = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look for path in emulation dir, otherwise return name. */
|
|
||||||
const char *path(const char *name)
|
|
||||||
{
|
|
||||||
+ struct path_list_head *list = list_head;
|
|
||||||
+ int path_length = strlen(list_head->path) + strlen(name) + 1;
|
|
||||||
+ char *newname = malloc(path_length);
|
|
||||||
+ struct stat buf;
|
|
||||||
+ const char * result = name;
|
|
||||||
+
|
|
||||||
/* Only do absolute paths: quick and dirty, but should mostly be OK.
|
|
||||||
Could do relative by tracking cwd. */
|
|
||||||
- if (!base || !name || name[0] != '/')
|
|
||||||
- return name;
|
|
||||||
-
|
|
||||||
- return follow_path(base, name) ?: name;
|
|
||||||
+ if (!list_head || result[0] != '/')
|
|
||||||
+ goto exit;
|
|
||||||
+
|
|
||||||
+ strncpy(newname, list_head->path, path_length);
|
|
||||||
+ strncat(newname, name, path_length);
|
|
||||||
+
|
|
||||||
+ /* look for place where path should be present */
|
|
||||||
+ while ( list->next && (strcmp(list->next->path, newname) < 0) )
|
|
||||||
+ list = list->next;
|
|
||||||
+
|
|
||||||
+ /* if there is no path in list */
|
|
||||||
+ if ( !list->next || strcmp(list->next->path, newname) ) {
|
|
||||||
+ /* add element to list if path exist in emulation dir */
|
|
||||||
+ if ( !stat(newname, &buf) )
|
|
||||||
+ {
|
|
||||||
+ struct path_list_head *new;
|
|
||||||
+
|
|
||||||
+ new = malloc(sizeof(struct path_list_head));
|
|
||||||
+ new->path = strdup(newname);
|
|
||||||
+ new->next = list->next;
|
|
||||||
+ list->next = new;
|
|
||||||
+ result = new->path;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ } else if ( stat(list->next->path, &buf) ) {
|
|
||||||
+ /* remove element from list if path doesn't exist in emulation dir */
|
|
||||||
+ struct path_list_head* tmp;
|
|
||||||
+
|
|
||||||
+ tmp = list->next;
|
|
||||||
+ list->next = tmp->next;
|
|
||||||
+ free(tmp->path);
|
|
||||||
+ free(tmp);
|
|
||||||
+ } else
|
|
||||||
+ result = list->next->path;
|
|
||||||
+
|
|
||||||
+exit:
|
|
||||||
+ free(newname);
|
|
||||||
+ return result;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
From 72e306e63740a51a1c82f39cabb65df65ce2c215 Mon Sep 17 00:00:00 2001
|
From 026ee1029cfeb6c802ee715372992fb3c847bd27 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:30:16 +0200
|
Date: Tue, 14 Apr 2009 16:30:16 +0200
|
||||||
Subject: [PATCH 10/33] qemu-cvs-sched_getaffinity
|
Subject: [PATCH 09/17] qemu-cvs-sched_getaffinity
|
||||||
|
|
||||||
Implements sched_getaffinity syscall.
|
Implements sched_getaffinity syscall.
|
||||||
|
|
||||||
@ -11,10 +11,10 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
1 files changed, 16 insertions(+), 0 deletions(-)
|
1 files changed, 16 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||||
index b7230c7..faf41b1 100644
|
index b51634b..81bf1f0 100644
|
||||||
--- a/linux-user/syscall.c
|
--- a/linux-user/syscall.c
|
||||||
+++ b/linux-user/syscall.c
|
+++ b/linux-user/syscall.c
|
||||||
@@ -152,6 +152,7 @@ static type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, \
|
@@ -164,6 +164,7 @@ static type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ index b7230c7..faf41b1 100644
|
|||||||
#define __NR_sys_uname __NR_uname
|
#define __NR_sys_uname __NR_uname
|
||||||
#define __NR_sys_faccessat __NR_faccessat
|
#define __NR_sys_faccessat __NR_faccessat
|
||||||
#define __NR_sys_fchmodat __NR_fchmodat
|
#define __NR_sys_fchmodat __NR_fchmodat
|
||||||
@@ -213,6 +214,9 @@ _syscall3(int,sys_tgkill,int,tgid,int,pid,int,sig)
|
@@ -223,6 +224,9 @@ _syscall3(int,sys_tgkill,int,tgid,int,pid,int,sig)
|
||||||
#if defined(TARGET_NR_tkill) && defined(__NR_tkill)
|
#if defined(TARGET_NR_tkill) && defined(__NR_tkill)
|
||||||
_syscall2(int,sys_tkill,int,tid,int,sig)
|
_syscall2(int,sys_tkill,int,tid,int,sig)
|
||||||
#endif
|
#endif
|
||||||
@ -32,10 +32,10 @@ index b7230c7..faf41b1 100644
|
|||||||
#ifdef __NR_exit_group
|
#ifdef __NR_exit_group
|
||||||
_syscall1(int,exit_group,int,error_code)
|
_syscall1(int,exit_group,int,error_code)
|
||||||
#endif
|
#endif
|
||||||
@@ -6979,6 +6983,18 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
@@ -7505,6 +7509,18 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#endif /* CONFIG_SPLICE */
|
#endif
|
||||||
+
|
+
|
||||||
+#ifdef TARGET_NR_sched_getaffinity
|
+#ifdef TARGET_NR_sched_getaffinity
|
||||||
+ case TARGET_NR_sched_getaffinity:
|
+ case TARGET_NR_sched_getaffinity:
|
||||||
@ -52,5 +52,5 @@ index b7230c7..faf41b1 100644
|
|||||||
unimplemented:
|
unimplemented:
|
||||||
gemu_log("qemu: Unsupported syscall: %d\n", num);
|
gemu_log("qemu: Unsupported syscall: %d\n", num);
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
From 5c8849d886cafd1626c1d36c572c3ccee5c88d5d Mon Sep 17 00:00:00 2001
|
From 2013ec7c2d1b5a71d73701da746363b69d4c992c Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:34:05 +0200
|
Date: Tue, 14 Apr 2009 16:34:05 +0200
|
||||||
Subject: [PATCH 11/33] qemu-cvs-mmap-amd64
|
Subject: [PATCH 10/17] qemu-cvs-mmap-amd64
|
||||||
|
|
||||||
Map stuff to address space < 4GB on AMD64. This patch got continually smaller
|
Map stuff to address space < 4GB on AMD64. This patch got continually smaller
|
||||||
as most cases were this was an issue were dealt with in other ways. May
|
as most cases were this was an issue were dealt with in other ways. May
|
||||||
@ -13,7 +13,7 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
1 files changed, 5 insertions(+), 1 deletions(-)
|
1 files changed, 5 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
||||||
index c33e5fe..9ca8f6f 100644
|
index e18c228..de8abe9 100644
|
||||||
--- a/linux-user/mmap.c
|
--- a/linux-user/mmap.c
|
||||||
+++ b/linux-user/mmap.c
|
+++ b/linux-user/mmap.c
|
||||||
@@ -31,6 +31,10 @@
|
@@ -31,6 +31,10 @@
|
||||||
@ -26,8 +26,8 @@ index c33e5fe..9ca8f6f 100644
|
|||||||
+
|
+
|
||||||
//#define DEBUG_MMAP
|
//#define DEBUG_MMAP
|
||||||
|
|
||||||
#if defined(USE_NPTL)
|
#if defined(CONFIG_USE_NPTL)
|
||||||
@@ -230,7 +234,7 @@ static int mmap_frag(abi_ulong real_start,
|
@@ -169,7 +173,7 @@ static int mmap_frag(abi_ulong real_start,
|
||||||
if (prot1 == 0) {
|
if (prot1 == 0) {
|
||||||
/* no page was there, so we allocate one */
|
/* no page was there, so we allocate one */
|
||||||
void *p = mmap(host_start, qemu_host_page_size, prot,
|
void *p = mmap(host_start, qemu_host_page_size, prot,
|
||||||
@ -37,5 +37,5 @@ index c33e5fe..9ca8f6f 100644
|
|||||||
return -1;
|
return -1;
|
||||||
prot1 = prot;
|
prot1 = prot;
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
116
0011-qemu-img-vmdk-scsi.patch
Normal file
116
0011-qemu-img-vmdk-scsi.patch
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
From 09686f619707ec98e073bf671b0334a2f65934ad Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
|
Date: Tue, 14 Apr 2009 16:37:42 +0200
|
||||||
|
Subject: [PATCH 11/17] qemu-img-vmdk-scsi
|
||||||
|
|
||||||
|
Support creation of SCSI VMDK images in qemu-img.
|
||||||
|
|
||||||
|
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
||||||
|
---
|
||||||
|
block.c | 5 ++++-
|
||||||
|
block/vmdk.c | 7 +++++--
|
||||||
|
block_int.h | 2 ++
|
||||||
|
qemu-img.c | 8 +++++++-
|
||||||
|
4 files changed, 18 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/block.c b/block.c
|
||||||
|
index b476479..b77f09b 100644
|
||||||
|
--- a/block.c
|
||||||
|
+++ b/block.c
|
||||||
|
@@ -2792,7 +2792,7 @@ int bdrv_img_create(const char *filename, const char *fmt,
|
||||||
|
char *options, uint64_t img_size, int flags)
|
||||||
|
{
|
||||||
|
QEMUOptionParameter *param = NULL, *create_options = NULL;
|
||||||
|
- QEMUOptionParameter *backing_fmt, *backing_file;
|
||||||
|
+ QEMUOptionParameter *backing_fmt, *backing_file, *scsi;
|
||||||
|
BlockDriverState *bs = NULL;
|
||||||
|
BlockDriver *drv, *proto_drv;
|
||||||
|
BlockDriver *backing_drv = NULL;
|
||||||
|
@@ -2901,6 +2901,9 @@ int bdrv_img_create(const char *filename, const char *fmt,
|
||||||
|
|
||||||
|
printf("Formatting '%s', fmt=%s ", filename, fmt);
|
||||||
|
print_option_parameters(param);
|
||||||
|
+ scsi = get_option_parameter(param, BLOCK_OPT_SCSI);
|
||||||
|
+ if (scsi && scsi->value.n)
|
||||||
|
+ printf(", SCSI");
|
||||||
|
puts("");
|
||||||
|
|
||||||
|
ret = bdrv_create(drv, filename, param);
|
||||||
|
diff --git a/block/vmdk.c b/block/vmdk.c
|
||||||
|
index 8fc9d67..8944173 100644
|
||||||
|
--- a/block/vmdk.c
|
||||||
|
+++ b/block/vmdk.c
|
||||||
|
@@ -685,7 +685,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
|
||||||
|
"ddb.geometry.cylinders = \"%" PRId64 "\"\n"
|
||||||
|
"ddb.geometry.heads = \"16\"\n"
|
||||||
|
"ddb.geometry.sectors = \"63\"\n"
|
||||||
|
- "ddb.adapterType = \"ide\"\n";
|
||||||
|
+ "ddb.adapterType = \"%s\"\n";
|
||||||
|
char desc[1024];
|
||||||
|
const char *real_filename, *temp_str;
|
||||||
|
int64_t total_size = 0;
|
||||||
|
@@ -701,6 +701,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
|
||||||
|
backing_file = options->value.s;
|
||||||
|
} else if (!strcmp(options->name, BLOCK_OPT_COMPAT6)) {
|
||||||
|
flags |= options->value.n ? BLOCK_FLAG_COMPAT6: 0;
|
||||||
|
+ } else if (!strcmp(options->name, BLOCK_OPT_SCSI)) {
|
||||||
|
+ flags |= options->value.n ? BLOCK_FLAG_SCSI: 0;
|
||||||
|
}
|
||||||
|
options++;
|
||||||
|
}
|
||||||
|
@@ -798,7 +800,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
|
||||||
|
snprintf(desc, sizeof(desc), desc_template, (unsigned int)time(NULL),
|
||||||
|
total_size, real_filename,
|
||||||
|
(flags & BLOCK_FLAG_COMPAT6 ? 6 : 4),
|
||||||
|
- total_size / (int64_t)(63 * 16));
|
||||||
|
+ total_size / (int64_t)(63 * 16),
|
||||||
|
+ flags & BLOCK_FLAG_SCSI ? "lsilogic" : "ide");
|
||||||
|
|
||||||
|
/* write the descriptor */
|
||||||
|
lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET);
|
||||||
|
diff --git a/block_int.h b/block_int.h
|
||||||
|
index 545ad11..771fd91 100644
|
||||||
|
--- a/block_int.h
|
||||||
|
+++ b/block_int.h
|
||||||
|
@@ -30,10 +30,12 @@
|
||||||
|
|
||||||
|
#define BLOCK_FLAG_ENCRYPT 1
|
||||||
|
#define BLOCK_FLAG_COMPAT6 4
|
||||||
|
+#define BLOCK_FLAG_SCSI 8
|
||||||
|
|
||||||
|
#define BLOCK_OPT_SIZE "size"
|
||||||
|
#define BLOCK_OPT_ENCRYPT "encryption"
|
||||||
|
#define BLOCK_OPT_COMPAT6 "compat6"
|
||||||
|
+#define BLOCK_OPT_SCSI "scsi"
|
||||||
|
#define BLOCK_OPT_BACKING_FILE "backing_file"
|
||||||
|
#define BLOCK_OPT_BACKING_FMT "backing_fmt"
|
||||||
|
#define BLOCK_OPT_CLUSTER_SIZE "cluster_size"
|
||||||
|
diff --git a/qemu-img.c b/qemu-img.c
|
||||||
|
index 4a37358..ed8cc08 100644
|
||||||
|
--- a/qemu-img.c
|
||||||
|
+++ b/qemu-img.c
|
||||||
|
@@ -572,7 +572,7 @@ static int img_convert(int argc, char **argv)
|
||||||
|
const uint8_t *buf1;
|
||||||
|
BlockDriverInfo bdi;
|
||||||
|
QEMUOptionParameter *param = NULL, *create_options = NULL;
|
||||||
|
- QEMUOptionParameter *out_baseimg_param;
|
||||||
|
+ QEMUOptionParameter *out_baseimg_param, *scsi;
|
||||||
|
char *options = NULL;
|
||||||
|
const char *snapshot_name = NULL;
|
||||||
|
|
||||||
|
@@ -727,6 +727,12 @@ static int img_convert(int argc, char **argv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if ((scsi = get_option_parameter(param, BLOCK_OPT_SCSI)) && scsi->value.n && strcmp(drv->format_name, "vmdk")) {
|
||||||
|
+ error_report("SCSI devices not supported for this file format");
|
||||||
|
+ ret = -1;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Create the new image */
|
||||||
|
ret = bdrv_create(drv, out_filename, param);
|
||||||
|
if (ret < 0) {
|
||||||
|
--
|
||||||
|
1.7.1
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From 9e89bde7061d46a60dfe895450053360427a32f0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Tue, 14 Apr 2009 16:34:36 +0200
|
|
||||||
Subject: [PATCH 12/33] qemu-cvs-pthread
|
|
||||||
|
|
||||||
Link with libpthread. Not sure if still necessary.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
Makefile | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
|
||||||
index e4f9498..be55d3d 100644
|
|
||||||
--- a/Makefile
|
|
||||||
+++ b/Makefile
|
|
||||||
@@ -19,7 +19,7 @@ VPATH=$(SRC_PATH):$(SRC_PATH)/hw
|
|
||||||
CPPFLAGS += -I. -I$(SRC_PATH) -MMD -MP -MT $@
|
|
||||||
CPPFLAGS += -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
|
|
||||||
CPPFLAGS += -U_FORTIFY_SOURCE
|
|
||||||
-LIBS=
|
|
||||||
+LIBS=-lpthread
|
|
||||||
ifdef CONFIG_STATIC
|
|
||||||
LDFLAGS += -static
|
|
||||||
endif
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
From 29b517b3811d8745eb73e95fe18552eb1f0153af Mon Sep 17 00:00:00 2001
|
From 75c51f45c127ebe4f549041aae98f510480429ae Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Tue, 14 Apr 2009 16:38:20 +0200
|
Date: Tue, 14 Apr 2009 16:38:20 +0200
|
||||||
Subject: [PATCH 14/33] qemu-nonvoid_return
|
Subject: [PATCH 12/17] qemu-nonvoid_return
|
||||||
|
|
||||||
Squelches GCC warnings about undefined return values.
|
Squelches GCC warnings about undefined return values.
|
||||||
|
|
||||||
@ -12,10 +12,10 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||||
|
|
||||||
diff --git a/hw/mpcore.c b/hw/mpcore.c
|
diff --git a/hw/mpcore.c b/hw/mpcore.c
|
||||||
index 907bd99..a682695 100644
|
index fc05215..7bdb495 100644
|
||||||
--- a/hw/mpcore.c
|
--- a/hw/mpcore.c
|
||||||
+++ b/hw/mpcore.c
|
+++ b/hw/mpcore.c
|
||||||
@@ -108,6 +108,7 @@ static uint32_t mpcore_timer_read(mpcore_timer_state *s, int offset)
|
@@ -104,6 +104,7 @@ static uint32_t mpcore_timer_read(mpcore_timer_state *s, int offset)
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -24,7 +24,7 @@ index 907bd99..a682695 100644
|
|||||||
|
|
||||||
static void mpcore_timer_write(mpcore_timer_state *s, int offset,
|
static void mpcore_timer_write(mpcore_timer_state *s, int offset,
|
||||||
diff --git a/target-m68k/translate.c b/target-m68k/translate.c
|
diff --git a/target-m68k/translate.c b/target-m68k/translate.c
|
||||||
index b37578b..feaa155 100644
|
index 6f72a2b..7d9492b 100644
|
||||||
--- a/target-m68k/translate.c
|
--- a/target-m68k/translate.c
|
||||||
+++ b/target-m68k/translate.c
|
+++ b/target-m68k/translate.c
|
||||||
@@ -440,6 +440,7 @@ static inline int opsize_bytes(int opsize)
|
@@ -440,6 +440,7 @@ static inline int opsize_bytes(int opsize)
|
||||||
@ -36,5 +36,5 @@ index b37578b..feaa155 100644
|
|||||||
|
|
||||||
/* Assign value to a register. If the width is less than the register width
|
/* Assign value to a register. If the width is less than the register width
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
From e770ff83915791d048ca88da6c3877cb54bf063e Mon Sep 17 00:00:00 2001
|
From f44ecd4fcdb8e02e6bd58201a81f047d1e109508 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Thu, 16 Apr 2009 15:14:12 +0200
|
Date: Thu, 16 Apr 2009 15:14:12 +0200
|
||||||
Subject: [PATCH 16/33] i386-linux-user NPTL support
|
Subject: [PATCH 13/17] i386-linux-user NPTL support
|
||||||
|
|
||||||
Makes NPTL binaries run by implementing TLS.
|
Makes NPTL binaries run by implementing TLS.
|
||||||
|
|
||||||
@ -12,10 +12,10 @@ Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|||||||
2 files changed, 15 insertions(+), 2 deletions(-)
|
2 files changed, 15 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/configure b/configure
|
diff --git a/configure b/configure
|
||||||
index 4ce7bc1..4f79498 100755
|
index 598e8e1..95de763 100755
|
||||||
--- a/configure
|
--- a/configure
|
||||||
+++ b/configure
|
+++ b/configure
|
||||||
@@ -1904,6 +1904,7 @@ TARGET_ABI_DIR=""
|
@@ -2910,6 +2910,7 @@ TARGET_ABI_DIR=""
|
||||||
case "$target_arch2" in
|
case "$target_arch2" in
|
||||||
i386)
|
i386)
|
||||||
target_phys_bits=32
|
target_phys_bits=32
|
||||||
@ -24,10 +24,10 @@ index 4ce7bc1..4f79498 100755
|
|||||||
x86_64)
|
x86_64)
|
||||||
TARGET_BASE_ARCH=i386
|
TARGET_BASE_ARCH=i386
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||||
index faf41b1..87ceac7 100644
|
index 81bf1f0..1a98433 100644
|
||||||
--- a/linux-user/syscall.c
|
--- a/linux-user/syscall.c
|
||||||
+++ b/linux-user/syscall.c
|
+++ b/linux-user/syscall.c
|
||||||
@@ -3575,8 +3575,14 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
@@ -3792,8 +3792,14 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
||||||
ts->child_tidptr = child_tidptr;
|
ts->child_tidptr = child_tidptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ index faf41b1..87ceac7 100644
|
|||||||
|
|
||||||
/* Grab a mutex so that thread setup appears atomic. */
|
/* Grab a mutex so that thread setup appears atomic. */
|
||||||
pthread_mutex_lock(&clone_lock);
|
pthread_mutex_lock(&clone_lock);
|
||||||
@@ -3648,8 +3654,14 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
@@ -3867,8 +3873,14 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
||||||
if (flags & CLONE_PARENT_SETTID)
|
if (flags & CLONE_PARENT_SETTID)
|
||||||
put_user_u32(gettid(), parent_tidptr);
|
put_user_u32(gettid(), parent_tidptr);
|
||||||
ts = (TaskState *)env->opaque;
|
ts = (TaskState *)env->opaque;
|
||||||
@ -60,5 +60,5 @@ index faf41b1..87ceac7 100644
|
|||||||
ts->child_tidptr = child_tidptr;
|
ts->child_tidptr = child_tidptr;
|
||||||
#endif
|
#endif
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
@ -1,142 +0,0 @@
|
|||||||
From 75e8da1c5ca1b61a9a97fcc385eb5c6b9f83130f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Tue, 14 Apr 2009 16:37:42 +0200
|
|
||||||
Subject: [PATCH 13/33] qemu-img-vmdk-scsi
|
|
||||||
|
|
||||||
Support creation of SCSI VMDK images in qemu-img.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
block/vmdk.c | 5 +++--
|
|
||||||
block_int.h | 1 +
|
|
||||||
qemu-img-cmds.hx | 8 ++++----
|
|
||||||
qemu-img.c | 15 +++++++++++++--
|
|
||||||
4 files changed, 21 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/block/vmdk.c b/block/vmdk.c
|
|
||||||
index 4e48622..b7a15c7 100644
|
|
||||||
--- a/block/vmdk.c
|
|
||||||
+++ b/block/vmdk.c
|
|
||||||
@@ -710,7 +710,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
|
|
||||||
"ddb.geometry.cylinders = \"%" PRId64 "\"\n"
|
|
||||||
"ddb.geometry.heads = \"16\"\n"
|
|
||||||
"ddb.geometry.sectors = \"63\"\n"
|
|
||||||
- "ddb.adapterType = \"ide\"\n";
|
|
||||||
+ "ddb.adapterType = \"%s\"\n";
|
|
||||||
char desc[1024];
|
|
||||||
const char *real_filename, *temp_str;
|
|
||||||
int64_t total_size = 0;
|
|
||||||
@@ -800,7 +800,8 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options)
|
|
||||||
snprintf(desc, sizeof(desc), desc_template, (unsigned int)time(NULL),
|
|
||||||
total_size, real_filename,
|
|
||||||
(flags & BLOCK_FLAG_COMPAT6 ? 6 : 4),
|
|
||||||
- total_size / (int64_t)(63 * 16));
|
|
||||||
+ total_size / (int64_t)(63 * 16),
|
|
||||||
+ flags & BLOCK_FLAG_SCSI ? "lsilogic" : "ide");
|
|
||||||
|
|
||||||
/* write the descriptor */
|
|
||||||
lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET);
|
|
||||||
diff --git a/block_int.h b/block_int.h
|
|
||||||
index 8898d91..d482050 100644
|
|
||||||
--- a/block_int.h
|
|
||||||
+++ b/block_int.h
|
|
||||||
@@ -30,6 +30,7 @@
|
|
||||||
#define BLOCK_FLAG_ENCRYPT 1
|
|
||||||
#define BLOCK_FLAG_COMPRESS 2
|
|
||||||
#define BLOCK_FLAG_COMPAT6 4
|
|
||||||
+#define BLOCK_FLAG_SCSI 8
|
|
||||||
|
|
||||||
#define BLOCK_OPT_SIZE "size"
|
|
||||||
#define BLOCK_OPT_ENCRYPT "encryption"
|
|
||||||
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
|
|
||||||
index ddb86f0..be94d22 100644
|
|
||||||
--- a/qemu-img-cmds.hx
|
|
||||||
+++ b/qemu-img-cmds.hx
|
|
||||||
@@ -16,9 +16,9 @@ STEXI
|
|
||||||
ETEXI
|
|
||||||
|
|
||||||
DEF("create", img_create,
|
|
||||||
- "create [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]")
|
|
||||||
+ "create [-s] [-F fmt] [-b base_image] [-f fmt] [-o options] filename [size]")
|
|
||||||
STEXI
|
|
||||||
-@item create [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
|
|
||||||
+@item create [-s] [-F @var{base_fmt}] [-b @var{base_image}] [-f @var{fmt}] [-o @var{options}] @var{filename} [@var{size}]
|
|
||||||
ETEXI
|
|
||||||
|
|
||||||
DEF("commit", img_commit,
|
|
||||||
@@ -28,9 +28,9 @@ STEXI
|
|
||||||
ETEXI
|
|
||||||
|
|
||||||
DEF("convert", img_convert,
|
|
||||||
- "convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename")
|
|
||||||
+ "convert [-c] [-s] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 [...]] output_filename")
|
|
||||||
STEXI
|
|
||||||
-@item convert [-c] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
|
|
||||||
+@item convert [-c] [-s] [-f @var{fmt}] [-O @var{output_fmt}] [-o @var{options}] [-B @var{output_base_image}] @var{filename} [@var{filename2} [...]] @var{output_filename}
|
|
||||||
ETEXI
|
|
||||||
|
|
||||||
DEF("info", img_info,
|
|
||||||
diff --git a/qemu-img.c b/qemu-img.c
|
|
||||||
index 070fe2e..2adeb56 100644
|
|
||||||
--- a/qemu-img.c
|
|
||||||
+++ b/qemu-img.c
|
|
||||||
@@ -259,7 +259,7 @@ static int img_create(int argc, char **argv)
|
|
||||||
|
|
||||||
flags = 0;
|
|
||||||
for(;;) {
|
|
||||||
- c = getopt(argc, argv, "F:b:f:he6o:");
|
|
||||||
+ c = getopt(argc, argv, "F:b:f:hes6o:");
|
|
||||||
if (c == -1)
|
|
||||||
break;
|
|
||||||
switch(c) {
|
|
||||||
@@ -278,6 +278,9 @@ static int img_create(int argc, char **argv)
|
|
||||||
case 'e':
|
|
||||||
flags |= BLOCK_FLAG_ENCRYPT;
|
|
||||||
break;
|
|
||||||
+ case 's':
|
|
||||||
+ flags |= BLOCK_FLAG_SCSI;
|
|
||||||
+ break;
|
|
||||||
case '6':
|
|
||||||
flags |= BLOCK_FLAG_COMPAT6;
|
|
||||||
break;
|
|
||||||
@@ -357,6 +360,8 @@ static int img_create(int argc, char **argv)
|
|
||||||
|
|
||||||
printf("Formatting '%s', fmt=%s ", filename, fmt);
|
|
||||||
print_option_parameters(param);
|
|
||||||
+ if (flags & BLOCK_FLAG_SCSI)
|
|
||||||
+ printf(", SCSI");
|
|
||||||
puts("");
|
|
||||||
|
|
||||||
ret = bdrv_create(drv, filename, param);
|
|
||||||
@@ -551,7 +556,7 @@ static int img_convert(int argc, char **argv)
|
|
||||||
out_baseimg = NULL;
|
|
||||||
flags = 0;
|
|
||||||
for(;;) {
|
|
||||||
- c = getopt(argc, argv, "f:O:B:hce6o:");
|
|
||||||
+ c = getopt(argc, argv, "f:O:B:hces6o:");
|
|
||||||
if (c == -1)
|
|
||||||
break;
|
|
||||||
switch(c) {
|
|
||||||
@@ -573,6 +578,9 @@ static int img_convert(int argc, char **argv)
|
|
||||||
case 'e':
|
|
||||||
flags |= BLOCK_FLAG_ENCRYPT;
|
|
||||||
break;
|
|
||||||
+ case 's':
|
|
||||||
+ flags |= BLOCK_FLAG_SCSI;
|
|
||||||
+ break;
|
|
||||||
case '6':
|
|
||||||
flags |= BLOCK_FLAG_COMPAT6;
|
|
||||||
break;
|
|
||||||
@@ -639,6 +647,9 @@ static int img_convert(int argc, char **argv)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (flags & BLOCK_FLAG_SCSI && strcmp(drv->format_name, "vmdk"))
|
|
||||||
+ error("SCSI devices not supported for this file format");
|
|
||||||
+
|
|
||||||
/* Create the new image */
|
|
||||||
ret = bdrv_create(drv, out_filename, param);
|
|
||||||
free_option_parameters(param);
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
|||||||
From df6df89350799107b3395665943c4df7eeba87e0 Mon Sep 17 00:00:00 2001
|
From 3f23daf11dab4206ef87839bb513c4f97609f112 Mon Sep 17 00:00:00 2001
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
Date: Wed, 17 Jun 2009 14:54:48 +0200
|
Date: Wed, 17 Jun 2009 14:54:48 +0200
|
||||||
Subject: [PATCH 17/33] qemu-0.11-git-ioctl_mount
|
Subject: [PATCH 14/17] qemu-0.11-git-ioctl_mount
|
||||||
|
|
||||||
---
|
---
|
||||||
linux-user/ioctls.h | 2 +-
|
linux-user/ioctls.h | 2 +-
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||||
|
|
||||||
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
|
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
|
||||||
index aee5a88..a0fb052 100644
|
index 13ff54f..2442040 100644
|
||||||
--- a/linux-user/ioctls.h
|
--- a/linux-user/ioctls.h
|
||||||
+++ b/linux-user/ioctls.h
|
+++ b/linux-user/ioctls.h
|
||||||
@@ -310,7 +310,7 @@
|
@@ -317,7 +317,7 @@
|
||||||
IOCTL(LOOP_CLR_FD, 0, TYPE_INT)
|
IOCTL(LOOP_CLR_FD, 0, TYPE_INT)
|
||||||
IOCTL(LOOP_SET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
|
IOCTL(LOOP_SET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
|
||||||
IOCTL(LOOP_GET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
|
IOCTL(LOOP_GET_STATUS, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info)))
|
||||||
@ -21,5 +21,5 @@ index aee5a88..a0fb052 100644
|
|||||||
IOCTL(LOOP_GET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
|
IOCTL(LOOP_GET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
|
||||||
#endif
|
#endif
|
||||||
--
|
--
|
||||||
1.6.2.1
|
1.7.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,205 +0,0 @@
|
|||||||
From 99759e033ea960b86828657682f8382538c4ccb7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Tue, 14 Apr 2009 16:52:51 +0200
|
|
||||||
Subject: [PATCH 15/33] pcap network emulation
|
|
||||||
|
|
||||||
Implements network emulation using libpcap; useful for direct Ethernet access.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
Makefile.target | 3 ++
|
|
||||||
configure | 7 ++++
|
|
||||||
net.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
qemu-options.hx | 4 ++
|
|
||||||
4 files changed, 122 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile.target b/Makefile.target
|
|
||||||
index f9cd42a..9c9304c 100644
|
|
||||||
--- a/Makefile.target
|
|
||||||
+++ b/Makefile.target
|
|
||||||
@@ -618,6 +618,9 @@ endif
|
|
||||||
ifdef CONFIG_SLIRP
|
|
||||||
CPPFLAGS+=-I$(SRC_PATH)/slirp
|
|
||||||
endif
|
|
||||||
+ifdef CONFIG_PCAP
|
|
||||||
+LIBS+=-lpcap
|
|
||||||
+endif
|
|
||||||
|
|
||||||
# specific flags are needed for non soft mmu emulator
|
|
||||||
ifdef CONFIG_STATIC
|
|
||||||
diff --git a/configure b/configure
|
|
||||||
index cac4198..4ce7bc1 100755
|
|
||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -169,6 +169,7 @@ mingw32="no"
|
|
||||||
EXESUF=""
|
|
||||||
slirp="yes"
|
|
||||||
vde="yes"
|
|
||||||
+pcap="yes"
|
|
||||||
fmod_lib=""
|
|
||||||
fmod_inc=""
|
|
||||||
oss_lib=""
|
|
||||||
@@ -432,6 +433,8 @@ for opt do
|
|
||||||
;;
|
|
||||||
--disable-vde) vde="no"
|
|
||||||
;;
|
|
||||||
+ --disable-pcap) pcap="no"
|
|
||||||
+ ;;
|
|
||||||
--disable-kqemu) kqemu="no"
|
|
||||||
;;
|
|
||||||
--disable-xen) xen="no"
|
|
||||||
@@ -1598,6 +1601,10 @@ if test "$vde" = "yes" ; then
|
|
||||||
echo "#define CONFIG_VDE 1" >> $config_host_h
|
|
||||||
echo "VDE_LIBS=-lvdeplug" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
+if test "$pcap" = "yes" ; then
|
|
||||||
+ echo "CONFIG_PCAP=yes" >> $config_host_mak
|
|
||||||
+ echo "#define CONFIG_PCAP 1" >> $config_host_h
|
|
||||||
+fi
|
|
||||||
for card in $audio_card_list; do
|
|
||||||
def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'`
|
|
||||||
echo "$def=y" >> $config_host_mak
|
|
||||||
diff --git a/net.c b/net.c
|
|
||||||
index 3d3829d..595f7bc 100644
|
|
||||||
--- a/net.c
|
|
||||||
+++ b/net.c
|
|
||||||
@@ -1264,6 +1264,105 @@ void do_info_usernet(Monitor *mon)
|
|
||||||
|
|
||||||
#endif /* CONFIG_SLIRP */
|
|
||||||
|
|
||||||
+#if defined(CONFIG_PCAP)
|
|
||||||
+#include <pcap.h>
|
|
||||||
+typedef struct PCAPState {
|
|
||||||
+ VLANClientState *vc;
|
|
||||||
+ pcap_t *handle;
|
|
||||||
+} PCAPState;
|
|
||||||
+
|
|
||||||
+static ssize_t pcap_receive(VLANClientState *vc, const uint8_t *buf, size_t size)
|
|
||||||
+{
|
|
||||||
+ PCAPState *s = (PCAPState *)(vc->opaque);
|
|
||||||
+
|
|
||||||
+ pcap_sendpacket(s->handle, (u_char*)buf, size);
|
|
||||||
+ return size;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void pcap_callback(u_char *user, struct pcap_pkthdr *phdr, u_char *pdata)
|
|
||||||
+{
|
|
||||||
+ VLANClientState *vc = (VLANClientState *)user;
|
|
||||||
+
|
|
||||||
+ qemu_send_packet(vc, pdata, phdr->len);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void pcap_send(void *opaque)
|
|
||||||
+{
|
|
||||||
+ PCAPState *s = (PCAPState *)opaque;
|
|
||||||
+
|
|
||||||
+ pcap_dispatch(s->handle, 1, (pcap_handler)&pcap_callback, (u_char *)s->vc);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int net_pcap_init(VLANState *vlan, const char *model, const char *name, char *ifname)
|
|
||||||
+{
|
|
||||||
+ PCAPState *s;
|
|
||||||
+ char errbuf[PCAP_ERRBUF_SIZE];
|
|
||||||
+ int fd;
|
|
||||||
+
|
|
||||||
+ s = qemu_mallocz(sizeof(PCAPState));
|
|
||||||
+ if (!s)
|
|
||||||
+ return -1;
|
|
||||||
+
|
|
||||||
+ if (ifname == NULL && (ifname = pcap_lookupdev(errbuf)) == NULL) {
|
|
||||||
+ fprintf(stderr, "qemu: pcap_lookupdev: %s\n", errbuf);
|
|
||||||
+ goto fail;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Attempt to connect device. */
|
|
||||||
+ s->handle = (void*)pcap_open_live(ifname, 65535, 1, 0, errbuf);
|
|
||||||
+ if (!s->handle) {
|
|
||||||
+ fprintf(stderr, "qemu: pcap_open_live: %s\n", errbuf);
|
|
||||||
+ goto fail;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Check non-blocking mode. */
|
|
||||||
+ if (pcap_setnonblock(s->handle, 1, errbuf) < 0) {
|
|
||||||
+ fprintf(stderr, "qemu: pcap_setnonblock: %s\n", errbuf);
|
|
||||||
+ goto fail;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+#if defined(BIOCSHDRCMPLT)
|
|
||||||
+ /*
|
|
||||||
+ * Tell the kernel that the header is fully-formed when it gets it.
|
|
||||||
+ * This is required in order to fake the src address.
|
|
||||||
+ */
|
|
||||||
+ {
|
|
||||||
+ unsigned int one = 1;
|
|
||||||
+ ioctl(pcap_fileno(s->handle), BIOCSHDRCMPLT, &one);
|
|
||||||
+ }
|
|
||||||
+#endif /* BIOCSHDRCMPLT */
|
|
||||||
+
|
|
||||||
+#if defined(BIOCIMMEDIATE)
|
|
||||||
+ /*
|
|
||||||
+ * Tell the kernel that the packet has to be processed immediately.
|
|
||||||
+ */
|
|
||||||
+ {
|
|
||||||
+ unsigned int one = 1;
|
|
||||||
+ ioctl(pcap_fileno(s->handle), BIOCIMMEDIATE, &one);
|
|
||||||
+ }
|
|
||||||
+#endif /* BIOCIMMEDIATE */
|
|
||||||
+
|
|
||||||
+ s->vc = qemu_new_vlan_client(vlan, model, name, NULL, pcap_receive, NULL, NULL, s);
|
|
||||||
+ snprintf(s->vc->info_str, sizeof(s->vc->info_str), "pcap redirector");
|
|
||||||
+ if ((fd = pcap_get_selectable_fd(s->handle)) < 0) {
|
|
||||||
+ fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
|
|
||||||
+ goto fail;
|
|
||||||
+ }
|
|
||||||
+ qemu_set_fd_handler(fd, pcap_send, NULL, s);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+fail:
|
|
||||||
+ if (s) {
|
|
||||||
+ if (s->handle)
|
|
||||||
+ pcap_close(s->handle);
|
|
||||||
+ qemu_free(s);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return -1;
|
|
||||||
+}
|
|
||||||
+#endif /* CONFIG_PCAP */
|
|
||||||
+
|
|
||||||
#if !defined(_WIN32)
|
|
||||||
|
|
||||||
typedef struct TAPState {
|
|
||||||
@@ -2631,6 +2730,15 @@ int net_client_init(Monitor *mon, const char *device, const char *p)
|
|
||||||
ret = 0;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
+#ifdef CONFIG_PCAP
|
|
||||||
+ if (!strcmp(device, "pcap")) {
|
|
||||||
+ char ifname[64];
|
|
||||||
+ if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0)
|
|
||||||
+ ret = net_pcap_init(vlan, device, name, NULL);
|
|
||||||
+ else
|
|
||||||
+ ret = net_pcap_init(vlan, device, name, ifname);
|
|
||||||
+ } else
|
|
||||||
+#endif
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (!strcmp(device, "tap")) {
|
|
||||||
static const char * const tap_params[] = {
|
|
||||||
diff --git a/qemu-options.hx b/qemu-options.hx
|
|
||||||
index a58287c..4d46d6c 100644
|
|
||||||
--- a/qemu-options.hx
|
|
||||||
+++ b/qemu-options.hx
|
|
||||||
@@ -801,6 +801,10 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
|
|
||||||
" default of 'sndbuf=1048576' can be disabled using 'sndbuf=0'\n"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
+#ifdef CONFIG_PCAP
|
|
||||||
+ "-net pcap[,vlan=n][,ifname=name]\n"
|
|
||||||
+ " connect the host network interface using PCAP to VLAN 'n'\n"
|
|
||||||
+#endif
|
|
||||||
"-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]\n"
|
|
||||||
" connect the vlan 'n' to another VLAN using a socket connection\n"
|
|
||||||
"-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]\n"
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
58
0016-fix-mipsn32-linux-user-builds.patch
Normal file
58
0016-fix-mipsn32-linux-user-builds.patch
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
From 4569b209989e09bdebcb6cce809b3fed0f94142c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
|
Date: Wed, 25 Aug 2010 14:23:43 +0200
|
||||||
|
Subject: [PATCH 16/17] fix mipsn32*-linux-user builds
|
||||||
|
|
||||||
|
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
||||||
|
---
|
||||||
|
configure | 2 ++
|
||||||
|
default-configs/mipsn32-linux-user.mak | 1 +
|
||||||
|
default-configs/mipsn32el-linux-user.mak | 1 +
|
||||||
|
linux-user/mipsn32/syscall.h | 3 ++-
|
||||||
|
4 files changed, 6 insertions(+), 1 deletions(-)
|
||||||
|
create mode 100644 default-configs/mipsn32-linux-user.mak
|
||||||
|
create mode 100644 default-configs/mipsn32el-linux-user.mak
|
||||||
|
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index bd1484b..6513d91 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -1010,6 +1010,8 @@ m68k-linux-user \
|
||||||
|
microblaze-linux-user \
|
||||||
|
mips-linux-user \
|
||||||
|
mipsel-linux-user \
|
||||||
|
+mipsn32-linux-user \
|
||||||
|
+mipsn32el-linux-user \
|
||||||
|
ppc-linux-user \
|
||||||
|
ppc64-linux-user \
|
||||||
|
ppc64abi32-linux-user \
|
||||||
|
diff --git a/default-configs/mipsn32-linux-user.mak b/default-configs/mipsn32-linux-user.mak
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..31df570
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/default-configs/mipsn32-linux-user.mak
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+# Default configuration for mips-linux-user
|
||||||
|
diff --git a/default-configs/mipsn32el-linux-user.mak b/default-configs/mipsn32el-linux-user.mak
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..4d0e4af
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/default-configs/mipsn32el-linux-user.mak
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+# Default configuration for mipsel-linux-user
|
||||||
|
diff --git a/linux-user/mipsn32/syscall.h b/linux-user/mipsn32/syscall.h
|
||||||
|
index 4ec506c..beeeb3c 100644
|
||||||
|
--- a/linux-user/mipsn32/syscall.h
|
||||||
|
+++ b/linux-user/mipsn32/syscall.h
|
||||||
|
@@ -216,6 +216,7 @@ struct target_pt_regs {
|
||||||
|
#undef TARGET_ENOTRECOVERABLE
|
||||||
|
#define TARGET_ENOTRECOVERABLE 166 /* State not recoverable */
|
||||||
|
|
||||||
|
-
|
||||||
|
+/* Nasty hack: define a fake errno value for use by sigreturn. */
|
||||||
|
+#define TARGET_QEMU_ESIGRETURN 255
|
||||||
|
|
||||||
|
#define UNAME_MACHINE "mips64"
|
||||||
|
--
|
||||||
|
1.7.1
|
||||||
|
|
129
0017-S-390-build-fix.patch
Normal file
129
0017-S-390-build-fix.patch
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
From 024f781ab4af31ba5e14882b5661d4586ae26988 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ulrich Hecht <uli@suse.de>
|
||||||
|
Date: Wed, 9 Feb 2011 18:35:21 +0100
|
||||||
|
Subject: [PATCH 17/17] S/390 build fix
|
||||||
|
|
||||||
|
---
|
||||||
|
target-s390x/op_helper.c | 22 +++++++++++-----------
|
||||||
|
target-s390x/translate.c | 2 +-
|
||||||
|
2 files changed, 12 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/target-s390x/op_helper.c b/target-s390x/op_helper.c
|
||||||
|
index 20c83c5..46b71fc 100644
|
||||||
|
--- a/target-s390x/op_helper.c
|
||||||
|
+++ b/target-s390x/op_helper.c
|
||||||
|
@@ -738,7 +738,7 @@ uint32_t HELPER(tmxx)(uint64_t val, uint32_t mask)
|
||||||
|
uint32_t HELPER(abs_i32)(uint32_t reg, int32_t val)
|
||||||
|
{
|
||||||
|
uint32_t cc;
|
||||||
|
- if (val == 0x80000000UL) cc = 3;
|
||||||
|
+ if ((uint32_t)val == 0x80000000UL) cc = 3;
|
||||||
|
else if (val) cc = 1;
|
||||||
|
else cc = 0;
|
||||||
|
|
||||||
|
@@ -996,7 +996,7 @@ uint32_t HELPER(slbg)(uint32_t cc, uint32_t r1, uint64_t v1, uint64_t v2)
|
||||||
|
/* condition codes for binary FP ops */
|
||||||
|
static uint32_t set_cc_f32(float32 v1, float32 v2)
|
||||||
|
{
|
||||||
|
- if (float32_is_nan(v1) || float32_is_nan(v2)) return 3;
|
||||||
|
+ if (float32_is_any_nan(v1) || float32_is_any_nan(v2)) return 3;
|
||||||
|
else if (float32_eq(v1, v2, &env->fpu_status)) return 0;
|
||||||
|
else if (float32_lt(v1, v2, &env->fpu_status)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1004,7 +1004,7 @@ static uint32_t set_cc_f32(float32 v1, float32 v2)
|
||||||
|
|
||||||
|
static uint32_t set_cc_f64(float64 v1, float64 v2)
|
||||||
|
{
|
||||||
|
- if (float64_is_nan(v1) || float64_is_nan(v2)) return 3;
|
||||||
|
+ if (float64_is_any_nan(v1) || float64_is_any_nan(v2)) return 3;
|
||||||
|
else if (float64_eq(v1, v2, &env->fpu_status)) return 0;
|
||||||
|
else if (float64_lt(v1, v2, &env->fpu_status)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1013,7 +1013,7 @@ static uint32_t set_cc_f64(float64 v1, float64 v2)
|
||||||
|
/* condition codes for unary FP ops */
|
||||||
|
static uint32_t set_cc_nz_f32(float32 v)
|
||||||
|
{
|
||||||
|
- if (float32_is_nan(v)) return 3;
|
||||||
|
+ if (float32_is_any_nan(v)) return 3;
|
||||||
|
else if (float32_is_zero(v)) return 0;
|
||||||
|
else if (float32_is_neg(v)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1021,7 +1021,7 @@ static uint32_t set_cc_nz_f32(float32 v)
|
||||||
|
|
||||||
|
static uint32_t set_cc_nz_f64(float64 v)
|
||||||
|
{
|
||||||
|
- if (float64_is_nan(v)) return 3;
|
||||||
|
+ if (float64_is_any_nan(v)) return 3;
|
||||||
|
else if (float64_is_zero(v)) return 0;
|
||||||
|
else if (float64_is_neg(v)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1029,7 +1029,7 @@ static uint32_t set_cc_nz_f64(float64 v)
|
||||||
|
|
||||||
|
static uint32_t set_cc_nz_f128(float128 v)
|
||||||
|
{
|
||||||
|
- if (float128_is_nan(v)) return 3;
|
||||||
|
+ if (float128_is_any_nan(v)) return 3;
|
||||||
|
else if (float128_is_zero(v)) return 0;
|
||||||
|
else if (float128_is_neg(v)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1350,7 +1350,7 @@ uint32_t HELPER(cxbr)(uint32_t f1, uint32_t f2)
|
||||||
|
CPU_QuadU v2;
|
||||||
|
v2.ll.upper = env->fregs[f2].ll;
|
||||||
|
v2.ll.lower = env->fregs[f2 + 2].ll;
|
||||||
|
- if (float128_is_nan(v1.q) || float128_is_nan(v2.q)) return 3;
|
||||||
|
+ if (float128_is_any_nan(v1.q) || float128_is_any_nan(v2.q)) return 3;
|
||||||
|
else if (float128_eq(v1.q, v2.q, &env->fpu_status)) return 0;
|
||||||
|
else if (float128_lt(v1.q, v2.q, &env->fpu_status)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1463,7 +1463,7 @@ uint32_t HELPER(cgxbr)(uint32_t r1, uint32_t f2, uint32_t m3)
|
||||||
|
v2.ll.lower = env->fregs[f2 + 2].ll;
|
||||||
|
set_round_mode(m3);
|
||||||
|
env->regs[r1] = float128_to_int64(v2.q, &env->fpu_status);
|
||||||
|
- if (float128_is_nan(v2.q)) return 3;
|
||||||
|
+ if (float128_is_any_nan(v2.q)) return 3;
|
||||||
|
else if (float128_is_zero(v2.q)) return 0;
|
||||||
|
else if (float128_is_neg(v2.q)) return 1;
|
||||||
|
else return 2;
|
||||||
|
@@ -1611,7 +1611,7 @@ uint32_t HELPER(tceb)(uint32_t f1, uint64_t m2)
|
||||||
|
HELPER_LOG("%s: v1 0x%lx m2 0x%lx neg %d\n", __FUNCTION__, v1, m2, neg);
|
||||||
|
if (float32_is_zero(v1) && (m2 & (1 << (11-neg)))) cc = 1;
|
||||||
|
else if (float32_is_infinity(v1) && (m2 & (1 << (5-neg)))) cc = 1;
|
||||||
|
- else if (float32_is_nan(v1) && (m2 & (1 << (3-neg)))) cc = 1;
|
||||||
|
+ else if (float32_is_quiet_nan(v1) && (m2 & (1 << (3-neg)))) cc = 1;
|
||||||
|
else if (float32_is_signaling_nan(v1) && (m2 & (1 << (1-neg)))) cc = 1;
|
||||||
|
else /* assume normalized number */ if (m2 & (1 << (9-neg))) cc = 1;
|
||||||
|
/* FIXME: denormalized? */
|
||||||
|
@@ -1627,7 +1627,7 @@ uint32_t HELPER(tcdb)(uint32_t f1, uint64_t m2)
|
||||||
|
HELPER_LOG("%s: v1 0x%lx m2 0x%lx neg %d\n", __FUNCTION__, v1, m2, neg);
|
||||||
|
if (float64_is_zero(v1) && (m2 & (1 << (11-neg)))) cc = 1;
|
||||||
|
else if (float64_is_infinity(v1) && (m2 & (1 << (5-neg)))) cc = 1;
|
||||||
|
- else if (float64_is_nan(v1) && (m2 & (1 << (3-neg)))) cc = 1;
|
||||||
|
+ else if (float64_is_quiet_nan(v1) && (m2 & (1 << (3-neg)))) cc = 1;
|
||||||
|
else if (float64_is_signaling_nan(v1) && (m2 & (1 << (1-neg)))) cc = 1;
|
||||||
|
else /* assume normalized number */ if (m2 & (1 << (9-neg))) cc = 1;
|
||||||
|
/* FIXME: denormalized? */
|
||||||
|
@@ -1645,7 +1645,7 @@ uint32_t HELPER(tcxb)(uint32_t f1, uint64_t m2)
|
||||||
|
int neg = float128_is_neg(v1.q);
|
||||||
|
if (float128_is_zero(v1.q) && (m2 & (1 << (11-neg)))) cc = 1;
|
||||||
|
else if (float128_is_infinity(v1.q) && (m2 & (1 << (5-neg)))) cc = 1;
|
||||||
|
- else if (float128_is_nan(v1.q) && (m2 & (1 << (3-neg)))) cc = 1;
|
||||||
|
+ else if (float128_is_quiet_nan(v1.q) && (m2 & (1 << (3-neg)))) cc = 1;
|
||||||
|
else if (float128_is_signaling_nan(v1.q) && (m2 & (1 << (1-neg)))) cc = 1;
|
||||||
|
else /* assume normalized number */ if (m2 & (1 << (9-neg))) cc = 1;
|
||||||
|
/* FIXME: denormalized? */
|
||||||
|
diff --git a/target-s390x/translate.c b/target-s390x/translate.c
|
||||||
|
index e08dcf4..189a60b 100644
|
||||||
|
--- a/target-s390x/translate.c
|
||||||
|
+++ b/target-s390x/translate.c
|
||||||
|
@@ -67,7 +67,7 @@ void cpu_dump_state(CPUState *env, FILE *f, fprintf_function cpu_fprintf,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
- cpu_fprintf(f, "F%02d=%016lx", i, (long)env->fregs[i].i);
|
||||||
|
+ cpu_fprintf(f, "F%02d=%016lx", i, (long)env->fregs[i].ll);
|
||||||
|
if ((i % 4) == 3) {
|
||||||
|
cpu_fprintf(f, "\n");
|
||||||
|
} else {
|
||||||
|
--
|
||||||
|
1.7.1
|
||||||
|
|
@ -1,116 +0,0 @@
|
|||||||
From 015bd9be8314b3ce6d97d1bc9614874aee9b0e52 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Wed, 17 Jun 2009 15:08:38 +0200
|
|
||||||
Subject: [PATCH 18/33] qemu-0.11-git-user-linux-ppc-uid16_fix
|
|
||||||
|
|
||||||
---
|
|
||||||
linux-user/ppc/syscall_nr.h | 30 +++++++++++++++---------------
|
|
||||||
linux-user/syscall_defs.h | 2 +-
|
|
||||||
2 files changed, 16 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/ppc/syscall_nr.h b/linux-user/ppc/syscall_nr.h
|
|
||||||
index f54276b..cc84a4c 100644
|
|
||||||
--- a/linux-user/ppc/syscall_nr.h
|
|
||||||
+++ b/linux-user/ppc/syscall_nr.h
|
|
||||||
@@ -17,15 +17,15 @@
|
|
||||||
#define TARGET_NR_time 13
|
|
||||||
#define TARGET_NR_mknod 14
|
|
||||||
#define TARGET_NR_chmod 15
|
|
||||||
-#define TARGET_NR_lchown32 16
|
|
||||||
+#define TARGET_NR_lchown 16
|
|
||||||
#define TARGET_NR_break 17
|
|
||||||
#define TARGET_NR_oldstat 18
|
|
||||||
#define TARGET_NR_lseek 19
|
|
||||||
#define TARGET_NR_getpid 20
|
|
||||||
#define TARGET_NR_mount 21
|
|
||||||
#define TARGET_NR_umount 22
|
|
||||||
-#define TARGET_NR_setuid32 23
|
|
||||||
-#define TARGET_NR_getuid32 24
|
|
||||||
+#define TARGET_NR_setuid 23
|
|
||||||
+#define TARGET_NR_getuid 24
|
|
||||||
#define TARGET_NR_stime 25
|
|
||||||
#define TARGET_NR_ptrace 26
|
|
||||||
#define TARGET_NR_alarm 27
|
|
||||||
@@ -47,11 +47,11 @@
|
|
||||||
#define TARGET_NR_times 43
|
|
||||||
#define TARGET_NR_prof 44
|
|
||||||
#define TARGET_NR_brk 45
|
|
||||||
-#define TARGET_NR_setgid32 46
|
|
||||||
-#define TARGET_NR_getgid32 47
|
|
||||||
+#define TARGET_NR_setgid 46
|
|
||||||
+#define TARGET_NR_getgid 47
|
|
||||||
#define TARGET_NR_signal 48
|
|
||||||
-#define TARGET_NR_geteuid32 49
|
|
||||||
-#define TARGET_NR_getegid32 50
|
|
||||||
+#define TARGET_NR_geteuid 49
|
|
||||||
+#define TARGET_NR_getegid 50
|
|
||||||
#define TARGET_NR_acct 51
|
|
||||||
#define TARGET_NR_umount2 52
|
|
||||||
#define TARGET_NR_lock 53
|
|
||||||
@@ -71,8 +71,8 @@
|
|
||||||
#define TARGET_NR_sigaction 67
|
|
||||||
#define TARGET_NR_sgetmask 68
|
|
||||||
#define TARGET_NR_ssetmask 69
|
|
||||||
-#define TARGET_NR_setreuid32 70
|
|
||||||
-#define TARGET_NR_setregid32 71
|
|
||||||
+#define TARGET_NR_setreuid 70
|
|
||||||
+#define TARGET_NR_setregid 71
|
|
||||||
#define TARGET_NR_sigsuspend 72
|
|
||||||
#define TARGET_NR_sigpending 73
|
|
||||||
#define TARGET_NR_sethostname 74
|
|
||||||
@@ -81,8 +81,8 @@
|
|
||||||
#define TARGET_NR_getrusage 77
|
|
||||||
#define TARGET_NR_gettimeofday 78
|
|
||||||
#define TARGET_NR_settimeofday 79
|
|
||||||
-#define TARGET_NR_getgroups32 80
|
|
||||||
-#define TARGET_NR_setgroups32 81
|
|
||||||
+#define TARGET_NR_getgroups 80
|
|
||||||
+#define TARGET_NR_setgroups 81
|
|
||||||
#define TARGET_NR_select 82
|
|
||||||
#define TARGET_NR_symlink 83
|
|
||||||
#define TARGET_NR_oldlstat 84
|
|
||||||
@@ -96,7 +96,7 @@
|
|
||||||
#define TARGET_NR_truncate 92
|
|
||||||
#define TARGET_NR_ftruncate 93
|
|
||||||
#define TARGET_NR_fchmod 94
|
|
||||||
-#define TARGET_NR_fchown32 95
|
|
||||||
+#define TARGET_NR_fchown 95
|
|
||||||
#define TARGET_NR_getpriority 96
|
|
||||||
#define TARGET_NR_setpriority 97
|
|
||||||
#define TARGET_NR_profil 98
|
|
||||||
@@ -139,8 +139,8 @@
|
|
||||||
#define TARGET_NR_sysfs 135
|
|
||||||
#define TARGET_NR_personality 136
|
|
||||||
#define TARGET_NR_afs_syscall 137 /* Syscall for Andrew File System */
|
|
||||||
-#define TARGET_NR_setfsuid32 138
|
|
||||||
-#define TARGET_NR_setfsgid32 139
|
|
||||||
+#define TARGET_NR_setfsuid 138
|
|
||||||
+#define TARGET_NR_setfsgid 139
|
|
||||||
#define TARGET_NR__llseek 140
|
|
||||||
#define TARGET_NR_getdents 141
|
|
||||||
#define TARGET_NR__newselect 142
|
|
||||||
@@ -182,7 +182,7 @@
|
|
||||||
#define TARGET_NR_rt_sigsuspend 178
|
|
||||||
#define TARGET_NR_pread64 179
|
|
||||||
#define TARGET_NR_pwrite64 180
|
|
||||||
-#define TARGET_NR_chown32 181
|
|
||||||
+#define TARGET_NR_chown 181
|
|
||||||
#define TARGET_NR_getcwd 182
|
|
||||||
#define TARGET_NR_capget 183
|
|
||||||
#define TARGET_NR_capset 184
|
|
||||||
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
|
||||||
index 78c6488..0cbe396 100644
|
|
||||||
--- a/linux-user/syscall_defs.h
|
|
||||||
+++ b/linux-user/syscall_defs.h
|
|
||||||
@@ -49,7 +49,7 @@
|
|
||||||
#define TARGET_IOC_TYPEBITS 8
|
|
||||||
|
|
||||||
#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
|
|
||||||
- || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
|
|
||||||
+ || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS) || defined(TARGET_PPC)
|
|
||||||
/* 16 bit uid wrappers emulation */
|
|
||||||
#define USE_UID16
|
|
||||||
#endif
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
|||||||
From d7f01e455acae19ef780e29417ffba50ca90ffde Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kirill A. Shutemov <kirill@shutemov.name>
|
|
||||||
Date: Wed, 17 Jun 2009 15:14:43 +0200
|
|
||||||
Subject: [PATCH 19/33] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets
|
|
||||||
|
|
||||||
From: Kirill A. Shutemov <kirill@shutemov.name>
|
|
||||||
|
|
||||||
qemu's page table can be incomple if /proc/self/maps is unavailable or
|
|
||||||
host allocating a memory with mmap(), so we can't use it to find free
|
|
||||||
memory area.
|
|
||||||
|
|
||||||
New version mmap_find_vma() uses mmap() without MAP_FIXED to find free
|
|
||||||
memory.
|
|
||||||
|
|
||||||
From: Kirill A. Shutemov <kirill@shutemov.name>
|
|
||||||
|
|
||||||
Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>
|
|
||||||
Signed-off-by: Riku Voipio <riku.voipio@iki.fi>
|
|
||||||
---
|
|
||||||
linux-user/mmap.c | 79 +++++++++++++++++++++++++++++------------------------
|
|
||||||
1 files changed, 43 insertions(+), 36 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
|
|
||||||
index 9ca8f6f..8d94783 100644
|
|
||||||
--- a/linux-user/mmap.c
|
|
||||||
+++ b/linux-user/mmap.c
|
|
||||||
@@ -277,52 +277,59 @@ static abi_ulong mmap_next_start = 0x40000000;
|
|
||||||
|
|
||||||
unsigned long last_brk;
|
|
||||||
|
|
||||||
-/* find a free memory area of size 'size'. The search starts at
|
|
||||||
- 'start'. If 'start' == 0, then a default start address is used.
|
|
||||||
- Return -1 if error.
|
|
||||||
-*/
|
|
||||||
-/* page_init() marks pages used by the host as reserved to be sure not
|
|
||||||
- to use them. */
|
|
||||||
+/*
|
|
||||||
+ * Find and reserve a free memory area of size 'size'. The search
|
|
||||||
+ * starts at 'start'.
|
|
||||||
+ * It must be called with mmap_lock() held.
|
|
||||||
+ * Return -1 if error.
|
|
||||||
+ */
|
|
||||||
abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
|
|
||||||
{
|
|
||||||
- abi_ulong addr, addr1, addr_start;
|
|
||||||
- int prot;
|
|
||||||
- unsigned long new_brk;
|
|
||||||
-
|
|
||||||
- new_brk = (unsigned long)sbrk(0);
|
|
||||||
- if (last_brk && last_brk < new_brk && last_brk == (target_ulong)last_brk) {
|
|
||||||
- /* This is a hack to catch the host allocating memory with brk().
|
|
||||||
- If it uses mmap then we loose.
|
|
||||||
- FIXME: We really want to avoid the host allocating memory in
|
|
||||||
- the first place, and maybe leave some slack to avoid switching
|
|
||||||
- to mmap. */
|
|
||||||
- page_set_flags(last_brk & TARGET_PAGE_MASK,
|
|
||||||
- TARGET_PAGE_ALIGN(new_brk),
|
|
||||||
- PAGE_RESERVED);
|
|
||||||
- }
|
|
||||||
- last_brk = new_brk;
|
|
||||||
+ void *ptr;
|
|
||||||
+ abi_ulong addr;
|
|
||||||
|
|
||||||
size = HOST_PAGE_ALIGN(size);
|
|
||||||
- start = start & qemu_host_page_mask;
|
|
||||||
+ start &= qemu_host_page_mask;
|
|
||||||
+
|
|
||||||
+ /* If 'start' == 0, then a default start address is used. */
|
|
||||||
+ if (start == 0)
|
|
||||||
+ start = mmap_next_start;
|
|
||||||
+
|
|
||||||
addr = start;
|
|
||||||
- if (addr == 0)
|
|
||||||
- addr = mmap_next_start;
|
|
||||||
- addr_start = addr;
|
|
||||||
+
|
|
||||||
for(;;) {
|
|
||||||
- prot = 0;
|
|
||||||
- for(addr1 = addr; addr1 < (addr + size); addr1 += TARGET_PAGE_SIZE) {
|
|
||||||
- prot |= page_get_flags(addr1);
|
|
||||||
- }
|
|
||||||
- if (prot == 0)
|
|
||||||
+ /*
|
|
||||||
+ * Reserve needed memory area to avoid a race.
|
|
||||||
+ * It should be discarded using:
|
|
||||||
+ * - mmap() with MAP_FIXED flag
|
|
||||||
+ * - mremap() with MREMAP_FIXED flag
|
|
||||||
+ * - shmat() with SHM_REMAP flag
|
|
||||||
+ */
|
|
||||||
+ ptr = mmap((void *)(unsigned long)addr, size, PROT_NONE,
|
|
||||||
+ MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE, -1, 0);
|
|
||||||
+
|
|
||||||
+ /* ENOMEM, if host address space has no memory */
|
|
||||||
+ if (ptr == MAP_FAILED)
|
|
||||||
+ return (abi_ulong)-1;
|
|
||||||
+
|
|
||||||
+ /* If address fits target address space we've found what we need */
|
|
||||||
+ if ((unsigned long)ptr + size - 1 <= (abi_ulong)-1)
|
|
||||||
break;
|
|
||||||
+
|
|
||||||
+ /* Unmap and try again with new page */
|
|
||||||
+ munmap(ptr, size);
|
|
||||||
addr += qemu_host_page_size;
|
|
||||||
- /* we found nothing */
|
|
||||||
- if (addr == addr_start)
|
|
||||||
+
|
|
||||||
+ /* ENOMEM if we check whole of target address space */
|
|
||||||
+ if (addr == start)
|
|
||||||
return (abi_ulong)-1;
|
|
||||||
}
|
|
||||||
- if (start == 0)
|
|
||||||
- mmap_next_start = addr + size;
|
|
||||||
- return addr;
|
|
||||||
+
|
|
||||||
+ /* Update default start address */
|
|
||||||
+ if (start == mmap_next_start)
|
|
||||||
+ mmap_next_start = (unsigned long)ptr + size;
|
|
||||||
+
|
|
||||||
+ return h2g(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SNDRV_PCM_MMAP_OFFSET_STATUS 0x80000000
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
|||||||
From ea0b70265614b950d1e2ed48a9581ecd5e63ac97 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Fri, 24 Jul 2009 17:25:37 +0200
|
|
||||||
Subject: [PATCH 20/33] TCG "sync" op (32-bit targets fixed)
|
|
||||||
|
|
||||||
sync allows concurrent accesses to locations in memory through different TCG
|
|
||||||
variables. This comes in handy when you are emulating CPU registers that can
|
|
||||||
be used as either 32 or 64 bit, as TCG doesn't know anything about aliases.
|
|
||||||
See the s390x target for an example.
|
|
||||||
|
|
||||||
Fixed to not break 32-bit target builds.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
tcg/tcg-op.h | 12 ++++++++++++
|
|
||||||
tcg/tcg-opc.h | 2 ++
|
|
||||||
tcg/tcg.c | 6 ++++++
|
|
||||||
3 files changed, 20 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h
|
|
||||||
index 7cb6934..cfd6160 100644
|
|
||||||
--- a/tcg/tcg-op.h
|
|
||||||
+++ b/tcg/tcg-op.h
|
|
||||||
@@ -316,6 +316,18 @@ static inline void tcg_gen_br(int label)
|
|
||||||
tcg_gen_op1i(INDEX_op_br, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static inline void tcg_gen_sync_i32(TCGv_i32 arg)
|
|
||||||
+{
|
|
||||||
+ tcg_gen_op1_i32(INDEX_op_sync_i32, arg);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#if TCG_TARGET_REG_BITS == 64
|
|
||||||
+static inline void tcg_gen_sync_i64(TCGv_i64 arg)
|
|
||||||
+{
|
|
||||||
+ tcg_gen_op1_i64(INDEX_op_sync_i64, arg);
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_i32 arg)
|
|
||||||
{
|
|
||||||
if (!TCGV_EQUAL_I32(ret, arg))
|
|
||||||
diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h
|
|
||||||
index 3a095fc..654a45f 100644
|
|
||||||
--- a/tcg/tcg-opc.h
|
|
||||||
+++ b/tcg/tcg-opc.h
|
|
||||||
@@ -40,6 +40,7 @@ DEF2(call, 0, 1, 2, TCG_OPF_SIDE_EFFECTS) /* variable number of parameters */
|
|
||||||
DEF2(jmp, 0, 1, 0, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
|
|
||||||
DEF2(br, 0, 0, 1, TCG_OPF_BB_END | TCG_OPF_SIDE_EFFECTS)
|
|
||||||
|
|
||||||
+DEF2(sync_i32, 0, 1, 0, 0)
|
|
||||||
DEF2(mov_i32, 1, 1, 0, 0)
|
|
||||||
DEF2(movi_i32, 1, 0, 1, 0)
|
|
||||||
/* load/store */
|
|
||||||
@@ -103,6 +104,7 @@ DEF2(neg_i32, 1, 1, 0, 0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TCG_TARGET_REG_BITS == 64
|
|
||||||
+DEF2(sync_i64, 0, 1, 0, 0)
|
|
||||||
DEF2(mov_i64, 1, 1, 0, 0)
|
|
||||||
DEF2(movi_i64, 1, 0, 1, 0)
|
|
||||||
/* load/store */
|
|
||||||
diff --git a/tcg/tcg.c b/tcg/tcg.c
|
|
||||||
index 299bff6..86e16fa 100644
|
|
||||||
--- a/tcg/tcg.c
|
|
||||||
+++ b/tcg/tcg.c
|
|
||||||
@@ -1927,6 +1927,12 @@ static inline int tcg_gen_code_common(TCGContext *s, uint8_t *gen_code_buf,
|
|
||||||
// dump_regs(s);
|
|
||||||
#endif
|
|
||||||
switch(opc) {
|
|
||||||
+ case INDEX_op_sync_i32:
|
|
||||||
+#if TCG_TARGET_REG_BITS == 64
|
|
||||||
+ case INDEX_op_sync_i64:
|
|
||||||
+#endif
|
|
||||||
+ temp_save(s, args[0], s->reserved_regs);
|
|
||||||
+ break;
|
|
||||||
case INDEX_op_mov_i32:
|
|
||||||
#if TCG_TARGET_REG_BITS == 64
|
|
||||||
case INDEX_op_mov_i64:
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,127 +0,0 @@
|
|||||||
From fba6b2002b323519c4bb03079479de5bc3819642 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Fri, 24 Jul 2009 17:03:48 +0200
|
|
||||||
Subject: [PATCH 22/33] S/390 host/target build system support
|
|
||||||
|
|
||||||
changes to configure and makefiles for S/390 host and target support,
|
|
||||||
fixed as suggested by Juan Quintela
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
Makefile.target | 9 +++++++++
|
|
||||||
configure | 19 ++++++++++++++-----
|
|
||||||
2 files changed, 23 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Makefile.target b/Makefile.target
|
|
||||||
index 9c9304c..1080bf0 100644
|
|
||||||
--- a/Makefile.target
|
|
||||||
+++ b/Makefile.target
|
|
||||||
@@ -84,6 +84,9 @@ CPPFLAGS+=-I$(SRC_PATH)/tcg -I$(SRC_PATH)/tcg/$(ARCH)
|
|
||||||
ifeq ($(ARCH),sparc64)
|
|
||||||
CPPFLAGS+=-I$(SRC_PATH)/tcg/sparc
|
|
||||||
endif
|
|
||||||
+ifeq ($(ARCH),s390x)
|
|
||||||
+CPPFLAGS+=-I$(SRC_PATH)/tcg/s390
|
|
||||||
+endif
|
|
||||||
ifdef CONFIG_SOFTFLOAT
|
|
||||||
libobj-y += fpu/softfloat.o
|
|
||||||
else
|
|
||||||
@@ -211,6 +214,9 @@ endif
|
|
||||||
ifeq ($(ARCH),s390)
|
|
||||||
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
|
|
||||||
endif
|
|
||||||
+ifeq ($(ARCH),s390x)
|
|
||||||
+LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
|
|
||||||
+endif
|
|
||||||
|
|
||||||
ifeq ($(ARCH),sparc)
|
|
||||||
# -static is used to avoid g1/g3 usage by the dynamic linker
|
|
||||||
@@ -358,6 +364,9 @@ endif
|
|
||||||
ifeq ($(ARCH),s390)
|
|
||||||
LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
|
|
||||||
endif
|
|
||||||
+ifeq ($(ARCH),s390x)
|
|
||||||
+LDFLAGS+=-Wl,-T,$(SRC_PATH)/$(ARCH).ld
|
|
||||||
+endif
|
|
||||||
|
|
||||||
ifeq ($(ARCH),sparc)
|
|
||||||
# -static is used to avoid g1/g3 usage by the dynamic linker
|
|
||||||
diff --git a/configure b/configure
|
|
||||||
index 4f79498..e0874b5 100755
|
|
||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -146,9 +146,12 @@ case "$cpu" in
|
|
||||||
ppc64)
|
|
||||||
cpu="ppc64"
|
|
||||||
;;
|
|
||||||
- s390*)
|
|
||||||
+ s390)
|
|
||||||
cpu="s390"
|
|
||||||
;;
|
|
||||||
+ s390x)
|
|
||||||
+ cpu="s390x"
|
|
||||||
+ ;;
|
|
||||||
sparc|sun4[cdmuv])
|
|
||||||
cpu="sparc"
|
|
||||||
;;
|
|
||||||
@@ -745,6 +748,7 @@ sh4eb-linux-user \
|
|
||||||
sparc-linux-user \
|
|
||||||
sparc64-linux-user \
|
|
||||||
sparc32plus-linux-user \
|
|
||||||
+s390x-linux-user \
|
|
||||||
"
|
|
||||||
fi
|
|
||||||
# the following are Darwin specific
|
|
||||||
@@ -809,6 +813,7 @@ hostlongbits="32"
|
|
||||||
if test "$cpu" = "x86_64" \
|
|
||||||
-o "$cpu" = "alpha" \
|
|
||||||
-o "$cpu" = "ia64" \
|
|
||||||
+ -o "$cpu" = "s390x" \
|
|
||||||
-o "$cpu" = "sparc64" \
|
|
||||||
-o "$cpu" = "ppc64"; then
|
|
||||||
hostlongbits="64"
|
|
||||||
@@ -1499,10 +1504,10 @@ echo "EXESUF=$EXESUF" >> $config_host_mak
|
|
||||||
echo "PTHREADLIBS=$PTHREADLIBS" >> $config_host_mak
|
|
||||||
echo "CLOCKLIBS=$CLOCKLIBS" >> $config_host_mak
|
|
||||||
case "$cpu" in
|
|
||||||
- i386|x86_64|alpha|cris|hppa|ia64|m68k|microbaze|mips|mips64|ppc|ppc64|s390|sparc|sparc64)
|
|
||||||
+ i386|x86_64|alpha|cris|hppa|ia64|m68k|microblaze|mips|mips64|ppc|ppc64|s390|s390x|sparc|sparc64)
|
|
||||||
ARCH=$cpu
|
|
||||||
;;
|
|
||||||
- armv4b|arm4l)
|
|
||||||
+ armv4b|armv4l)
|
|
||||||
ARCH=arm
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
@@ -1837,7 +1842,7 @@ config_h=$target_dir/config.h
|
|
||||||
target_arch2=`echo $target | cut -d '-' -f 1`
|
|
||||||
target_bigendian="no"
|
|
||||||
case "$target_arch2" in
|
|
||||||
- armeb|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|sh4eb|sparc|sparc64|sparc32plus)
|
|
||||||
+ armeb|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus)
|
|
||||||
target_bigendian=yes
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1997,6 +2002,10 @@ case "$target_arch2" in
|
|
||||||
echo "TARGET_ABI32=y" >> $config_mak
|
|
||||||
target_phys_bits=64
|
|
||||||
;;
|
|
||||||
+ s390x)
|
|
||||||
+ target_nptl="yes"
|
|
||||||
+ target_phys_bits=64
|
|
||||||
+ ;;
|
|
||||||
*)
|
|
||||||
echo "Unsupported target CPU"
|
|
||||||
exit 1
|
|
||||||
@@ -2065,7 +2074,7 @@ fi
|
|
||||||
echo "TARGET_XML_FILES=$list" >> $config_mak
|
|
||||||
|
|
||||||
case "$target_arch2" in
|
|
||||||
- arm|armeb|m68k|microblaze|mips|mipsel|mipsn32|mipsn32el|mips64|mips64el|ppc|ppc64|ppc64abi32|ppcemb|sparc|sparc64|sparc32plus)
|
|
||||||
+ arm|armeb|m68k|microblaze|mips|mipsel|mipsn32|mipsn32el|mips64|mips64el|ppc|ppc64|ppc64abi32|ppcemb|s390x|sparc|sparc64|sparc32plus)
|
|
||||||
echo "CONFIG_SOFTFLOAT=y" >> $config_mak
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,96 +0,0 @@
|
|||||||
From 603d882c9c1c61475a69f657a9550bb335bf3ca9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Wed, 22 Jul 2009 14:03:19 +0200
|
|
||||||
Subject: [PATCH 25/33] linux-user: don't do locking in single-threaded processes
|
|
||||||
|
|
||||||
Skips setting the tb_lock if a process doesn't have more than one thread,
|
|
||||||
which is usually the case. Results in about 20% performance gain (measured
|
|
||||||
with the s390x target, but the effect should be similar with other targets).
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
cpu-defs.h | 8 ++++++++
|
|
||||||
cpu-exec.c | 14 ++++++++++++--
|
|
||||||
linux-user/syscall.c | 1 +
|
|
||||||
3 files changed, 21 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cpu-defs.h b/cpu-defs.h
|
|
||||||
index d73ec0a..27e5bb2 100644
|
|
||||||
--- a/cpu-defs.h
|
|
||||||
+++ b/cpu-defs.h
|
|
||||||
@@ -135,6 +135,13 @@ typedef struct CPUWatchpoint {
|
|
||||||
} CPUWatchpoint;
|
|
||||||
|
|
||||||
#define CPU_TEMP_BUF_NLONGS 128
|
|
||||||
+
|
|
||||||
+#ifdef CONFIG_USER_ONLY
|
|
||||||
+#define MULTITHREAD uint32_t multithreaded;
|
|
||||||
+#else
|
|
||||||
+#define MULTITHREAD
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#define CPU_COMMON \
|
|
||||||
struct TranslationBlock *current_tb; /* currently executing TB */ \
|
|
||||||
/* soft mmu support */ \
|
|
||||||
@@ -149,6 +156,7 @@ typedef struct CPUWatchpoint {
|
|
||||||
uint32_t stop; /* Stop request */ \
|
|
||||||
uint32_t stopped; /* Artificially stopped */ \
|
|
||||||
uint32_t interrupt_request; \
|
|
||||||
+ MULTITHREAD /* needs locking when accessing TBs */ \
|
|
||||||
volatile sig_atomic_t exit_request; \
|
|
||||||
/* The meaning of the MMU modes is defined in the target code. */ \
|
|
||||||
CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \
|
|
||||||
diff --git a/cpu-exec.c b/cpu-exec.c
|
|
||||||
index 855ea3e..1371ce4 100644
|
|
||||||
--- a/cpu-exec.c
|
|
||||||
+++ b/cpu-exec.c
|
|
||||||
@@ -219,6 +219,9 @@ int cpu_exec(CPUState *env1)
|
|
||||||
TranslationBlock *tb;
|
|
||||||
uint8_t *tc_ptr;
|
|
||||||
unsigned long next_tb;
|
|
||||||
+#ifdef CONFIG_USER_ONLY
|
|
||||||
+ uint32_t multithreaded;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (cpu_halted(env1) == EXCP_HALTED)
|
|
||||||
return EXCP_HALTED;
|
|
||||||
@@ -604,7 +607,11 @@ int cpu_exec(CPUState *env1)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
- spin_lock(&tb_lock);
|
|
||||||
+#ifdef CONFIG_USER_ONLY
|
|
||||||
+ multithreaded = env->multithreaded;
|
|
||||||
+ if (multithreaded)
|
|
||||||
+#endif
|
|
||||||
+ spin_lock(&tb_lock);
|
|
||||||
tb = tb_find_fast();
|
|
||||||
/* Note: we do it here to avoid a gcc bug on Mac OS X when
|
|
||||||
doing it in tb_find_slow */
|
|
||||||
@@ -632,7 +639,10 @@ int cpu_exec(CPUState *env1)
|
|
||||||
tb_add_jump((TranslationBlock *)(next_tb & ~3), next_tb & 3, tb);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- spin_unlock(&tb_lock);
|
|
||||||
+#ifdef CONFIG_USER_ONLY
|
|
||||||
+ if (multithreaded)
|
|
||||||
+#endif
|
|
||||||
+ spin_unlock(&tb_lock);
|
|
||||||
env->current_tb = tb;
|
|
||||||
|
|
||||||
/* cpu_interrupt might be called while translating the
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index e9b07df..f7a411d 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -3560,6 +3560,7 @@ static int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp,
|
|
||||||
ts = qemu_mallocz(sizeof(TaskState) + NEW_STACK_SIZE);
|
|
||||||
init_task_state(ts);
|
|
||||||
new_stack = ts->stack;
|
|
||||||
+ env->multithreaded = 1;
|
|
||||||
/* we create a new CPU instance. */
|
|
||||||
new_env = cpu_copy(env);
|
|
||||||
/* Init regs that differ from the parent. */
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
|||||||
From ad0b7fcf697651a156c0e4a2911dd9fa69fd011c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 23 Jul 2009 14:33:36 +0200
|
|
||||||
Subject: [PATCH 26/33] linux-user: dup3, fallocate syscalls
|
|
||||||
|
|
||||||
implementations of dup3 and fallocate that are good enough to fool LTP
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
configure | 18 ++++++++++++++++++
|
|
||||||
linux-user/syscall.c | 10 ++++++++++
|
|
||||||
2 files changed, 28 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/configure b/configure
|
|
||||||
index e0874b5..4be25f6 100755
|
|
||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -1355,6 +1355,21 @@ if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
|
|
||||||
splice=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
+# check for fallocate
|
|
||||||
+fallocate=no
|
|
||||||
+cat > $TMPC << EOF
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+
|
|
||||||
+int main(void)
|
|
||||||
+{
|
|
||||||
+ fallocate(0, 0, 0, 0);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+EOF
|
|
||||||
+if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
|
|
||||||
+ fallocate=yes
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
# Check if tools are available to build documentation.
|
|
||||||
if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then
|
|
||||||
build_docs="no"
|
|
||||||
@@ -1707,6 +1722,9 @@ fi
|
|
||||||
if test "$splice" = "yes" ; then
|
|
||||||
echo "#define CONFIG_SPLICE 1" >> $config_host_h
|
|
||||||
fi
|
|
||||||
+if test "$fallocate" = "yes" ; then
|
|
||||||
+ echo "#define CONFIG_FALLOCATE 1" >> $config_host_h
|
|
||||||
+fi
|
|
||||||
if test "$inotify" = "yes" ; then
|
|
||||||
echo "#define CONFIG_INOTIFY 1" >> $config_host_h
|
|
||||||
fi
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index f7a411d..4fb7998 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -4750,6 +4750,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
case TARGET_NR_dup2:
|
|
||||||
ret = get_errno(dup2(arg1, arg2));
|
|
||||||
break;
|
|
||||||
+#ifdef TARGET_NR_dup3
|
|
||||||
+ case TARGET_NR_dup3:
|
|
||||||
+ ret = get_errno(dup3(arg1, arg2, arg3));
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
#ifdef TARGET_NR_getppid /* not on alpha */
|
|
||||||
case TARGET_NR_getppid:
|
|
||||||
ret = get_errno(getppid());
|
|
||||||
@@ -7016,6 +7021,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if defined(CONFIG_FALLOCATE) && defined(TARGET_NR_fallocate)
|
|
||||||
+ case TARGET_NR_fallocate:
|
|
||||||
+ ret = get_errno(fallocate(arg1, arg2, arg3, arg4));
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
default:
|
|
||||||
unimplemented:
|
|
||||||
gemu_log("qemu: Unsupported syscall: %d\n", num);
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,171 +0,0 @@
|
|||||||
From e4f2e031fe5b5f9f11560a51ce607ffdd3090c05 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 23 Jul 2009 15:10:30 +0200
|
|
||||||
Subject: [PATCH 27/33] linux-user: fcntl fixes for LTP
|
|
||||||
|
|
||||||
Fixes swaps on l_pid which were pretty much of random size. Implements
|
|
||||||
F_SETLEASE, F_GETLEASE. Now passes all LTP fcntl tests.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/syscall.c | 34 ++++++++++++++++++++++------------
|
|
||||||
linux-user/syscall_defs.h | 7 +++++++
|
|
||||||
2 files changed, 29 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index 4fb7998..86754f1 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -3705,6 +3705,14 @@ static int target_to_host_fcntl_cmd(int cmd)
|
|
||||||
case TARGET_F_SETLKW64:
|
|
||||||
return F_SETLKW64;
|
|
||||||
#endif
|
|
||||||
+ case TARGET_F_SETLEASE:
|
|
||||||
+ return F_SETLEASE;
|
|
||||||
+ case TARGET_F_GETLEASE:
|
|
||||||
+ return F_GETLEASE;
|
|
||||||
+ case TARGET_F_DUPFD_CLOEXEC:
|
|
||||||
+ return F_DUPFD_CLOEXEC;
|
|
||||||
+ case TARGET_F_NOTIFY:
|
|
||||||
+ return F_NOTIFY;
|
|
||||||
default:
|
|
||||||
return -TARGET_EINVAL;
|
|
||||||
}
|
|
||||||
@@ -3731,7 +3739,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
fl.l_whence = tswap16(target_fl->l_whence);
|
|
||||||
fl.l_start = tswapl(target_fl->l_start);
|
|
||||||
fl.l_len = tswapl(target_fl->l_len);
|
|
||||||
- fl.l_pid = tswapl(target_fl->l_pid);
|
|
||||||
+ fl.l_pid = tswap32(target_fl->l_pid);
|
|
||||||
unlock_user_struct(target_fl, arg, 0);
|
|
||||||
ret = get_errno(fcntl(fd, host_cmd, &fl));
|
|
||||||
if (ret == 0) {
|
|
||||||
@@ -3741,7 +3749,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
target_fl->l_whence = tswap16(fl.l_whence);
|
|
||||||
target_fl->l_start = tswapl(fl.l_start);
|
|
||||||
target_fl->l_len = tswapl(fl.l_len);
|
|
||||||
- target_fl->l_pid = tswapl(fl.l_pid);
|
|
||||||
+ target_fl->l_pid = tswap32(fl.l_pid);
|
|
||||||
unlock_user_struct(target_fl, arg, 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
@@ -3754,7 +3762,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
fl.l_whence = tswap16(target_fl->l_whence);
|
|
||||||
fl.l_start = tswapl(target_fl->l_start);
|
|
||||||
fl.l_len = tswapl(target_fl->l_len);
|
|
||||||
- fl.l_pid = tswapl(target_fl->l_pid);
|
|
||||||
+ fl.l_pid = tswap32(target_fl->l_pid);
|
|
||||||
unlock_user_struct(target_fl, arg, 0);
|
|
||||||
ret = get_errno(fcntl(fd, host_cmd, &fl));
|
|
||||||
break;
|
|
||||||
@@ -3766,7 +3774,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
fl64.l_whence = tswap16(target_fl64->l_whence);
|
|
||||||
fl64.l_start = tswapl(target_fl64->l_start);
|
|
||||||
fl64.l_len = tswapl(target_fl64->l_len);
|
|
||||||
- fl64.l_pid = tswap16(target_fl64->l_pid);
|
|
||||||
+ fl64.l_pid = tswap32(target_fl64->l_pid);
|
|
||||||
unlock_user_struct(target_fl64, arg, 0);
|
|
||||||
ret = get_errno(fcntl(fd, host_cmd, &fl64));
|
|
||||||
if (ret == 0) {
|
|
||||||
@@ -3776,7 +3784,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
target_fl64->l_whence = tswap16(fl64.l_whence);
|
|
||||||
target_fl64->l_start = tswapl(fl64.l_start);
|
|
||||||
target_fl64->l_len = tswapl(fl64.l_len);
|
|
||||||
- target_fl64->l_pid = tswapl(fl64.l_pid);
|
|
||||||
+ target_fl64->l_pid = tswap32(fl64.l_pid);
|
|
||||||
unlock_user_struct(target_fl64, arg, 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
@@ -3788,7 +3796,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
fl64.l_whence = tswap16(target_fl64->l_whence);
|
|
||||||
fl64.l_start = tswapl(target_fl64->l_start);
|
|
||||||
fl64.l_len = tswapl(target_fl64->l_len);
|
|
||||||
- fl64.l_pid = tswap16(target_fl64->l_pid);
|
|
||||||
+ fl64.l_pid = tswap32(target_fl64->l_pid);
|
|
||||||
unlock_user_struct(target_fl64, arg, 0);
|
|
||||||
ret = get_errno(fcntl(fd, host_cmd, &fl64));
|
|
||||||
break;
|
|
||||||
@@ -3808,6 +3816,8 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
|
||||||
case TARGET_F_GETOWN:
|
|
||||||
case TARGET_F_SETSIG:
|
|
||||||
case TARGET_F_GETSIG:
|
|
||||||
+ case TARGET_F_SETLEASE:
|
|
||||||
+ case TARGET_F_GETLEASE:
|
|
||||||
ret = get_errno(fcntl(fd, host_cmd, arg));
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -6630,7 +6640,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
fl.l_whence = tswap16(target_efl->l_whence);
|
|
||||||
fl.l_start = tswap64(target_efl->l_start);
|
|
||||||
fl.l_len = tswap64(target_efl->l_len);
|
|
||||||
- fl.l_pid = tswapl(target_efl->l_pid);
|
|
||||||
+ fl.l_pid = tswap32(target_efl->l_pid);
|
|
||||||
unlock_user_struct(target_efl, arg3, 0);
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
@@ -6641,7 +6651,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
fl.l_whence = tswap16(target_fl->l_whence);
|
|
||||||
fl.l_start = tswap64(target_fl->l_start);
|
|
||||||
fl.l_len = tswap64(target_fl->l_len);
|
|
||||||
- fl.l_pid = tswapl(target_fl->l_pid);
|
|
||||||
+ fl.l_pid = tswap32(target_fl->l_pid);
|
|
||||||
unlock_user_struct(target_fl, arg3, 0);
|
|
||||||
}
|
|
||||||
ret = get_errno(fcntl(arg1, cmd, &fl));
|
|
||||||
@@ -6654,7 +6664,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
target_efl->l_whence = tswap16(fl.l_whence);
|
|
||||||
target_efl->l_start = tswap64(fl.l_start);
|
|
||||||
target_efl->l_len = tswap64(fl.l_len);
|
|
||||||
- target_efl->l_pid = tswapl(fl.l_pid);
|
|
||||||
+ target_efl->l_pid = tswap32(fl.l_pid);
|
|
||||||
unlock_user_struct(target_efl, arg3, 1);
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
@@ -6665,7 +6675,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
target_fl->l_whence = tswap16(fl.l_whence);
|
|
||||||
target_fl->l_start = tswap64(fl.l_start);
|
|
||||||
target_fl->l_len = tswap64(fl.l_len);
|
|
||||||
- target_fl->l_pid = tswapl(fl.l_pid);
|
|
||||||
+ target_fl->l_pid = tswap32(fl.l_pid);
|
|
||||||
unlock_user_struct(target_fl, arg3, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6681,7 +6691,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
fl.l_whence = tswap16(target_efl->l_whence);
|
|
||||||
fl.l_start = tswap64(target_efl->l_start);
|
|
||||||
fl.l_len = tswap64(target_efl->l_len);
|
|
||||||
- fl.l_pid = tswapl(target_efl->l_pid);
|
|
||||||
+ fl.l_pid = tswap32(target_efl->l_pid);
|
|
||||||
unlock_user_struct(target_efl, arg3, 0);
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
@@ -6692,7 +6702,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
fl.l_whence = tswap16(target_fl->l_whence);
|
|
||||||
fl.l_start = tswap64(target_fl->l_start);
|
|
||||||
fl.l_len = tswap64(target_fl->l_len);
|
|
||||||
- fl.l_pid = tswapl(target_fl->l_pid);
|
|
||||||
+ fl.l_pid = tswap32(target_fl->l_pid);
|
|
||||||
unlock_user_struct(target_fl, arg3, 0);
|
|
||||||
}
|
|
||||||
ret = get_errno(fcntl(arg1, cmd, &fl));
|
|
||||||
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
|
||||||
index 0f4fbd7..481ce59 100644
|
|
||||||
--- a/linux-user/syscall_defs.h
|
|
||||||
+++ b/linux-user/syscall_defs.h
|
|
||||||
@@ -1824,6 +1824,13 @@ struct target_statfs64 {
|
|
||||||
#define TARGET_F_SETLK64 13
|
|
||||||
#define TARGET_F_SETLKW64 14
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+#define TARGET_F_LINUX_SPECIFIC_BASE 1024
|
|
||||||
+#define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0)
|
|
||||||
+#define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1)
|
|
||||||
+#define TARGET_F_DUPFD_CLOEXEC (TARGET_F_LINUX_SPECIFIC_BASE + 6)
|
|
||||||
+#define TARGET_F_NOTIFY (TARGET_F_LINUX_SPECIFIC_BASE+2)
|
|
||||||
+
|
|
||||||
#if defined (TARGET_ARM)
|
|
||||||
#define TARGET_O_ACCMODE 0003
|
|
||||||
#define TARGET_O_RDONLY 00
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 0a1fc6cfd1798da391335a37ce7f3fd6141c7ff5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 23 Jul 2009 17:17:32 +0200
|
|
||||||
Subject: [PATCH 28/33] linux-user: enable getdents for > 32-bit systems
|
|
||||||
|
|
||||||
works perfectly fine with the example from getdents(2) and passes the LTP
|
|
||||||
tests (tested with s390x on x86_64 emulation)
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/syscall.c | 6 +-----
|
|
||||||
1 files changed, 1 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index 86754f1..49dfb40 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -195,9 +195,7 @@ static int gettid(void) {
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-#if TARGET_ABI_BITS == 32
|
|
||||||
_syscall3(int, sys_getdents, uint, fd, struct linux_dirent *, dirp, uint, count);
|
|
||||||
-#endif
|
|
||||||
#if defined(TARGET_NR_getdents64) && defined(__NR_getdents64)
|
|
||||||
_syscall3(int, sys_getdents64, uint, fd, struct linux_dirent64 *, dirp, uint, count);
|
|
||||||
#endif
|
|
||||||
@@ -5820,9 +5818,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
case TARGET_NR_getdents:
|
|
||||||
-#if TARGET_ABI_BITS != 32
|
|
||||||
- goto unimplemented;
|
|
||||||
-#elif TARGET_ABI_BITS == 32 && HOST_LONG_BITS == 64
|
|
||||||
+#if TARGET_ABI_BITS == 32 && HOST_LONG_BITS == 64
|
|
||||||
{
|
|
||||||
struct target_dirent *target_dirp;
|
|
||||||
struct linux_dirent *dirp;
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,271 +0,0 @@
|
|||||||
From d9c50cda4f12fc4c64b8b494a298659b8ad341ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 23 Jul 2009 17:41:57 +0200
|
|
||||||
Subject: [PATCH 29/33] linux-user: define a couple of syscalls for non-uid16 targets
|
|
||||||
|
|
||||||
Quite a number of syscalls are only defined on systems with USE_UID16
|
|
||||||
defined; this patch defines them on other systems as well.
|
|
||||||
|
|
||||||
Fixes a large number of uid/gid-related testcases on the s390x target
|
|
||||||
(and most likely on other targets as well)
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/syscall.c | 125 ++++++++++++++++++++++++++++++++++++++++++--------
|
|
||||||
1 files changed, 105 insertions(+), 20 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index 49dfb40..b1ef3c9 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -309,7 +309,7 @@ static int sys_fchmodat(int dirfd, const char *pathname, mode_t mode)
|
|
||||||
return (fchmodat(dirfd, pathname, mode, 0));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-#if defined(TARGET_NR_fchownat) && defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_fchownat)
|
|
||||||
static int sys_fchownat(int dirfd, const char *pathname, uid_t owner,
|
|
||||||
gid_t group, int flags)
|
|
||||||
{
|
|
||||||
@@ -418,7 +418,7 @@ _syscall3(int,sys_faccessat,int,dirfd,const char *,pathname,int,mode)
|
|
||||||
#if defined(TARGET_NR_fchmodat) && defined(__NR_fchmodat)
|
|
||||||
_syscall3(int,sys_fchmodat,int,dirfd,const char *,pathname, mode_t,mode)
|
|
||||||
#endif
|
|
||||||
-#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat) && defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat)
|
|
||||||
_syscall5(int,sys_fchownat,int,dirfd,const char *,pathname,
|
|
||||||
uid_t,owner,gid_t,group,int,flags)
|
|
||||||
#endif
|
|
||||||
@@ -6382,18 +6382,35 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
case TARGET_NR_setfsgid:
|
|
||||||
ret = get_errno(setfsgid(arg1));
|
|
||||||
break;
|
|
||||||
+#else /* USE_UID16 */
|
|
||||||
+#if defined(TARGET_NR_fchownat) && defined(__NR_fchownat)
|
|
||||||
+ case TARGET_NR_fchownat:
|
|
||||||
+ if (!(p = lock_user_string(arg2)))
|
|
||||||
+ goto efault;
|
|
||||||
+ ret = get_errno(sys_fchownat(arg1, p, arg3, arg4, arg5));
|
|
||||||
+ unlock_user(p, arg2, 0);
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
#endif /* USE_UID16 */
|
|
||||||
|
|
||||||
-#ifdef TARGET_NR_lchown32
|
|
||||||
+#if defined(TARGET_NR_lchown32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_lchown32)
|
|
||||||
case TARGET_NR_lchown32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_lchown:
|
|
||||||
+#endif
|
|
||||||
if (!(p = lock_user_string(arg1)))
|
|
||||||
goto efault;
|
|
||||||
ret = get_errno(lchown(p, arg2, arg3));
|
|
||||||
unlock_user(p, arg1, 0);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_getuid32
|
|
||||||
+#if defined(TARGET_NR_getuid32) || (defined(TARGET_NR_getuid) && !defined(USE_UID16))
|
|
||||||
+#if defined(TARGET_NR_getuid32)
|
|
||||||
case TARGET_NR_getuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_getuid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(getuid());
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
@@ -6421,33 +6438,57 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#ifdef TARGET_NR_getgid32
|
|
||||||
+#if defined(TARGET_NR_getgid32) || (defined(TARGET_NR_getgid) && !defined(USE_UID16))
|
|
||||||
+#if defined(TARGET_NR_getgid32)
|
|
||||||
case TARGET_NR_getgid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_getgid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(getgid());
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_geteuid32
|
|
||||||
+#if defined(TARGET_NR_geteuid32) || (defined(TARGET_NR_geteuid) && !defined(USE_UID16))
|
|
||||||
+#if defined(TARGET_NR_geteuid32)
|
|
||||||
case TARGET_NR_geteuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_geteuid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(geteuid());
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_getegid32
|
|
||||||
+#if defined(TARGET_NR_getegid32) || (defined(TARGET_NR_getegid) && !defined(USE_UID16))
|
|
||||||
+#if defined(TARGET_NR_getegid32)
|
|
||||||
case TARGET_NR_getegid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_getegid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(getegid());
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setreuid32
|
|
||||||
+#if defined(TARGET_NR_setreuid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setreuid32)
|
|
||||||
case TARGET_NR_setreuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setreuid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setreuid(arg1, arg2));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setregid32
|
|
||||||
+#if defined(TARGET_NR_setregid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setregid32)
|
|
||||||
case TARGET_NR_setregid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setregid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setregid(arg1, arg2));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_getgroups32
|
|
||||||
+#if defined(TARGET_NR_getgroups32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_getgroups32)
|
|
||||||
case TARGET_NR_getgroups32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_getgroups:
|
|
||||||
+#endif
|
|
||||||
{
|
|
||||||
int gidsetsize = arg1;
|
|
||||||
uint32_t *target_grouplist;
|
|
||||||
@@ -6471,8 +6512,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setgroups32
|
|
||||||
+#if defined(TARGET_NR_setgroups32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setgroups32)
|
|
||||||
case TARGET_NR_setgroups32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setgroups:
|
|
||||||
+#endif
|
|
||||||
{
|
|
||||||
int gidsetsize = arg1;
|
|
||||||
uint32_t *target_grouplist;
|
|
||||||
@@ -6492,18 +6537,30 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_fchown32
|
|
||||||
+#if defined(TARGET_NR_fchown32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_fchown32)
|
|
||||||
case TARGET_NR_fchown32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_fchown:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(fchown(arg1, arg2, arg3));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setresuid32
|
|
||||||
+#if defined(TARGET_NR_setresuid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setresuid32)
|
|
||||||
case TARGET_NR_setresuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setresuid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setresuid(arg1, arg2, arg3));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_getresuid32
|
|
||||||
+#if defined(TARGET_NR_getresuid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_getresuid32)
|
|
||||||
case TARGET_NR_getresuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_getresuid:
|
|
||||||
+#endif
|
|
||||||
{
|
|
||||||
uid_t ruid, euid, suid;
|
|
||||||
ret = get_errno(getresuid(&ruid, &euid, &suid));
|
|
||||||
@@ -6516,13 +6573,21 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setresgid32
|
|
||||||
+#if defined(TARGET_NR_setresgid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setresgid32)
|
|
||||||
case TARGET_NR_setresgid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setresgid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setresgid(arg1, arg2, arg3));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
+#if defined(TARGET_NR_getresgid32) || !defined(USE_UID16)
|
|
||||||
#ifdef TARGET_NR_getresgid32
|
|
||||||
case TARGET_NR_getresgid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_getresgid:
|
|
||||||
+#endif
|
|
||||||
{
|
|
||||||
gid_t rgid, egid, sgid;
|
|
||||||
ret = get_errno(getresgid(&rgid, &egid, &sgid));
|
|
||||||
@@ -6535,31 +6600,51 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_chown32
|
|
||||||
+#if defined(TARGET_NR_chown32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_chown32)
|
|
||||||
case TARGET_NR_chown32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_chown:
|
|
||||||
+#endif
|
|
||||||
if (!(p = lock_user_string(arg1)))
|
|
||||||
goto efault;
|
|
||||||
ret = get_errno(chown(p, arg2, arg3));
|
|
||||||
unlock_user(p, arg1, 0);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setuid32
|
|
||||||
+#if defined(TARGET_NR_setuid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setuid32)
|
|
||||||
case TARGET_NR_setuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setuid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setuid(arg1));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setgid32
|
|
||||||
+#if defined(TARGET_NR_setgid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setgid32)
|
|
||||||
case TARGET_NR_setgid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setgid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setgid(arg1));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setfsuid32
|
|
||||||
+#if defined(TARGET_NR_setfsuid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setfsuid32)
|
|
||||||
case TARGET_NR_setfsuid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setfsuid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setfsuid(arg1));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
-#ifdef TARGET_NR_setfsgid32
|
|
||||||
+#if defined(TARGET_NR_setfsgid32) || !defined(USE_UID16)
|
|
||||||
+#if defined(TARGET_NR_setfsgid32)
|
|
||||||
case TARGET_NR_setfsgid32:
|
|
||||||
+#else
|
|
||||||
+ case TARGET_NR_setfsgid:
|
|
||||||
+#endif
|
|
||||||
ret = get_errno(setfsgid(arg1));
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From 03004ec00de3f29699a6bb9458942ea111f528ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 23 Jul 2009 17:55:41 +0200
|
|
||||||
Subject: [PATCH 30/33] linux-user: getpriority errno fix
|
|
||||||
|
|
||||||
getpriority returned wrong errno; fixes LTP test getpriority02.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/syscall.c | 2 +-
|
|
||||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index b1ef3c9..30fb4ab 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -5327,7 +5327,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
/* libc does special remapping of the return value of
|
|
||||||
* sys_getpriority() so it's just easiest to call
|
|
||||||
* sys_getpriority() directly rather than through libc. */
|
|
||||||
- ret = sys_getpriority(arg1, arg2);
|
|
||||||
+ ret = get_errno(sys_getpriority(arg1, arg2));
|
|
||||||
break;
|
|
||||||
case TARGET_NR_setpriority:
|
|
||||||
ret = get_errno(setpriority(arg1, arg2, arg3));
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,46 +0,0 @@
|
|||||||
From 51e609fc6a4a6ff29cd463babfe14032aea18254 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 23 Jul 2009 14:56:59 +0200
|
|
||||||
Subject: [PATCH 31/33] linux-user: fadvise64 implementation
|
|
||||||
|
|
||||||
good enough to pass all LTP fadvise64 tests
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/syscall.c | 17 ++++++++++++++---
|
|
||||||
1 files changed, 14 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index 30fb4ab..c4b7001 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -6680,12 +6680,23 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
arg4 = temp;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-#if defined(TARGET_NR_fadvise64_64) || defined(TARGET_NR_arm_fadvise64_64)
|
|
||||||
+#if defined(TARGET_NR_fadvise64_64) || defined(TARGET_NR_arm_fadvise64_64) || defined(TARGET_NR_fadvise64)
|
|
||||||
#ifdef TARGET_NR_fadvise64_64
|
|
||||||
case TARGET_NR_fadvise64_64:
|
|
||||||
#endif
|
|
||||||
- /* This is a hint, so ignoring and returning success is ok. */
|
|
||||||
- ret = get_errno(0);
|
|
||||||
+#ifdef TARGET_NR_fadvise64
|
|
||||||
+ case TARGET_NR_fadvise64:
|
|
||||||
+#endif
|
|
||||||
+#ifdef TARGET_S390X
|
|
||||||
+ switch (arg4) {
|
|
||||||
+ case 4: arg4 = POSIX_FADV_NOREUSE + 1; break; /* make sure it's an invalid value */
|
|
||||||
+ case 5: arg4 = POSIX_FADV_NOREUSE + 2; break; /* ditto */
|
|
||||||
+ case 6: arg4 = POSIX_FADV_DONTNEED; break;
|
|
||||||
+ case 7: arg4 = POSIX_FADV_NOREUSE; break;
|
|
||||||
+ default: break;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ ret = -posix_fadvise(arg1, arg2, arg3, arg4);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_NR_madvise
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 50a2b3b61b897ada12c267538e9f65578c256880 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Fri, 10 Jul 2009 16:43:26 +0200
|
|
||||||
Subject: [PATCH 32/33] linux-user: zero fstat buffer to initialize nsec fields
|
|
||||||
|
|
||||||
The fstat implementation does not initialize the nanosecond fields in the
|
|
||||||
stat buffer; this caused funny values to turn up there, preventing, for
|
|
||||||
instance, cp -p from preserving timestamps because utimensat rejected
|
|
||||||
the out-of-bounds nanosecond values. Resetting the entire structure
|
|
||||||
to zero fixes that.
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
linux-user/syscall.c | 1 +
|
|
||||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index c4b7001..ef76537 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -5552,6 +5552,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
|
|
||||||
if (!lock_user_struct(VERIFY_WRITE, target_st, arg2, 0))
|
|
||||||
goto efault;
|
|
||||||
+ memset(target_st, 0, sizeof(*target_st));
|
|
||||||
__put_user(st.st_dev, &target_st->st_dev);
|
|
||||||
__put_user(st.st_ino, &target_st->st_ino);
|
|
||||||
__put_user(st.st_mode, &target_st->st_mode);
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
From 1e8223836a2e09899cd946db4e4ee99b64ceb7a4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ulrich Hecht <uli@suse.de>
|
|
||||||
Date: Thu, 30 Jul 2009 16:02:52 +0200
|
|
||||||
Subject: [PATCH 33/33] dup3 check, fallocate check fixed
|
|
||||||
|
|
||||||
Signed-off-by: Ulrich Hecht <uli@suse.de>
|
|
||||||
---
|
|
||||||
configure | 20 +++++++++++++++++++-
|
|
||||||
linux-user/syscall.c | 4 +++-
|
|
||||||
2 files changed, 22 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/configure b/configure
|
|
||||||
index 4be25f6..8d3967d 100755
|
|
||||||
--- a/configure
|
|
||||||
+++ b/configure
|
|
||||||
@@ -1370,6 +1370,21 @@ if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
|
|
||||||
fallocate=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
+# check for dup3
|
|
||||||
+dup3=no
|
|
||||||
+cat > $TMPC << EOF
|
|
||||||
+#include <unistd.h>
|
|
||||||
+
|
|
||||||
+int main(void)
|
|
||||||
+{
|
|
||||||
+ dup3(0, 0, 0);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+EOF
|
|
||||||
+if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
|
|
||||||
+ dup3=yes
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
# Check if tools are available to build documentation.
|
|
||||||
if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then
|
|
||||||
build_docs="no"
|
|
||||||
@@ -1723,7 +1738,10 @@ if test "$splice" = "yes" ; then
|
|
||||||
echo "#define CONFIG_SPLICE 1" >> $config_host_h
|
|
||||||
fi
|
|
||||||
if test "$fallocate" = "yes" ; then
|
|
||||||
- echo "#define CONFIG_FALLOCATE 1" >> $config_host_h
|
|
||||||
+ echo "CONFIG_FALLOCATE=y" >> $config_host_mak
|
|
||||||
+fi
|
|
||||||
+if test "$dup3" = "yes" ; then
|
|
||||||
+ echo "CONFIG_DUP3=y" >> $config_host_mak
|
|
||||||
fi
|
|
||||||
if test "$inotify" = "yes" ; then
|
|
||||||
echo "#define CONFIG_INOTIFY 1" >> $config_host_h
|
|
||||||
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
|
||||||
index ef76537..6c109de 100644
|
|
||||||
--- a/linux-user/syscall.c
|
|
||||||
+++ b/linux-user/syscall.c
|
|
||||||
@@ -3707,8 +3707,10 @@ static int target_to_host_fcntl_cmd(int cmd)
|
|
||||||
return F_SETLEASE;
|
|
||||||
case TARGET_F_GETLEASE:
|
|
||||||
return F_GETLEASE;
|
|
||||||
+#ifdef F_DUPFD_CLOEXEC
|
|
||||||
case TARGET_F_DUPFD_CLOEXEC:
|
|
||||||
return F_DUPFD_CLOEXEC;
|
|
||||||
+#endif
|
|
||||||
case TARGET_F_NOTIFY:
|
|
||||||
return F_NOTIFY;
|
|
||||||
default:
|
|
||||||
@@ -4758,7 +4760,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
|
|
||||||
case TARGET_NR_dup2:
|
|
||||||
ret = get_errno(dup2(arg1, arg2));
|
|
||||||
break;
|
|
||||||
-#ifdef TARGET_NR_dup3
|
|
||||||
+#if defined(TARGET_NR_dup3) && defined(CONFIG_DUP3)
|
|
||||||
case TARGET_NR_dup3:
|
|
||||||
ret = get_errno(dup3(arg1, arg2, arg3));
|
|
||||||
break;
|
|
||||||
--
|
|
||||||
1.6.2.1
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:58ad4225ba18ba5166977a7e0f5cd1bb94ee4e5f9fce65274d6dbb30035958ab
|
|
||||||
size 3292681
|
|
3
qemu-0.14.0-rc1.tar.bz2
Normal file
3
qemu-0.14.0-rc1.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6c4f5c01033e6a4a39f221cfad84e2d15e4e6c1023d263b8480d6aea4afbc0ac
|
||||||
|
size 4545302
|
16
qemu.changes
16
qemu.changes
@ -1,3 +1,19 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 10 14:48:36 CET 2011 - uli@suse.de
|
||||||
|
|
||||||
|
- update -> 0.14.0-rc1
|
||||||
|
See http://wiki.qemu.org/Changelog/0.14 for changes in 0.14.
|
||||||
|
(There is no such page for the 0.13 tree. The ChangeLog file ends at
|
||||||
|
0.12.0, http://wiki.qemu.org/ChangeLog at 0.12.5 and suggests to look at
|
||||||
|
the git log. High-level information of what has changed in 0.13 is
|
||||||
|
apparently not available.)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri May 28 18:57:23 CEST 2010 - uli@suse.de
|
||||||
|
|
||||||
|
- update -> 0.12.4
|
||||||
|
see http://wiki.qemu.org/ChangeLog for changes
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed May 19 17:37:03 UTC 2010 - brogers@novell.com
|
Wed May 19 17:37:03 UTC 2010 - brogers@novell.com
|
||||||
|
|
||||||
|
78
qemu.spec
78
qemu.spec
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package qemu (Version 0.11.0)
|
# spec file for package qemu (Version 0.12.4)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
@ -19,14 +19,14 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: qemu
|
Name: qemu
|
||||||
BuildRequires: SDL-devel bison bluez-devel curl-devel cyrus-sasl-devel e2fsprogs-devel libaio-devel libgnutls-devel libpcap-devel ncurses-devel zlib-devel-static
|
BuildRequires: SDL-devel bison bluez-devel curl-devel cyrus-sasl-devel e2fsprogs-devel libaio libaio-devel libgnutls-devel libpcap-devel ncurses-devel zlib-devel-static
|
||||||
Url: http://fabrice.bellard.free.fr/qemu/
|
Url: http://fabrice.bellard.free.fr/qemu/
|
||||||
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ ; MIT License (or similar)
|
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ ; MIT License (or similar)
|
||||||
Group: System/Emulators/PC
|
Group: System/Emulators/PC
|
||||||
Summary: Universal CPU emulator
|
Summary: Universal CPU emulator
|
||||||
Version: 0.11.0
|
Version: 0.14.0_rc1
|
||||||
Release: 6
|
Release: 1
|
||||||
Source: %name-0.11.0.tar.bz2
|
Source: %name-0.14.0-rc1.tar.bz2
|
||||||
Patch1: 0001-qemu-0.7.0-amd64.patch
|
Patch1: 0001-qemu-0.7.0-amd64.patch
|
||||||
Patch2: 0002-qemu-0.9.0.cvs-binfmt.patch
|
Patch2: 0002-qemu-0.9.0.cvs-binfmt.patch
|
||||||
Patch3: 0003-qemu-cvs-alsa_bitfield.patch
|
Patch3: 0003-qemu-cvs-alsa_bitfield.patch
|
||||||
@ -35,31 +35,15 @@ Patch5: 0005-qemu-cvs-alsa_mmap.patch
|
|||||||
Patch6: 0006-qemu-cvs-gettimeofday.patch
|
Patch6: 0006-qemu-cvs-gettimeofday.patch
|
||||||
Patch7: 0007-qemu-cvs-ioctl_debug.patch
|
Patch7: 0007-qemu-cvs-ioctl_debug.patch
|
||||||
Patch8: 0008-qemu-cvs-ioctl_nodirection.patch
|
Patch8: 0008-qemu-cvs-ioctl_nodirection.patch
|
||||||
Patch9: 0009-qemu-cvs-newpath.patch
|
Patch9: 0009-qemu-cvs-sched_getaffinity.patch
|
||||||
Patch10: 0010-qemu-cvs-sched_getaffinity.patch
|
Patch10: 0010-qemu-cvs-mmap-amd64.patch
|
||||||
Patch11: 0011-qemu-cvs-mmap-amd64.patch
|
Patch11: 0011-qemu-img-vmdk-scsi.patch
|
||||||
Patch12: 0012-qemu-cvs-pthread.patch
|
Patch12: 0012-qemu-nonvoid_return.patch
|
||||||
Patch13: 0013-qemu-img-vmdk-scsi.patch
|
Patch13: 0013-i386-linux-user-NPTL-support.patch
|
||||||
Patch14: 0014-qemu-nonvoid_return.patch
|
Patch14: 0014-qemu-0.11-git-ioctl_mount.patch
|
||||||
Patch15: 0015-pcap-network-emulation.patch
|
Patch15: 0015-S-390-support.patch
|
||||||
Patch16: 0016-i386-linux-user-NPTL-support.patch
|
Patch16: 0016-fix-mipsn32-linux-user-builds.patch
|
||||||
Patch17: 0017-qemu-0.11-git-ioctl_mount.patch
|
Patch17: 0017-S-390-build-fix.patch
|
||||||
Patch18: 0018-qemu-0.11-git-user-linux-ppc-uid16_fix.patch
|
|
||||||
Patch19: 0019-Rewrite-mmap_find_vma-to-work-fine-on-64-bit-hosts.patch
|
|
||||||
Patch20: 0020-TCG-sync-op-32-bit-targets-fixed.patch
|
|
||||||
Patch21: 0021-S-390-CPU-emulation.patch
|
|
||||||
Patch22: 0022-S-390-host-target-build-system-support.patch
|
|
||||||
Patch23: 0023-S-390-host-support-for-TCG.patch
|
|
||||||
Patch24: 0024-linux-user-S-390-64-bit-s390x-support.patch
|
|
||||||
Patch25: 0025-linux-user-don-t-do-locking-in-single-threaded-proc.patch
|
|
||||||
Patch26: 0026-linux-user-dup3-fallocate-syscalls.patch
|
|
||||||
Patch27: 0027-linux-user-fcntl-fixes-for-LTP.patch
|
|
||||||
Patch28: 0028-linux-user-enable-getdents-for-32-bit-systems.patch
|
|
||||||
Patch29: 0029-linux-user-define-a-couple-of-syscalls-for-non-uid1.patch
|
|
||||||
Patch30: 0030-linux-user-getpriority-errno-fix.patch
|
|
||||||
Patch31: 0031-linux-user-fadvise64-implementation.patch
|
|
||||||
Patch32: 0032-linux-user-zero-fstat-buffer-to-initialize-nsec-fie.patch
|
|
||||||
Patch33: 0033-dup3-check-fallocate-check-fixed.patch
|
|
||||||
# this is to make lint happy
|
# this is to make lint happy
|
||||||
Source300: rpmlintrc
|
Source300: rpmlintrc
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
@ -80,7 +64,7 @@ Authors:
|
|||||||
Fabrice Bellard <fabrice.bellard@free.fr>
|
Fabrice Bellard <fabrice.bellard@free.fr>
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n qemu-0.11.0
|
%setup -q -n %name-0.14.0-rc1
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
@ -95,34 +79,18 @@ Authors:
|
|||||||
%patch12 -p1
|
%patch12 -p1
|
||||||
%patch13 -p1
|
%patch13 -p1
|
||||||
%patch14 -p1
|
%patch14 -p1
|
||||||
%patch15 -p1
|
|
||||||
%patch16 -p1
|
|
||||||
%patch17 -p1
|
|
||||||
%patch18 -p1
|
|
||||||
%patch19 -p1
|
|
||||||
%patch20 -p1
|
|
||||||
%patch21 -p1
|
|
||||||
%ifarch s390x ppc64 x86_64
|
%ifarch s390x ppc64 x86_64
|
||||||
# s390 target only builds on 64-bit machines
|
# s390 target only builds on 64-bit machines
|
||||||
%patch22 -p1
|
%patch15 -p1
|
||||||
|
%patch17 -p1
|
||||||
%endif
|
%endif
|
||||||
%patch23 -p1
|
%patch16 -p1
|
||||||
%patch24 -p1
|
|
||||||
%patch25 -p1
|
|
||||||
%patch26 -p1
|
|
||||||
%patch27 -p1
|
|
||||||
%patch28 -p1
|
|
||||||
%patch29 -p1
|
|
||||||
%patch30 -p1
|
|
||||||
%patch31 -p1
|
|
||||||
%patch32 -p1
|
|
||||||
%patch33 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# build QEMU
|
# build QEMU
|
||||||
mkdir -p dynamic
|
mkdir -p dynamic
|
||||||
# build qemu-system
|
# build qemu-system
|
||||||
./configure --prefix=/usr \
|
./configure --prefix=/usr --sysconfdir=%_sysconfdir \
|
||||||
--interp-prefix=/usr/share/qemu/qemu-i386 \
|
--interp-prefix=/usr/share/qemu/qemu-i386 \
|
||||||
--audio-card-list="ac97 es1370 sb16 cs4231a adlib gus" \
|
--audio-card-list="ac97 es1370 sb16 cs4231a adlib gus" \
|
||||||
--audio-drv-list="alsa sdl" --enable-mixemu \
|
--audio-drv-list="alsa sdl" --enable-mixemu \
|
||||||
@ -139,11 +107,11 @@ make qemu-img V=1
|
|||||||
mv */qemu */qemu-* qemu-io dynamic || true
|
mv */qemu */qemu-* qemu-io dynamic || true
|
||||||
make clean
|
make clean
|
||||||
# build userland emus
|
# build userland emus
|
||||||
./configure --prefix=/usr \
|
./configure --prefix=/usr --sysconfdir=%_sysconfdir \
|
||||||
--interp-prefix=/usr/share/qemu/qemu-i386 \
|
--interp-prefix=/usr/share/qemu/qemu-i386 \
|
||||||
--enable-linux-user \
|
--enable-linux-user \
|
||||||
--disable-system \
|
--disable-system \
|
||||||
--static \
|
--static --disable-linux-aio \
|
||||||
--extra-cflags="$QEMU_OPT_FLAGS"
|
--extra-cflags="$QEMU_OPT_FLAGS"
|
||||||
make %{?jobs:-j%{jobs}} V=1
|
make %{?jobs:-j%{jobs}} V=1
|
||||||
|
|
||||||
@ -156,7 +124,7 @@ install -m 755 */qemu $RPM_BUILD_ROOT/usr/bin
|
|||||||
ln -sf qemu $RPM_BUILD_ROOT/usr/bin/qemu-system-i386
|
ln -sf qemu $RPM_BUILD_ROOT/usr/bin/qemu-system-i386
|
||||||
install -m 755 */qemu-*[^.]? $RPM_BUILD_ROOT/usr/bin
|
install -m 755 */qemu-*[^.]? $RPM_BUILD_ROOT/usr/bin
|
||||||
install -d -m 755 $RPM_BUILD_ROOT/usr/sbin
|
install -d -m 755 $RPM_BUILD_ROOT/usr/sbin
|
||||||
install -m 755 qemu-binfmt-conf.sh $RPM_BUILD_ROOT/usr/sbin
|
install -m 755 dynamic/qemu-binfmt-conf.sh $RPM_BUILD_ROOT/usr/sbin
|
||||||
%ifnarch %ix86 x86_64
|
%ifnarch %ix86 x86_64
|
||||||
ln -sf ../../../emul/ia32-linux $RPM_BUILD_ROOT/usr/share/qemu/qemu-i386
|
ln -sf ../../../emul/ia32-linux $RPM_BUILD_ROOT/usr/share/qemu/qemu-i386
|
||||||
%endif
|
%endif
|
||||||
@ -178,5 +146,7 @@ rm -rf ${RPM_BUILD_ROOT}
|
|||||||
%ifnarch %ix86 x86_64 ia64
|
%ifnarch %ix86 x86_64 ia64
|
||||||
%dir /emul/ia32-linux
|
%dir /emul/ia32-linux
|
||||||
%endif
|
%endif
|
||||||
|
%dir %_sysconfdir/qemu
|
||||||
|
%config %_sysconfdir/qemu/target-x86_64.conf
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
Loading…
Reference in New Issue
Block a user