fix qemu-linux-user on powerpc
OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=249
This commit is contained in:
parent
66bc8c37ca
commit
dc193d92ed
117
0038-linux-user-Allocate-thunk-size-dyna.patch
Normal file
117
0038-linux-user-Allocate-thunk-size-dyna.patch
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
From 7c705cef722687b8f614f4b8c3a23c4285caedde Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Graf <agraf@suse.de>
|
||||||
|
Date: Tue, 14 Apr 2015 17:12:29 +0200
|
||||||
|
Subject: [PATCH] linux-user: Allocate thunk size dynamically
|
||||||
|
|
||||||
|
We store all struct types in an array of static size without ever
|
||||||
|
checking whether we overrun it. Of course some day someone (like me
|
||||||
|
in another, ancient ALSA enabling patch set) will run into the limit
|
||||||
|
without realizing it.
|
||||||
|
|
||||||
|
So let's make the allocation dynamic. We already know the number of
|
||||||
|
structs that we want to allocate, so we only need to pass the variable
|
||||||
|
into the respective piece of code.
|
||||||
|
|
||||||
|
Also, to ensure we don't accidently overwrite random memory, add some
|
||||||
|
asserts to sanity check whether a thunk is actually part of our array.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
||||||
|
---
|
||||||
|
include/exec/user/thunk.h | 4 +++-
|
||||||
|
linux-user/syscall.c | 3 +++
|
||||||
|
thunk.c | 16 ++++++++++++----
|
||||||
|
3 files changed, 18 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
|
||||||
|
index 6c35e64..f26c7f4 100644
|
||||||
|
--- a/include/exec/user/thunk.h
|
||||||
|
+++ b/include/exec/user/thunk.h
|
||||||
|
@@ -75,7 +75,7 @@ const argtype *thunk_convert(void *dst, const void *src,
|
||||||
|
const argtype *type_ptr, int to_host);
|
||||||
|
#ifndef NO_THUNK_TYPE_SIZE
|
||||||
|
|
||||||
|
-extern StructEntry struct_entries[];
|
||||||
|
+extern StructEntry *struct_entries;
|
||||||
|
|
||||||
|
int thunk_type_size_array(const argtype *type_ptr, int is_host);
|
||||||
|
int thunk_type_align_array(const argtype *type_ptr, int is_host);
|
||||||
|
@@ -189,4 +189,6 @@ unsigned int target_to_host_bitmask(unsigned int x86_mask,
|
||||||
|
unsigned int host_to_target_bitmask(unsigned int alpha_mask,
|
||||||
|
const bitmask_transtbl * trans_tbl);
|
||||||
|
|
||||||
|
+void thunk_init(unsigned int max_structs);
|
||||||
|
+
|
||||||
|
#endif
|
||||||
|
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
|
||||||
|
index 4917e20..49c0659 100644
|
||||||
|
--- a/linux-user/syscall.c
|
||||||
|
+++ b/linux-user/syscall.c
|
||||||
|
@@ -3277,6 +3277,7 @@ static abi_long do_ipc(unsigned int call, abi_long first,
|
||||||
|
#define STRUCT_SPECIAL(name) STRUCT_ ## name,
|
||||||
|
enum {
|
||||||
|
#include "syscall_types.h"
|
||||||
|
+STRUCT_MAX
|
||||||
|
};
|
||||||
|
#undef STRUCT
|
||||||
|
#undef STRUCT_SPECIAL
|
||||||
|
@@ -4911,6 +4912,8 @@ void syscall_init(void)
|
||||||
|
int size;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
+ thunk_init(STRUCT_MAX);
|
||||||
|
+
|
||||||
|
#define STRUCT(name, ...) thunk_register_struct(STRUCT_ ## name, #name, struct_ ## name ## _def);
|
||||||
|
#define STRUCT_SPECIAL(name) thunk_register_struct_direct(STRUCT_ ## name, #name, &struct_ ## name ## _def);
|
||||||
|
#include "syscall_types.h"
|
||||||
|
diff --git a/thunk.c b/thunk.c
|
||||||
|
index c6a78ca..8bb46d0 100644
|
||||||
|
--- a/thunk.c
|
||||||
|
+++ b/thunk.c
|
||||||
|
@@ -25,10 +25,8 @@
|
||||||
|
|
||||||
|
//#define DEBUG
|
||||||
|
|
||||||
|
-#define MAX_STRUCTS 128
|
||||||
|
-
|
||||||
|
-/* XXX: make it dynamic */
|
||||||
|
-StructEntry struct_entries[MAX_STRUCTS];
|
||||||
|
+static unsigned int max_struct_entries;
|
||||||
|
+StructEntry *struct_entries;
|
||||||
|
|
||||||
|
static const argtype *thunk_type_next_ptr(const argtype *type_ptr);
|
||||||
|
|
||||||
|
@@ -71,6 +69,7 @@ void thunk_register_struct(int id, const char *name, const argtype *types)
|
||||||
|
StructEntry *se;
|
||||||
|
int nb_fields, offset, max_align, align, size, i, j;
|
||||||
|
|
||||||
|
+ assert(id < max_struct_entries);
|
||||||
|
se = struct_entries + id;
|
||||||
|
|
||||||
|
/* first we count the number of fields */
|
||||||
|
@@ -118,6 +117,8 @@ void thunk_register_struct_direct(int id, const char *name,
|
||||||
|
const StructEntry *se1)
|
||||||
|
{
|
||||||
|
StructEntry *se;
|
||||||
|
+
|
||||||
|
+ assert(id < max_struct_entries);
|
||||||
|
se = struct_entries + id;
|
||||||
|
*se = *se1;
|
||||||
|
se->name = name;
|
||||||
|
@@ -265,6 +266,7 @@ const argtype *thunk_convert(void *dst, const void *src,
|
||||||
|
const argtype *field_types;
|
||||||
|
const int *dst_offsets, *src_offsets;
|
||||||
|
|
||||||
|
+ assert(*type_ptr < max_struct_entries);
|
||||||
|
se = struct_entries + *type_ptr++;
|
||||||
|
if (se->convert[0] != NULL) {
|
||||||
|
/* specific conversion is needed */
|
||||||
|
@@ -335,3 +337,9 @@ int thunk_type_align_array(const argtype *type_ptr, int is_host)
|
||||||
|
return thunk_type_align(type_ptr, is_host);
|
||||||
|
}
|
||||||
|
#endif /* ndef NO_THUNK_TYPE_SIZE */
|
||||||
|
+
|
||||||
|
+void thunk_init(unsigned int max_structs)
|
||||||
|
+{
|
||||||
|
+ max_struct_entries = max_structs;
|
||||||
|
+ struct_entries = g_new(StructEntry, max_structs);
|
||||||
|
+}
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 14 15:19:42 UTC 2015 - agraf@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.3
|
||||||
|
- Fix qemu-linux-user on powerpc
|
||||||
|
* Patches added:
|
||||||
|
0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Apr 11 13:15:55 UTC 2015 - afaerber@suse.de
|
Sat Apr 11 13:15:55 UTC 2015 - afaerber@suse.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package libcacard
|
# spec file for package libcacard
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -62,6 +62,7 @@ Patch0034: 0034-configure-Enable-PIE-for-ppc-and-pp.patch
|
|||||||
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
||||||
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
||||||
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
||||||
|
Patch0038: 0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
# Please do not add patches manually here, run update_git.sh.
|
# Please do not add patches manually here, run update_git.sh.
|
||||||
# this is to make lint happy
|
# this is to make lint happy
|
||||||
Source300: qemu-rpmlintrc
|
Source300: qemu-rpmlintrc
|
||||||
@ -158,6 +159,7 @@ This sub-package contains development files for the Smartcard library.
|
|||||||
%patch0035 -p1
|
%patch0035 -p1
|
||||||
%patch0036 -p1
|
%patch0036 -p1
|
||||||
%patch0037 -p1
|
%patch0037 -p1
|
||||||
|
%patch0038 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \
|
./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 14 15:19:39 UTC 2015 - agraf@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.3
|
||||||
|
- Fix qemu-linux-user on powerpc
|
||||||
|
* Patches added:
|
||||||
|
0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Apr 11 13:15:51 UTC 2015 - afaerber@suse.de
|
Sat Apr 11 13:15:51 UTC 2015 - afaerber@suse.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package qemu-linux-user
|
# spec file for package qemu-linux-user
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -62,6 +62,7 @@ Patch0034: 0034-configure-Enable-PIE-for-ppc-and-pp.patch
|
|||||||
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
||||||
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
||||||
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
||||||
|
Patch0038: 0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
# Please do not add patches manually here, run update_git.sh.
|
# Please do not add patches manually here, run update_git.sh.
|
||||||
# this is to make lint happy
|
# this is to make lint happy
|
||||||
Source300: qemu-rpmlintrc
|
Source300: qemu-rpmlintrc
|
||||||
@ -152,6 +153,7 @@ run cross-architecture builds.
|
|||||||
%patch0035 -p1
|
%patch0035 -p1
|
||||||
%patch0036 -p1
|
%patch0036 -p1
|
||||||
%patch0037 -p1
|
%patch0037 -p1
|
||||||
|
%patch0038 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \
|
./configure --prefix=%_prefix --sysconfdir=%_sysconfdir \
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 14 15:19:36 UTC 2015 - agraf@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.3
|
||||||
|
- Fix qemu-linux-user on powerpc
|
||||||
|
* Patches added:
|
||||||
|
0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Apr 11 13:15:47 UTC 2015 - afaerber@suse.de
|
Sat Apr 11 13:15:47 UTC 2015 - afaerber@suse.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package qemu-testsuite
|
# spec file for package qemu-testsuite
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -93,6 +93,7 @@ Patch0034: 0034-configure-Enable-PIE-for-ppc-and-pp.patch
|
|||||||
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
||||||
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
||||||
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
||||||
|
Patch0038: 0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
# Please do not add QEMU patches manually here.
|
# Please do not add QEMU patches manually here.
|
||||||
# Run update_git.sh to regenerate this queue.
|
# Run update_git.sh to regenerate this queue.
|
||||||
|
|
||||||
@ -590,6 +591,7 @@ This package provides a service file for starting and stopping KSM.
|
|||||||
%patch0035 -p1
|
%patch0035 -p1
|
||||||
%patch0036 -p1
|
%patch0036 -p1
|
||||||
%patch0037 -p1
|
%patch0037 -p1
|
||||||
|
%patch0038 -p1
|
||||||
|
|
||||||
%if %{build_x86_fw_from_source}
|
%if %{build_x86_fw_from_source}
|
||||||
pushd roms/seabios
|
pushd roms/seabios
|
||||||
|
@ -1,3 +1,11 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 14 15:19:36 UTC 2015 - agraf@suse.com
|
||||||
|
|
||||||
|
- Patch queue updated from git://github.com/openSUSE/qemu.git opensuse-2.3
|
||||||
|
- Fix qemu-linux-user on powerpc
|
||||||
|
* Patches added:
|
||||||
|
0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Apr 11 13:15:47 UTC 2015 - afaerber@suse.de
|
Sat Apr 11 13:15:47 UTC 2015 - afaerber@suse.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package qemu
|
# spec file for package qemu
|
||||||
#
|
#
|
||||||
# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -93,6 +93,7 @@ Patch0034: 0034-configure-Enable-PIE-for-ppc-and-pp.patch
|
|||||||
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
Patch0035: 0035-qtest-Increase-socket-timeout.patch
|
||||||
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
Patch0036: 0036-AIO-Reduce-number-of-threads-for-32.patch
|
||||||
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
Patch0037: 0037-tcg-tcg-op.c-Fix-ld-st-of-64-bit-va.patch
|
||||||
|
Patch0038: 0038-linux-user-Allocate-thunk-size-dyna.patch
|
||||||
# Please do not add QEMU patches manually here.
|
# Please do not add QEMU patches manually here.
|
||||||
# Run update_git.sh to regenerate this queue.
|
# Run update_git.sh to regenerate this queue.
|
||||||
|
|
||||||
@ -590,6 +591,7 @@ This package provides a service file for starting and stopping KSM.
|
|||||||
%patch0035 -p1
|
%patch0035 -p1
|
||||||
%patch0036 -p1
|
%patch0036 -p1
|
||||||
%patch0037 -p1
|
%patch0037 -p1
|
||||||
|
%patch0038 -p1
|
||||||
|
|
||||||
%if %{build_x86_fw_from_source}
|
%if %{build_x86_fw_from_source}
|
||||||
pushd roms/seabios
|
pushd roms/seabios
|
||||||
|
Loading…
Reference in New Issue
Block a user