- add fix for segv in linux-user (fixes java)
OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=87
This commit is contained in:
parent
3362ce3869
commit
bb43ce9427
@ -1,8 +1,7 @@
|
|||||||
From 8cc5120497695e7ea8dde9b096eb6c8cb9b6ac35 Mon Sep 17 00:00:00 2001
|
From 8cc5120497695e7ea8dde9b096eb6c8cb9b6ac35 Mon Sep 17 00:00:00 2001
|
||||||
From: Alexander Graf <agraf@suse.de>
|
From: Alexander Graf <agraf@suse.de>
|
||||||
Date: Tue, 29 May 2012 17:28:07 +0200
|
Date: Tue, 29 May 2012 17:28:07 +0200
|
||||||
Subject: [PATCH] linux-user: ARM: Ignore immediate value for svc in thumb
|
Subject: [PATCH] linux-user: ARM: Ignore immediate value for svc in thumb mode
|
||||||
mode
|
|
||||||
|
|
||||||
When running in thumb mode, Linux doesn't evaluate the immediate value
|
When running in thumb mode, Linux doesn't evaluate the immediate value
|
||||||
of the svc instruction, but instead just always assumes the syscall number
|
of the svc instruction, but instead just always assumes the syscall number
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
From 57fd4d50146ef90693d569ee799f7e9e9d606e05 Mon Sep 17 00:00:00 2001
|
From 57fd4d50146ef90693d569ee799f7e9e9d606e05 Mon Sep 17 00:00:00 2001
|
||||||
From: Michael Tokarev <mjt@tls.msk.ru>
|
From: Michael Tokarev <mjt@tls.msk.ru>
|
||||||
Date: Thu, 7 Jun 2012 01:11:00 +0400
|
Date: Thu, 7 Jun 2012 01:11:00 +0400
|
||||||
Subject: [PATCH] use --libexecdir instead of ignoring it first and
|
Subject: [PATCH] use --libexecdir instead of ignoring it first and reinventing it later
|
||||||
reinventing it later
|
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
Content-Type: text/plain; charset=UTF-8
|
Content-Type: text/plain; charset=utf-8
|
||||||
Content-Transfer-Encoding: 8bit
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
Commit 7b93fadf3a38d1ed65ea5536a52efc2772c6e3b8 "Add basic version
|
Commit 7b93fadf3a38d1ed65ea5536a52efc2772c6e3b8 "Add basic version
|
||||||
|
56
0024-linux-user-fix-segmentation-fault-p.patch
Normal file
56
0024-linux-user-fix-segmentation-fault-p.patch
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
From c42b3aca84c5b1a8be7010e518f526a1798e3790 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Graf <agraf@suse.de>
|
||||||
|
Date: Mon, 25 Jun 2012 19:02:32 +0200
|
||||||
|
Subject: [PATCH] linux-user: fix segmentation fault passing with g2h(x) != x
|
||||||
|
|
||||||
|
When forwarding a segmentation fault into the guest process, we were passing
|
||||||
|
the host's address directly into the guest process's signal descriptor.
|
||||||
|
|
||||||
|
That obviously confused the guest process, since it didn't know what to make
|
||||||
|
of the (usually 32-bit truncated) address. Passing in g2h(address) makes the
|
||||||
|
guest process a lot happier.
|
||||||
|
|
||||||
|
This fixes java running in arm-linux-user for me.
|
||||||
|
|
||||||
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
||||||
|
---
|
||||||
|
user-exec.c | 25 +++++++++++++------------
|
||||||
|
1 files changed, 13 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/user-exec.c b/user-exec.c
|
||||||
|
index 36d29b4..83d2d44 100644
|
||||||
|
--- a/user-exec.c
|
||||||
|
+++ b/user-exec.c
|
||||||
|
@@ -100,19 +100,20 @@ static inline int handle_cpu_signal(uintptr_t pc, unsigned long address,
|
||||||
|
/* Maybe we're still holding the TB fiddling lock? */
|
||||||
|
spin_unlock_safe(&tb_lock);
|
||||||
|
|
||||||
|
- /* XXX: locking issue */
|
||||||
|
- if (is_write && h2g_valid(address)
|
||||||
|
- && page_unprotect(h2g(address), pc, puc)) {
|
||||||
|
- return 1;
|
||||||
|
- }
|
||||||
|
+ if (h2g_valid(address)) {
|
||||||
|
+ /* XXX: locking issue */
|
||||||
|
+ if (is_write && page_unprotect(h2g(address), pc, puc)) {
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- /* see if it is an MMU fault */
|
||||||
|
- ret = cpu_handle_mmu_fault(env, address, is_write, MMU_USER_IDX);
|
||||||
|
- if (ret < 0) {
|
||||||
|
- return 0; /* not an MMU fault */
|
||||||
|
- }
|
||||||
|
- if (ret == 0) {
|
||||||
|
- return 1; /* the MMU fault was handled without causing real CPU fault */
|
||||||
|
+ /* see if it is an MMU fault */
|
||||||
|
+ ret = cpu_handle_mmu_fault(env, h2g(address), is_write, MMU_USER_IDX);
|
||||||
|
+ if (ret < 0) {
|
||||||
|
+ return 0; /* not an MMU fault */
|
||||||
|
+ }
|
||||||
|
+ if (ret == 0) {
|
||||||
|
+ return 1; /* the MMU fault was handled without causing real CPU fault */
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
/* now we have a real cpu fault */
|
||||||
|
tb = tb_find_pc(pc);
|
@ -1,3 +1,8 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jun 25 17:40:36 UTC 2012 - agraf@suse.com
|
||||||
|
|
||||||
|
- add fix for segv in linux-user (fixes java)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jun 19 16:06:52 UTC 2012 - afaerber@suse.de
|
Tue Jun 19 16:06:52 UTC 2012 - afaerber@suse.de
|
||||||
|
|
||||||
|
@ -47,6 +47,7 @@ Patch0020: 0020-linux-user-arm-no-tb_flush-on-reset.patch
|
|||||||
Patch0021: 0021-linux-user-fix-multi-threaded-proc-.patch
|
Patch0021: 0021-linux-user-fix-multi-threaded-proc-.patch
|
||||||
Patch0022: 0022-use-libexecdir-instead-of-ignoring-.patch
|
Patch0022: 0022-use-libexecdir-instead-of-ignoring-.patch
|
||||||
Patch0023: 0023-linux-user-Ignore-broken-loop-ioctl.patch
|
Patch0023: 0023-linux-user-Ignore-broken-loop-ioctl.patch
|
||||||
|
Patch0024: 0024-linux-user-fix-segmentation-fault-p.patch
|
||||||
# this is to make lint happy
|
# this is to make lint happy
|
||||||
Source300: rpmlintrc
|
Source300: rpmlintrc
|
||||||
Source302: bridge.conf
|
Source302: bridge.conf
|
||||||
@ -164,6 +165,7 @@ run cross-architecture builds.
|
|||||||
%patch0021 -p1
|
%patch0021 -p1
|
||||||
%patch0022 -p1
|
%patch0022 -p1
|
||||||
%patch0023 -p1
|
%patch0023 -p1
|
||||||
|
%patch0024 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# build QEMU
|
# build QEMU
|
||||||
|
Loading…
Reference in New Issue
Block a user