summaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>2007-02-11 20:03:13 +0000
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>2007-02-11 20:03:13 +0000
commite55744879fa56bdd257beb05de3163c917470731 (patch)
tree7bf39a969d5d927f818341215f4e48ec70d0e141 /linux-user
parentf2f1ac827d9867db4444498a64582595b001e40f (diff)
downloadqemu-e55744879fa56bdd257beb05de3163c917470731.zip
Fix previous Linux userland emulation breakage.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2423 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/syscall.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5020f3fee4..3506ece1ec 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -2952,7 +2952,9 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
#endif
case TARGET_NR_syslog:
- ret = get_errno(sys_syslog((int)arg1, (char*)arg2, (int)arg3));
+ p = lock_user_string(arg2);
+ ret = get_errno(sys_syslog((int)arg1, p, (int)arg3));
+ unlock_user(p, arg2, 0);
break;
case TARGET_NR_setitimer:
@@ -3423,7 +3425,20 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
case TARGET_NR_nfsservctl:
goto unimplemented;
case TARGET_NR_prctl:
- ret = get_errno(prctl(arg1, arg2, arg3, arg4, arg5));
+ switch (arg1)
+ {
+ case PR_GET_PDEATHSIG:
+ {
+ int deathsig;
+ ret = get_errno(prctl(arg1, &deathsig, arg3, arg4, arg5));
+ if (!is_error(ret) && arg2)
+ tput32(arg2, deathsig);
+ }
+ break;
+ default:
+ ret = get_errno(prctl(arg1, arg2, arg3, arg4, arg5));
+ break;
+ }
break;
#ifdef TARGET_NR_pread
case TARGET_NR_pread: