QEMU-Devel Archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] prctl, mount, uselib, syslog, mincore, clock_gettime syscalls
@ 2007-02-07 13:16 Kirill A. Shutemov
  2007-02-09  9:29 ` Kirill A. Shutemov
  0 siblings, 1 reply; 2+ messages in thread
From: Kirill A. Shutemov @ 2007-02-07 13:16 UTC (permalink / raw
  To: qemu-devel


[-- Attachment #1.1: Type: text/plain, Size: 101 bytes --]

In the attachments debian patches to implementation subject syscalls. Any
ideas why hasn't commited?

[-- Attachment #1.2: 31_syscalls.patch --]
[-- Type: text/plain, Size: 3994 bytes --]

#DPATCHLEVEL=0
Index: linux-user/syscall.c
===================================================================
--- linux-user/syscall.c.orig	2006-11-05 07:07:19.000000000 +0200
+++ linux-user/syscall.c	2006-11-05 07:07:25.000000000 +0200
@@ -141,6 +141,7 @@ type name (type1 arg1,type2 arg2,type3 a
 #define __NR_sys_getdents __NR_getdents
 #define __NR_sys_getdents64 __NR_getdents64
 #define __NR_sys_rt_sigqueueinfo __NR_rt_sigqueueinfo
+#define __NR_sys_syslog __NR_syslog
 
 #if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__)
 #define __NR__llseek __NR_lseek
@@ -160,6 +161,7 @@ _syscall3(int, sys_getdents64, uint, fd,
 _syscall5(int, _llseek,  uint,  fd, ulong, hi, ulong, lo,
           loff_t *, res, uint, wh);
 _syscall3(int,sys_rt_sigqueueinfo,int,pid,int,sig,siginfo_t *,uinfo)
+_syscall3(int,sys_syslog,int,type,char*,bufp,int,len)
 #ifdef __NR_exit_group
 _syscall1(int,exit_group,int,error_code)
 #endif
@@ -173,6 +175,7 @@ extern int getresuid(uid_t *, uid_t *, u
 extern int setresgid(gid_t, gid_t, gid_t);
 extern int getresgid(gid_t *, gid_t *, gid_t *);
 extern int setgroups(int, gid_t *);
+extern int uselib(const char*);
 
 static inline long get_errno(long ret)
 {
@@ -2742,7 +2745,9 @@ long do_syscall(void *cpu_env, int num, 
         }
         break;
     case TARGET_NR_uselib:
-        goto unimplemented;
+        ret = get_errno(uselib(path((const char*)arg1)));
+        break;
+
     case TARGET_NR_swapon:
         p = lock_user_string(arg1);
         ret = get_errno(swapon(p, arg2));
@@ -2982,7 +2987,9 @@ long do_syscall(void *cpu_env, int num, 
 #endif
         
     case TARGET_NR_syslog:
-        goto unimplemented;
+        ret = get_errno(sys_syslog((int)arg1, (char*)arg2, (int)arg3));
+        break;
+
     case TARGET_NR_setitimer:
         {
             struct itimerval value, ovalue, *pvalue;
@@ -3856,7 +3863,9 @@ long do_syscall(void *cpu_env, int num, 
         goto unimplemented;
 #ifdef TARGET_NR_mincore
     case TARGET_NR_mincore:
-        goto unimplemented;
+        page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);
+        ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
+        break;
 #endif
 #ifdef TARGET_NR_madvise
     case TARGET_NR_madvise:
@@ -3947,7 +3956,8 @@ long do_syscall(void *cpu_env, int num, 
         ret = get_errno(gettid());
         break;
     case TARGET_NR_readahead:
-        goto unimplemented;
+        ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
+        break;
 #ifdef TARGET_NR_setxattr
     case TARGET_NR_setxattr:
     case TARGET_NR_lsetxattr:
@@ -3972,6 +3982,22 @@ long do_syscall(void *cpu_env, int num, 
     case TARGET_NR_getdomainname:
         goto unimplemented_nowarn;
 #endif
+#ifdef TARGET_NR_clock_gettime
+    case TARGET_NR_clock_gettime:
+    {
+        struct target_timespec* ttp = (struct target_timespec*)arg2;
+        struct timespec htp;
+        if(ttp) {
+          htp.tv_sec = tswapl(ttp->tv_sec);
+          htp.tv_nsec = tswapl(ttp->tv_nsec);
+          ret = get_errno(clock_gettime((clockid_t)arg1, &htp));
+          ttp->tv_sec = tswapl(htp.tv_sec);
+          ttp->tv_nsec = tswapl(htp.tv_nsec);
+        } else
+          ret = get_errno(clock_gettime((clockid_t)arg1, NULL));
+        break;
+    }
+#endif
     default:
     unimplemented:
         gemu_log("qemu: Unsupported syscall: %d\n", num);
Index: Makefile.target
===================================================================
--- Makefile.target.orig	2006-11-05 07:06:52.000000000 +0200
+++ Makefile.target	2006-11-05 07:07:25.000000000 +0200
@@ -166,7 +166,7 @@ endif
 #########################################################
 
 CPPFLAGS+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-LIBS+=-lm
+LIBS+=-lm -lrt
 ifndef CONFIG_USER_ONLY
 LIBS+=-lz
 endif

[-- Attachment #1.3: 36_syscall_prctl.patch --]
[-- Type: text/plain, Size: 799 bytes --]

#DPATCHLEVEL=0
Index: linux-user/syscall.c
===================================================================
--- linux-user/syscall.c.orig	2006-11-05 07:07:41.000000000 +0200
+++ linux-user/syscall.c	2006-11-05 07:07:44.000000000 +0200
@@ -33,6 +33,7 @@
 #include <sys/time.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
+#include <sys/prctl.h>
 #include <sys/resource.h>
 #include <sys/mman.h>
 #include <sys/swap.h>
@@ -3486,7 +3487,8 @@ long do_syscall(void *cpu_env, int num, 
     case TARGET_NR_nfsservctl:
         goto unimplemented;
     case TARGET_NR_prctl:
-        goto unimplemented;
+        ret = get_errno(prctl(arg1, arg2, arg3, arg4, arg5));
+        break;
 #ifdef TARGET_NR_pread
     case TARGET_NR_pread:
         page_unprotect_range(arg2, arg3);

[-- Attachment #1.4: 37_syscall_mount.patch --]
[-- Type: text/plain, Size: 700 bytes --]

#DPATCHLEVEL=0
Index: linux-user/syscall.c
===================================================================
--- linux-user/syscall.c.orig	2006-11-05 07:07:44.000000000 +0200
+++ linux-user/syscall.c	2006-11-05 07:07:48.000000000 +0200
@@ -2200,7 +2200,9 @@ long do_syscall(void *cpu_env, int num, 
         break;
     case TARGET_NR_mount:
         /* need to look at the data field */
-        goto unimplemented;
+        ret = get_errno(mount((const char *)arg1, (const char *)arg2,
+            (const char *)arg3, (unsigned long)arg4, (const void *)arg5));
+        break;
     case TARGET_NR_umount:
         p = lock_user_string(arg1);
         ret = get_errno(umount(p));

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Qemu-devel] [PATCH] prctl, mount, uselib, syslog, mincore, clock_gettime syscalls
  2007-02-07 13:16 [Qemu-devel] [PATCH] prctl, mount, uselib, syslog, mincore, clock_gettime syscalls Kirill A. Shutemov
@ 2007-02-09  9:29 ` Kirill A. Shutemov
  0 siblings, 0 replies; 2+ messages in thread
From: Kirill A. Shutemov @ 2007-02-09  9:29 UTC (permalink / raw
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 174 bytes --]

On [Wed, 07.02.2007 16:16], Kirill A. Shutemov wrote:
> In the attachments debian patches to implementation subject syscalls. Any
> ideas why hasn't commited?

Anybody home?

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-02-09 10:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-07 13:16 [Qemu-devel] [PATCH] prctl, mount, uselib, syslog, mincore, clock_gettime syscalls Kirill A. Shutemov
2007-02-09  9:29 ` Kirill A. Shutemov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).